KCemu-0.5.1/0000755001050700006200000000000011412405660012204 5ustar glaubitzfbedvKCemu-0.5.1/debian/0000755001050700006200000000000011412645114013426 5ustar glaubitzfbedvKCemu-0.5.1/debian/Makefile.am0000644001050700006200000000041311345001576015463 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ changelog \ compat \ control \ copyright \ dirs \ docs \ kcemu.desktop \ kcemu.install \ kcemu.manpages \ menu \ watch \ rules \ README.source \ source/format \ patches/* KCemu-0.5.1/debian/README.source0000644001050700006200000000025711345001576015614 0ustar glaubitzfbedvkcemu for Debian ---------------- This package uses quilt to manage modifications to the upstream source. Please see the file /usr/share/doc/quilt/README.source for details. KCemu-0.5.1/debian/docs0000644001050700006200000000005610527416074014311 0ustar glaubitzfbedvNEWS README README.de TODO doc/kcemurc.sample KCemu-0.5.1/debian/compat0000644001050700006200000000000211345001576014627 0ustar glaubitzfbedv7 KCemu-0.5.1/debian/menu0000644001050700006200000000350611131675406014326 0ustar glaubitzfbedv?package(kcemu):\ title="KCemu"\ section="Applications/Emulators"\ icon="/usr/share/pixmaps/kcemu-kc85.xpm"\ needs="X11"\ command="/usr/bin/kcemu -P" ?package(kcemu):\ title="KCemu (KC85/5)"\ section="Applications/Emulators"\ icon="/usr/share/pixmaps/kcemu-kc85.xpm"\ needs="X11"\ command="/usr/bin/kcemu -5" ?package(kcemu):\ title="KCemu (KC85/4)"\ section="Applications/Emulators"\ icon="/usr/share/pixmaps/kcemu-kc85.xpm"\ needs="X11"\ command="/usr/bin/kcemu -4" ?package(kcemu):\ title="KCemu (KC85/3)"\ section="Applications/Emulators"\ icon="/usr/share/pixmaps/kcemu-kc85.xpm"\ needs="X11"\ command="/usr/bin/kcemu -3" ?package(kcemu):\ title="KCemu (KC85/2)"\ section="Applications/Emulators"\ icon="/usr/share/pixmaps/kcemu-kc85.xpm"\ needs="X11"\ command="/usr/bin/kcemu -2" ?package(kcemu):\ title="KCemu (KC85/1)"\ section="Applications/Emulators"\ icon="/usr/share/pixmaps/kcemu-kc87.xpm"\ needs="X11"\ command="/usr/bin/kcemu -1" ?package(kcemu):\ title="KCemu (KC87)"\ section="Applications/Emulators"\ icon="/usr/share/pixmaps/kcemu-kc87.xpm"\ needs="X11"\ command="/usr/bin/kcemu -7" ?package(kcemu):\ title="KCemu (LC80)"\ section="Applications/Emulators"\ icon="/usr/share/pixmaps/kcemu-lc80.xpm"\ needs="X11"\ command="/usr/bin/kcemu -8" ?package(kcemu):\ title="KCemu (Poly880)"\ section="Applications/Emulators"\ icon="/usr/share/pixmaps/kcemu-poly880.xpm"\ needs="X11"\ command="/usr/bin/kcemu -6" ?package(kcemu):\ title="KCemu (BIC/A5105)"\ section="Applications/Emulators"\ icon="/usr/share/pixmaps/kcemu-bic.xpm"\ needs="X11"\ command="/usr/bin/kcemu -9" ?package(kcemu):\ title="KCemu (Z1013)"\ section="Applications/Emulators"\ icon="/usr/share/pixmaps/kcemu-z1013.xpm"\ needs="X11"\ command="/usr/bin/kcemu -0" KCemu-0.5.1/debian/source/0000755001050700006200000000000011345001727014727 5ustar glaubitzfbedvKCemu-0.5.1/debian/source/format0000644001050700006200000000001411345001576016137 0ustar glaubitzfbedv3.0 (quilt) KCemu-0.5.1/debian/kcemu.desktop0000644001050700006200000000033411345001576016130 0ustar glaubitzfbedv[Desktop Entry] Name=KCemu GenericName=Emulator for KC85 and compatible computer Comment=Emulator for KC85 and compatible computer Icon=kcemu-icon Exec=kcemu -P Type=Application Terminal=false Categories=Game;Emulator; KCemu-0.5.1/debian/copyright0000644001050700006200000000253311412401162015355 0ustar glaubitzfbedvThis work was packaged for Debian by: Adrian Glaubitz on Thu, 25 Feb 2010 15:19:10 +0100 It was downloaded from: Upstream Author(s): Torsten Paul Copyright: Copyright (C) 1997-2010 Torsten Paul License: GPL v2 This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA. On Debian systems, the complete text of the GNU General Public License version 2 can be found in `/usr/share/common-licenses/GPL-2'. The Debian packaging is: Copyright (C) 2010 Adrian Glaubitz and is licensed under the GPL version 2, see "/usr/share/common-licenses/GPL-2". KCemu-0.5.1/debian/README.Debian0000644001050700006200000000077211412401162015466 0ustar glaubitzfbedvkcemu for Debian ---------------- Like the Commodore 8-bit emulator vice, kcemu does not workout ROM images of the chips found inside the KC computers. Due to legal reasons these ROM images and also disk and tape images have been removed from the original tarball. Before using kcemu, you'll have to get those images on your own, please visit the upstream website http://kcemu.sourceforge.net to acquire the ROM, disk and tape images there. -- Adrian Glaubitz , 2010.06.23KCemu-0.5.1/debian/watch0000644001050700006200000000012311412401162014444 0ustar glaubitzfbedvversion=3 opts=dversionmangle=s/\+dfsg// \ http://sf.net/kcemu/KCemu-(.+)\.tar\.gz KCemu-0.5.1/debian/dirs0000644001050700006200000000010411412403760014304 0ustar glaubitzfbedvusr/share/applications usr/share/doc usr/share/man usr/share/pixmapsKCemu-0.5.1/debian/changelog0000644001050700006200000000025011412401721015267 0ustar glaubitzfbedvkcemu (0.5.1+dfsg-1) unstable; urgency=low * Initial release. (Closes: #538914) -- Adrian Glaubitz Wed, 23 Jun 2010 14:00:19 +0200 KCemu-0.5.1/debian/kcemu.install0000644001050700006200000000012511412402016016110 0ustar glaubitzfbedvusr/bin images/*xpm /usr/share/pixmaps/ debian/kcemu.desktop /usr/share/applications/KCemu-0.5.1/debian/Makefile.in0000644001050700006200000003123511412404770015500 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = debian DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ changelog \ compat \ control \ copyright \ dirs \ docs \ kcemu.desktop \ kcemu.install \ kcemu.manpages \ menu \ watch \ rules \ README.source \ source/format \ patches/* all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu debian/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu debian/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/debian/kcemu-common.install0000644001050700006200000000005611412406663017415 0ustar glaubitzfbedvusr/share/doc usr/share/KCemu usr/share/localeKCemu-0.5.1/debian/kcemu.manpages0000644001050700006200000000022711412406721016247 0ustar glaubitzfbedvman/man1/kcemu.1x man/man1/kctape.1 man/man1/kcemu-remote.1 man/man1/kc2img.1 man/man1/kc2raw.1 man/man1/kc2tap.1 man/man1/kc2wav.1 man/man1/tdtodump.1KCemu-0.5.1/debian/rules0000755001050700006200000000214711412644422014513 0ustar glaubitzfbedv#!/usr/bin/make -f # -*- makefile -*- # Sample debian/rules that uses debhelper. # This file was originally written by Joey Hess and Craig Small. # As a special exception, when this file is copied by dh-make into a # dh-make output file, you may use that output file without restriction. # This special exception was added by Craig Small in version 0.37 of dh-make. # Uncomment this to turn on verbose mode. #export DH_VERBOSE=1 build: build-stamp build-stamp: dh_testdir dh_auto_configure -- \ --enable-libsndfile=yes \ --enable-libaudiofile=no \ --enable-libmp3lame=no \ --enable-libvorbis=yes \ --enable-libflac=no \ --enable-libtheora=yes \ --enable-libxvidcore=no \ --enable-libdirac=no \ --enable-libschroedinger=no \ --enable-libavformat=no \ --enable-libvncserver=yes dh_auto_build touch build-stamp clean: dh $@ install: build dh $@ # Build architecture-independent files here. binary-indep: build install dh $@ # Build architecture-dependent files here. binary-arch: build install dh $@ binary: binary-indep binary-arch .PHONY: build clean binary-indep binary-arch binary install KCemu-0.5.1/debian/control0000644001050700006200000000365611412645105015043 0ustar glaubitzfbedvSource: kcemu Section: contrib/otherosfs Priority: optional Maintainer: Adrian Glaubitz Build-Depends: debhelper (>> 7), libz80ex-dev, libsdl-dev, libsndfile-dev, libvncserver-dev, libtheora-dev, libgtk2.0-dev, automake, autoconf, libxmu-dev, libncurses5-dev, netpbm, quilt, imagemagick Standards-Version: 3.8.4 Homepage: http://kcemu.sourceforge.net/ Package: kcemu Architecture: any Depends: ${shlibs:Depends}, ${misc:Depends}, kcemu-common Description: KC 85/4 emulator KCemu is an emulator for the KC85 homecomputer series and other Z80 based microcomputers like Z1013, LC80, Polycomputer 880 and BIC A5105. The emulation supports a number of additional hardware, e.g. floppy disk drives and extended graphic modules. . The Debian package does not contain the ROM images required to run the emulated machines. Please refer to the README.Debian file for more. . Some alternate keywords for the above: KC85, KC87, LC80, Z1013, A5105, Polycomputer 880 . For original programs and general information about the emulated computer systems have a look at http://www.kc-club.de/ and http://www.kc85emu.de/. Package: kcemu-common Architecture: all Depends: ${misc:Depends} Description: KC 85/4 emulator - common files KCemu is an emulator for the KC85 homecomputer series and other Z80 based microcomputers like Z1013, LC80, Polycomputer 880 and BIC A5105. The emulation supports a number of additional hardware, e.g. floppy disk drives and extended graphic modules. . This package contains files common to all architectures. . The Debian package does not contain the ROM images required to run the emulated machines. Please refer to the README.Debian file for more. . Some alternate keywords for the above: KC85, KC87, LC80, Z1013, A5105, Polycomputer 880 . For original programs and general information about the emulated computer systems have a look at http://www.kc-club.de/ and http://www.kc85emu.de/.KCemu-0.5.1/rpm/0000755001050700006200000000000011412404771013004 5ustar glaubitzfbedvKCemu-0.5.1/rpm/KCemu.spec0000644001050700006200000000310611345001721014655 0ustar glaubitzfbedvSummary: Emulator for lots of Z80 based home computer Name: KCemu Version: 0.5.1 Release: 1 Source: KCemu-0.5.1.tar.gz License: GPL Group: Applications/Emulator Distribution: OpenSuSE 11.1 Vendor: Torsten Paul Packager: Torsten Paul %description KCemu is an emulator for the Z80 based KC 85 home computer series which was quite popular in the former East-Germany. It runs most original programs (e.g. Digger, Boulder Dash, Bennion RBS, ...) and supports the emulation of the CP/M-like operating system called MicroDOS. For original programs and general information about the emulated computer types have a look at http://www.kc85emu.de/. %prep %setup %build ./configure \ --prefix=/usr \ --mandir=\${prefix}/share/man \ --infodir=\${prefix}/share/info \ --enable-libsndfile=no \ --enable-libaudiofile=no \ --enable-libmp3lame=no \ --enable-libvorbis=no \ --enable-libflac=no make %install make install \ prefix=%{buildroot}/usr \ exec_prefix=%{buildroot}/usr \ mandir=%{buildroot}/usr/share/man %files /usr/bin/kcemu /usr/bin/kc2img /usr/bin/kc2tap /usr/bin/kctape /usr/bin/tdtodump /usr/bin/kcemu-remote /usr/bin/kc2wav /usr/bin/kc2raw /usr/share/KCemu /usr/share/doc/kcemu /usr/share/man/man1/kcemu.1x.gz /usr/share/man/man1/kc2raw.1.gz /usr/share/man/man1/kc2tap.1.gz /usr/share/man/man1/kc2img.1.gz /usr/share/man/man1/kctape.1.gz /usr/share/man/man1/kc2wav.1.gz /usr/share/man/man1/tdtodump.1.gz /usr/share/man/man1/kcemu-remote.1.gz %lang(en) /usr/share/locale/en/LC_MESSAGES/KCemu.mo %lang(de) /usr/share/locale/de/LC_MESSAGES/KCemu.mo KCemu-0.5.1/rpm/Makefile.am0000644001050700006200000000014411163412576015044 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ KCemu.spec build-rpm.sh KCemu-0.5.1/rpm/KCemu.spec.in0000644001050700006200000000311611163412576015277 0ustar glaubitzfbedvSummary: Emulator for lots of Z80 based home computer Name: KCemu Version: @VERSION@ Release: 1 Source: KCemu-@VERSION@.tar.gz License: GPL Group: Applications/Emulator Distribution: OpenSuSE 11.1 Vendor: Torsten Paul Packager: Torsten Paul %description KCemu is an emulator for the Z80 based KC 85 home computer series which was quite popular in the former East-Germany. It runs most original programs (e.g. Digger, Boulder Dash, Bennion RBS, ...) and supports the emulation of the CP/M-like operating system called MicroDOS. For original programs and general information about the emulated computer types have a look at http://www.kc85emu.de/. %prep %setup %build ./configure \ --prefix=/usr \ --mandir=\${prefix}/share/man \ --infodir=\${prefix}/share/info \ --enable-libsndfile=no \ --enable-libaudiofile=no \ --enable-libmp3lame=no \ --enable-libvorbis=no \ --enable-libflac=no make %install make install \ prefix=%{buildroot}/usr \ exec_prefix=%{buildroot}/usr \ mandir=%{buildroot}/usr/share/man %files /usr/bin/kcemu /usr/bin/kc2img /usr/bin/kc2tap /usr/bin/kctape /usr/bin/tdtodump /usr/bin/kcemu-remote /usr/bin/kc2wav /usr/bin/kc2raw /usr/share/KCemu /usr/share/doc/kcemu /usr/share/man/man1/kcemu.1x.gz /usr/share/man/man1/kc2raw.1.gz /usr/share/man/man1/kc2tap.1.gz /usr/share/man/man1/kc2img.1.gz /usr/share/man/man1/kctape.1.gz /usr/share/man/man1/kc2wav.1.gz /usr/share/man/man1/tdtodump.1.gz /usr/share/man/man1/kcemu-remote.1.gz %lang(en) /usr/share/locale/en/LC_MESSAGES/KCemu.mo %lang(de) /usr/share/locale/de/LC_MESSAGES/KCemu.mo KCemu-0.5.1/rpm/Makefile.in0000644001050700006200000003122211412404771015051 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = rpm DIST_COMMON = $(srcdir)/KCemu.spec.in $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = KCemu.spec CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ KCemu.spec all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu rpm/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu rpm/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): KCemu.spec: $(top_builddir)/config.status $(srcdir)/KCemu.spec.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am build-rpm.sh # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/po/0000755001050700006200000000000011345001730012615 5ustar glaubitzfbedvKCemu-0.5.1/po/quot.sed0000644001050700006200000000023111321666453014313 0ustar glaubitzfbedvs/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g KCemu-0.5.1/po/en.po0000644001050700006200000032512511345001730013567 0ustar glaubitzfbedv# English translations for PACKAGE package. # Copyright (C) 2008 Torsten Paul # This file is distributed under the same license as the PACKAGE package. # Torsten Paul , 2008. # msgid "" msgstr "" "Project-Id-Version: KCemu 0.4\n" "Report-Msgid-Bugs-To: Torsten.Paul@gmx.de\n" "POT-Creation-Date: 2010-03-07 20:51+0100\n" "PO-Revision-Date: 2010-03-06 00:58+0100\n" "Last-Translator: Torsten Paul \n" "Language-Team: English \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Poedit-Language: English\n" "X-Poedit-Country: GERMANY\n" #: images/about.glade:6 msgid "KCemu: About" msgstr "KCemu: About" #: images/about.glade:25 msgid "About" msgstr "About" #: images/about.glade:72 msgid "[ Version ]" msgstr "[ Version ]" #: images/about.glade:85 msgid "(c) 1997-2010 Torsten Paul" msgstr "(c) 1997-2010 Torsten Paul" #: images/about.glade:96 msgid "" msgstr "" #: images/about.glade:111 msgid "http://kcemu.sourceforge.net/" msgstr "http://kcemu.sourceforge.net/" #: images/about.glade:130 msgid "[ Build ]" msgstr "[ Build ]" #: images/audio.glade:6 msgid "KCemu: Audio" msgstr "KCemu: Audio" #: images/audio.glade:25 msgid "Audio" msgstr "Audio" #: images/color.glade:39 msgid "KCemu: Color Configuration" msgstr "KCemu: Color Configuration" #: images/color.glade:60 msgid "Colors" msgstr "Colors" #: images/color.glade:132 images/color.glade:232 msgid "Brightness" msgstr "Brightness" #: images/color.glade:166 images/color.glade:266 msgid "Contrast" msgstr "Contrast" #: images/color.glade:183 msgid "Foreground" msgstr "Foreground" #: images/color.glade:283 msgid "Background" msgstr "Background" #: images/dialog.glade:6 msgid "KCemu" msgstr "KCemu" #: images/dialog.glade:27 msgid "[ Title ]" msgstr "[ Title ]" #: images/disk.glade:6 msgid "KCemu: Disk" msgstr "KCemu: Disk" #: images/disk.glade:26 msgid "Disk" msgstr "Disk" #: images/disk.glade:268 images/options.glade:2193 msgid "Disk 4:" msgstr "Disk 4:" #: images/disk.glade:282 images/options.glade:2207 msgid "Disk 3:" msgstr "Disk 3:" #: images/disk.glade:296 images/options.glade:2221 msgid "Disk 2:" msgstr "Disk 2:" #: images/disk.glade:310 images/options.glade:2235 msgid "Disk 1:" msgstr "Disk 1:" #: images/help.glade:6 msgid "KCemu: Help" msgstr "KCemu: Help" #: images/help.glade:26 msgid "Help" msgstr "Help" #: images/keyboard.glade:27 msgid "Keyboard" msgstr "Keyboard" #: images/keyboard.glade:80 msgid "Sorry, keyboard display not configured." msgstr "Sorry, keyboard display not configured." #: images/legal.glade:6 msgid "KCemu: Licence & Warranty" msgstr "KCemu: Licence & Warranty" #: images/legal.glade:26 msgid "License & Warranty" msgstr "License & Warranty" #: images/legal.glade:84 msgid "[ Licence ]" msgstr "[ Licence ]" #: images/legal.glade:97 msgid "[ Warranty ]" msgstr "[ Warranty ]" #: images/main.glade:19 msgid "_Emulator" msgstr "_Emulator" #: images/main.glade:27 images/main.glade:388 msgid "_Run..." msgstr "_Run..." #: images/main.glade:34 images/main.glade:395 msgid "_Load..." msgstr "_Load..." #: images/main.glade:41 images/main.glade:402 msgid "_Save..." msgstr "_Save..." #: images/main.glade:48 images/main.glade:409 msgid "_Tape..." msgstr "_Tape..." #: images/main.glade:55 images/main.glade:416 msgid "_Disk..." msgstr "_Disk..." #: images/main.glade:62 images/main.glade:423 msgid "_Module..." msgstr "_Module..." #: images/main.glade:69 images/main.glade:430 msgid "_Audio..." msgstr "_Audio..." #: images/main.glade:76 images/main.glade:437 msgid "Pl_otter..." msgstr "Pl_otter..." #: images/main.glade:83 msgid "Vinculum _USB..." msgstr "Vinculum _USB..." #: images/main.glade:95 images/main.glade:456 msgid "Screens_hot..." msgstr "Screens_hot..." #: images/main.glade:102 images/main.glade:463 msgid "_Video..." msgstr "_Video..." #: images/main.glade:114 images/main.glade:544 msgid "R_eset" msgstr "R_eset" #: images/main.glade:121 images/main.glade:551 msgid "_Power On" msgstr "_Power On" #: images/main.glade:133 images/main.glade:563 msgid "_Quit Emulator" msgstr "_Quit Emulator" #: images/main.glade:144 images/main.glade:475 msgid "_View" msgstr "_View" #: images/main.glade:152 msgid "Zoom x_1" msgstr "Zoom x_1" #: images/main.glade:159 msgid "Zoom x_2" msgstr "Zoom x_2" #: images/main.glade:166 msgid "Zoom x_3" msgstr "Zoom x_3" #: images/main.glade:178 images/main.glade:509 msgid "_Keyboard" msgstr "_Keyboard" #: images/main.glade:190 images/main.glade:521 msgid "_Menubar" msgstr "_Menubar" #: images/main.glade:197 images/main.glade:528 msgid "_Statusbar" msgstr "_Statusbar" #: images/main.glade:208 msgid "_Options" msgstr "_Options" #: images/main.glade:216 msgid "_Colors..." msgstr "_Colors..." #: images/main.glade:223 msgid "_Display Effects" msgstr "_Display Effects" #: images/main.glade:230 msgid "No _Speed Limit" msgstr "No _Speed Limit" #: images/main.glade:242 msgid "_Profiles..." msgstr "_Profiles..." #: images/main.glade:253 images/main.glade:261 msgid "_Help" msgstr "_Help" #: images/main.glade:268 msgid "Help _Index" msgstr "Help _Index" #: images/main.glade:275 msgid "_Context Help" msgstr "_Context Help" #: images/main.glade:287 msgid "_About" msgstr "_About" #: images/main.glade:294 msgid "_Thanks!" msgstr "_Thanks!" #: images/main.glade:306 msgid "KCemu _Licence" msgstr "KCemu _Licence" #: images/main.glade:313 msgid "No _Warranty!" msgstr "No _Warranty!" #: images/main.glade:444 msgid "_Vinculum USB..." msgstr "_Vinculum USB..." #: images/main.glade:483 msgid "Zoom x1" msgstr "Zoom x1" #: images/main.glade:490 msgid "Zoom x2" msgstr "Zoom x2" #: images/main.glade:497 msgid "Zoom x3" msgstr "Zoom x3" #: images/module.glade:6 msgid "KCemu: Module" msgstr "KCemu: Module" #: images/module.glade:24 msgid "Module" msgstr "Module" #: images/options.glade:91 msgid "KCemu: Profiles" msgstr "KCemu: Profiles" #: images/options.glade:114 msgid "Profiles" msgstr "Profiles" #: images/options.glade:165 msgid "Create new profile..." msgstr "Create new profile..." #: images/options.glade:188 msgid "Copy selected profile..." msgstr "Copy selected profile..." #: images/options.glade:250 msgid "Expand user profile level..." msgstr "Expand user profile level..." #: images/options.glade:270 msgid "Collapse user profile level..." msgstr "Collapse user profile level..." #: images/options.glade:431 msgid "Comment:" msgstr "Comment:" #: images/options.glade:445 msgid "Variant:" msgstr "Variant:" #: images/options.glade:487 msgid "System:" msgstr "System:" #: images/options.glade:501 msgid "Profile Name:" msgstr "Profile Name:" #: images/options.glade:548 msgid "System" msgstr "System" #: images/options.glade:611 msgid "" "Enable / Disable display debug code.\n" "\n" "When enabled the display cache behaviour will be graphically visualized. " "This setting is effective only if the display scale is set to 1." msgstr "" "Enable / Disable display debug code.\n" "\n" "When enabled the display cache behaviour will be graphically visualized. " "This setting is effective only if the display scale is set to 1." #: images/options.glade:636 msgid "Display Debug:" msgstr "Display Debug:" #: images/options.glade:650 msgid "Display Scale:" msgstr "Display Scale:" #: images/options.glade:662 msgid "Display Effects:" msgstr "Display Effects:" #: images/options.glade:676 msgid "Display IRM Access:" msgstr "Display IRM Access:" #: images/options.glade:740 msgid "Scaling factor for the emulation window. Allowed values are 1 to 3." msgstr "Scaling factor for the emulation window. Allowed values are 1 to 3." #: images/options.glade:756 msgid "" "Enable / Disable display effects for scale factors above 1.\n" "\n" "When enabled a scan-line effect will be used for scale factor of 2 and a " "smoothing effect for scale factor 3." msgstr "" "Enable / Disable display effects for scale factors above 1.\n" "\n" "When enabled a scan-line effect will be used for scale factor of 2 and a " "smoothing effect for scale factor 3." #: images/options.glade:781 msgid "" "This setting is only used when emulating a KC 85/3 where it enables the " "emulation of the display dissortion when the screen memory is accessed by " "the CPU." msgstr "" "This setting is only used when emulating a KC 85/3 where it enables the " "emulation of the display dissortion when the screen memory is accessed by " "the CPU." #: images/options.glade:812 msgid "Display" msgstr "Display" #: images/options.glade:1355 msgid "ROMs" msgstr "ROMs" #: images/options.glade:1476 msgid "Module 6:" msgstr "Module 6:" #: images/options.glade:1490 msgid "Module 5:" msgstr "Module 5:" #: images/options.glade:1504 msgid "Module 4:" msgstr "Module 4:" #: images/options.glade:1518 msgid "Module 3:" msgstr "Module 3:" #: images/options.glade:1532 msgid "Module 2:" msgstr "Module 2:" #: images/options.glade:1546 msgid "Module 1:" msgstr "Module 1:" #: images/options.glade:1558 msgid "Module 7:" msgstr "Module 7:" #: images/options.glade:1572 msgid "Module 8:" msgstr "Module 8:" #: images/options.glade:1613 msgid "Override modules in this profile" msgstr "Override modules in this profile" #: images/options.glade:1653 msgid "Modules" msgstr "Modules" #: images/options.glade:2080 msgid "Hard Disk 2:" msgstr "Hard Disk 2:" #: images/options.glade:2094 msgid "Hard Disk 1:" msgstr "Hard Disk 1:" #: images/options.glade:2123 msgid "Audio:" msgstr "Audio:" #: images/options.glade:2261 msgid "Tape:" msgstr "Tape:" #: images/options.glade:2282 msgid "Media" msgstr "Media" #: images/options.glade:2334 msgid "" "Number of D002 busdriver devices to add to the system. The maximum number of " "emulated busdrivers is currently 4." msgstr "" "Number of D002 busdriver devices to add to the system. The maximum number of " "emulated busdrivers is currently 4." #: images/options.glade:2352 msgid "Busdrivers:" msgstr "Busdrivers:" #: images/options.glade:2383 msgid "" "Enable or disable the second D004 ROM at slot F8. The standard ROM is " "available at slot FC." msgstr "" "Enable or disable the second D004 ROM at slot F8. The standard ROM is " "available at slot FC." #: images/options.glade:2406 msgid "F8 ROM:" msgstr "F8 ROM:" #: images/options.glade:2437 msgid "Enable or disable the D004 Floppy Basis Device." msgstr "Enable or disable the D004 Floppy Basis Device." #: images/options.glade:2459 msgid "D004:" msgstr "D004:" #: images/options.glade:2474 msgid "Special settings for KC 85/2..5" msgstr "Special settings for KC 85/2..5" #: images/options.glade:2496 msgid "KC85" msgstr "KC85" #: images/options.glade:2525 msgid "IP Address:" msgstr "IP Address:" #: images/options.glade:2538 msgid "Netmask:" msgstr "Netmask:" #: images/options.glade:2551 msgid "Gateway:" msgstr "Gateway:" #: images/options.glade:2564 msgid "DNS Server:" msgstr "DNS Server:" #: images/options.glade:2706 msgid "Network settings for WizNET module (IP-Addresses only!)" msgstr "Network settings for WizNET module (IP-Addresses only!)" #: images/options.glade:2729 msgid "Network" msgstr "Network" #: images/plotter.glade:28 msgid "KCemu: Plotter" msgstr "KCemu: Plotter" #: images/plotter.glade:48 msgid "Plotter" msgstr "Plotter" #: images/plotter.glade:305 msgid "Show pen" msgstr "Show pen" #: images/plotter.glade:334 msgid "Show plot area" msgstr "Show plot area" #: images/plotter.glade:347 msgid "" "Define the initial y position of the pen after clearing the plotting area. " "Measured in millimeters from the top left corner." msgstr "" "Define the initial y position of the pen after clearing the plotting area. " "Measured in millimeters from the top left corner." #: images/plotter.glade:365 msgid "Y origin" msgstr "Y origin" #: images/plotter.glade:394 msgid "Paper color" msgstr "Paper color" #: images/plotter.glade:407 msgid "X origin" msgstr "X origin" #: images/plotter.glade:420 msgid "" "Define the initial x position of the pen after clearing the plotting area. " "Measured in millimeters from the top left corner." msgstr "" "Define the initial x position of the pen after clearing the plotting area. " "Measured in millimeters from the top left corner." #: images/plotter.glade:438 msgid "Define the line width for plotting. Measured in millimeters." msgstr "Define the line width for plotting. Measured in millimeters." #: images/plotter.glade:456 msgid "Line width" msgstr "Line width" #: images/plotter.glade:469 msgid "Plot to PDF:" msgstr "Plot to PDF:" #: images/plotter.glade:483 msgid "Delay between screen refreshes of the drawing area in milliseconds." msgstr "Delay between screen refreshes of the drawing area in milliseconds." #: images/plotter.glade:501 msgid "Display refresh" msgstr "Display refresh" #: images/plotter.glade:515 msgid "Define the color to use for plotting." msgstr "Define the color to use for plotting." #: images/plotter.glade:528 msgid "Pen color" msgstr "Pen color" #: images/plotter.glade:590 msgid "" "Clear plotting area. When rendering to a PDF file a new page is created and " "plotting continues in the same file." msgstr "" "Clear plotting area. When rendering to a PDF file a new page is created and " "plotting continues in the same file." #: images/plotter.glade:605 msgid "Save the plotted picture as PNG image file." msgstr "Save the plotted picture as PNG image file." #: images/savemem.glade:38 msgid "KCemu: Save Memory Dump" msgstr "KCemu: Save Memory Dump" #: images/savemem.glade:58 msgid "Save Memory Dump" msgstr "Save Memory Dump" #: images/savemem.glade:97 images/savemem.glade:344 msgid "Automatically scroll to start address if the address is changed." msgstr "Automatically scroll to start address if the address is changed." #: images/savemem.glade:121 msgid "Automatically scroll to end address if the address is changed." msgstr "Automatically scroll to end address if the address is changed." #: images/savemem.glade:157 msgid "End address:" msgstr "End address:" #: images/savemem.glade:170 src/ui/gtk/hedit.cc:238 src/ui/gtk/image.cc:169 msgid "Start address:" msgstr "Start address:" #: images/savemem.glade:182 images/savemem.glade:315 images/savemem.glade:330 msgid "dec" msgstr "dec" #: images/savemem.glade:196 images/savemem.glade:285 images/savemem.glade:300 msgid "hex" msgstr "hex" #: images/savemem.glade:228 msgid "Size of the memory dump in bytes." msgstr "Size of the memory dump in bytes." #: images/savemem.glade:246 msgid "Length:" msgstr "Length:" #: images/savemem.glade:378 msgid "" "End address of the memory area to save. The byte at the given address is " "included in the memory dump." msgstr "" "End address of the memory area to save. The byte at the given address is " "included in the memory dump." #: images/savemem.glade:395 msgid "Start address of the memory area to save." msgstr "Start address of the memory area to save." #: images/screenshot.glade:6 msgid "KCemu: Screenshot" msgstr "KCemu: Screenshot" #: images/screenshot.glade:26 images/screenshot.glade:372 msgid "Screenshot" msgstr "Screenshot" #: images/screenshot.glade:143 msgid "Left" msgstr "Left" #: images/screenshot.glade:156 msgid "Top" msgstr "Top" #: images/screenshot.glade:171 msgid "Right" msgstr "Right" #: images/screenshot.glade:184 msgid "Bottom" msgstr "Bottom" #: images/screenshot.glade:199 msgid "File" msgstr "File" #: images/screenshot.glade:212 msgid "Format" msgstr "Format" #: images/screenshot.glade:385 msgid "Save" msgstr "Save" #: images/selector.glade:7 msgid "KCemu: Select profile..." msgstr "KCemu: Select profile..." #: images/selector.glade:31 msgid "Select Profile..." msgstr "Select Profile..." #: images/selector.glade:102 msgid "System profiles..." msgstr "System profiles..." #: images/selector.glade:144 msgid "User profiles..." msgstr "User profiles..." #: images/tapeedit.glade:7 src/ui/gtk/tapeadd.cc:93 msgid "KCemu: Rename File" msgstr "KCemu: Rename File" #: images/tapeedit.glade:28 msgid "Edit Tape" msgstr "Edit Tape" #: images/tapeedit.glade:63 msgid "" "[ Text ]\n" "\n" "[ more text ... ]" msgstr "" "[ Text ]\n" "\n" "[ more text ... ]" #: images/tapeedit.glade:80 msgid "Tape name:" msgstr "Tape name:" #: images/tape.glade:11 msgid "KCemu: Tape" msgstr "KCemu: Tape" #: images/tape.glade:30 msgid "Tape" msgstr "Tape" #: images/thanks.glade:6 msgid "" "Volker Pohlers\n" " for help with the windows port, technical information and\n" " bugreports\n" "Thomas Ludwig\n" " for the great KC website at http://www.kc85emu.de/ and\n" " lots of bugreports and hints how to make KCemu better\n" "Holger Krull\n" " for providing lots of information about the LC 80\n" " computer (see http://www.lc80.de/)\n" "Kev Thacker\n" " for interesting insights concerning the floppy emulation\n" " (he's also the author of the KC driver for M.E.S.S. the\n" " Multi-Emulator Super System, see http://mess.emuverse.com/)\n" "Alexander Schön\n" " for starting the windows port, lots of tips and for providing\n" " a huge pile of files for use with the emulator or with\n" " information about the various systems\n" "Sourceforge User Boo-boo\n" " for the libz80ex emulation library which is now used to emulate\n" " the Z80 CPUs\n" "Marat Fayzullin\n" " for the Z80 emulation core used for the main processor\n" " up to KCemu version 0.4.2\n" " (I needed to tweak some bits of the emulation core; see\n" " src/z80core/README for the list of changes)\n" "Marcel de Kogel\n" " for the Z80 emulation core used for the KC floppy\n" " processor up to KCemu version 0.4.2\n" "Thomas Bretz\n" " for the OS/2 port of KCemu (see http://www.d4m.de/)" msgstr "" "Volker Pohlers\n" " for help with the windows port, technical information and\n" " bugreports\n" "Thomas Ludwig\n" " for the great KC website at http://www.kc85emu.de/ and\n" " lots of bugreports and hints how to make KCemu better\n" "Holger Krull\n" " for providing lots of information about the LC 80\n" " computer (see http://www.lc80.de/)\n" "Kev Thacker\n" " for interesting insights concerning the floppy emulation\n" " (he's also the author of the KC driver for M.E.S.S. the\n" " Multi-Emulator Super System, see http://mess.emuverse.com/)\n" "Alexander Schön\n" " for starting the windows port, lots of tips and for providing\n" " a huge pile of files for use with the emulator or with\n" " information about the various systems\n" "Sourceforge User Boo-boo\n" " for the libz80ex emulation library which is now used to emulate\n" " the Z80 CPUs\n" "Marat Fayzullin\n" " for the Z80 emulation core used for the main processor\n" " up to KCemu version 0.4.2\n" " (I needed to tweak some bits of the emulation core; see\n" " src/z80core/README for the list of changes)\n" "Marcel de Kogel\n" " for the Z80 emulation core used for the KC floppy\n" " processor up to KCemu version 0.4.2\n" "Thomas Bretz\n" " for the OS/2 port of KCemu (see http://www.d4m.de/)" #: images/thanks.glade:38 msgid "KCemu: Thanks" msgstr "KCemu: Thanks" #: images/thanks.glade:58 msgid "Thanks" msgstr "Thanks" #: images/thanks.glade:114 msgid "" "I'd like to say thanks to many people who helped to bring KCemu to the point " "where it is now. The following list just lists some of them in no particular " "order..." msgstr "" "I'd like to say thanks to many people who helped to bring KCemu to the point " "where it is now. The following list just lists some of them in no particular " "order..." #: images/thanks.glade:151 msgid "People" msgstr "People" #: images/thanks.glade:168 msgid "" "Lots of tools and libraries made it easier to write KCemu. Many thanks to " "the people behind all those projects for their work..." msgstr "" "Lots of tools and libraries made it easier to write KCemu. Many thanks to " "the people behind all those projects for their work..." #: images/thanks.glade:198 msgid "libsndfile" msgstr "libsndfile" #: images/thanks.glade:229 msgid "Ogg & Vorbis libraries" msgstr "Ogg & Vorbis libraries" #: images/thanks.glade:274 msgid "Open Clip Art Library" msgstr "Open Clip Art Library" #: images/thanks.glade:306 msgid "LAME - LAME Ain't an MP3 Encoder" msgstr "LAME - LAME Ain't an MP3 Encoder" #: images/thanks.glade:324 msgid "FLAC - Free Lossless Audio Codec" msgstr "FLAC - Free Lossless Audio Codec" #: images/thanks.glade:342 msgid "GTK+ - The GIMP Toolkit" msgstr "GTK+ - The GIMP Toolkit" #: images/thanks.glade:401 msgid "libSDL - Simple DirectMedia Layer" msgstr "libSDL - Simple DirectMedia Layer" #: images/thanks.glade:431 msgid "Xiph.org Foundation - Theora video compression" msgstr "Xiph.org Foundation - Theora video compression" #: images/thanks.glade:461 msgid "Audio/Video codec library libavcodec" msgstr "Audio/Video codec library libavcodec" #: images/thanks.glade:491 msgid "BBC Research - Dirac Video Codec" msgstr "BBC Research - Dirac Video Codec" #: images/thanks.glade:521 msgid "Xvid project" msgstr "Xvid project" #: images/thanks.glade:534 msgid "http://www.theora.org/" msgstr "http://www.theora.org/" #: images/thanks.glade:555 msgid "http://ffmpeg.org/" msgstr "http://ffmpeg.org/" #: images/thanks.glade:575 msgid "http://www.bbc.co.uk/rd/projects/dirac/" msgstr "http://www.bbc.co.uk/rd/projects/dirac/" #: images/thanks.glade:596 msgid "http://www.xvid.org/" msgstr "http://www.xvid.org/" #: images/thanks.glade:617 msgid "http://www.gtk.org/" msgstr "http://www.gtk.org/" #: images/thanks.glade:639 msgid "http://www.libsdl.org/" msgstr "http://www.libsdl.org/" #: images/thanks.glade:660 msgid "http://flac.sourceforge.net/" msgstr "http://flac.sourceforge.net/" #: images/thanks.glade:681 msgid "http://lame.sourceforge.net/" msgstr "http://lame.sourceforge.net/" #: images/thanks.glade:755 msgid "http://openclipart.org/" msgstr "http://openclipart.org/" #: images/thanks.glade:776 msgid "http://www.vorbis.com/" msgstr "http://www.vorbis.com/" #: images/thanks.glade:797 msgid "http://www.mega-nerd.com/libsndfile/" msgstr "http://www.mega-nerd.com/libsndfile/" #: images/thanks.glade:1020 msgid "Projects & Libraries" msgstr "Projects & Libraries" #: images/vdip.glade:6 msgid "KCemu: Vinculum USB" msgstr "KCemu: Vinculum USB" #: images/vdip.glade:26 msgid "Vinculum USB" msgstr "Vinculum USB" #: images/vdip.glade:65 msgid "Slot 1:" msgstr "Slot 1:" #: images/vdip.glade:77 msgid "Slot 2:" msgstr "Slot 2:" #: images/video.glade:6 msgid "KCemu: Video" msgstr "KCemu: Video" #: images/video.glade:26 msgid "Video" msgstr "Video" #: images/video.glade:79 msgid "Frames per Second" msgstr "Frames per Second" #: images/video.glade:92 msgid "Start record on reset" msgstr "Start record on reset" #: images/video.glade:121 msgid "Encoder" msgstr "Encoder" #: images/video.glade:143 msgid "Quality" msgstr "Quality" #: images/video.glade:173 msgid "Video file" msgstr "Video file" #: images/video.glade:239 src/ui/gtk/wav.cc:174 msgid "Record" msgstr "Record" #: images/video.glade:279 msgid "Pause" msgstr "Pause" #: images/video.glade:319 src/ui/gtk/wav.cc:164 msgid "Stop" msgstr "Stop" #: src/cmd/image.cc:103 src/kc/wav.cc:81 msgid "KCemu: Select File..." msgstr "KCemu: Select File..." #: src/cmd/image.cc:127 msgid "KCemu: Can't load file..." msgstr "KCemu: Can't load file..." #: src/cmd/image.cc:129 msgid "The file you selected couldn't be loaded!" msgstr "The file you selected couldn't be loaded!" #: src/cmd/image.cc:142 msgid "KCemu: Warning..." msgstr "KCemu: Warning..." #: src/cmd/image.cc:144 msgid "" "The file you selected contains more than one\n" "program. Only the first program will be loaded.\n" "If you want to access all the contained\n" "programs add this file to a tape-archive!" msgstr "" "The file you selected contains more than one\n" "program. Only the first program will be loaded.\n" "If you want to access all the contained\n" "programs add this file to a tape-archive!" #: src/getopt/getopt.c:678 #, c-format msgid "%s: option `%s' is ambiguous\n" msgstr "%s: option `%s' is ambiguous\n" #: src/getopt/getopt.c:702 #, c-format msgid "%s: option `--%s' doesn't allow an argument\n" msgstr "%s: option `--%s' doesn't allow an argument\n" #: src/getopt/getopt.c:707 #, c-format msgid "%s: option `%c%s' doesn't allow an argument\n" msgstr "%s: option `%c%s' doesn't allow an argument\n" #: src/getopt/getopt.c:724 src/getopt/getopt.c:897 #, c-format msgid "%s: option `%s' requires an argument\n" msgstr "%s: option `%s' requires an argument\n" #: src/getopt/getopt.c:753 #, c-format msgid "%s: unrecognized option `--%s'\n" msgstr "%s: unrecognized option `--%s'\n" #: src/getopt/getopt.c:757 #, c-format msgid "%s: unrecognized option `%c%s'\n" msgstr "%s: unrecognized option `%c%s'\n" #: src/getopt/getopt.c:783 #, c-format msgid "%s: illegal option -- %c\n" msgstr "%s: illegal option -- %c\n" #: src/getopt/getopt.c:786 #, c-format msgid "%s: invalid option -- %c\n" msgstr "%s: invalid option -- %c\n" #: src/getopt/getopt.c:816 src/getopt/getopt.c:946 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "%s: option requires an argument -- %c\n" #: src/getopt/getopt.c:863 #, c-format msgid "%s: option `-W %s' is ambiguous\n" msgstr "%s: option `-W %s' is ambiguous\n" #: src/getopt/getopt.c:881 #, c-format msgid "%s: option `-W %s' doesn't allow an argument\n" msgstr "%s: option `-W %s' doesn't allow an argument\n" #: src/kc/disk.cc:84 msgid "Select disk..." msgstr "Select disk..." #: src/kc/disk.cc:124 src/kc/tape.cc:216 msgid "create file?" msgstr "create file?" #: src/kc/disk.cc:126 src/kc/tape.cc:218 #, c-format msgid "" "The file '%s' doesn't exist.\n" "Do you want to create it?" msgstr "" "The file '%s' doesn't exist.\n" "Do you want to create it?" #: src/kc/disk.cc:135 #, c-format msgid "disk-file `%s' attached." msgstr "disk-file `%s' attached." #: src/kc/disk.cc:140 msgid "Can't attach disk-file." msgstr "Can't attach disk-file." #: src/kc/kc.cc:232 msgid "" "\n" "KCemu comes with ABSOLUTELY NO WARRANTY; for details run `kcemu --" "warranty'.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; run `kcemu --license' for details.\n" "\n" "usage: kcemu [-0123456789aAcestfhdlvVHFMELW]\n" "\n" " -0: select Z1013 profile\n" " -1: select Z9001 / KC 85/1 profile\n" " -2: select KC 85/2 profile\n" " -3: select KC 85/3 profile\n" " -4: select KC 85/4 profile\n" " -5: select KC 85/5 profile\n" " -6: select Poly-880 profile\n" " -7: select KC 87 profile\n" " -8: select LC 80 profile\n" " -9: select BIC/A5105 profile\n" " -a --autostart: autostart program on startup (kc85/3 - kc85/5 only)\n" " -A --address: override start address of autostart program\n" " -d --datadir: set data directory (for ROM images)\n" " -E --effects: enable display effects for scaled screen output\n" " -f --floppy: attach disk on startup\n" " -F --fullscreen: start in fullscreen mode (if supported by gui)\n" " -h --help: display help\n" " -H --home: overwrite setting for home directory\n" " -l --localedir: set locale directory\n" " -L --license: show license\n" " -M --modules: insert modules on startup (e.g. -M M011,M027)\n" " -o --debug-output: write debug output to file\n" " -p --profile: start with given profile\n" " -P --select-profile: show profile selector\n" " -s --scale: scale display (allowed values: 1, 2 and 3)\n" " -t --tape: attach tape on startup\n" " -v --version: show KCemu version and configuration\n" " -V --viewlist: view verbose list of available emulations\n" " -W --warranty: show warranty\n" msgstr "" "\n" "KCemu comes with ABSOLUTELY NO WARRANTY; for details run `kcemu --" "warranty'.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; run `kcemu --license' for details.\n" "\n" "usage: kcemu [-0123456789aAcestfhdlvVHFMELW]\n" "\n" " -0: select Z1013 profile\n" " -1: select Z9001 / KC 85/1 profile\n" " -2: select KC 85/2 profile\n" " -3: select KC 85/3 profile\n" " -4: select KC 85/4 profile\n" " -5: select KC 85/5 profile\n" " -6: select Poly-880 profile\n" " -7: select KC 87 profile\n" " -8: select LC 80 profile\n" " -9: select BIC/A5105 profile\n" " -a --autostart: autostart program on startup (kc85/3 - kc85/5 only)\n" " -A --address: override start address of autostart program\n" " -d --datadir: set data directory (for ROM images)\n" " -E --effects: enable display effects for scaled screen output\n" " -f --floppy: attach disk on startup\n" " -F --fullscreen: start in fullscreen mode (if supported by gui)\n" " -h --help: display help\n" " -H --home: overwrite setting for home directory\n" " -l --localedir: set locale directory\n" " -L --license: show license\n" " -M --modules: insert modules on startup (e.g. -M M011,M027)\n" " -o --debug-output: write debug output to file\n" " -p --profile: start with given profile\n" " -P --select-profile: show profile selector\n" " -s --scale: scale display (allowed values: 1, 2 and 3)\n" " -t --tape: attach tape on startup\n" " -v --version: show KCemu version and configuration\n" " -V --viewlist: view verbose list of available emulations\n" " -W --warranty: show warranty\n" #: src/kc/kc.cc:299 msgid "" "\n" "\t\t GNU GENERAL PUBLIC LICENSE\n" "\t\t Version 2, June 1991\n" "\n" " Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n" " 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" " Everyone is permitted to copy and distribute verbatim copies\n" " of this license document, but changing it is not allowed.\n" "\n" "\t\t\t Preamble\n" "\n" " The licenses for most software are designed to take away your\n" "freedom to share and change it. By contrast, the GNU General Public\n" "License is intended to guarantee your freedom to share and change free\n" "software--to make sure the software is free for all its users. This\n" "General Public License applies to most of the Free Software\n" "Foundation's software and to any other program whose authors commit to\n" "using it. (Some other Free Software Foundation software is covered by\n" "the GNU Library General Public License instead.) You can apply it to\n" "your programs, too.\n" "\n" " When we speak of free software, we are referring to freedom, not\n" "price. Our General Public Licenses are designed to make sure that you\n" "have the freedom to distribute copies of free software (and charge for\n" "this service if you wish), that you receive source code or can get it\n" "if you want it, that you can change the software or use pieces of it\n" "in new free programs; and that you know you can do these things.\n" "\n" " To protect your rights, we need to make restrictions that forbid\n" "anyone to deny you these rights or to ask you to surrender the rights.\n" "These restrictions translate to certain responsibilities for you if you\n" "distribute copies of the software, or if you modify it.\n" "\n" " For example, if you distribute copies of such a program, whether\n" "gratis or for a fee, you must give the recipients all the rights that\n" "you have. You must make sure that they, too, receive or can get the\n" "source code. And you must show them these terms so they know their\n" "rights.\n" "\n" " We protect your rights with two steps: (1) copyright the software, and\n" "(2) offer you this license which gives you legal permission to copy,\n" "distribute and/or modify the software.\n" "\n" " Also, for each author's protection and ours, we want to make certain\n" "that everyone understands that there is no warranty for this free\n" "software. If the software is modified by someone else and passed on, we\n" "want its recipients to know that what they have is not the original, so\n" "that any problems introduced by others will not reflect on the original\n" "authors' reputations.\n" "\n" " Finally, any free program is threatened constantly by software\n" "patents. We wish to avoid the danger that redistributors of a free\n" "program will individually obtain patent licenses, in effect making the\n" "program proprietary. To prevent this, we have made it clear that any\n" "patent must be licensed for everyone's free use or not licensed at all.\n" "\n" " The precise terms and conditions for copying, distribution and\n" "modification follow.\n" "\n" "\t\t GNU GENERAL PUBLIC LICENSE\n" " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n" "\n" " 0. This License applies to any program or other work which contains\n" "a notice placed by the copyright holder saying it may be distributed\n" "under the terms of this General Public License. The \"Program\", below,\n" "refers to any such program or work, and a \"work based on the Program\"\n" "means either the Program or any derivative work under copyright law:\n" "that is to say, a work containing the Program or a portion of it,\n" "either verbatim or with modifications and/or translated into another\n" "language. (Hereinafter, translation is included without limitation in\n" "the term \"modification\".) Each licensee is addressed as \"you\".\n" "\n" "Activities other than copying, distribution and modification are not\n" "covered by this License; they are outside its scope. The act of\n" "running the Program is not restricted, and the output from the Program\n" "is covered only if its contents constitute a work based on the\n" "Program (independent of having been made by running the Program).\n" "Whether that is true depends on what the Program does.\n" "\n" " 1. You may copy and distribute verbatim copies of the Program's\n" "source code as you receive it, in any medium, provided that you\n" "conspicuously and appropriately publish on each copy an appropriate\n" "copyright notice and disclaimer of warranty; keep intact all the\n" "notices that refer to this License and to the absence of any warranty;\n" "and give any other recipients of the Program a copy of this License\n" "along with the Program.\n" "\n" "You may charge a fee for the physical act of transferring a copy, and\n" "you may at your option offer warranty protection in exchange for a fee.\n" "\n" " 2. You may modify your copy or copies of the Program or any portion\n" "of it, thus forming a work based on the Program, and copy and\n" "distribute such modifications or work under the terms of Section 1\n" "above, provided that you also meet all of these conditions:\n" "\n" " a) You must cause the modified files to carry prominent notices\n" " stating that you changed the files and the date of any change.\n" "\n" " b) You must cause any work that you distribute or publish, that in\n" " whole or in part contains or is derived from the Program or any\n" " part thereof, to be licensed as a whole at no charge to all third\n" " parties under the terms of this License.\n" "\n" " c) If the modified program normally reads commands interactively\n" " when run, you must cause it, when started running for such\n" " interactive use in the most ordinary way, to print or display an\n" " announcement including an appropriate copyright notice and a\n" " notice that there is no warranty (or else, saying that you provide\n" " a warranty) and that users may redistribute the program under\n" " these conditions, and telling the user how to view a copy of this\n" " License. (Exception: if the Program itself is interactive but\n" " does not normally print such an announcement, your work based on\n" " the Program is not required to print an announcement.)\n" "\n" "These requirements apply to the modified work as a whole. If\n" "identifiable sections of that work are not derived from the Program,\n" "and can be reasonably considered independent and separate works in\n" "themselves, then this License, and its terms, do not apply to those\n" "sections when you distribute them as separate works. But when you\n" "distribute the same sections as part of a whole which is a work based\n" "on the Program, the distribution of the whole must be on the terms of\n" "this License, whose permissions for other licensees extend to the\n" "entire whole, and thus to each and every part regardless of who wrote it.\n" "\n" "Thus, it is not the intent of this section to claim rights or contest\n" "your rights to work written entirely by you; rather, the intent is to\n" "exercise the right to control the distribution of derivative or\n" "collective works based on the Program.\n" "\n" "In addition, mere aggregation of another work not based on the Program\n" "with the Program (or with a work based on the Program) on a volume of\n" "a storage or distribution medium does not bring the other work under\n" "the scope of this License.\n" "\n" " 3. You may copy and distribute the Program (or a work based on it,\n" "under Section 2) in object code or executable form under the terms of\n" "Sections 1 and 2 above provided that you also do one of the following:\n" "\n" " a) Accompany it with the complete corresponding machine-readable\n" " source code, which must be distributed under the terms of Sections\n" " 1 and 2 above on a medium customarily used for software interchange; " "or,\n" "\n" " b) Accompany it with a written offer, valid for at least three\n" " years, to give any third party, for a charge no more than your\n" " cost of physically performing source distribution, a complete\n" " machine-readable copy of the corresponding source code, to be\n" " distributed under the terms of Sections 1 and 2 above on a medium\n" " customarily used for software interchange; or,\n" "\n" " c) Accompany it with the information you received as to the offer\n" " to distribute corresponding source code. (This alternative is\n" " allowed only for noncommercial distribution and only if you\n" " received the program in object code or executable form with such\n" " an offer, in accord with Subsection b above.)\n" "\n" "The source code for a work means the preferred form of the work for\n" "making modifications to it. For an executable work, complete source\n" "code means all the source code for all modules it contains, plus any\n" "associated interface definition files, plus the scripts used to\n" "control compilation and installation of the executable. However, as a\n" "special exception, the source code distributed need not include\n" "anything that is normally distributed (in either source or binary\n" "form) with the major components (compiler, kernel, and so on) of the\n" "operating system on which the executable runs, unless that component\n" "itself accompanies the executable.\n" "\n" "If distribution of executable or object code is made by offering\n" "access to copy from a designated place, then offering equivalent\n" "access to copy the source code from the same place counts as\n" "distribution of the source code, even though third parties are not\n" "compelled to copy the source along with the object code.\n" "\n" " 4. You may not copy, modify, sublicense, or distribute the Program\n" "except as expressly provided under this License. Any attempt\n" "otherwise to copy, modify, sublicense or distribute the Program is\n" "void, and will automatically terminate your rights under this License.\n" "However, parties who have received copies, or rights, from you under\n" "this License will not have their licenses terminated so long as such\n" "parties remain in full compliance.\n" "\n" " 5. You are not required to accept this License, since you have not\n" "signed it. However, nothing else grants you permission to modify or\n" "distribute the Program or its derivative works. These actions are\n" "prohibited by law if you do not accept this License. Therefore, by\n" "modifying or distributing the Program (or any work based on the\n" "Program), you indicate your acceptance of this License to do so, and\n" "all its terms and conditions for copying, distributing or modifying\n" "the Program or works based on it.\n" "\n" " 6. Each time you redistribute the Program (or any work based on the\n" "Program), the recipient automatically receives a license from the\n" "original licensor to copy, distribute or modify the Program subject to\n" "these terms and conditions. You may not impose any further\n" "restrictions on the recipients' exercise of the rights granted herein.\n" "You are not responsible for enforcing compliance by third parties to\n" "this License.\n" "\n" " 7. If, as a consequence of a court judgment or allegation of patent\n" "infringement or for any other reason (not limited to patent issues),\n" "conditions are imposed on you (whether by court order, agreement or\n" "otherwise) that contradict the conditions of this License, they do not\n" "excuse you from the conditions of this License. If you cannot\n" "distribute so as to satisfy simultaneously your obligations under this\n" "License and any other pertinent obligations, then as a consequence you\n" "may not distribute the Program at all. For example, if a patent\n" "license would not permit royalty-free redistribution of the Program by\n" "all those who receive copies directly or indirectly through you, then\n" "the only way you could satisfy both it and this License would be to\n" "refrain entirely from distribution of the Program.\n" "\n" "If any portion of this section is held invalid or unenforceable under\n" "any particular circumstance, the balance of the section is intended to\n" "apply and the section as a whole is intended to apply in other\n" "circumstances.\n" "\n" "It is not the purpose of this section to induce you to infringe any\n" "patents or other property right claims or to contest validity of any\n" "such claims; this section has the sole purpose of protecting the\n" "integrity of the free software distribution system, which is\n" "implemented by public license practices. Many people have made\n" "generous contributions to the wide range of software distributed\n" "through that system in reliance on consistent application of that\n" "system; it is up to the author/donor to decide if he or she is willing\n" "to distribute software through any other system and a licensee cannot\n" "impose that choice.\n" "\n" "This section is intended to make thoroughly clear what is believed to\n" "be a consequence of the rest of this License.\n" "\n" " 8. If the distribution and/or use of the Program is restricted in\n" "certain countries either by patents or by copyrighted interfaces, the\n" "original copyright holder who places the Program under this License\n" "may add an explicit geographical distribution limitation excluding\n" "those countries, so that distribution is permitted only in or among\n" "countries not thus excluded. In such case, this License incorporates\n" "the limitation as if written in the body of this License.\n" "\n" " 9. The Free Software Foundation may publish revised and/or new versions\n" "of the General Public License from time to time. Such new versions will\n" "be similar in spirit to the present version, but may differ in detail to\n" "address new problems or concerns.\n" "\n" "Each version is given a distinguishing version number. If the Program\n" "specifies a version number of this License which applies to it and \"any\n" "later version\", you have the option of following the terms and conditions\n" "either of that version or of any later version published by the Free\n" "Software Foundation. If the Program does not specify a version number of\n" "this License, you may choose any version ever published by the Free " "Software\n" "Foundation.\n" "\n" " 10. If you wish to incorporate parts of the Program into other free\n" "programs whose distribution conditions are different, write to the author\n" "to ask for permission. For software which is copyrighted by the Free\n" "Software Foundation, write to the Free Software Foundation; we sometimes\n" "make exceptions for this. Our decision will be guided by the two goals\n" "of preserving the free status of all derivatives of our free software and\n" "of promoting the sharing and reuse of software generally.\n" "\n" msgstr "" "\n" "\t\t GNU GENERAL PUBLIC LICENSE\n" "\t\t Version 2, June 1991\n" "\n" " Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n" " 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" " Everyone is permitted to copy and distribute verbatim copies\n" " of this license document, but changing it is not allowed.\n" "\n" "\t\t\t Preamble\n" "\n" " The licenses for most software are designed to take away your\n" "freedom to share and change it. By contrast, the GNU General Public\n" "License is intended to guarantee your freedom to share and change free\n" "software--to make sure the software is free for all its users. This\n" "General Public License applies to most of the Free Software\n" "Foundation's software and to any other program whose authors commit to\n" "using it. (Some other Free Software Foundation software is covered by\n" "the GNU Library General Public License instead.) You can apply it to\n" "your programs, too.\n" "\n" " When we speak of free software, we are referring to freedom, not\n" "price. Our General Public Licenses are designed to make sure that you\n" "have the freedom to distribute copies of free software (and charge for\n" "this service if you wish), that you receive source code or can get it\n" "if you want it, that you can change the software or use pieces of it\n" "in new free programs; and that you know you can do these things.\n" "\n" " To protect your rights, we need to make restrictions that forbid\n" "anyone to deny you these rights or to ask you to surrender the rights.\n" "These restrictions translate to certain responsibilities for you if you\n" "distribute copies of the software, or if you modify it.\n" "\n" " For example, if you distribute copies of such a program, whether\n" "gratis or for a fee, you must give the recipients all the rights that\n" "you have. You must make sure that they, too, receive or can get the\n" "source code. And you must show them these terms so they know their\n" "rights.\n" "\n" " We protect your rights with two steps: (1) copyright the software, and\n" "(2) offer you this license which gives you legal permission to copy,\n" "distribute and/or modify the software.\n" "\n" " Also, for each author's protection and ours, we want to make certain\n" "that everyone understands that there is no warranty for this free\n" "software. If the software is modified by someone else and passed on, we\n" "want its recipients to know that what they have is not the original, so\n" "that any problems introduced by others will not reflect on the original\n" "authors' reputations.\n" "\n" " Finally, any free program is threatened constantly by software\n" "patents. We wish to avoid the danger that redistributors of a free\n" "program will individually obtain patent licenses, in effect making the\n" "program proprietary. To prevent this, we have made it clear that any\n" "patent must be licensed for everyone's free use or not licensed at all.\n" "\n" " The precise terms and conditions for copying, distribution and\n" "modification follow.\n" "\n" "\t\t GNU GENERAL PUBLIC LICENSE\n" " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n" "\n" " 0. This License applies to any program or other work which contains\n" "a notice placed by the copyright holder saying it may be distributed\n" "under the terms of this General Public License. The \"Program\", below,\n" "refers to any such program or work, and a \"work based on the Program\"\n" "means either the Program or any derivative work under copyright law:\n" "that is to say, a work containing the Program or a portion of it,\n" "either verbatim or with modifications and/or translated into another\n" "language. (Hereinafter, translation is included without limitation in\n" "the term \"modification\".) Each licensee is addressed as \"you\".\n" "\n" "Activities other than copying, distribution and modification are not\n" "covered by this License; they are outside its scope. The act of\n" "running the Program is not restricted, and the output from the Program\n" "is covered only if its contents constitute a work based on the\n" "Program (independent of having been made by running the Program).\n" "Whether that is true depends on what the Program does.\n" "\n" " 1. You may copy and distribute verbatim copies of the Program's\n" "source code as you receive it, in any medium, provided that you\n" "conspicuously and appropriately publish on each copy an appropriate\n" "copyright notice and disclaimer of warranty; keep intact all the\n" "notices that refer to this License and to the absence of any warranty;\n" "and give any other recipients of the Program a copy of this License\n" "along with the Program.\n" "\n" "You may charge a fee for the physical act of transferring a copy, and\n" "you may at your option offer warranty protection in exchange for a fee.\n" "\n" " 2. You may modify your copy or copies of the Program or any portion\n" "of it, thus forming a work based on the Program, and copy and\n" "distribute such modifications or work under the terms of Section 1\n" "above, provided that you also meet all of these conditions:\n" "\n" " a) You must cause the modified files to carry prominent notices\n" " stating that you changed the files and the date of any change.\n" "\n" " b) You must cause any work that you distribute or publish, that in\n" " whole or in part contains or is derived from the Program or any\n" " part thereof, to be licensed as a whole at no charge to all third\n" " parties under the terms of this License.\n" "\n" " c) If the modified program normally reads commands interactively\n" " when run, you must cause it, when started running for such\n" " interactive use in the most ordinary way, to print or display an\n" " announcement including an appropriate copyright notice and a\n" " notice that there is no warranty (or else, saying that you provide\n" " a warranty) and that users may redistribute the program under\n" " these conditions, and telling the user how to view a copy of this\n" " License. (Exception: if the Program itself is interactive but\n" " does not normally print such an announcement, your work based on\n" " the Program is not required to print an announcement.)\n" "\n" "These requirements apply to the modified work as a whole. If\n" "identifiable sections of that work are not derived from the Program,\n" "and can be reasonably considered independent and separate works in\n" "themselves, then this License, and its terms, do not apply to those\n" "sections when you distribute them as separate works. But when you\n" "distribute the same sections as part of a whole which is a work based\n" "on the Program, the distribution of the whole must be on the terms of\n" "this License, whose permissions for other licensees extend to the\n" "entire whole, and thus to each and every part regardless of who wrote it.\n" "\n" "Thus, it is not the intent of this section to claim rights or contest\n" "your rights to work written entirely by you; rather, the intent is to\n" "exercise the right to control the distribution of derivative or\n" "collective works based on the Program.\n" "\n" "In addition, mere aggregation of another work not based on the Program\n" "with the Program (or with a work based on the Program) on a volume of\n" "a storage or distribution medium does not bring the other work under\n" "the scope of this License.\n" "\n" " 3. You may copy and distribute the Program (or a work based on it,\n" "under Section 2) in object code or executable form under the terms of\n" "Sections 1 and 2 above provided that you also do one of the following:\n" "\n" " a) Accompany it with the complete corresponding machine-readable\n" " source code, which must be distributed under the terms of Sections\n" " 1 and 2 above on a medium customarily used for software interchange; " "or,\n" "\n" " b) Accompany it with a written offer, valid for at least three\n" " years, to give any third party, for a charge no more than your\n" " cost of physically performing source distribution, a complete\n" " machine-readable copy of the corresponding source code, to be\n" " distributed under the terms of Sections 1 and 2 above on a medium\n" " customarily used for software interchange; or,\n" "\n" " c) Accompany it with the information you received as to the offer\n" " to distribute corresponding source code. (This alternative is\n" " allowed only for noncommercial distribution and only if you\n" " received the program in object code or executable form with such\n" " an offer, in accord with Subsection b above.)\n" "\n" "The source code for a work means the preferred form of the work for\n" "making modifications to it. For an executable work, complete source\n" "code means all the source code for all modules it contains, plus any\n" "associated interface definition files, plus the scripts used to\n" "control compilation and installation of the executable. However, as a\n" "special exception, the source code distributed need not include\n" "anything that is normally distributed (in either source or binary\n" "form) with the major components (compiler, kernel, and so on) of the\n" "operating system on which the executable runs, unless that component\n" "itself accompanies the executable.\n" "\n" "If distribution of executable or object code is made by offering\n" "access to copy from a designated place, then offering equivalent\n" "access to copy the source code from the same place counts as\n" "distribution of the source code, even though third parties are not\n" "compelled to copy the source along with the object code.\n" "\n" " 4. You may not copy, modify, sublicense, or distribute the Program\n" "except as expressly provided under this License. Any attempt\n" "otherwise to copy, modify, sublicense or distribute the Program is\n" "void, and will automatically terminate your rights under this License.\n" "However, parties who have received copies, or rights, from you under\n" "this License will not have their licenses terminated so long as such\n" "parties remain in full compliance.\n" "\n" " 5. You are not required to accept this License, since you have not\n" "signed it. However, nothing else grants you permission to modify or\n" "distribute the Program or its derivative works. These actions are\n" "prohibited by law if you do not accept this License. Therefore, by\n" "modifying or distributing the Program (or any work based on the\n" "Program), you indicate your acceptance of this License to do so, and\n" "all its terms and conditions for copying, distributing or modifying\n" "the Program or works based on it.\n" "\n" " 6. Each time you redistribute the Program (or any work based on the\n" "Program), the recipient automatically receives a license from the\n" "original licensor to copy, distribute or modify the Program subject to\n" "these terms and conditions. You may not impose any further\n" "restrictions on the recipients' exercise of the rights granted herein.\n" "You are not responsible for enforcing compliance by third parties to\n" "this License.\n" "\n" " 7. If, as a consequence of a court judgment or allegation of patent\n" "infringement or for any other reason (not limited to patent issues),\n" "conditions are imposed on you (whether by court order, agreement or\n" "otherwise) that contradict the conditions of this License, they do not\n" "excuse you from the conditions of this License. If you cannot\n" "distribute so as to satisfy simultaneously your obligations under this\n" "License and any other pertinent obligations, then as a consequence you\n" "may not distribute the Program at all. For example, if a patent\n" "license would not permit royalty-free redistribution of the Program by\n" "all those who receive copies directly or indirectly through you, then\n" "the only way you could satisfy both it and this License would be to\n" "refrain entirely from distribution of the Program.\n" "\n" "If any portion of this section is held invalid or unenforceable under\n" "any particular circumstance, the balance of the section is intended to\n" "apply and the section as a whole is intended to apply in other\n" "circumstances.\n" "\n" "It is not the purpose of this section to induce you to infringe any\n" "patents or other property right claims or to contest validity of any\n" "such claims; this section has the sole purpose of protecting the\n" "integrity of the free software distribution system, which is\n" "implemented by public license practices. Many people have made\n" "generous contributions to the wide range of software distributed\n" "through that system in reliance on consistent application of that\n" "system; it is up to the author/donor to decide if he or she is willing\n" "to distribute software through any other system and a licensee cannot\n" "impose that choice.\n" "\n" "This section is intended to make thoroughly clear what is believed to\n" "be a consequence of the rest of this License.\n" "\n" " 8. If the distribution and/or use of the Program is restricted in\n" "certain countries either by patents or by copyrighted interfaces, the\n" "original copyright holder who places the Program under this License\n" "may add an explicit geographical distribution limitation excluding\n" "those countries, so that distribution is permitted only in or among\n" "countries not thus excluded. In such case, this License incorporates\n" "the limitation as if written in the body of this License.\n" "\n" " 9. The Free Software Foundation may publish revised and/or new versions\n" "of the General Public License from time to time. Such new versions will\n" "be similar in spirit to the present version, but may differ in detail to\n" "address new problems or concerns.\n" "\n" "Each version is given a distinguishing version number. If the Program\n" "specifies a version number of this License which applies to it and \"any\n" "later version\", you have the option of following the terms and conditions\n" "either of that version or of any later version published by the Free\n" "Software Foundation. If the Program does not specify a version number of\n" "this License, you may choose any version ever published by the Free " "Software\n" "Foundation.\n" "\n" " 10. If you wish to incorporate parts of the Program into other free\n" "programs whose distribution conditions are different, write to the author\n" "to ask for permission. For software which is copyrighted by the Free\n" "Software Foundation, write to the Free Software Foundation; we sometimes\n" "make exceptions for this. Our decision will be guided by the two goals\n" "of preserving the free status of all derivatives of our free software and\n" "of promoting the sharing and reuse of software generally.\n" "\n" #: src/kc/kc.cc:561 msgid "" "\n" "NO WARRANTY\n" "\n" " 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n" "FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\n" "OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\n" "PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER " "EXPRESSED\n" "OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n" "MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\n" "TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\n" "PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n" "REPAIR OR CORRECTION.\n" "\n" " 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n" "WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\n" "REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n" "INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n" "OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n" "TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n" "YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n" "PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n" "POSSIBILITY OF SUCH DAMAGES.\n" "\n" msgstr "" "\n" "NO WARRANTY\n" "\n" " 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n" "FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\n" "OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\n" "PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER " "EXPRESSED\n" "OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n" "MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\n" "TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\n" "PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n" "REPAIR OR CORRECTION.\n" "\n" " 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n" "WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\n" "REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n" "INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n" "OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n" "TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n" "YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n" "PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n" "POSSIBILITY OF SUCH DAMAGES.\n" "\n" #: src/kc/kc.cc:588 msgid "" "\n" " END OF TERMS AND CONDITIONS\n" "\n" "\n" "\t How to Apply These Terms to Your New Programs\n" "\n" " If you develop a new program, and you want it to be of the greatest\n" "possible use to the public, the best way to achieve this is to make it\n" "free software which everyone can redistribute and change under these terms.\n" "\n" " To do so, attach the following notices to the program. It is safest\n" "to attach them to the start of each source file to most effectively\n" "convey the exclusion of warranty; and each file should have at least\n" "the \"copyright\" line and a pointer to where the full notice is found.\n" "\n" " \n" " Copyright (C) 19yy \n" "\n" " This program is free software; you can redistribute it and/or modify\n" " it under the terms of the GNU General Public License as published by\n" " the Free Software Foundation; either version 2 of the License, or\n" " (at your option) any later version.\n" "\n" " This program is distributed in the hope that it will be useful,\n" " but WITHOUT ANY WARRANTY; without even the implied warranty of\n" " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" " GNU General Public License for more details.\n" "\n" " You should have received a copy of the GNU General Public License\n" " along with this program; if not, write to the Free Software\n" " Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n" "\n" "Also add information on how to contact you by electronic and paper mail.\n" "\n" "If the program is interactive, make it output a short notice like this\n" "when it starts in an interactive mode:\n" "\n" " Gnomovision version 69, Copyright (C) 19yy name of author\n" " Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show " "w'.\n" " This is free software, and you are welcome to redistribute it\n" " under certain conditions; type `show c' for details.\n" "\n" "The hypothetical commands `show w' and `show c' should show the appropriate\n" "parts of the General Public License. Of course, the commands you use may\n" "be called something other than `show w' and `show c'; they could even be\n" "mouse-clicks or menu items--whatever suits your program.\n" "\n" "You should also get your employer (if you work as a programmer) or your\n" "school, if any, to sign a \"copyright disclaimer\" for the program, if\n" "necessary. Here is a sample; alter the names:\n" "\n" " Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n" " `Gnomovision' (which makes passes at compilers) written by James Hacker.\n" "\n" " , 1 April 1989\n" " Ty Coon, President of Vice\n" "\n" "This General Public License does not permit incorporating your program into\n" "proprietary programs. If your program is a subroutine library, you may\n" "consider it more useful to permit linking proprietary applications with the\n" "library. If this is what you want to do, use the GNU Library General\n" "Public License instead of this License.\n" "\n" msgstr "" "\n" " END OF TERMS AND CONDITIONS\n" "\n" "\n" "\t How to Apply These Terms to Your New Programs\n" "\n" " If you develop a new program, and you want it to be of the greatest\n" "possible use to the public, the best way to achieve this is to make it\n" "free software which everyone can redistribute and change under these terms.\n" "\n" " To do so, attach the following notices to the program. It is safest\n" "to attach them to the start of each source file to most effectively\n" "convey the exclusion of warranty; and each file should have at least\n" "the \"copyright\" line and a pointer to where the full notice is found.\n" "\n" " \n" " Copyright (C) 19yy \n" "\n" " This program is free software; you can redistribute it and/or modify\n" " it under the terms of the GNU General Public License as published by\n" " the Free Software Foundation; either version 2 of the License, or\n" " (at your option) any later version.\n" "\n" " This program is distributed in the hope that it will be useful,\n" " but WITHOUT ANY WARRANTY; without even the implied warranty of\n" " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" " GNU General Public License for more details.\n" "\n" " You should have received a copy of the GNU General Public License\n" " along with this program; if not, write to the Free Software\n" " Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n" "\n" "Also add information on how to contact you by electronic and paper mail.\n" "\n" "If the program is interactive, make it output a short notice like this\n" "when it starts in an interactive mode:\n" "\n" " Gnomovision version 69, Copyright (C) 19yy name of author\n" " Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show " "w'.\n" " This is free software, and you are welcome to redistribute it\n" " under certain conditions; type `show c' for details.\n" "\n" "The hypothetical commands `show w' and `show c' should show the appropriate\n" "parts of the General Public License. Of course, the commands you use may\n" "be called something other than `show w' and `show c'; they could even be\n" "mouse-clicks or menu items--whatever suits your program.\n" "\n" "You should also get your employer (if you work as a programmer) or your\n" "school, if any, to sign a \"copyright disclaimer\" for the program, if\n" "necessary. Here is a sample; alter the names:\n" "\n" " Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n" " `Gnomovision' (which makes passes at compilers) written by James Hacker.\n" "\n" " , 1 April 1989\n" " Ty Coon, President of Vice\n" "\n" "This General Public License does not permit incorporating your program into\n" "proprietary programs. If your program is a subroutine library, you may\n" "consider it more useful to permit linking proprietary applications with the\n" "library. If this is what you want to do, use the GNU Library General\n" "Public License instead of this License.\n" "\n" #: src/kc/mod_320k.cc:149 #, c-format msgid "2,5 MB Modul Bank (%d / %02xh)" msgstr "2,5 MB Modul Bank (%d / %02xh)" #: src/kc/mod_fdc.cc:58 #, c-format msgid "" "It's not possible to have more than one\n" "module of type %s!\n" "\n" "(And due to some technical points of the emulator\n" "it's also not possible to have both the Kramer and\n" "Schneider variant of the floppy module active at\n" "the same time.)" msgstr "" "It's not possible to have more than one\n" "module of type %s!\n" "\n" "(And due to some technical points of the emulator\n" "it's also not possible to have both the Kramer and\n" "Schneider variant of the floppy module active at\n" "the same time.)" #: src/kc/mod_gdc.cc:53 src/kc/mod_rtc.cc:50 #, c-format msgid "" "It's not possible to have more than one\n" "module of type %s!" msgstr "" "It's not possible to have more than one\n" "module of type %s!" #: src/kc/mod_js.cc:152 msgid "Joystick removed!" msgstr "Joystick removed!" #: src/kc/mod_js.cc:163 #, c-format msgid "Joystick (%d.%d.%d): %s on %s" msgstr "Joystick (%d.%d.%d): %s on %s" #: src/kc/mod_js.cc:399 #, c-format msgid "" "Couldn't find any readable joystick device!\n" "\n" "If your joystick is connected properly and the correct\n" "driver is loaded give the device name of your joystick\n" "in the 'Joystick Device' section of the configuration\n" "file." msgstr "" "Couldn't find any readable joystick device!\n" "\n" "If your joystick is connected properly and the correct\n" "driver is loaded give the device name of your joystick\n" "in the 'Joystick Device' section of the configuration\n" "file." #: src/kc/mod_js.cc:408 #, c-format msgid "" "Couldn't open joystick device (%s)!\n" "\n" "Make sure you have the joystick properly connected\n" "and loaded the correct driver for it.\n" "\n" "Also check the 'Joystick Device' section in the\n" "configuration file if the device name shown above\n" "looks bogus.\n" msgstr "" "Couldn't open joystick device (%s)!\n" "\n" "Make sure you have the joystick properly connected\n" "and loaded the correct driver for it.\n" "\n" "Also check the 'Joystick Device' section in the\n" "configuration file if the device name shown above\n" "looks bogus.\n" #: src/kc/mod_list.cc:197 msgid "" msgstr "" #: src/kc/mod_list.cc:207 msgid "RAM Module (1k/2400h)" msgstr "RAM Module (1k/2400h)" #: src/kc/mod_list.cc:209 msgid "RAM Module (2k/2800h)" msgstr "RAM Module (2k/2800h)" #: src/kc/mod_list.cc:211 msgid "RAM Module (4k/3000h)" msgstr "RAM Module (4k/3000h)" #: src/kc/mod_list.cc:221 msgid "RAM Module (2k/0800h)" msgstr "RAM Module (2k/0800h)" #: src/kc/mod_list.cc:223 msgid "RAM Module (4k/1000h)" msgstr "RAM Module (4k/1000h)" #: src/kc/mod_list.cc:225 msgid "RAM Module (8k/2000h)" msgstr "RAM Module (8k/2000h)" #: src/kc/mod_list.cc:234 src/kc/mod_list.cc:297 msgid "RAM Module (16k/4000h)" msgstr "RAM Module (16k/4000h)" #: src/kc/mod_list.cc:236 msgid "RAM Module (32k/8000h)" msgstr "RAM Module (32k/8000h)" #: src/kc/mod_list.cc:242 msgid "256k RAM Floppy" msgstr "256k RAM Floppy" #: src/kc/mod_list.cc:248 msgid "FDC (Schneider)" msgstr "FDC (Schneider)" #: src/kc/mod_list.cc:254 msgid "FDC (Kramer)" msgstr "FDC (Kramer)" #: src/kc/mod_list.cc:260 msgid "GDC 82720" msgstr "GDC 82720" #: src/kc/mod_list.cc:266 msgid "RTC (port 20h-2fh)" msgstr "RTC (port 20h-2fh)" #: src/kc/mod_list.cc:272 msgid "RTC (port 70h-7fh)" msgstr "RTC (port 70h-7fh)" #: src/kc/mod_list.cc:279 msgid "Basic Module (c000h-e7ffh)" msgstr "Basic Module (c000h-e7ffh)" #: src/kc/mod_list.cc:291 msgid "Plotter Module (c000h-e7ffh)" msgstr "Plotter Module (c000h-e7ffh)" #: src/kc/mod_list.cc:299 msgid "RAM Module (16k/8000h)" msgstr "RAM Module (16k/8000h)" #: src/kc/mod_list.cc:308 msgid "ZM30 (c000h-ccffh)" msgstr "ZM30 (c000h-ccffh)" #: src/kc/mod_list.cc:315 msgid "EDAS (c000h-e7ffh)" msgstr "EDAS (c000h-e7ffh)" #: src/kc/mod_list.cc:322 msgid "IDAS / ZM (c000h-e7ffh)" msgstr "IDAS / ZM (c000h-e7ffh)" #: src/kc/mod_list.cc:329 msgid "BITEX (c000h-d7ffh)" msgstr "BITEX (c000h-d7ffh)" #: src/kc/mod_list.cc:354 msgid "KC-CAOS 3.1 (8000h-8fffh)" msgstr "KC-CAOS 3.1 (8000h-8fffh)" #: src/kc/mod_list.cc:367 msgid "192 KByte RAM/EPROM" msgstr "192 KByte RAM/EPROM" #: src/kc/mod_list.cc:374 msgid "KC-Pascal Module" msgstr "KC-Pascal Module" #: src/kc/mod_list.cc:381 msgid "Mega-ROM Module" msgstr "Mega-ROM Module" #: src/kc/mod_list.cc:388 msgid "128k ROM Bank" msgstr "128k ROM Bank" #: src/kc/mod_list.cc:397 src/ui/gtk/module.cc:266 msgid "IRM Color Expansion" msgstr "IRM Color Expansion" #: src/kc/mod_list.cc:412 msgid "Plotter XY4131" msgstr "Plotter XY4131" #: src/kc/mod_list.cc:419 msgid "CPM-Z9 BOOT (c000h-c7ffh)" msgstr "CPM-Z9 BOOT (c000h-c7ffh)" #: src/kc/mod_list.cc:425 msgid "CPM-Z9 Floppy" msgstr "CPM-Z9 Floppy" #: src/kc/mod_list.cc:431 msgid "CPM-Z9 64k RAM" msgstr "CPM-Z9 64k RAM" #: src/kc/mod_list.cc:437 msgid "RAF 4MB (port 20h)" msgstr "RAF 4MB (port 20h)" #: src/kc/mod_list.cc:440 msgid "RAF 4MB (port 24h)" msgstr "RAF 4MB (port 24h)" #: src/kc/mod_list.cc:446 msgid "M001: Digital In / Out" msgstr "M001: Digital In / Out" #: src/kc/mod_list.cc:453 msgid "M003: V24" msgstr "M003: V24" #: src/kc/mod_list.cc:461 msgid "M006: Basic" msgstr "M006: Basic" #: src/kc/mod_list.cc:468 msgid "M008: Joystick" msgstr "M008: Joystick" #: src/kc/mod_list.cc:475 msgid "M011: 64k RAM" msgstr "M011: 64k RAM" #: src/kc/mod_list.cc:482 msgid "M012: Texor" msgstr "M012: Texor" #: src/kc/mod_list.cc:488 msgid "M022: Expander RAM (16k)" msgstr "M022: Expander RAM (16k)" #: src/kc/mod_list.cc:495 msgid "M026: Forth" msgstr "M026: Forth" #: src/kc/mod_list.cc:502 msgid "M027: Development" msgstr "M027: Development" #: src/kc/mod_list.cc:508 msgid "M032: 256k Segmented RAM" msgstr "M032: 256k Segmented RAM" #: src/kc/mod_list.cc:515 msgid "M033: TypeStar + RAMDOS" msgstr "M033: TypeStar + RAMDOS" #: src/kc/mod_list.cc:521 msgid "M034: 512k Segmented RAM" msgstr "M034: 512k Segmented RAM" #: src/kc/mod_list.cc:527 msgid "M035: 1M Segmented RAM" msgstr "M035: 1M Segmented RAM" #: src/kc/mod_list.cc:533 msgid "M035x4: 4M RAM" msgstr "M035x4: 4M RAM" #: src/kc/mod_list.cc:539 msgid "M036: 128k Segmented RAM" msgstr "M036: 128k Segmented RAM" #: src/kc/mod_list.cc:546 msgid "M052: Network + USB" msgstr "M052: Network + USB" #: src/kc/mod_list.cc:553 msgid "M900: WordPro '86 (KC85/3)" msgstr "M900: WordPro '86 (KC85/3)" #: src/kc/mod_list.cc:560 msgid "M901: WordPro '86 (KC85/4)" msgstr "M901: WordPro '86 (KC85/4)" #: src/kc/mod_list.cc:566 msgid "VDIP: Vinculum USB" msgstr "VDIP: Vinculum USB" #: src/kc/mod_list.cc:570 msgid "VDIP1: Vinculum USB ROM V1.2" msgstr "VDIP1: Vinculum USB ROM V1.2" #: src/kc/mod_list.cc:574 msgid "VDIP2: Vinculum USB ROM V2.1" msgstr "VDIP2: Vinculum USB ROM V2.1" #: src/kc/mod_list.cc:588 msgid "Floppy Disk Basis F8" msgstr "Floppy Disk Basis F8" #: src/kc/mod_list.cc:597 msgid "Floppy Disk Basis FC" msgstr "Floppy Disk Basis FC" #: src/kc/mod_list.cc:795 msgid "Autostart" msgstr "Autostart" #: src/kc/mod_ramf.cc:50 #, c-format msgid "" "It's not possible to have more than two RAM-Floppy\n" "modules. The first one is running on port 98h and\n" "the second one on port 58h." msgstr "" "It's not possible to have more than two RAM-Floppy\n" "modules. The first one is running on port 98h and\n" "the second one on port 58h." #: src/kc/tape.cc:96 #, c-format msgid "File `%s' loaded." msgstr "File `%s' loaded." #: src/kc/tape.cc:174 msgid "Select tape-archive..." msgstr "Select tape-archive..." #: src/kc/tape.cc:228 #, c-format msgid "tape-archive `%s' attached." msgstr "tape-archive `%s' attached." #: src/kc/tape.cc:235 msgid "Can't attach tape-archive." msgstr "Can't attach tape-archive." #: src/kc/tape.cc:276 src/kc/tape.cc:310 msgid "Export As..." msgstr "Export As..." #: src/kc/tape.cc:294 src/kc/tape.cc:328 #, c-format msgid "File `%s' saved." msgstr "File `%s' saved." #: src/kc/tape.cc:299 src/kc/tape.cc:333 msgid "Can't export file." msgstr "Can't export file." #: src/kc/tape.cc:375 msgid "Select file..." msgstr "Select file..." #: src/kc/tape.cc:1763 msgid "The format of the selected file is not recognized." msgstr "The format of the selected file is not recognized." #: src/kc/tape.cc:1798 #, c-format msgid "File `%s' [%s] added." msgstr "File `%s' [%s] added." #: src/kc/tape.cc:1807 msgid "" "The file you selected has a name that is already\n" "present in the current tape archive.\n" "\n" "Please select a different name to add this file\n" "to the tape archive or use the cancel button to\n" "skip this file." msgstr "" "The file you selected has a name that is already\n" "present in the current tape archive.\n" "\n" "Please select a different name to add this file\n" "to the tape archive or use the cancel button to\n" "skip this file." #: src/kc/wav.cc:280 #, c-format msgid "Reading %s `%s' (%d/%d/%d)." msgstr "Reading %s `%s' (%d/%d/%d)." #: src/kc/prefs/types.cc:208 msgid "rom_caos_c" msgstr "CAOS C" #: src/kc/prefs/types.cc:209 msgid "rom_caos_e" msgstr "CAOS E" #: src/kc/prefs/types.cc:210 msgid "rom_system" msgstr "System" #: src/kc/prefs/types.cc:211 msgid "rom_system_1" msgstr "System (1)" #: src/kc/prefs/types.cc:212 msgid "rom_system_2" msgstr "System (2)" #: src/kc/prefs/types.cc:213 msgid "rom_system_3" msgstr "System (3)" #: src/kc/prefs/types.cc:214 msgid "rom_system_4" msgstr "System (4)" #: src/kc/prefs/types.cc:215 msgid "rom_user" msgstr "User-ROM" #: src/kc/prefs/types.cc:216 msgid "rom_basic" msgstr "BASIC" #: src/kc/prefs/types.cc:217 msgid "rom_debugger" msgstr "Debugger" #: src/kc/prefs/types.cc:218 msgid "rom_reassembler" msgstr "Reassembler" #: src/kc/prefs/types.cc:219 msgid "rom_editor" msgstr "Editor" #: src/kc/prefs/types.cc:220 msgid "rom_assembler" msgstr "Assembler" #: src/kc/prefs/types.cc:221 msgid "rom_charset" msgstr "Charset" #: src/kc/prefs/types.cc:222 msgid "rom_d004_fc" msgstr "D004 (Slot FC)" #: src/kc/prefs/types.cc:223 msgid "rom_d004_f8" msgstr "D004 (Slot F8)" #: src/kc/prefs/types.cc:475 #, fuzzy msgid "" " Z1013 with 16k RAM and 2k ROM, running at 1MHz. This was the\n" " first version with cheap circuits so the CPU was clocked at only 1MHz\n" " The ROM contains the Z1013 monitor version 2.02.\n" msgstr "" " Z1013 with 16k RAM and 2k ROM, running at 1MHz. This was the\n" " first version with cheap circuits so the CPU was clocked at only 1MHz\n" " The ROM containes the Z1013 monitor version 2.02.\n" #: src/kc/prefs/types.cc:482 src/kc/prefs/types.cc:491 #: src/kc/prefs/types.cc:500 src/kc/prefs/types.cc:511 msgid "System-ROM V2.0" msgstr "System-ROM V2.0" #: src/kc/prefs/types.cc:483 src/kc/prefs/types.cc:492 #: src/kc/prefs/types.cc:501 src/kc/prefs/types.cc:512 #: src/kc/prefs/types.cc:523 src/kc/prefs/types.cc:533 #: src/kc/prefs/types.cc:544 src/kc/prefs/types.cc:554 msgid "Z1013 Charset-ROM" msgstr "Z1013 Charset-ROM" #: src/kc/prefs/types.cc:485 msgid "" " Z1013 with 1k sRAM and 2k ROM, running at 2MHz. Industry\n" " version with only 1k static RAM. Monitor version 2.02.\n" msgstr "" " Z1013 with 1k sRAM and 2k ROM, running at 2MHz. Industry\n" " version with only 1k static RAM. Monitor version 2.02.\n" #: src/kc/prefs/types.cc:494 msgid "" " Z1013 with 16k RAM and 2k ROM, running at 2MHz. Successor of\n" " the Z1013.01 but with industry grade circuits clocked at 2MHz.\n" msgstr "" " Z1013 with 16k RAM and 2k ROM, running at 2MHz. Successor of\n" " the Z1013.01 but with industry grade circuits clocked at 2MHz.\n" #: src/kc/prefs/types.cc:503 msgid "" " Z1013 with 64k RAM and 2x2k ROM, running at 2MHz. The ROM\n" " contains two system images with 2k each. Loaded is the first\n" " image with version 2.02 that is supposed to work with the foil keypad\n" " shipped by the manufacturer.\n" msgstr "" " Z1013 with 64k RAM and 2x2k ROM, running at 2MHz. The ROM\n" " contains two system images with 2k each. Loaded is the first\n" " image with version 2.02 that is supposed to work with the foil keypad\n" " shipped by the manufacturer.\n" #: src/kc/prefs/types.cc:514 msgid "" " Z1013 with 64k RAM and 2k ROM, running at 2MHz. The ROM\n" " contains two system images with 2k each. Loaded is the second\n" " image with version A.2 that supports an extended keyboard with an\n" " 8x8 matrix.\n" msgstr "" " Z1013 with 64k RAM and 2k ROM, running at 2MHz. The ROM\n" " contains two system images with 2k each. Loaded is the second\n" " image with version A.2 that supports an extended keyboard with an\n" " 8x8 matrix.\n" #: src/kc/prefs/types.cc:522 msgid "System-ROM A2" msgstr "System-ROM A2" #: src/kc/prefs/types.cc:525 msgid "" " Z1013 with 64k RAM and 4k ROM. The ROM is the extended\n" " version tagged 2.028 RB that has a different keyboard driver for\n" " the keyboard K7659.\n" msgstr "" " Z1013 with 64k RAM and 4k ROM. The ROM is the extended\n" " version tagged 2.028 RB that has a different keyboard driver for\n" " the keyboard K7659.\n" #: src/kc/prefs/types.cc:532 msgid "Brosig-ROM K7659/2.028" msgstr "Brosig-ROM K7659/2.028" #: src/kc/prefs/types.cc:535 msgid "" " Z1013 with 64k RAM and 4k ROM. The ROM contains the 'Super\n" " Ur-Lader 5.0' that can read arbitrary tape files as system monitor.\n" " The hardware modification port at address 4h is emulated which allows\n" " programs to switch off the system ROM.\n" msgstr "" " Z1013 with 64k RAM and 4k ROM. The ROM contains the 'Super\n" " Ur-Lader 5.0' that can read arbitrary tape files as system monitor.\n" " The hardware modification port at address 4h is emulated which allows\n" " programs to switch off the system ROM.\n" #: src/kc/prefs/types.cc:543 msgid "Super Ur-Lader 5.0" msgstr "Super Ur-Lader 5.0" #: src/kc/prefs/types.cc:546 msgid "" " Z1013 with 64k RAM and 4k ROM. The ROM contains the Bootloader\n" " BL4 that can load monitor images from floppy disk or can start the\n" " CP/M system.\n" msgstr "" " Z1013 with 64k RAM and 4k ROM. The ROM contains the Bootloader\n" " BL4 that can load monitor images from floppy disk or can start the\n" " CP/M system.\n" #: src/kc/prefs/types.cc:553 msgid "Bootlader BL4" msgstr "Bootlader BL4" #: src/kc/prefs/types.cc:559 msgid "" " Z9001 (later called KC 85/1) with monochrome display, no internal BASIC\n" " ROM. This computer has 16k RAM and 4k ROM with the robotron z9001 " "system.\n" msgstr "" " Z9001 (later called KC 85/1) with monochrome display, no internal BASIC\n" " ROM. This computer has 16k RAM and 4k ROM with the robotron z9001 " "system.\n" #: src/kc/prefs/types.cc:565 src/kc/prefs/types.cc:581 #: src/kc/prefs/types.cc:734 src/kc/prefs/types.cc:751 #: src/kc/prefs/types.cc:768 src/kc/prefs/types.cc:786 #: src/kc/prefs/types.cc:803 src/kc/prefs/types.cc:820 #: src/kc/prefs/types.cc:846 src/kc/prefs/types.cc:901 #: src/kc/prefs/types.cc:912 src/kc/prefs/types.cc:920 msgid "System-ROM" msgstr "System-ROM" #: src/kc/prefs/types.cc:566 src/kc/prefs/types.cc:582 #: src/kc/prefs/types.cc:735 src/kc/prefs/types.cc:752 #: src/kc/prefs/types.cc:769 src/kc/prefs/types.cc:787 #: src/kc/prefs/types.cc:804 src/kc/prefs/types.cc:821 msgid "ROM-Bank System without menu" msgstr "ROM-Bank System without menu" #: src/kc/prefs/types.cc:567 src/kc/prefs/types.cc:583 #: src/kc/prefs/types.cc:736 src/kc/prefs/types.cc:753 #: src/kc/prefs/types.cc:770 src/kc/prefs/types.cc:788 #: src/kc/prefs/types.cc:805 src/kc/prefs/types.cc:822 msgid "ROM-Bank System with menu" msgstr "ROM-Bank System with menu" #: src/kc/prefs/types.cc:570 src/kc/prefs/types.cc:586 #: src/kc/prefs/types.cc:740 src/kc/prefs/types.cc:757 #: src/kc/prefs/types.cc:774 src/kc/prefs/types.cc:792 #: src/kc/prefs/types.cc:809 src/kc/prefs/types.cc:826 msgid "Z9001 Charset-ROM" msgstr "Z9001 Charset-ROM" #: src/kc/prefs/types.cc:571 src/kc/prefs/types.cc:587 #: src/kc/prefs/types.cc:741 src/kc/prefs/types.cc:758 #: src/kc/prefs/types.cc:775 src/kc/prefs/types.cc:793 #: src/kc/prefs/types.cc:810 src/kc/prefs/types.cc:827 msgid "Z9001 Charset-ROM (german)" msgstr "Z9001 Charset-ROM (german)" #: src/kc/prefs/types.cc:572 src/kc/prefs/types.cc:588 #: src/kc/prefs/types.cc:742 src/kc/prefs/types.cc:759 #: src/kc/prefs/types.cc:776 src/kc/prefs/types.cc:794 #: src/kc/prefs/types.cc:811 src/kc/prefs/types.cc:828 msgid "CGA Charset-ROM" msgstr "CGA Charset-ROM" #: src/kc/prefs/types.cc:573 src/kc/prefs/types.cc:589 #: src/kc/prefs/types.cc:743 src/kc/prefs/types.cc:760 #: src/kc/prefs/types.cc:777 src/kc/prefs/types.cc:795 #: src/kc/prefs/types.cc:812 src/kc/prefs/types.cc:829 msgid "CGA Charset-ROM (extended)" msgstr "CGA Charset-ROM (extended)" #: src/kc/prefs/types.cc:576 msgid " Like the z9001.10 but with color extension card.\n" msgstr " Like the z9001.10 but with color extension card.\n" #: src/kc/prefs/types.cc:595 msgid "" " HC900 (later called KC 85/2) with 16k RAM and 8k ROM. System is called\n" " HC-CAOS 2.2 (home computer - cassette aided operating system). BASIC\n" " is only available as external module.\n" msgstr "" " HC900 (later called KC 85/2) with 16k RAM and 8k ROM. System is called\n" " HC-CAOS 2.2 (home computer - cassette aided operating system). BASIC\n" " is only available as external module.\n" #: src/kc/prefs/types.cc:601 msgid "HC-900 CAOS" msgstr "HC-900 CAOS" #: src/kc/prefs/types.cc:602 msgid "CAOS 2.2" msgstr "CAOS 2.2" #: src/kc/prefs/types.cc:605 src/kc/prefs/types.cc:611 #: src/kc/prefs/types.cc:633 src/kc/prefs/types.cc:639 #: src/kc/prefs/types.cc:662 src/kc/prefs/types.cc:668 #: src/kc/prefs/types.cc:696 src/kc/prefs/types.cc:702 msgid "D004 Version 2.0 (02.01.1989)" msgstr "D004 Version 2.0 (02.01.1989)" #: src/kc/prefs/types.cc:606 src/kc/prefs/types.cc:612 #: src/kc/prefs/types.cc:634 src/kc/prefs/types.cc:640 #: src/kc/prefs/types.cc:663 src/kc/prefs/types.cc:669 #: src/kc/prefs/types.cc:697 src/kc/prefs/types.cc:703 msgid "D004 Version 3.0 (07.12.1997)" msgstr "D004 Version 3.0 (07.12.1997)" #: src/kc/prefs/types.cc:607 src/kc/prefs/types.cc:613 #: src/kc/prefs/types.cc:635 src/kc/prefs/types.cc:641 #: src/kc/prefs/types.cc:664 src/kc/prefs/types.cc:670 #: src/kc/prefs/types.cc:698 src/kc/prefs/types.cc:704 msgid "D004 Version 3.1 (22.01.2003)" msgstr "D004 Version 3.1 (22.01.2003)" #: src/kc/prefs/types.cc:608 src/kc/prefs/types.cc:614 #: src/kc/prefs/types.cc:636 src/kc/prefs/types.cc:642 #: src/kc/prefs/types.cc:665 src/kc/prefs/types.cc:671 #: src/kc/prefs/types.cc:699 src/kc/prefs/types.cc:705 msgid "D004 Version 3.2 (28.10.2008)" msgstr "D004 Version 3.2 (28.10.2008)" #: src/kc/prefs/types.cc:620 msgid "" " KC 85/3 with 16k RAM, 8k system ROM with HC-CAOS 3.1 and 8k BASIC ROM.\n" msgstr "" " KC 85/3 with 16k RAM, 8k system ROM with HC-CAOS 3.1 and 8k BASIC ROM.\n" #: src/kc/prefs/types.cc:624 msgid "CAOS 3.1" msgstr "CAOS 3.1" #: src/kc/prefs/types.cc:625 msgid "CAOS 3.3" msgstr "CAOS 3.3" #: src/kc/prefs/types.cc:626 msgid "CAOS 3.4" msgstr "CAOS 3.4" #: src/kc/prefs/types.cc:627 msgid "OS PI/88 (yellow/blue)" msgstr "OS PI/88 (yellow/blue)" #: src/kc/prefs/types.cc:628 msgid "OS PI/88 (black/white)" msgstr "OS PI/88 (black/white)" #: src/kc/prefs/types.cc:629 msgid "OS PI/88 (white/blue)" msgstr "OS PI/88 (white/blue)" #: src/kc/prefs/types.cc:631 src/kc/prefs/types.cc:660 #: src/kc/prefs/types.cc:738 src/kc/prefs/types.cc:755 #: src/kc/prefs/types.cc:772 src/kc/prefs/types.cc:790 #: src/kc/prefs/types.cc:807 src/kc/prefs/types.cc:824 msgid "KC-BASIC" msgstr "KC-BASIC" #: src/kc/prefs/types.cc:648 msgid "" " KC 85/4 with 64k RAM, 64k screen memory, 12k system ROM with HC-CAOS " "4.2\n" " and 8k BASIC ROM.\n" msgstr "" " KC 85/4 with 64k RAM, 64k screen memory, 12k system ROM with HC-CAOS " "4.2\n" " and 8k BASIC ROM.\n" #: src/kc/prefs/types.cc:653 msgid "CAOS 4.1 (C)" msgstr "CAOS 4.1 (C)" #: src/kc/prefs/types.cc:654 msgid "CAOS 4.2 (C)" msgstr "CAOS 4.2 (C)" #: src/kc/prefs/types.cc:657 msgid "CAOS 4.1 (E)" msgstr "CAOS 4.1 (E)" #: src/kc/prefs/types.cc:658 msgid "CAOS 4.2 (E)" msgstr "CAOS 4.2 (E)" #: src/kc/prefs/types.cc:677 #, fuzzy msgid "" " Unofficial successor of the KC 85/4 with 256k RAM, 64k screen memory,\n" " 16k system ROM with HC-CAOS 4.4, 8k BASIC ROM and 24k User ROM. It is\n" " intended to be used with a modified D004 floppy device with additional\n" " hard-disk support.\n" msgstr "" " Inofficial successor of the KC 85/4 with 256k RAM, 64k screen memory,\n" " 16k system ROM with HC-CAOS 4.4, 8k BASIC ROM and 24k User ROM. It is\n" " intended to be used with a modified D004 floppy device with additional\n" " hard-disk support.\n" #: src/kc/prefs/types.cc:684 msgid "CAOS 4.3 (C)" msgstr "CAOS 4.3 (C)" #: src/kc/prefs/types.cc:685 msgid "CAOS 4.4 (C)" msgstr "CAOS 4.4 (C)" #: src/kc/prefs/types.cc:688 msgid "CAOS 4.3 (E)" msgstr "CAOS 4.3 (E)" #: src/kc/prefs/types.cc:689 msgid "CAOS 4.4 (E)" msgstr "CAOS 4.4 (E)" #: src/kc/prefs/types.cc:692 msgid "KC-BASIC (EDAS/TEMO/FORTH)" msgstr "KC-BASIC (EDAS/TEMO/FORTH)" #: src/kc/prefs/types.cc:693 msgid "KC-BASIC (EDAS/TEMO/USB)" msgstr "KC-BASIC (EDAS/TEMO/USB)" #: src/kc/prefs/types.cc:711 msgid " Polycomputer 880.\n" msgstr " Polycomputer 880.\n" #: src/kc/prefs/types.cc:715 src/kc/prefs/types.cc:839 #: src/kc/prefs/types.cc:852 src/kc/prefs/types.cc:864 #: src/kc/prefs/types.cc:874 msgid "System-ROM 1" msgstr "System-ROM 1" #: src/kc/prefs/types.cc:716 src/kc/prefs/types.cc:840 #: src/kc/prefs/types.cc:853 src/kc/prefs/types.cc:865 #: src/kc/prefs/types.cc:875 msgid "System-ROM 2" msgstr "System-ROM 2" #: src/kc/prefs/types.cc:717 src/kc/prefs/types.cc:718 msgid "Optional-ROM 1" msgstr "Optional-ROM 1" #: src/kc/prefs/types.cc:720 msgid " Polycomputer 880 with chess program rom from SC1.\n" msgstr " Polycomputer 880 with chess program rom from SC1.\n" #: src/kc/prefs/types.cc:724 msgid "SC1-ROM" msgstr "SC1-ROM" #: src/kc/prefs/types.cc:729 msgid " Like the KC 87.11 but without the color extension card.\n" msgstr " Like the KC 87.11 but without the color extension card.\n" #: src/kc/prefs/types.cc:746 msgid " Successor of the Z9001 with internal 10k BASIC ROM.\n" msgstr " Successor of the Z9001 with internal 10k BASIC ROM.\n" #: src/kc/prefs/types.cc:763 msgid " Like the KC 87.21 but without the color extension card.\n" msgstr " Like the KC 87.21 but without the color extension card.\n" #: src/kc/prefs/types.cc:780 msgid "" " New series with extended BASIC ROM (still 10k but with some routines " "for\n" " plotter support were added).\n" msgstr "" " New series with extended BASIC ROM (still 10k but with some routines " "for\n" " plotter support were added).\n" #: src/kc/prefs/types.cc:798 msgid " New batch of KC 87.20 with no known hardware differences.\n" msgstr " New batch of KC 87.20 with no known hardware differences.\n" #: src/kc/prefs/types.cc:815 msgid " New batch of KC 87.21 with no known hardware differences.\n" msgstr " New batch of KC 87.21 with no known hardware differences.\n" #: src/kc/prefs/types.cc:835 msgid " Single board computer LC 80 with 1k RAM and 2 x 1k ROM.\n" msgstr " Single board computer LC 80 with 1k RAM and 2 x 1k ROM.\n" #: src/kc/prefs/types.cc:842 msgid " Single board computer LC 80 with 1k RAM and 1 x 2k ROM.\n" msgstr " Single board computer LC 80 with 1k RAM and 1 x 2k ROM.\n" #: src/kc/prefs/types.cc:848 msgid " Export variant of the LC 80 with 12k ROM including chess program.\n" msgstr "" " Export variant of the LC 80 with 12k ROM including chess program.\n" #: src/kc/prefs/types.cc:854 msgid "System-ROM 3" msgstr "System-ROM 3" #: src/kc/prefs/types.cc:859 msgid " BIC/A5105, only the base device is emulated, no floppy device.\n" msgstr " BIC/A5105, only the base device is emulated, no floppy device.\n" #: src/kc/prefs/types.cc:866 src/kc/prefs/types.cc:876 msgid "DSE-ROM 1" msgstr "DSE-ROM 1" #: src/kc/prefs/types.cc:867 src/kc/prefs/types.cc:877 msgid "DSE-ROM 2" msgstr "DSE-ROM 2" #: src/kc/prefs/types.cc:869 msgid " BIC/A5105, the full system including the floppy device.\n" msgstr " BIC/A5105, the full system including the floppy device.\n" #: src/kc/prefs/types.cc:882 msgid "" " Micro-Computer presented in the book \"Praktische Microcomputertechnik" "\"\n" " by Manfred Kramer.\n" msgstr "" " Micro-Computer presented in the book \"Praktische Microcomputertechnik" "\"\n" " by Manfred Kramer.\n" #: src/kc/prefs/types.cc:886 msgid "IO-Monitor" msgstr "IO-Monitor" #: src/kc/prefs/types.cc:887 msgid "BASIC" msgstr "BASIC" #: src/kc/prefs/types.cc:888 src/kc/prefs/types.cc:902 msgid "Charset-ROM" msgstr "Charset-ROM" #: src/kc/prefs/types.cc:889 msgid "Debugger" msgstr "Debugger" #: src/kc/prefs/types.cc:890 msgid "Reassembler" msgstr "Reassembler" #: src/kc/prefs/types.cc:891 msgid "Editor" msgstr "Editor" #: src/kc/prefs/types.cc:892 msgid "Assembler" msgstr "Assembler" #: src/kc/prefs/types.cc:897 msgid "" " CP/M based Micro-Computer presented in the magazine \"Funkamateur\"\n" " by A. Mugler and H. Mathes.\n" msgstr "" " CP/M based Micro-Computer presented in the magazine \"Funkamateur\"\n" " by A. Mugler and H. Mathes.\n" #: src/kc/prefs/types.cc:907 msgid "" " Minimal Z80 learning system presented in the magazine \"rfe\"\n" " by Eckhard Schiller.\n" msgstr "" " Minimal Z80 learning system presented in the magazine \"rfe\"\n" " by Eckhard Schiller.\n" #: src/kc/prefs/types.cc:917 msgid " Minimal Z80 learning system designed by Dipl.-Ing. Joachim Czepa.\n" msgstr "" " Minimal Z80 learning system designed by Dipl.-Ing. Joachim Czepa.\n" #: src/kc/prefs/types.cc:921 msgid "User-ROM" msgstr "User-ROM" #: src/kc/prefs/types.cc:1014 msgid "available emulations:" msgstr "available emulations:" #: src/libtape/kctape.cc:80 msgid "" "\n" "KCtape is part of KCemu the KC 85/4 Emulator and comes with\n" "ABSOLUTELY NO WARRANTY; for details run `kcemu --warranty'.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; run `kcemu --license' for details.\n" "\n" "usage: kctape -t tapefile [command [command_args]]\n" "\n" " commands:\n" " ---------\n" "\n" " -h|--help show this help text\n" " -v|--verbose be verbose about what's going on\n" " -t|--tape tape archive to process\n" " -l|--list list content of tape archive\n" " -c|--create create tape archive if it doesn't exist\n" " -a|--add add files (KC85/3 mode)\n" " -1|--add1 add files (KC85/1 mode)\n" " -A|--add-raw add binary files\n" " -r|--remove remove file from tape archive\n" " -x|--extract extract file from tape archive\n" " -d|--dump hexdump file\n" " -o|--output output file for extract\n" " -b|--print-bam show internal block allocation map\n" " -B|--print-block-list show internal block list\n" msgstr "" "\n" "KCtape is part of KCemu the KC 85/4 Emulator and comes with\n" "ABSOLUTELY NO WARRANTY; for details run `kcemu --warranty'.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; run `kcemu --license' for details.\n" "\n" "usage: kctape -t tapefile [command [command_args]]\n" "\n" " commands:\n" " ---------\n" "\n" " -h|--help show this help text\n" " -v|--verbose be verbose about what's going on\n" " -t|--tape tape archive to process\n" " -l|--list list content of tape archive\n" " -c|--create create tape archive if it doesn't exist\n" " -a|--add add files (KC85/3 mode)\n" " -1|--add1 add files (KC85/1 mode)\n" " -A|--add-raw add binary files\n" " -r|--remove remove file from tape archive\n" " -x|--extract extract file from tape archive\n" " -d|--dump hexdump file\n" " -o|--output output file for extract\n" " -b|--print-bam show internal block allocation map\n" " -B|--print-block-list show internal block list\n" #: src/libtape/kctape.cc:584 #, c-format msgid "" "ERROR: no tape specified, use the -t option to select\n" " the tape archive you want to process\n" "\n" msgstr "" "ERROR: no tape specified, use the -t option to select\n" " the tape archive you want to process\n" "\n" #: src/ui/gtk/debug.cc:237 msgid "KCemu: Debugger" msgstr "KCemu: Debugger" #: src/ui/gtk/debug.cc:336 msgid "Trace" msgstr "Trace" #: src/ui/gtk/debug.cc:343 msgid "Single Step" msgstr "Single Step" #: src/ui/gtk/debug.cc:350 msgid "Execute Step" msgstr "Execute Step" #: src/ui/gtk/dialog.cc:54 msgid "???" msgstr "???" #: src/ui/gtk/fbrowse.cc:39 msgid "Select File..." msgstr "Select File..." #: src/ui/gtk/hedit.cc:96 msgid "no tape-filename given!" msgstr "no tape-filename given!" #: src/ui/gtk/hedit.cc:101 msgid "no KC-filename given!" msgstr "no KC-filename given!" #: src/ui/gtk/hedit.cc:106 src/ui/gtk/image.cc:89 msgid "" "error in given load address!\n" "\n" "valid addresses have to be in the range from 0 to 65535\n" "hexadecimal values need to be prefixed with 0x (e.g. 0x1234),\n" "octal values require a leading 0 (e.g. 0444)" msgstr "" "error in given load address!\n" "\n" "valid addresses have to be in the range from 0 to 65535\n" "hexadecimal values need to be prefixed with 0x (e.g. 0x1234),\n" "octal values require a leading 0 (e.g. 0444)" #: src/ui/gtk/hedit.cc:119 src/ui/gtk/image.cc:105 msgid "error in given start address!" msgstr "error in given start address!" #: src/ui/gtk/hedit.cc:174 msgid "File Properties" msgstr "File Properties" #: src/ui/gtk/hedit.cc:199 msgid "Name in tape-directory:" msgstr "Name in tape-directory:" #: src/ui/gtk/hedit.cc:212 msgid "Name in KC file-header:" msgstr "Name in KC file-header:" #: src/ui/gtk/hedit.cc:225 src/ui/gtk/image.cc:156 msgid "Load address:" msgstr "Load address:" #: src/ui/gtk/hedit.cc:251 msgid "autostart" msgstr "autostart" #: src/ui/gtk/image.cc:126 msgid "Input Image Properties" msgstr "Input Image Properties" #: src/ui/gtk/image.cc:133 msgid "" "It was not possible to automatically determine the\n" "type of the selected file. Thus I don't know at which\n" "address the file should be loaded\n" "\n" "To load the file nevertheless you need to type in the\n" "needed values yourself." msgstr "" "It was not possible to automatically determine the\n" "type of the selected file. Thus I don't know at which\n" "address the file should be loaded\n" "\n" "To load the file nevertheless you need to type in the\n" "needed values yourself." #: src/ui/gtk/image.cc:185 msgid "Start Program after Loading" msgstr "Start Program after Loading" #: src/ui/gtk/image.cc:197 msgid "OK" msgstr "OK" #: src/ui/gtk/image.cc:209 msgid "Cancel" msgstr "Cancel" #: src/ui/gtk/info.cc:132 msgid "byte output" msgstr "byte output" #: src/ui/gtk/info.cc:133 msgid "byte input" msgstr "byte input" #: src/ui/gtk/info.cc:134 msgid "byte input/output" msgstr "byte input/output" #: src/ui/gtk/info.cc:135 msgid "bit input/output" msgstr "bit input/output" #: src/ui/gtk/info.cc:326 msgid "Mode:" msgstr "Mode:" #: src/ui/gtk/info.cc:345 src/ui/gtk/info.cc:419 msgid "IRQ:" msgstr "IRQ:" #: src/ui/gtk/info.cc:364 src/ui/gtk/info.cc:438 msgid "IRQ Vector:" msgstr "IRQ Vector:" #: src/ui/gtk/info.cc:391 msgid "Channel A" msgstr "Channel A" #: src/ui/gtk/info.cc:395 msgid "Channel B" msgstr "Channel B" #: src/ui/gtk/info.cc:464 msgid "Channel 0" msgstr "Channel 0" #: src/ui/gtk/info.cc:468 msgid "Channel 1" msgstr "Channel 1" #: src/ui/gtk/info.cc:472 msgid "Channel 2" msgstr "Channel 2" #: src/ui/gtk/info.cc:476 msgid "Channel 3" msgstr "Channel 3" #: src/ui/gtk/info.cc:491 msgid "KCemu: Info" msgstr "KCemu: Info" #: src/ui/gtk/info.cc:516 msgid "CPU" msgstr "CPU" #: src/ui/gtk/info.cc:519 msgid "PIO" msgstr "PIO" #: src/ui/gtk/info.cc:522 msgid "CTC" msgstr "CTC" #: src/ui/gtk/info.cc:545 msgid "Update" msgstr "Update" #: src/ui/gtk/info.cc:555 src/ui/gtk/wav.cc:144 msgid "Close" msgstr "Close" #: src/ui/gtk/keyboard.cc:558 msgid "KCemu: Keyboard" msgstr "KCemu: Keyboard" #: src/ui/gtk/module.cc:211 msgid "No module slots available for this computer." msgstr "No module slots available for this computer." #: src/ui/gtk/module.cc:223 #, c-format msgid "Slot %d" msgstr "Slot %d" #: src/ui/gtk/module.cc:318 msgid "Floppy Disk Basis [F0]" msgstr "Floppy Disk Basis [F0]" #: src/ui/gtk/module.cc:323 #, c-format msgid "D002: Busdriver [%02X]" msgstr "D002: Busdriver [%02X]" #: src/ui/gtk/module.cc:331 src/ui/gtk/module.cc:333 msgid "Basis Device" msgstr "Basis Device" #: src/ui/gtk/tape.cc:76 msgid "Please enter the new name for the file." msgstr "Please enter the new name for the file." #: src/ui/gtk/tape.cc:272 msgid "/_Run File" msgstr "/_Run File" #: src/ui/gtk/tape.cc:273 msgid "/_Load File" msgstr "/_Load File" #: src/ui/gtk/tape.cc:274 msgid "/_Export File" msgstr "/_Export File" #: src/ui/gtk/tape.cc:275 msgid "/Export _Wav" msgstr "/Export _Wav" #: src/ui/gtk/tape.cc:276 msgid "/sep1" msgstr "/sep1" #: src/ui/gtk/tape.cc:277 msgid "/Edit _Header" msgstr "/Edit _Header" #: src/ui/gtk/tape.cc:278 msgid "/Re_name File" msgstr "/Re_name File" #: src/ui/gtk/tape.cc:279 msgid "/_Delete File" msgstr "/_Delete File" #: src/ui/gtk/tape.cc:280 msgid "/sep2" msgstr "/sep2" #: src/ui/gtk/tape.cc:281 msgid "/_Add File" msgstr "/_Add File" #: src/ui/gtk/tape.cc:286 msgid "Name" msgstr "Name" #: src/ui/gtk/tape.cc:287 msgid "Type" msgstr "Type" #: src/ui/gtk/tape.cc:288 msgid "Load" msgstr "Load" #: src/ui/gtk/tape.cc:289 msgid "Start" msgstr "Start" #: src/ui/gtk/tape.cc:290 msgid "Size" msgstr "Size" #: src/ui/gtk/tape.cc:302 src/ui/gtk/tape.cc:308 msgid "" msgstr "" #: src/ui/gtk/tape.cc:309 msgid "/Run File" msgstr "/Run File" #: src/ui/gtk/tape.cc:310 msgid "/Load File" msgstr "/Load File" #: src/ui/gtk/tape.cc:311 msgid "/Edit Header" msgstr "/Edit Header" #: src/ui/gtk/tape.cc:312 msgid "/Delete File" msgstr "/Delete File" #: src/ui/gtk/tape.cc:313 msgid "/Rename File" msgstr "/Rename File" #: src/ui/gtk/tape.cc:314 msgid "/Export File" msgstr "/Export File" #: src/ui/gtk/tape.cc:315 msgid "/Export Wav" msgstr "/Export Wav" #: src/ui/gtk/ui_gtk.cc:794 msgid "Info" msgstr "Info" #: src/ui/gtk/wav.cc:134 msgid "Open" msgstr "Open" #: src/ui/gtk/wav.cc:154 msgid "Play" msgstr "Play" #: src/ui/gtk/options.cc:94 msgid "Save profiles?" msgstr "Save profiles?" #: src/ui/gtk/options.cc:96 msgid "" "Some profiles were changed!\n" "\n" "'Yes' will save changes to disk, 'No' will reject all changes.\n" "'Cancel': will allow to continue editing." msgstr "" "Some profiles were changed!\n" "\n" "'Yes' will save changes to disk, 'No' will reject all changes.\n" "'Cancel': will allow to continue editing." #: src/ui/gtk/options.cc:605 msgid "Open ROM Image..." msgstr "Open ROM Image..." #: src/ui/gtk/options.cc:892 #, c-format msgid "ROM image is '%s'. The ROM size needs to be %04xh (%d) bytes." msgstr "ROM image is '%s'. The ROM size needs to be %04xh (%d) bytes." #: src/ui/gtk/video.cc:258 msgid "" msgstr "" #: src/ui/gtk/video.cc:262 msgid "Theora/Ogg" msgstr "Theora/Ogg" #: src/ui/gtk/video.cc:266 msgid "AVI" msgstr "AVI" #: src/ui/gtk/video.cc:270 msgid "MPEG 4" msgstr "MPEG 4" #: src/ui/gtk/video.cc:274 msgid "Dirac" msgstr "Dirac" #: src/ui/gtk/video.cc:278 msgid "Schroedinger" msgstr "Schroedinger" #: src/ui/gtk/video.cc:282 msgid "Animated GIF" msgstr "Animated GIF" #: src/ui/gtk/video.cc:286 msgid "VNC" msgstr "VNC" #~ msgid "Saturation" #~ msgstr "Saturation" #~ msgid "Black Level" #~ msgstr "Black Level" #~ msgid "White Level" #~ msgstr "White Level" #~ msgid "A_udio..." #~ msgstr "A_udio..." #~ msgid "gtk-cancel" #~ msgstr "gtk-cancel" #~ msgid "" #~ "Marat Fayzullin\n" #~ " for the Z80 emulation core used for the main processor\n" #~ " (I needed to tweak some bits of the emulation core; see\n" #~ " src/z80core/README for the list of changes)\n" #~ "Marcel de Kogel\n" #~ " for the Z80 emulation core used for the KC floppy\n" #~ " processor\n" #~ "Thomas Bretz\n" #~ " for the OS/2 port of KCemu (see http://www.d4m.de/)\n" #~ "Thomas Ludwig\n" #~ " for the great KC website at http://www.kc85emu.de/ and\n" #~ " lots of bugreports and hints how to make KCemu better\n" #~ "Holger Krull\n" #~ " for providing lots of information about the LC 80\n" #~ " computer (see http://www.lc80.de/)\n" #~ "Kev Thacker\n" #~ " for interesting insights concerning the floppy emulation\n" #~ " (he's also the author of the KC driver for M.E.S.S. the\n" #~ " Multi-Emulator Super System, see http://mess.emuverse.com/)\n" #~ "Volker Pohlers\n" #~ " for help with the windows port, technical information and\n" #~ " bugreports\n" #~ "Alexander Schön\n" #~ " for starting the windows port, lots of tips and for providing\n" #~ " a huge pile of files for use with the emulator or with\n" #~ " information about the various systems" #~ msgstr "" #~ "Marat Fayzullin\n" #~ " for the Z80 emulation core used for the main processor\n" #~ " (I needed to tweak some bits of the emulation core; see\n" #~ " src/z80core/README for the list of changes)\n" #~ "Marcel de Kogel\n" #~ " for the Z80 emulation core used for the KC floppy\n" #~ " processor\n" #~ "Thomas Bretz\n" #~ " for the OS/2 port of KCemu (see http://www.d4m.de/)\n" #~ "Thomas Ludwig\n" #~ " for the great KC website at http://www.kc85emu.de/ and\n" #~ " lots of bugreports and hints how to make KCemu better\n" #~ "Holger Krull\n" #~ " for providing lots of information about the LC 80\n" #~ " computer (see http://www.lc80.de/)\n" #~ "Kev Thacker\n" #~ " for interesting insights concerning the floppy emulation\n" #~ " (he's also the author of the KC driver for M.E.S.S. the\n" #~ " Multi-Emulator Super System, see http://mess.emuverse.com/)\n" #~ "Volker Pohlers\n" #~ " for help with the windows port, technical information and\n" #~ " bugreports\n" #~ "Alexander Schön\n" #~ " for starting the windows port, lots of tips and for providing\n" #~ " a huge pile of files for use with the emulator or with\n" #~ " information about the various systems" #~ msgid "gtk-ok" #~ msgstr "gtk-ok" #~ msgid "" #~ "No\n" #~ "Yes" #~ msgstr "" #~ "No\n" #~ "Yes" #~ msgid "gtk-quit" #~ msgstr "gtk-quit" #~ msgid "gtk-clear" #~ msgstr "gtk-clear" #~ msgid "gtk-save" #~ msgstr "gtk-save" #~ msgid "VDIP2: Vinculum USB ROM (CAOS 4.2)" #~ msgstr "VDIP2: Vinculum USB ROM (CAOS 4.2)" #~ msgid "VDIP2: Vinculum USB ROM (CAOS 4.4)" #~ msgstr "VDIP2: Vinculum USB ROM (CAOS 4.4)" #~ msgid "Swap ROMs:" #~ msgstr "Swap ROMs:" #~ msgid "" #~ "Swap the F8 and FC ROMs of the D004 device.\n" #~ "\n" #~ "The firmware version of the ROMs depends actually on the type of the " #~ "emulated system.\n" #~ "\n" #~ "KC85/2-4 default to the standard FC ROM version 2.0 whereas the KC85/5 " #~ "system has the extended ROM version 3.1 in slot FC by default." #~ msgstr "" #~ "Swap the F8 and FC ROMs of the D004 device.\n" #~ "\n" #~ "The firmware version of the ROMs depends actually on the type of the " #~ "emulated system.\n" #~ "\n" #~ "KC85/2-4 default to the standard FC ROM version 2.0 whereas the KC85/5 " #~ "system has the extended ROM version 3.1 in slot FC by default." #~ msgid "4" #~ msgstr "4" #~ msgid "3" #~ msgstr "3" #~ msgid "2" #~ msgstr "2" #~ msgid "1" #~ msgstr "1" KCemu-0.5.1/po/Rules-quot0000644001050700006200000000337611321666453014646 0ustar glaubitzfbedv# Special Makefile rules for English message catalogs with quotation marks. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$ll -o - 2>/dev/null | sed -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | $(MSGFILTER) sed -f `echo $$lang | sed -e 's/.*@//'`.sed 2>/dev/null > $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header KCemu-0.5.1/po/ChangeLog0000644001050700006200000000121711340261610014370 0ustar glaubitzfbedv2010-01-08 gettextize * Makefile.in.in: Upgrade to gettext-0.17. 2006-11-17 gettextize * Makefile.in.in: New file, from gettext-0.15. * boldquot.sed: New file, from gettext-0.15. * en@boldquot.header: New file, from gettext-0.15. * en@quot.header: New file, from gettext-0.15. * insert-header.sin: New file, from gettext-0.15. * quot.sed: New file, from gettext-0.15. * remove-potcdate.sin: New file, from gettext-0.15. * Rules-quot: New file, from gettext-0.15. * POTFILES.in: New file. 2003-03-23 gettextize * Makefile.in.in: Upgrade to gettext-0.10.40. KCemu-0.5.1/po/stamp-po0000644001050700006200000000001211345001730014271 0ustar glaubitzfbedvtimestamp KCemu-0.5.1/po/insert-header.sin0000644001050700006200000000124011321666453016074 0ustar glaubitzfbedv# Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } KCemu-0.5.1/po/remove-potcdate.sin0000644001050700006200000000066011321666453016445 0ustar glaubitzfbedv# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } KCemu-0.5.1/po/Makevars0000644001050700006200000000344211321674430014323 0ustar glaubitzfbedv# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --from-code=utf-8 --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Torsten Paul # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = Torsten.Paul@gmx.de # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = KCemu-0.5.1/po/de.po0000644001050700006200000035053611345001730013561 0ustar glaubitzfbedv# $Id: de.po,v 1.26 2002/10/31 16:40:02 torsten_paul Exp $ # KCemu german translation # Copyright (C) 1998 Free Software Foundation, Inc. # Torsten Paul , 1998-2002. # msgid "" msgstr "" "Project-Id-Version: KCemu v0.4\n" "Report-Msgid-Bugs-To: Torsten.Paul@gmx.de\n" "POT-Creation-Date: 2010-03-07 20:51+0100\n" "PO-Revision-Date: 2010-03-06 00:59+0100\n" "Last-Translator: Torsten Paul \n" "Language-Team: German \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Poedit-Language: German\n" "X-Poedit-Country: GERMANY\n" #: images/about.glade:6 msgid "KCemu: About" msgstr "KCemu: Über KCemu" #: images/about.glade:25 msgid "About" msgstr "Über KCemu" #: images/about.glade:72 msgid "[ Version ]" msgstr "[ Version ]" #: images/about.glade:85 msgid "(c) 1997-2010 Torsten Paul" msgstr "(c) 1997-2010 Torsten Paul" #: images/about.glade:96 msgid "" msgstr "" #: images/about.glade:111 msgid "http://kcemu.sourceforge.net/" msgstr "http://kcemu.sourceforge.net/" #: images/about.glade:130 msgid "[ Build ]" msgstr "[ Build ]" #: images/audio.glade:6 msgid "KCemu: Audio" msgstr "KCemu: Audio Player" #: images/audio.glade:25 msgid "Audio" msgstr "Audio" #: images/color.glade:39 msgid "KCemu: Color Configuration" msgstr "KCemu: Farbeinstellung" #: images/color.glade:60 msgid "Colors" msgstr "Farben" #: images/color.glade:132 images/color.glade:232 msgid "Brightness" msgstr "Helligkeit" #: images/color.glade:166 images/color.glade:266 msgid "Contrast" msgstr "Kontrast" #: images/color.glade:183 msgid "Foreground" msgstr "Vordergrund" #: images/color.glade:283 msgid "Background" msgstr "Hintergrund" #: images/dialog.glade:6 msgid "KCemu" msgstr "KCemu" #: images/dialog.glade:27 msgid "[ Title ]" msgstr "[ Title ]" #: images/disk.glade:6 msgid "KCemu: Disk" msgstr "KCemu: Diskette" #: images/disk.glade:26 msgid "Disk" msgstr "Diskette" #: images/disk.glade:268 images/options.glade:2193 msgid "Disk 4:" msgstr "Diskette 4:" #: images/disk.glade:282 images/options.glade:2207 msgid "Disk 3:" msgstr "Diskette 3:" #: images/disk.glade:296 images/options.glade:2221 msgid "Disk 2:" msgstr "Diskette 2:" #: images/disk.glade:310 images/options.glade:2235 msgid "Disk 1:" msgstr "Diskette 1:" #: images/help.glade:6 msgid "KCemu: Help" msgstr "KCemu: Hilfe" #: images/help.glade:26 msgid "Help" msgstr "Hilfe" #: images/keyboard.glade:27 msgid "Keyboard" msgstr "Tastatur" #: images/keyboard.glade:80 msgid "Sorry, keyboard display not configured." msgstr "Tastatur-Ansicht noch nicht konfiguriert." #: images/legal.glade:6 msgid "KCemu: Licence & Warranty" msgstr "KCemu: Lizenz & Haftung" #: images/legal.glade:26 msgid "License & Warranty" msgstr "Lizenz & Haftung" #: images/legal.glade:84 msgid "[ Licence ]" msgstr "[ Lizenz ]" #: images/legal.glade:97 msgid "[ Warranty ]" msgstr "[ Haftung ]" #: images/main.glade:19 msgid "_Emulator" msgstr "_Emulator" #: images/main.glade:27 images/main.glade:388 msgid "_Run..." msgstr "_Ausführen..." #: images/main.glade:34 images/main.glade:395 msgid "_Load..." msgstr "_Laden..." #: images/main.glade:41 images/main.glade:402 msgid "_Save..." msgstr "_Speichern..." #: images/main.glade:48 images/main.glade:409 msgid "_Tape..." msgstr "_Kassette..." #: images/main.glade:55 images/main.glade:416 msgid "_Disk..." msgstr "_Diskette..." #: images/main.glade:62 images/main.glade:423 msgid "_Module..." msgstr "_Module..." #: images/main.glade:69 images/main.glade:430 msgid "_Audio..." msgstr "Aud_io..." #: images/main.glade:76 images/main.glade:437 msgid "Pl_otter..." msgstr "Pl_otter..." #: images/main.glade:83 msgid "Vinculum _USB..." msgstr "Vinculum _USB..." #: images/main.glade:95 images/main.glade:456 msgid "Screens_hot..." msgstr "Screens_hot..." #: images/main.glade:102 images/main.glade:463 msgid "_Video..." msgstr "_Video..." #: images/main.glade:114 images/main.glade:544 msgid "R_eset" msgstr "R_eset" #: images/main.glade:121 images/main.glade:551 msgid "_Power On" msgstr "Ei_nschalten" #: images/main.glade:133 images/main.glade:563 msgid "_Quit Emulator" msgstr "Emulator _beenden" #: images/main.glade:144 images/main.glade:475 msgid "_View" msgstr "_Ansicht" #: images/main.glade:152 msgid "Zoom x_1" msgstr "Zoom x_1" #: images/main.glade:159 msgid "Zoom x_2" msgstr "Zoom x_2" #: images/main.glade:166 msgid "Zoom x_3" msgstr "Zoom x_3" #: images/main.glade:178 images/main.glade:509 msgid "_Keyboard" msgstr "_Tastatur" #: images/main.glade:190 images/main.glade:521 msgid "_Menubar" msgstr "_Menüleiste" #: images/main.glade:197 images/main.glade:528 msgid "_Statusbar" msgstr "_Statusleiste" #: images/main.glade:208 msgid "_Options" msgstr "_Optionen" #: images/main.glade:216 msgid "_Colors..." msgstr "_Farben..." #: images/main.glade:223 msgid "_Display Effects" msgstr "_Effekte" #: images/main.glade:230 msgid "No _Speed Limit" msgstr "Maximale _Geschwindigkeit" #: images/main.glade:242 msgid "_Profiles..." msgstr "_Profile..." #: images/main.glade:253 images/main.glade:261 msgid "_Help" msgstr "_Hilfe" #: images/main.glade:268 msgid "Help _Index" msgstr "Hilfe _Inhalt" #: images/main.glade:275 msgid "_Context Help" msgstr "_Kontext Hilfe" #: images/main.glade:287 msgid "_About" msgstr "Über KCemu" #: images/main.glade:294 msgid "_Thanks!" msgstr "Danksagung" #: images/main.glade:306 msgid "KCemu _Licence" msgstr "KCemu _Lizenz" #: images/main.glade:313 msgid "No _Warranty!" msgstr "Keine _Gewährleistung!" #: images/main.glade:444 msgid "_Vinculum USB..." msgstr "_Vinculum USB..." #: images/main.glade:483 msgid "Zoom x1" msgstr "Zoom x_1" #: images/main.glade:490 msgid "Zoom x2" msgstr "Zoom x_2" #: images/main.glade:497 msgid "Zoom x3" msgstr "Zoom x_3" #: images/module.glade:6 msgid "KCemu: Module" msgstr "KCemu: Module" #: images/module.glade:24 msgid "Module" msgstr "Modul" #: images/options.glade:91 msgid "KCemu: Profiles" msgstr "KCemu: Profile" #: images/options.glade:114 msgid "Profiles" msgstr "Profile" #: images/options.glade:165 msgid "Create new profile..." msgstr "Neues Profil erstellen..." #: images/options.glade:188 msgid "Copy selected profile..." msgstr "Ausgewähltes Profil kopieren..." #: images/options.glade:250 msgid "Expand user profile level..." msgstr "Benutzer-Profile im Baum aufklappen..." #: images/options.glade:270 msgid "Collapse user profile level..." msgstr "Benutzer-Profile im Baum zuklappen..." #: images/options.glade:431 msgid "Comment:" msgstr "Kommentar:" #: images/options.glade:445 msgid "Variant:" msgstr "Variante:" #: images/options.glade:487 msgid "System:" msgstr "System:" #: images/options.glade:501 msgid "Profile Name:" msgstr "Profil Name:" #: images/options.glade:548 msgid "System" msgstr "System" #: images/options.glade:611 msgid "" "Enable / Disable display debug code.\n" "\n" "When enabled the display cache behaviour will be graphically visualized. " "This setting is effective only if the display scale is set to 1." msgstr "" "Ein-/Ausschalten der Debug-Funktionen für die Anzeige.\n" "\n" "Wenn eingeschaltet, wird das Verhalten des Anzeige-Caches visualisiert. Die " "Einstellung hat nur Auswirkungen, wenn der Skalierungsfaktor auf 1 steht." #: images/options.glade:636 msgid "Display Debug:" msgstr "Debug:" #: images/options.glade:650 msgid "Display Scale:" msgstr "Skalierung:" #: images/options.glade:662 msgid "Display Effects:" msgstr "Effekte:" #: images/options.glade:676 msgid "Display IRM Access:" msgstr "IRM Zugriff:" #: images/options.glade:740 msgid "Scaling factor for the emulation window. Allowed values are 1 to 3." msgstr "" "Skalierungsfaktor für das Hauptfenster. Erlaubt sind Werte von 1 bis 3." #: images/options.glade:756 msgid "" "Enable / Disable display effects for scale factors above 1.\n" "\n" "When enabled a scan-line effect will be used for scale factor of 2 and a " "smoothing effect for scale factor 3." msgstr "" "Ein-/Ausschalten der Grafik-Effekte für Skalierungsfaktoren größer als 1.\n" "Wenn aktiv, werden bei einem Skalierungsfaktor von 2 ein Scanline-Effekt " "(jede 2. Zeile wird dunkler dargestellt) und bei einem Skalierungsfaktor von " "3 ein Unschärfe-Effekt auf das dargestellte Bild angewandt." #: images/options.glade:781 msgid "" "This setting is only used when emulating a KC 85/3 where it enables the " "emulation of the display dissortion when the screen memory is accessed by " "the CPU." msgstr "" "Diese Einstellung wird nur bei der Emulation eines KC 85/3 aktiv. Sie " "schaltet die Emulation der Bildstörungen beim Zugriff der CPU auf den IRM " "ein." #: images/options.glade:812 msgid "Display" msgstr "Anzeige" #: images/options.glade:1355 msgid "ROMs" msgstr "ROMs" #: images/options.glade:1476 msgid "Module 6:" msgstr "Modul 6:" #: images/options.glade:1490 msgid "Module 5:" msgstr "Modul 5:" #: images/options.glade:1504 msgid "Module 4:" msgstr "Modul 4:" #: images/options.glade:1518 msgid "Module 3:" msgstr "Modul 3:" #: images/options.glade:1532 msgid "Module 2:" msgstr "Modul 2:" #: images/options.glade:1546 msgid "Module 1:" msgstr "Modul 1:" #: images/options.glade:1558 msgid "Module 7:" msgstr "Modul 7:" #: images/options.glade:1572 msgid "Module 8:" msgstr "Modul 8:" #: images/options.glade:1613 msgid "Override modules in this profile" msgstr "Module in diesem Profil überschreiben" #: images/options.glade:1653 msgid "Modules" msgstr "Module" #: images/options.glade:2080 msgid "Hard Disk 2:" msgstr "Festplatte 2:" #: images/options.glade:2094 msgid "Hard Disk 1:" msgstr "Festplatte 1:" #: images/options.glade:2123 msgid "Audio:" msgstr "Audio:" #: images/options.glade:2261 msgid "Tape:" msgstr "Kassette:" #: images/options.glade:2282 msgid "Media" msgstr "Medien" #: images/options.glade:2334 msgid "" "Number of D002 busdriver devices to add to the system. The maximum number of " "emulated busdrivers is currently 4." msgstr "" "Anzahl von D002 Bustreibern die emuliert werden sollen. Es können maximal 4 " "Geräte emuliert werden." #: images/options.glade:2352 msgid "Busdrivers:" msgstr "Bustreiber:" #: images/options.glade:2383 msgid "" "Enable or disable the second D004 ROM at slot F8. The standard ROM is " "available at slot FC." msgstr "" "Ein-/Ausschalten des zweiten D004 ROMs im Slot F8. Der Standard-ROM wird " "über Slot FC angesprochen." #: images/options.glade:2406 msgid "F8 ROM:" msgstr "F8 ROM:" #: images/options.glade:2437 msgid "Enable or disable the D004 Floppy Basis Device." msgstr "Ein-/Ausschalten des D004 Floppy Gerätes." #: images/options.glade:2459 msgid "D004:" msgstr "D004:" #: images/options.glade:2474 msgid "Special settings for KC 85/2..5" msgstr "Einstellungen für KC 85/2..5" #: images/options.glade:2496 msgid "KC85" msgstr "KC85" #: images/options.glade:2525 msgid "IP Address:" msgstr "IP Adresse:" #: images/options.glade:2538 msgid "Netmask:" msgstr "Netzmaske:" #: images/options.glade:2551 msgid "Gateway:" msgstr "Gateway:" #: images/options.glade:2564 msgid "DNS Server:" msgstr "DNS Server:" #: images/options.glade:2706 msgid "Network settings for WizNET module (IP-Addresses only!)" msgstr "Einstellungen für den WizNET Modul (Nur IP-Adressen!)" #: images/options.glade:2729 msgid "Network" msgstr "Netzwerk" #: images/plotter.glade:28 msgid "KCemu: Plotter" msgstr "KCemu: Plotter" #: images/plotter.glade:48 msgid "Plotter" msgstr "Plotter" #: images/plotter.glade:305 msgid "Show pen" msgstr "Stift anzeigen" #: images/plotter.glade:334 msgid "Show plot area" msgstr "Zeichenbereich" #: images/plotter.glade:347 msgid "" "Define the initial y position of the pen after clearing the plotting area. " "Measured in millimeters from the top left corner." msgstr "Nullposition der Y-Achse des Zeichenbereiches festlegen." #: images/plotter.glade:365 msgid "Y origin" msgstr "Nullpunkt Y" #: images/plotter.glade:394 msgid "Paper color" msgstr "Papierfarbe" #: images/plotter.glade:407 msgid "X origin" msgstr "Nullpunkt X" #: images/plotter.glade:420 msgid "" "Define the initial x position of the pen after clearing the plotting area. " "Measured in millimeters from the top left corner." msgstr "Nullposition der X-Achse des Zeichenbereiches festlegen." #: images/plotter.glade:438 msgid "Define the line width for plotting. Measured in millimeters." msgstr "Stiftdicke festlegen (in Millimetern)." #: images/plotter.glade:456 msgid "Line width" msgstr "Linienbreite" #: images/plotter.glade:469 msgid "Plot to PDF:" msgstr "In PDF-Datei plotten:" #: images/plotter.glade:483 msgid "Delay between screen refreshes of the drawing area in milliseconds." msgstr "" "Pause zwischen dem Neuzeichnen des Zeichenbereiches auf dem Bildschirm (in " "Millisekunden)" #: images/plotter.glade:501 msgid "Display refresh" msgstr "Refresh" #: images/plotter.glade:515 msgid "Define the color to use for plotting." msgstr "Farbe des Stiftes festlegen." #: images/plotter.glade:528 msgid "Pen color" msgstr "Stiftfarbe" #: images/plotter.glade:590 msgid "" "Clear plotting area. When rendering to a PDF file a new page is created and " "plotting continues in the same file." msgstr "" "Zeichenbereich löschen. Beim Zeichnen in eine PDF-Datei wird eine neue Seite " "erzeugt und in der gleichen Datei weiter gezeichnet." #: images/plotter.glade:605 msgid "Save the plotted picture as PNG image file." msgstr "Die Zeichnung als PNG Bild-Datei speichern." #: images/savemem.glade:38 msgid "KCemu: Save Memory Dump" msgstr "KCemu: Memory-Dump speichern" #: images/savemem.glade:58 msgid "Save Memory Dump" msgstr "Memory-Dump speichern" #: images/savemem.glade:97 images/savemem.glade:344 msgid "Automatically scroll to start address if the address is changed." msgstr "" "Automatisch zur Start-Adresse springen, wenn die Adresse verändert wird." #: images/savemem.glade:121 msgid "Automatically scroll to end address if the address is changed." msgstr "Automatisch zur End-Adresse springen, wenn die Adresse verändert wird." #: images/savemem.glade:157 msgid "End address:" msgstr "End-Adresse:" #: images/savemem.glade:170 src/ui/gtk/hedit.cc:238 src/ui/gtk/image.cc:169 msgid "Start address:" msgstr "Start-Adresse:" #: images/savemem.glade:182 images/savemem.glade:315 images/savemem.glade:330 msgid "dec" msgstr "Dez" #: images/savemem.glade:196 images/savemem.glade:285 images/savemem.glade:300 msgid "hex" msgstr "Hex" #: images/savemem.glade:228 msgid "Size of the memory dump in bytes." msgstr "Größe des Memory-Dumps in Bytes." #: images/savemem.glade:246 msgid "Length:" msgstr "Länge:" #: images/savemem.glade:378 msgid "" "End address of the memory area to save. The byte at the given address is " "included in the memory dump." msgstr "" "End-Adresse des Speicherbereiches. Das Byte an der angegebenen Adresse wird " "mit gespeichert." #: images/savemem.glade:395 msgid "Start address of the memory area to save." msgstr "Start Adresse des Speicherbereiches." #: images/screenshot.glade:6 msgid "KCemu: Screenshot" msgstr "KCemu: Screenshot" #: images/screenshot.glade:26 images/screenshot.glade:372 msgid "Screenshot" msgstr "Screenshot" #: images/screenshot.glade:143 msgid "Left" msgstr "Links" #: images/screenshot.glade:156 msgid "Top" msgstr "Oben" #: images/screenshot.glade:171 msgid "Right" msgstr "Rechts" #: images/screenshot.glade:184 msgid "Bottom" msgstr "Unten" #: images/screenshot.glade:199 msgid "File" msgstr "Datei" #: images/screenshot.glade:212 msgid "Format" msgstr "Format" #: images/screenshot.glade:385 msgid "Save" msgstr "Speichern" #: images/selector.glade:7 msgid "KCemu: Select profile..." msgstr "KCemu: Profil auswählen..." #: images/selector.glade:31 msgid "Select Profile..." msgstr "Profil auswählen..." #: images/selector.glade:102 msgid "System profiles..." msgstr "System-Profile..." #: images/selector.glade:144 msgid "User profiles..." msgstr "Benutzer-Profile..." #: images/tapeedit.glade:7 src/ui/gtk/tapeadd.cc:93 msgid "KCemu: Rename File" msgstr "KCemu: Datei umbenennen" #: images/tapeedit.glade:28 msgid "Edit Tape" msgstr "Header Ändern" #: images/tapeedit.glade:63 msgid "" "[ Text ]\n" "\n" "[ more text ... ]" msgstr "" "[ Text ]\n" "\n" "[ more text ... ]" #: images/tapeedit.glade:80 msgid "Tape name:" msgstr "Tapename:" #: images/tape.glade:11 msgid "KCemu: Tape" msgstr "KCemu: Kassetten-Archiv" #: images/tape.glade:30 msgid "Tape" msgstr "Kassette" #: images/thanks.glade:6 msgid "" "Volker Pohlers\n" " for help with the windows port, technical information and\n" " bugreports\n" "Thomas Ludwig\n" " for the great KC website at http://www.kc85emu.de/ and\n" " lots of bugreports and hints how to make KCemu better\n" "Holger Krull\n" " for providing lots of information about the LC 80\n" " computer (see http://www.lc80.de/)\n" "Kev Thacker\n" " for interesting insights concerning the floppy emulation\n" " (he's also the author of the KC driver for M.E.S.S. the\n" " Multi-Emulator Super System, see http://mess.emuverse.com/)\n" "Alexander Schön\n" " for starting the windows port, lots of tips and for providing\n" " a huge pile of files for use with the emulator or with\n" " information about the various systems\n" "Sourceforge User Boo-boo\n" " for the libz80ex emulation library which is now used to emulate\n" " the Z80 CPUs\n" "Marat Fayzullin\n" " for the Z80 emulation core used for the main processor\n" " up to KCemu version 0.4.2\n" " (I needed to tweak some bits of the emulation core; see\n" " src/z80core/README for the list of changes)\n" "Marcel de Kogel\n" " for the Z80 emulation core used for the KC floppy\n" " processor up to KCemu version 0.4.2\n" "Thomas Bretz\n" " for the OS/2 port of KCemu (see http://www.d4m.de/)" msgstr "" #: images/thanks.glade:38 msgid "KCemu: Thanks" msgstr "KCemu: Danksagung" #: images/thanks.glade:58 msgid "Thanks" msgstr "Danksagung" #: images/thanks.glade:114 msgid "" "I'd like to say thanks to many people who helped to bring KCemu to the point " "where it is now. The following list just lists some of them in no particular " "order..." msgstr "" #: images/thanks.glade:151 msgid "People" msgstr "Personen" #: images/thanks.glade:168 msgid "" "Lots of tools and libraries made it easier to write KCemu. Many thanks to " "the people behind all those projects for their work..." msgstr "" #: images/thanks.glade:198 msgid "libsndfile" msgstr "libsndfile" #: images/thanks.glade:229 msgid "Ogg & Vorbis libraries" msgstr "Ogg & Vorbis libraries" #: images/thanks.glade:274 msgid "Open Clip Art Library" msgstr "Open Clip Art Library" #: images/thanks.glade:306 msgid "LAME - LAME Ain't an MP3 Encoder" msgstr "LAME - LAME Ain't an MP3 Encoder" #: images/thanks.glade:324 msgid "FLAC - Free Lossless Audio Codec" msgstr "FLAC - Free Lossless Audio Codec" #: images/thanks.glade:342 msgid "GTK+ - The GIMP Toolkit" msgstr "GTK+ - The GIMP Toolkit" #: images/thanks.glade:401 msgid "libSDL - Simple DirectMedia Layer" msgstr "libSDL - Simple DirectMedia Layer" #: images/thanks.glade:431 msgid "Xiph.org Foundation - Theora video compression" msgstr "Xiph.org Foundation - Theora video compression" #: images/thanks.glade:461 msgid "Audio/Video codec library libavcodec" msgstr "Audio/Video codec library libavcodec" #: images/thanks.glade:491 msgid "BBC Research - Dirac Video Codec" msgstr "BBC Research - Dirac Video Codec" #: images/thanks.glade:521 msgid "Xvid project" msgstr "Xvid project" #: images/thanks.glade:534 msgid "http://www.theora.org/" msgstr "http://www.theora.org/" #: images/thanks.glade:555 msgid "http://ffmpeg.org/" msgstr "http://ffmpeg.org/" #: images/thanks.glade:575 msgid "http://www.bbc.co.uk/rd/projects/dirac/" msgstr "http://www.bbc.co.uk/rd/projects/dirac/" #: images/thanks.glade:596 msgid "http://www.xvid.org/" msgstr "http://www.xvid.org/" #: images/thanks.glade:617 msgid "http://www.gtk.org/" msgstr "http://www.gtk.org/" #: images/thanks.glade:639 msgid "http://www.libsdl.org/" msgstr "http://www.libsdl.org/" #: images/thanks.glade:660 msgid "http://flac.sourceforge.net/" msgstr "http://flac.sourceforge.net/" #: images/thanks.glade:681 msgid "http://lame.sourceforge.net/" msgstr "http://lame.sourceforge.net/" #: images/thanks.glade:755 msgid "http://openclipart.org/" msgstr "http://openclipart.org/" #: images/thanks.glade:776 msgid "http://www.vorbis.com/" msgstr "http://www.vorbis.com/" #: images/thanks.glade:797 msgid "http://www.mega-nerd.com/libsndfile/" msgstr "http://www.mega-nerd.com/libsndfile/" #: images/thanks.glade:1020 msgid "Projects & Libraries" msgstr "Projekte & Bibliotheken" #: images/vdip.glade:6 msgid "KCemu: Vinculum USB" msgstr "KCemu: Vinculum USB" #: images/vdip.glade:26 msgid "Vinculum USB" msgstr "Vinculum USB" #: images/vdip.glade:65 msgid "Slot 1:" msgstr "Schacht 1:" #: images/vdip.glade:77 msgid "Slot 2:" msgstr "Schacht 2:" #: images/video.glade:6 msgid "KCemu: Video" msgstr "KCemu: Video" #: images/video.glade:26 msgid "Video" msgstr "Video" #: images/video.glade:79 msgid "Frames per Second" msgstr "Bilder pro Sekunde" #: images/video.glade:92 msgid "Start record on reset" msgstr "Aufnahme bei Reset starten" #: images/video.glade:121 msgid "Encoder" msgstr "Encoder" #: images/video.glade:143 msgid "Quality" msgstr "Qualität" #: images/video.glade:173 msgid "Video file" msgstr "Video Datei" #: images/video.glade:239 src/ui/gtk/wav.cc:174 msgid "Record" msgstr "Aufnahme" #: images/video.glade:279 msgid "Pause" msgstr "Pause" #: images/video.glade:319 src/ui/gtk/wav.cc:164 msgid "Stop" msgstr "Stop" #: src/cmd/image.cc:103 src/kc/wav.cc:81 msgid "KCemu: Select File..." msgstr "KCemu: Datei auswählen..." #: src/cmd/image.cc:127 msgid "KCemu: Can't load file..." msgstr "KCemu: Kann die Datei nicht laden..." #: src/cmd/image.cc:129 msgid "The file you selected couldn't be loaded!" msgstr "Die ausgewählte Datei kann nicht geladen werden!" #: src/cmd/image.cc:142 msgid "KCemu: Warning..." msgstr "KCemu: Warnung..." #: src/cmd/image.cc:144 msgid "" "The file you selected contains more than one\n" "program. Only the first program will be loaded.\n" "If you want to access all the contained\n" "programs add this file to a tape-archive!" msgstr "" "Die ausgewählte Datei enthält mehr als ein\n" "Programm. Es wird nur das erste Programm geladen.\n" "Um auf alle enthaltenen Programme zugreifen zu\n" "können, muß die Datei einem Kassetten-Archiv\n" "hinzugefügt werden!" #: src/getopt/getopt.c:678 #, c-format msgid "%s: option `%s' is ambiguous\n" msgstr "" #: src/getopt/getopt.c:702 #, c-format msgid "%s: option `--%s' doesn't allow an argument\n" msgstr "" #: src/getopt/getopt.c:707 #, c-format msgid "%s: option `%c%s' doesn't allow an argument\n" msgstr "" #: src/getopt/getopt.c:724 src/getopt/getopt.c:897 #, c-format msgid "%s: option `%s' requires an argument\n" msgstr "" #: src/getopt/getopt.c:753 #, c-format msgid "%s: unrecognized option `--%s'\n" msgstr "" #: src/getopt/getopt.c:757 #, c-format msgid "%s: unrecognized option `%c%s'\n" msgstr "" #: src/getopt/getopt.c:783 #, c-format msgid "%s: illegal option -- %c\n" msgstr "" #: src/getopt/getopt.c:786 #, c-format msgid "%s: invalid option -- %c\n" msgstr "" #: src/getopt/getopt.c:816 src/getopt/getopt.c:946 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "" #: src/getopt/getopt.c:863 #, c-format msgid "%s: option `-W %s' is ambiguous\n" msgstr "" #: src/getopt/getopt.c:881 #, c-format msgid "%s: option `-W %s' doesn't allow an argument\n" msgstr "" #: src/kc/disk.cc:84 msgid "Select disk..." msgstr "Diskette auswählen..." #: src/kc/disk.cc:124 src/kc/tape.cc:216 msgid "create file?" msgstr "Datei anlegen?" #: src/kc/disk.cc:126 src/kc/tape.cc:218 #, c-format msgid "" "The file '%s' doesn't exist.\n" "Do you want to create it?" msgstr "" "Die Datei '%s' existiert nicht.\n" "Wollen Sie, daß sie angelegt wird?" #: src/kc/disk.cc:135 #, c-format msgid "disk-file `%s' attached." msgstr "Disketten-Datei `%s' aktiviert." #: src/kc/disk.cc:140 msgid "Can't attach disk-file." msgstr "Kann Disketten-Datei nicht aktivieren." #: src/kc/kc.cc:232 msgid "" "\n" "KCemu comes with ABSOLUTELY NO WARRANTY; for details run `kcemu --" "warranty'.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; run `kcemu --license' for details.\n" "\n" "usage: kcemu [-0123456789aAcestfhdlvVHFMELW]\n" "\n" " -0: select Z1013 profile\n" " -1: select Z9001 / KC 85/1 profile\n" " -2: select KC 85/2 profile\n" " -3: select KC 85/3 profile\n" " -4: select KC 85/4 profile\n" " -5: select KC 85/5 profile\n" " -6: select Poly-880 profile\n" " -7: select KC 87 profile\n" " -8: select LC 80 profile\n" " -9: select BIC/A5105 profile\n" " -a --autostart: autostart program on startup (kc85/3 - kc85/5 only)\n" " -A --address: override start address of autostart program\n" " -d --datadir: set data directory (for ROM images)\n" " -E --effects: enable display effects for scaled screen output\n" " -f --floppy: attach disk on startup\n" " -F --fullscreen: start in fullscreen mode (if supported by gui)\n" " -h --help: display help\n" " -H --home: overwrite setting for home directory\n" " -l --localedir: set locale directory\n" " -L --license: show license\n" " -M --modules: insert modules on startup (e.g. -M M011,M027)\n" " -o --debug-output: write debug output to file\n" " -p --profile: start with given profile\n" " -P --select-profile: show profile selector\n" " -s --scale: scale display (allowed values: 1, 2 and 3)\n" " -t --tape: attach tape on startup\n" " -v --version: show KCemu version and configuration\n" " -V --viewlist: view verbose list of available emulations\n" " -W --warranty: show warranty\n" msgstr "" "\n" "Für KCemu besteht KEINERLEI GARANTIE; starten Sie `kcemu --warranty'\n" "für Details. KCemu ist freie Software, die Sie unter bestimmten Bedingungen\n" "weitergeben dürfen; starten Sie `kcemu --license' für Details.\n" "\n" "Aufruf: kcemu [-0123456789aAcestfhdlvVHFMELW]\n" "\n" " -0: Starten mit Z1013 Profil\n" " -1: Starten mit Z9001 / KC 85/1 Profil\n" " -2: Starten mit KC 85/2 Profil\n" " -3: Starten mit KC 85/3 Profil\n" " -4: Starten mit KC 85/4 Profil\n" " -5: Starten mit KC 85/5 Profil\n" " -6: Starten mit Poly-880 Profil\n" " -7: Starten mit KC 87 Profil\n" " -8: Starten mit LC 80 Profil\n" " -9: Starten mit BIC/A5105 Profil\n" " -a --autostart: Automatischer Start des angegebenen Programms (nur " "kc85/3 - kc85/5)\n" " -A --address: Startadresse für das automatisch zu startende " "Programm\n" " -d --datadir: Setzen des Daten-Verzeichnisses (für ROM-Images)\n" " -E --effects: Anzeige mit Screen-Effekten bei vergrößerter " "Darstellung\n" " -f --floppy: Aktivieren eines Disketten-Images beim Start\n" " -F --fullscreen: Start im Vollbild-Modus (wenn durch GUI unterstützt)\n" " -h --help: diese Hilfe anzeigen\n" " -H --home: Überschreiben der Einstellung für das " "Homeverzeichnis\n" " -l --localedir: Setzen des Locale-Verzeichnisses für die " "Sprachanpassung\n" " -L --license: Anzeige der Lizenz\n" " -M --modules: Module beim Start aktivieren (e.g. -M M011,M027)\n" " -o --debug-output: Debug-Ausgabe in Datei umleiten\n" " -p --profile: Start mit dem angegebenen Profil\n" " -P --select-profile: Start mit Fenster zur Profil-Auswahl\n" " -s --scale: Vergrößerung der Anzeige (erlaubt sind die Werte 1, 2 " "und 3)\n" " -t --tape: Aktivieren eines Tape-Archives beim Start\n" " -v --version: Anzeige der KCemu Version und Konfiguration\n" " -V --viewlist: Ausführliche Liste der emulierten Typen\n" " -W --warranty: Anzeige des Haftungsausschlusses\n" #: src/kc/kc.cc:299 msgid "" "\n" "\t\t GNU GENERAL PUBLIC LICENSE\n" "\t\t Version 2, June 1991\n" "\n" " Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n" " 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" " Everyone is permitted to copy and distribute verbatim copies\n" " of this license document, but changing it is not allowed.\n" "\n" "\t\t\t Preamble\n" "\n" " The licenses for most software are designed to take away your\n" "freedom to share and change it. By contrast, the GNU General Public\n" "License is intended to guarantee your freedom to share and change free\n" "software--to make sure the software is free for all its users. This\n" "General Public License applies to most of the Free Software\n" "Foundation's software and to any other program whose authors commit to\n" "using it. (Some other Free Software Foundation software is covered by\n" "the GNU Library General Public License instead.) You can apply it to\n" "your programs, too.\n" "\n" " When we speak of free software, we are referring to freedom, not\n" "price. Our General Public Licenses are designed to make sure that you\n" "have the freedom to distribute copies of free software (and charge for\n" "this service if you wish), that you receive source code or can get it\n" "if you want it, that you can change the software or use pieces of it\n" "in new free programs; and that you know you can do these things.\n" "\n" " To protect your rights, we need to make restrictions that forbid\n" "anyone to deny you these rights or to ask you to surrender the rights.\n" "These restrictions translate to certain responsibilities for you if you\n" "distribute copies of the software, or if you modify it.\n" "\n" " For example, if you distribute copies of such a program, whether\n" "gratis or for a fee, you must give the recipients all the rights that\n" "you have. You must make sure that they, too, receive or can get the\n" "source code. And you must show them these terms so they know their\n" "rights.\n" "\n" " We protect your rights with two steps: (1) copyright the software, and\n" "(2) offer you this license which gives you legal permission to copy,\n" "distribute and/or modify the software.\n" "\n" " Also, for each author's protection and ours, we want to make certain\n" "that everyone understands that there is no warranty for this free\n" "software. If the software is modified by someone else and passed on, we\n" "want its recipients to know that what they have is not the original, so\n" "that any problems introduced by others will not reflect on the original\n" "authors' reputations.\n" "\n" " Finally, any free program is threatened constantly by software\n" "patents. We wish to avoid the danger that redistributors of a free\n" "program will individually obtain patent licenses, in effect making the\n" "program proprietary. To prevent this, we have made it clear that any\n" "patent must be licensed for everyone's free use or not licensed at all.\n" "\n" " The precise terms and conditions for copying, distribution and\n" "modification follow.\n" "\n" "\t\t GNU GENERAL PUBLIC LICENSE\n" " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n" "\n" " 0. This License applies to any program or other work which contains\n" "a notice placed by the copyright holder saying it may be distributed\n" "under the terms of this General Public License. The \"Program\", below,\n" "refers to any such program or work, and a \"work based on the Program\"\n" "means either the Program or any derivative work under copyright law:\n" "that is to say, a work containing the Program or a portion of it,\n" "either verbatim or with modifications and/or translated into another\n" "language. (Hereinafter, translation is included without limitation in\n" "the term \"modification\".) Each licensee is addressed as \"you\".\n" "\n" "Activities other than copying, distribution and modification are not\n" "covered by this License; they are outside its scope. The act of\n" "running the Program is not restricted, and the output from the Program\n" "is covered only if its contents constitute a work based on the\n" "Program (independent of having been made by running the Program).\n" "Whether that is true depends on what the Program does.\n" "\n" " 1. You may copy and distribute verbatim copies of the Program's\n" "source code as you receive it, in any medium, provided that you\n" "conspicuously and appropriately publish on each copy an appropriate\n" "copyright notice and disclaimer of warranty; keep intact all the\n" "notices that refer to this License and to the absence of any warranty;\n" "and give any other recipients of the Program a copy of this License\n" "along with the Program.\n" "\n" "You may charge a fee for the physical act of transferring a copy, and\n" "you may at your option offer warranty protection in exchange for a fee.\n" "\n" " 2. You may modify your copy or copies of the Program or any portion\n" "of it, thus forming a work based on the Program, and copy and\n" "distribute such modifications or work under the terms of Section 1\n" "above, provided that you also meet all of these conditions:\n" "\n" " a) You must cause the modified files to carry prominent notices\n" " stating that you changed the files and the date of any change.\n" "\n" " b) You must cause any work that you distribute or publish, that in\n" " whole or in part contains or is derived from the Program or any\n" " part thereof, to be licensed as a whole at no charge to all third\n" " parties under the terms of this License.\n" "\n" " c) If the modified program normally reads commands interactively\n" " when run, you must cause it, when started running for such\n" " interactive use in the most ordinary way, to print or display an\n" " announcement including an appropriate copyright notice and a\n" " notice that there is no warranty (or else, saying that you provide\n" " a warranty) and that users may redistribute the program under\n" " these conditions, and telling the user how to view a copy of this\n" " License. (Exception: if the Program itself is interactive but\n" " does not normally print such an announcement, your work based on\n" " the Program is not required to print an announcement.)\n" "\n" "These requirements apply to the modified work as a whole. If\n" "identifiable sections of that work are not derived from the Program,\n" "and can be reasonably considered independent and separate works in\n" "themselves, then this License, and its terms, do not apply to those\n" "sections when you distribute them as separate works. But when you\n" "distribute the same sections as part of a whole which is a work based\n" "on the Program, the distribution of the whole must be on the terms of\n" "this License, whose permissions for other licensees extend to the\n" "entire whole, and thus to each and every part regardless of who wrote it.\n" "\n" "Thus, it is not the intent of this section to claim rights or contest\n" "your rights to work written entirely by you; rather, the intent is to\n" "exercise the right to control the distribution of derivative or\n" "collective works based on the Program.\n" "\n" "In addition, mere aggregation of another work not based on the Program\n" "with the Program (or with a work based on the Program) on a volume of\n" "a storage or distribution medium does not bring the other work under\n" "the scope of this License.\n" "\n" " 3. You may copy and distribute the Program (or a work based on it,\n" "under Section 2) in object code or executable form under the terms of\n" "Sections 1 and 2 above provided that you also do one of the following:\n" "\n" " a) Accompany it with the complete corresponding machine-readable\n" " source code, which must be distributed under the terms of Sections\n" " 1 and 2 above on a medium customarily used for software interchange; " "or,\n" "\n" " b) Accompany it with a written offer, valid for at least three\n" " years, to give any third party, for a charge no more than your\n" " cost of physically performing source distribution, a complete\n" " machine-readable copy of the corresponding source code, to be\n" " distributed under the terms of Sections 1 and 2 above on a medium\n" " customarily used for software interchange; or,\n" "\n" " c) Accompany it with the information you received as to the offer\n" " to distribute corresponding source code. (This alternative is\n" " allowed only for noncommercial distribution and only if you\n" " received the program in object code or executable form with such\n" " an offer, in accord with Subsection b above.)\n" "\n" "The source code for a work means the preferred form of the work for\n" "making modifications to it. For an executable work, complete source\n" "code means all the source code for all modules it contains, plus any\n" "associated interface definition files, plus the scripts used to\n" "control compilation and installation of the executable. However, as a\n" "special exception, the source code distributed need not include\n" "anything that is normally distributed (in either source or binary\n" "form) with the major components (compiler, kernel, and so on) of the\n" "operating system on which the executable runs, unless that component\n" "itself accompanies the executable.\n" "\n" "If distribution of executable or object code is made by offering\n" "access to copy from a designated place, then offering equivalent\n" "access to copy the source code from the same place counts as\n" "distribution of the source code, even though third parties are not\n" "compelled to copy the source along with the object code.\n" "\n" " 4. You may not copy, modify, sublicense, or distribute the Program\n" "except as expressly provided under this License. Any attempt\n" "otherwise to copy, modify, sublicense or distribute the Program is\n" "void, and will automatically terminate your rights under this License.\n" "However, parties who have received copies, or rights, from you under\n" "this License will not have their licenses terminated so long as such\n" "parties remain in full compliance.\n" "\n" " 5. You are not required to accept this License, since you have not\n" "signed it. However, nothing else grants you permission to modify or\n" "distribute the Program or its derivative works. These actions are\n" "prohibited by law if you do not accept this License. Therefore, by\n" "modifying or distributing the Program (or any work based on the\n" "Program), you indicate your acceptance of this License to do so, and\n" "all its terms and conditions for copying, distributing or modifying\n" "the Program or works based on it.\n" "\n" " 6. Each time you redistribute the Program (or any work based on the\n" "Program), the recipient automatically receives a license from the\n" "original licensor to copy, distribute or modify the Program subject to\n" "these terms and conditions. You may not impose any further\n" "restrictions on the recipients' exercise of the rights granted herein.\n" "You are not responsible for enforcing compliance by third parties to\n" "this License.\n" "\n" " 7. If, as a consequence of a court judgment or allegation of patent\n" "infringement or for any other reason (not limited to patent issues),\n" "conditions are imposed on you (whether by court order, agreement or\n" "otherwise) that contradict the conditions of this License, they do not\n" "excuse you from the conditions of this License. If you cannot\n" "distribute so as to satisfy simultaneously your obligations under this\n" "License and any other pertinent obligations, then as a consequence you\n" "may not distribute the Program at all. For example, if a patent\n" "license would not permit royalty-free redistribution of the Program by\n" "all those who receive copies directly or indirectly through you, then\n" "the only way you could satisfy both it and this License would be to\n" "refrain entirely from distribution of the Program.\n" "\n" "If any portion of this section is held invalid or unenforceable under\n" "any particular circumstance, the balance of the section is intended to\n" "apply and the section as a whole is intended to apply in other\n" "circumstances.\n" "\n" "It is not the purpose of this section to induce you to infringe any\n" "patents or other property right claims or to contest validity of any\n" "such claims; this section has the sole purpose of protecting the\n" "integrity of the free software distribution system, which is\n" "implemented by public license practices. Many people have made\n" "generous contributions to the wide range of software distributed\n" "through that system in reliance on consistent application of that\n" "system; it is up to the author/donor to decide if he or she is willing\n" "to distribute software through any other system and a licensee cannot\n" "impose that choice.\n" "\n" "This section is intended to make thoroughly clear what is believed to\n" "be a consequence of the rest of this License.\n" "\n" " 8. If the distribution and/or use of the Program is restricted in\n" "certain countries either by patents or by copyrighted interfaces, the\n" "original copyright holder who places the Program under this License\n" "may add an explicit geographical distribution limitation excluding\n" "those countries, so that distribution is permitted only in or among\n" "countries not thus excluded. In such case, this License incorporates\n" "the limitation as if written in the body of this License.\n" "\n" " 9. The Free Software Foundation may publish revised and/or new versions\n" "of the General Public License from time to time. Such new versions will\n" "be similar in spirit to the present version, but may differ in detail to\n" "address new problems or concerns.\n" "\n" "Each version is given a distinguishing version number. If the Program\n" "specifies a version number of this License which applies to it and \"any\n" "later version\", you have the option of following the terms and conditions\n" "either of that version or of any later version published by the Free\n" "Software Foundation. If the Program does not specify a version number of\n" "this License, you may choose any version ever published by the Free " "Software\n" "Foundation.\n" "\n" " 10. If you wish to incorporate parts of the Program into other free\n" "programs whose distribution conditions are different, write to the author\n" "to ask for permission. For software which is copyrighted by the Free\n" "Software Foundation, write to the Free Software Foundation; we sometimes\n" "make exceptions for this. Our decision will be guided by the two goals\n" "of preserving the free status of all derivatives of our free software and\n" "of promoting the sharing and reuse of software generally.\n" "\n" msgstr "" "\n" "Deutsche Übersetzung der GNU General Public License\n" "\n" " \n" " Erstellt im Auftrag der S.u.S.E. GmbH [suse@suse.de]\n" " von Katja Lachmann Übersetzungen [na194@fim.uni-erlangen.de],\n" " überarbeitet von Peter Gerwinski [peter.gerwinski@uni-essen.de] (31.\n" " Oktober 1996)\n" " \n" " Diese Übersetzung wird mit der Absicht angeboten, das Verständnis der\n" " GNU General Public License (GNU-GPL) zu erleichtern. Es handelt sich\n" " jedoch nicht um eine offizielle oder im rechtlichen Sinne anerkannte\n" " Übersetzung.\n" " \n" " Die Free Software Foundation (FSF) ist nicht der Herausgeber dieser\n" " Übersetzung, und sie hat diese Übersetzung auch nicht als\n" " rechtskräftigen Ersatz für die Original-GNU-GPL anerkannt. Da die\n" " Übersetzung nicht sorgfältig von Anwälten überprüft wurde, können die\n" " Übersetzer nicht garantieren, daß die Übersetzung die rechtlichen\n" " Aussagen der GNU-GPL exakt wiedergibt. Wenn Sie sichergehen wollen,\n" " daß von Ihnen geplante Aktivitäten im Sinne der GNU-GPL gestattet\n" " sind, halten Sie sich bitte an die englischsprachige Originalversion.\n" " \n" " Die Free Software Foundation möchte Sie darum bitten, diese\n" " Übersetzung nicht als offizielle Lizenzbedingungen für von Ihnen\n" " geschriebene Programme zu verwenden. Bitte benutzen Sie hierfür\n" " stattdessen die von der Free Software Foundation herausgegebene\n" " englischsprachige Originalversion.\n" " \n" " This is a translation of the GNU General Public License into German.\n" " This translation is distributed in the hope that it will facilitate\n" " understanding, but it is not an official or legally approved\n" " translation.\n" " \n" " The Free Software Foundation is not the publisher of this translation\n" " and has not approved it as a legal substitute for the authentic GNU\n" " General Public License. The translation has not been reviewed\n" " carefully by lawyers, and therefore the translator cannot be sure that\n" " it exactly represents the legal meaning of the GNU General Public\n" " License. If you wish to be sure whether your planned activities are\n" " permitted by the GNU General Public License, please refer to the\n" " authentic English version.\n" " \n" " The Free Software Foundation strongly urges you not to use this\n" " translation as the official distribution terms for your programs;\n" " instead, please use the authentic English version published by the\n" " Free Software Foundation.\n" " _________________________________________________________________\n" " \n" " GNU General Public License\n" " \n" " Deutsche Übersetzung der Version 2, Juni 1991\n" " \n" " Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n" " 675 Mass Ave, Cambridge, MA 02139, USA\n" " \n" " Jeder hat das Recht, diese Lizenzurkunde zu vervielfältigen und\n" " unveränderte Kopien zu verbreiten; Änderungen sind jedoch nicht\n" " gestattet.\n" " \n" " Diese Übersetzung ist kein rechtskräftiger Ersatz für die\n" " englischsprachige Originalversion!\n" " \n" "Vorwort\n" "\n" " Die meisten Softwarelizenzen sind daraufhin entworfen worden, Ihnen\n" " die Freiheit zu nehmen, die Software weiterzugeben und zu verändern.\n" " Im Gegensatz dazu soll Ihnen die GNU General Public License, die\n" " allgemeine öffentliche GNU-Lizenz, ebendiese Freiheit garantieren. Sie\n" " soll sicherstellen, daß die Software für alle Benutzer frei ist. Diese\n" " Lizenz gilt für den Großteil der von der Free Software Foundation\n" " herausgegebenen Software und für alle anderen Programme, deren Autoren\n" " ihr Werk dieser Lizenz unterstellt haben. Auch Sie können diese\n" " Möglichkeit der Lizenzierung für Ihre Programme anwenden. (Ein anderer\n" " Teil der Software der Free Software Foundation unterliegt stattdessen\n" " der GNU Library General Public License, der allgemeinen öffentlichen\n" " GNU-Lizenz für Bibliotheken.\n" " )\n" " \n" " Die Bezeichnung \"freie\" Software bezieht sich auf Freiheit, nicht auf\n" " den Preis. Unsere Lizenzen sollen Ihnen die Freiheit garantieren,\n" " Kopien freier Software zu verbreiten (und etwas für diesen Service zu\n" " berechnen, wenn Sie möchten), die Möglichkeit, die Software im\n" " Quelltext zu erhalten oder den Quelltext auf Wunsch zu bekommen. Die\n" " Lizenzen sollen garantieren, daß Sie die Software ändern oder Teile\n" " davon in neuen freien Programmen verwenden dürfen - und daß Sie\n" " wissen, daß Sie dies alles tun dürfen.\n" " \n" " Um Ihre Rechte zu schützen, müssen wir Einschränkungen machen, die es\n" " jedem verbieten, Ihnen diese Rechte zu verweigern oder Sie\n" " aufzufordern, auf diese Rechte zu verzichten. Aus diesen\n" " Einschränkungen folgen bestimmte Verantwortlichkeiten für Sie, wenn\n" " Sie Kopien der Software verbreiten oder sie verändern.\n" " \n" " Beispielsweise müssen Sie den Empfängern alle Rechte gewähren, die Sie\n" " selbst haben, wenn Sie - kostenlos oder gegen Bezahlung - Kopien eines\n" " solchen Programms verbreiten. Sie müssen sicherstellen, daß auch sie\n" " den Quelltext erhalten bzw. erhalten können. Und Sie müssen ihnen\n" " diese Bedingungen zeigen, damit sie ihre Rechte kennen.\n" " \n" " Wir schützen Ihre Rechte in zwei Schritten: (1) Wir stellen die\n" " Software unter ein Urheberrecht (Copyright), und (2) wir bieten Ihnen\n" " diese Lizenz an, die Ihnen das Recht gibt, die Software zu\n" " vervielfältigen, zu verbreiten und/oder zu verändern.\n" " \n" " Um die Autoren und uns zu schützen, wollen wir darüberhinaus\n" " sicherstellen, daß jeder erfährt, daß für diese freie Software\n" " keinerlei Garantie besteht. Wenn die Software von jemand anderem\n" " modifiziert und weitergegeben wird, möchten wir, daß die Empfänger\n" " wissen, daß sie nicht das Original erhalten haben, damit von anderen\n" " verursachte Probleme nicht den Ruf des ursprünglichen Autors\n" " schädigen.\n" " \n" " Schließlich und endlich ist jedes freie Programm permanent durch\n" " Software-Patente bedroht. Wir möchten die Gefahr ausschließen, daß\n" " Distributoren eines freien Programms individuell Patente lizensieren -\n" " mit dem Ergebnis, daß das Programm proprietär würde. Um dies zu\n" " verhindern, haben wir klargestellt, daß jedes Patent entweder für\n" " freie Benutzung durch jedermann lizenziert werden muß oder überhaupt\n" " nicht lizenziert werden darf.\n" " \n" " Es folgen die genauen Bedingungen für die Vervielfältigung,\n" " Verbreitung und Bearbeitung:\n" " \n" "Bedingungen für die Vervielfältigung, Verbreitung und Bearbeitung\n" "\n" " Paragraph 0. Diese Lizenz gilt für jedes Programm und jedes andere\n" " Werk, in dem ein entsprechender Vermerk des Copyright-Inhabers darauf\n" " hinweist, daß das Werk unter den Bestimmungen dieser General Public\n" " License verbreitet werden darf. Im folgenden wird jedes derartige\n" " Programm oder Werk als \"das Programm\" bezeichnet; die Formulierung\n" " \"auf dem Programm basierendes Werk\" bezeichnet das Programm sowie\n" " jegliche Bearbeitung des Programms im urheberrechtlichen Sinne, also\n" " ein Werk, welches das Programm, auch auszugsweise, sei es unverändert\n" " oder verändert und/oder in eine andere Sprache übersetzt, enthält. (Im\n" " folgenden wird die Übersetzung ohne Einschränkung als \"Bearbeitung\"\n" " eingestuft.) Jeder Lizenznehmer wird im folgenden als \"Sie\"\n" " angesprochen.\n" " \n" " Andere Handlungen als Vervielfältigung, Verbreitung und Bearbeitung\n" " werden von dieser Lizenz nicht berührt; sie fallen nicht in ihren\n" " Anwendungsbereich. Der Vorgang der Ausführung des Programms wird nicht\n" " eingeschränkt, und die Ausgaben des Programms unterliegen dieser\n" " Lizenz nur, wenn der Inhalt ein auf dem Programm basierendes Werk\n" " darstellt (unabhängig davon, daß die Ausgabe durch die Ausführung des\n" " Programmes erfolgte). Ob dies zutrifft, hängt von den Funktionen des\n" " Programms ab.\n" " \n" " Paragraph 1. Sie dürfen auf beliebigen Medien unveränderte Kopien des\n" " Quelltextes des Programms, wie sie ihn erhalten haben, anfertigen und\n" " verbreiten. Voraussetzung hierfür ist, daß Sie mit jeder Kopie einen\n" " entsprechenden Copyright-Vermerk sowie einen Haftungsausschluß\n" " veröffentlichen, alle Vermerke, die sich auf diese Lizenz und das\n" " Fehlen einer Garantie beziehen, unverändert lassen und desweiteren\n" " allen anderen Empfängern des Programms zusammen mit dem Programm eine\n" " Kopie dieser Lizenz zukommen lassen.\n" " \n" " Sie dürfen für den eigentlichen Kopiervorgang eine Gebühr verlangen.\n" " Wenn Sie es wünschen, dürfen Sie auch gegen Entgelt eine Garantie für\n" " das Programm anbieten.\n" " \n" " Paragraph 2. Sie dürfen Ihre Kopie(n) des Programms oder eines Teils\n" " davon verändern, wodurch ein auf dem Programm basierendes Werk\n" " entsteht; Sie dürfen derartige Bearbeitungen unter den Bestimmungen\n" " von Paragraph 1 vervielfältigen und verbreiten, vorausgesetzt, daß\n" " zusätzlich alle folgenden Bedingungen erfüllt werden:\n" " \n" " (a)\n" " Sie müssen die veränderten Dateien mit einem auffälligen\n" " Vermerk versehen, der auf die von Ihnen vorgenommene\n" " Modifizierung und das Datum jeder Änderung hinweist.\n" " \n" " (b)\n" " Sie müssen dafür sorgen, daß jede von Ihnen verbreitete oder\n" " veröffentlichte Arbeit, die ganz oder teilweise von dem\n" " Programm oder Teilen davon abgeleitet ist, Dritten gegenüber\n" " als Ganzes unter den Bedingungen dieser Lizenz ohne\n" " Lizenzgebühren zur Verfügung gestellt wird.\n" " \n" " (c)\n" " Wenn das veränderte Programm normalerweise bei der Ausführung\n" " interaktiv Kommandos einliest, müssen Sie dafür sorgen, daß es,\n" " wenn es auf dem üblichsten Wege für solche interaktive Nutzung\n" " gestartet wird, eine Meldung ausgibt oder ausdruckt, die einen\n" " geeigneten Copyright-Vermerk enthält sowie einen Hinweis, daß\n" " es keine Gewährleistung gibt (oder anderenfalls, daß Sie\n" " Garantie leisten), und daß die Benutzer das Programm unter\n" " diesen Bedingungen weiter verbreiten dürfen. Auch muß der\n" " Benutzer darauf hingewiesen werden, wie er eine Kopie dieser\n" " Lizenz ansehen kann. (Ausnahme: Wenn das Programm selbst\n" " interaktiv arbeitet, aber normalerweise keine derartige Meldung\n" " ausgibt, muß Ihr auf dem Programm basierendes Werk auch keine\n" " solche Meldung ausgeben).\n" " \n" " Diese Anforderungen betreffen das veränderte Werk als Ganzes. Wenn\n" " identifizierbare Abschnitte des Werkes nicht von dem Programm\n" " abgeleitet sind und vernünftigerweise selbst als unabhängige und\n" " eigenständige Werke betrachtet werden können, dann erstrecken sich\n" " diese Lizenz und ihre Bedingungen nicht auf diese Abschnitte, wenn sie\n" " als eigenständige Werke verbreitet werden. Wenn Sie jedoch dieselben\n" " Abschnitte als Teil eines Ganzen verbreiten, das ein auf dem Programm\n" " basierendes Werk darstellt, dann muß die Verbreitung des Ganzen nach\n" " den Bedingungen dieser Lizenz erfolgen, deren Bedingungen für weitere\n" " Lizenznehmer somit auf die Gesamtheit ausgedehnt werden - und damit\n" " auf jeden einzelnen Teil, unabhängig vom jeweiligen Autor.\n" " \n" " Somit ist es nicht die Absicht dieses Abschnittes, Rechte für Werke in\n" " Anspruch zu nehmen oder zu beschneiden, die komplett von Ihnen\n" " geschrieben wurden; vielmehr ist es die Absicht, die Rechte zur\n" " Kontrolle der Verbreitung von Werken, die auf dem Programm basieren\n" " oder unter seiner auszugsweisen Verwendung zusammengestellt worden\n" " sind, auszuüben.\n" " \n" " Ferner bringt ein einfaches Zusammenstellen eines anderen Werkes, das\n" " nicht auf dem Programm basiert, zusammen mit dem Programm oder einem\n" " auf dem Programm basierenden Werk auf ein- und demselben Speicher-\n" " oder Vertriebsmedium das andere Werk nicht in den Anwendungsbereich\n" " dieser Lizenz.\n" " \n" " Paragraph 3. Sie dürfen das Programm (oder ein darauf basierendes Werk\n" " gemäß Paragraph 2) als Objectcode oder in ausführbarer Form unter den\n" " Bedingungen von Paragraph 1 und 2 vervielfältigen und verbreiten -\n" " vorausgesetzt, daß Sie außerdem eine der folgenden Leistungen\n" " erbringen:\n" " \n" " (a)\n" " Liefern Sie das Programm zusammen mit dem vollständigen\n" " zugehörigen maschinenlesbaren Quelltext auf einem für den\n" " Datenaustausch üblichen Medium aus, wobei die Verteilung unter\n" " den Bedingungen der Paragraphen 1 und 2 erfolgen muß. Oder:\n" " \n" " (b)\n" " Liefern Sie das Programm zusammen mit einem mindestens drei\n" " Jahre lang gültigen schriftlichen Angebot aus, jedem Dritten\n" " eine vollständige maschinenlesbare Kopie des Quelltextes zur\n" " Verfügung zu stellen - zu nicht höheren Kosten als denen, die\n" " durch den physikalischen Kopiervorgang anfallen -, wobei der\n" " Quelltext unter den Bedingungen der Paragraphen 1 und 2 auf\n" " einem für den Datenaustausch üblichen Medium weitergegeben\n" " wird. Oder:\n" " \n" " (c)\n" " Liefern Sie das Programm zusammen mit dem schriftlichen Angebot\n" " der Zurverfügungstellung des Quelltextes aus, das Sie selbst\n" " erhalten haben. (Diese Alternative ist nur für\n" " nicht-kommerzielle Verbreitung zulässig und nur, wenn Sie das\n" " Programm als Objectcode oder in ausführbarer Form mit einem\n" " entsprechenden Angebot gemäß Absatz b erhalten haben.)\n" " \n" " Unter dem Quelltext eines Werkes wird diejenige Form des Werkes\n" " verstanden, die für Bearbeitungen vorzugsweise verwendet wird. Für ein\n" " ausführbares Programm bedeutet \"der komplette Quelltext\": Der\n" " Quelltext aller im Programm enthaltenen Module einschließlich aller\n" " zugehörigen Modulschnittstellen-Definitionsdateien sowie der zur\n" " Compilation und Installation verwendeten Skripte. Als besondere\n" " Ausnahme jedoch braucht der verteilte Quelltext nichts von dem zu\n" " enthalten, was üblicherweise (entweder als Quelltext oder in binärer\n" " Form) zusammen mit den Hauptkomponenten des Betriebssystems (Kernel,\n" " Compiler usw.) geliefert wird, unter dem das Programm läuft - es sei\n" " denn, diese Komponente selbst gehört zum ausführbaren Programm.\n" " \n" " Wenn die Verbreitung eines ausführbaren Programms oder des Objectcodes\n" " dadurch erfolgt, daß der Kopierzugriff auf eine dafür vorgesehene\n" " Stelle gewährt wird, so gilt die Gewährung eines gleichwertigen\n" " Zugriffs auf den Quelltext als Verbreitung des Quelltextes, auch wenn\n" " Dritte nicht dazu gezwungen sind, den Quelltext zusammen mit dem\n" " Objectcode zu kopieren.\n" " \n" " Paragraph 4. Sie dürfen das Programm nicht vervielfältigen, verändern,\n" " weiter lizenzieren oder verbreiten, sofern es nicht durch diese Lizenz\n" " ausdrücklich gestattet ist. Jeder anderweitige Versuch der\n" " Vervielfältigung, Modifizierung, Weiterlizenzierung und Verbreitung\n" " ist nichtig und beendet automatisch Ihre Rechte unter dieser Lizenz.\n" " Jedoch werden die Lizenzen Dritter, die von Ihnen Kopien oder Rechte\n" " unter dieser Lizenz erhalten haben, nicht beendet, solange diese die\n" " Lizenz voll anerkennen und befolgen.\n" " \n" " Paragraph 5. Sie sind nicht verpflichtet, diese Lizenz anzunehmen, da\n" " Sie sie nicht unterzeichnet haben. Jedoch gibt Ihnen nichts anderes\n" " die Erlaubnis, das Programm oder von ihm abgeleitete Werke zu\n" " verändern oder zu verbreiten. Diese Handlungen sind gesetzlich\n" " verboten, wenn Sie diese Lizenz nicht anerkennen. Indem Sie das\n" " Programm (oder ein darauf basierendes Werk) verändern oder verbreiten,\n" " erklären Sie Ihr Einverständnis mit dieser Lizenz und mit allen ihren\n" " Bedingungen bezüglich der Vervielfältigung, Verbreitung und\n" " Veränderung des Programms oder eines darauf basierenden Werkes.\n" " \n" " Paragraph 6. Jedesmal, wenn Sie das Programm (oder ein auf dem\n" " Programm basierendes Werk) weitergeben, erhält der Empfänger\n" " automatisch vom ursprünglichen Lizenzgeber die Lizenz, das Programm\n" " entsprechend den hier festgelegten Bestimmungen zu vervielfältigen, zu\n" " verbreiten und zu verändern. Sie dürfen keine weiteren Einschränkungen\n" " der Durchsetzung der hierin zugestandenen Rechte des Empfängers\n" " vornehmen. Sie sind nicht dafür verantwortlich, die Einhaltung dieser\n" " Lizenz durch Dritte durchzusetzen.\n" " \n" " Paragraph 7. Sollten Ihnen infolge eines Gerichtsurteils, des Vorwurfs\n" " einer Patentverletzung oder aus einem anderen Grunde (nicht auf\n" " Patentfragen begrenzt) Bedingungen (durch Gerichtsbeschluß, Vergleich\n" " oder anderweitig) auferlegt werden, die den Bedingungen dieser Lizenz\n" " widersprechen, so befreien Sie diese Umstände nicht von den\n" " Bestimmungen dieser Lizenz. Wenn es Ihnen nicht möglich ist, das\n" " Programm unter gleichzeitiger Beachtung der Bedingungen in dieser\n" " Lizenz und Ihrer anderweitigen Verpflichtungen zu verbreiten, dann\n" " dürfen Sie als Folge das Programm überhaupt nicht verbreiten. Wenn zum\n" " Beispiel ein Patent nicht die gebührenfreie Weiterverbreitung des\n" " Programms durch diejenigen erlaubt, die das Programm direkt oder\n" " indirekt von Ihnen erhalten haben, dann besteht der einzige Weg,\n" " sowohl das Patentrecht als auch diese Lizenz zu befolgen, darin, ganz\n" " auf die Verbreitung des Programms zu verzichten.\n" " \n" " Sollte sich ein Teil dieses Paragraphen als ungültig oder unter\n" " bestimmten Umständen nicht durchsetzbar erweisen, so soll dieser\n" " Paragraph seinem Sinne nach angewandt werden; im übrigen soll dieser\n" " Paragraph als Ganzes gelten.\n" " \n" " Zweck dieses Paragraphen ist nicht, Sie dazu zu bringen, irgendwelche\n" " Patente oder andere Eigentumsansprüche zu verletzen oder die\n" " Gültigkeit solcher Ansprüche zu bestreiten; dieser Paragraph hat\n" " einzig den Zweck, die Integrität des Verbreitungssystems der freien\n" " Software zu schützen, das durch die Praxis öffentlicher Lizenzen\n" " verwirklicht wird. Viele Leute haben großzügige Beiträge zu dem großen\n" " Angebot der mit diesem System verbreiteten Software im Vertrauen auf\n" " die konsistente Anwendung dieses Systems geleistet; es liegt am\n" " Autor/Geber, zu entscheiden, ob er die Software mittels irgendeines\n" " anderen Systems verbreiten will; ein Lizenznehmer hat auf diese\n" " Entscheidung keinen Einfluß.\n" " \n" " Dieser Paragraph ist dazu gedacht, deutlich klarzustellen, was als\n" " Konsequenz aus dem Rest dieser Lizenz betrachtet wird.\n" " \n" " Paragraph 8. Wenn die Verbreitung und/oder die Benutzung des Programms\n" " in bestimmten Staaten entweder durch Patente oder durch\n" " urheberrechtlich geschützte Schnittstellen eingeschränkt ist, kann der\n" " Urheberrechtsinhaber, der das Programm unter diese Lizenz gestellt\n" " hat, eine explizite geographische Begrenzung der Verbreitung angeben,\n" " in der diese Staaten ausgeschlossen werden, so daß die Verbreitung nur\n" " innerhalb und zwischen den Staaten erlaubt ist, die nicht\n" " ausgeschlossen sind. In einem solchen Fall beinhaltet diese Lizenz die\n" " Beschränkung, als wäre sie in diesem Text niedergeschrieben.\n" " \n" " Paragraph 9. Die Free Software Foundation kann von Zeit zu Zeit\n" " überarbeitete und/oder neue Versionen der General Public License\n" " veröffentlichen. Solche neuen Versionen werden vom Grundprinzip her\n" " der gegenwärtigen entsprechen, können aber im Detail abweichen, um\n" " neuen Problemen und Anforderungen gerecht zu werden.\n" " \n" " Jede Version dieser Lizenz hat eine eindeutige Versionsnummer. Wenn in\n" " einem Programm angegeben wird, daß es dieser Lizenz in einer\n" " bestimmten Versionsnummer oder \"jeder späteren Version\" (\"any later\n" " version\") unterliegt, so haben Sie die Wahl, entweder den Bestimmungen\n" " der genannten Version zu folgen oder denen jeder beliebigen späteren\n" " Version, die von der Free Software Foundation veröffentlicht wurde.\n" " Wenn das Programm keine Versionsnummer angibt, können Sie eine\n" " beliebige Version wählen, die je von der Free Software Foundation\n" " veröffentlicht wurde.\n" " \n" " Paragraph 10. Wenn Sie den Wunsch haben, Teile des Programms in\n" " anderen freien Programmen zu verwenden, deren Bedingungen für die\n" " Verbreitung anders sind, schreiben Sie an den Autor, um ihn um die\n" " Erlaubnis zu bitten. Für Software, die unter dem Copyright der Free\n" " Software Foundation steht, schreiben Sie an die Free Software\n" " Foundation; wir machen zu diesem Zweck gelegentlich Ausnahmen. Unsere\n" " Entscheidung wird von den beiden Zielen geleitet werden, zum einen den\n" " freien Status aller von unserer freien Software abgeleiteten Werke zu\n" " erhalten und zum anderen das gemeinschaftliche Nutzen und\n" " Wiederverwenden von Software im allgemeinen zu fördern.\n" " \n" #: src/kc/kc.cc:561 msgid "" "\n" "NO WARRANTY\n" "\n" " 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n" "FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\n" "OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\n" "PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER " "EXPRESSED\n" "OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n" "MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\n" "TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\n" "PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n" "REPAIR OR CORRECTION.\n" "\n" " 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n" "WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\n" "REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n" "INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n" "OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n" "TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n" "YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n" "PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n" "POSSIBILITY OF SUCH DAMAGES.\n" "\n" msgstr "" "\n" "[ Diese Übersetzung wird mit der Absicht angeboten, das Verständnis der ]\n" "[ GNU General Public License (GNU-GPL) zu erleichtern. Es handelt sich ]\n" "[ jedoch nicht um eine offizielle oder im rechtlichen Sinne anerkannte ]\n" "[ Übersetzung. ]\n" "[ ]\n" "[ Erstellt im Auftrag der S.u.S.E. GmbH [suse@suse.de] ]\n" "[ von Katja Lachmann Übersetzungen [na194@fim.uni-erlangen.de], ]\n" "[ überarbeitet von Peter Gerwinski [peter.gerwinski@uni-essen.de] ]\n" "[ (31. Oktober 1996) ]\n" "\n" "Keine Gewährleistung\n" " \n" "Paragraph 11. Da das Programm ohne jegliche Kosten lizenziert wird,\n" "besteht keinerlei Gewährleistung für das Programm, soweit dies\n" "gesetzlich zulässig ist. Sofern nicht anderweitig schriftlich\n" "bestätigt, stellen die Copyright-Inhaber und/oder Dritte das Programm\n" "so zur Verfügung, \"wie es ist\", ohne irgendeine Gewährleistung, weder\n" "ausdrücklich noch implizit, einschließlich - aber nicht begrenzt auf -\n" "Marktreife oder Verwendbarkeit für einen bestimmten Zweck. Das volle\n" "Risiko bezüglich Qualität und Leistungsfähigkeit des Programms liegt\n" "bei Ihnen. Sollte sich das Programm als fehlerhaft herausstellen,\n" "liegen die Kosten für notwendigen Service, Reparatur oder Korrektur\n" "bei Ihnen.\n" "\n" "Paragraph 12. In keinem Fall, außer wenn durch geltendes Recht\n" "gefordert oder schriftlich zugesichert, ist irgendein\n" "Copyright-Inhaber oder irgendein Dritter, der das Programm wie oben\n" "erlaubt modifiziert oder verbreitet hat, Ihnen gegenüber für\n" "irgendwelche Schäden haftbar, einschließlich jeglicher allgemeiner\n" "oder spezieller Schäden, Schäden durch Seiteneffekte (Nebenwirkungen)\n" "oder Folgeschäden, die aus der Benutzung des Programms oder der\n" "Unbenutzbarkeit des Programms folgen (einschließlich - aber nicht\n" "beschränkt auf - Datenverluste, fehlerhafte Verarbeitung von Daten,\n" "Verluste, die von Ihnen oder anderen getragen werden müssen, oder dem\n" "Unvermögen des Programms, mit irgendeinem anderen Programm\n" "zusammenzuarbeiten), selbst wenn ein Copyright-Inhaber oder Dritter\n" "über die Möglichkeit solcher Schäden unterrichtet worden war.\n" "\n" #: src/kc/kc.cc:588 msgid "" "\n" " END OF TERMS AND CONDITIONS\n" "\n" "\n" "\t How to Apply These Terms to Your New Programs\n" "\n" " If you develop a new program, and you want it to be of the greatest\n" "possible use to the public, the best way to achieve this is to make it\n" "free software which everyone can redistribute and change under these terms.\n" "\n" " To do so, attach the following notices to the program. It is safest\n" "to attach them to the start of each source file to most effectively\n" "convey the exclusion of warranty; and each file should have at least\n" "the \"copyright\" line and a pointer to where the full notice is found.\n" "\n" " \n" " Copyright (C) 19yy \n" "\n" " This program is free software; you can redistribute it and/or modify\n" " it under the terms of the GNU General Public License as published by\n" " the Free Software Foundation; either version 2 of the License, or\n" " (at your option) any later version.\n" "\n" " This program is distributed in the hope that it will be useful,\n" " but WITHOUT ANY WARRANTY; without even the implied warranty of\n" " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" " GNU General Public License for more details.\n" "\n" " You should have received a copy of the GNU General Public License\n" " along with this program; if not, write to the Free Software\n" " Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n" "\n" "Also add information on how to contact you by electronic and paper mail.\n" "\n" "If the program is interactive, make it output a short notice like this\n" "when it starts in an interactive mode:\n" "\n" " Gnomovision version 69, Copyright (C) 19yy name of author\n" " Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show " "w'.\n" " This is free software, and you are welcome to redistribute it\n" " under certain conditions; type `show c' for details.\n" "\n" "The hypothetical commands `show w' and `show c' should show the appropriate\n" "parts of the General Public License. Of course, the commands you use may\n" "be called something other than `show w' and `show c'; they could even be\n" "mouse-clicks or menu items--whatever suits your program.\n" "\n" "You should also get your employer (if you work as a programmer) or your\n" "school, if any, to sign a \"copyright disclaimer\" for the program, if\n" "necessary. Here is a sample; alter the names:\n" "\n" " Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n" " `Gnomovision' (which makes passes at compilers) written by James Hacker.\n" "\n" " , 1 April 1989\n" " Ty Coon, President of Vice\n" "\n" "This General Public License does not permit incorporating your program into\n" "proprietary programs. If your program is a subroutine library, you may\n" "consider it more useful to permit linking proprietary applications with the\n" "library. If this is what you want to do, use the GNU Library General\n" "Public License instead of this License.\n" "\n" msgstr "" "\n" " Ende der Bedingungen\n" " _________________________________________________________________\n" " \n" "Anhang: Wie Sie diese Bedingungen auf Ihre neuen Programme anwendbar machen\n" "\n" " Wenn Sie ein neues Programm entwickeln und wollen, daß es von\n" " größtmöglichem Nutzen für die Allgemeinheit ist, dann erreichen Sie\n" " das am besten, indem Sie es zu freier Software machen, die jeder unter\n" " diesen Bestimmungen weiterverbreiten und verändern kann.\n" " \n" " Um dies zu erreichen, fügen Sie die folgenden Anmerkungen zu Ihrem\n" " Programm hinzu. Am sichersten ist es, sie an den Anfang einer jeden\n" " Quelldatei zu stellen, um den Gewährleistungsausschluß möglichst\n" " deutlich darzustellen; außerdem sollte jede Datei mindestens eine\n" " \"Copyright\"-Zeile besitzen sowie einen kurzen Hinweis darauf, wo die\n" " vollständige Lizenz gefunden werden kann.\n" " \n" " [eine Zeile mit dem Programmnamen und einer kurzen Beschreibung]\n" " Copyright (C) 19[yy] [Name des Autors]\n" "\n" " This program is free software; you can redistribute it and/or\n" " modify it under the terms of the GNU General Public License as\n" " published by the Free Software Foundation; either version 2 of\n" " the License, or (at your option) any later version.\n" "\n" " This program is distributed in the hope that it will be useful,\n" " but WITHOUT ANY WARRANTY; without even the implied warranty of\n" " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU\n" " General Public License for more details.\n" "\n" " You should have received a copy of the GNU General Public License\n" " along with this program; if not, write to the Free Software\n" " Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n" "\n" "\n" " Auf Deutsch:\n" " \n" "\n" " [eine Zeile mit dem Programmnamen und einer kurzen Beschreibung]\n" " Copyright (C) 19[jj] [Name des Autors]\n" "\n" " Dieses Programm ist freie Software. Sie können es unter\n" " den Bedingungen der GNU General Public License, wie von der\n" " Free Software Foundation herausgegeben, weitergeben und/oder\n" " modifizieren, entweder unter Version 2 der Lizenz oder (wenn\n" " Sie es wünschen) jeder späteren Version.\n" "\n" " Die Veröffentlichung dieses Programms erfolgt in der\n" " Hoffnung, daß es Ihnen von Nutzen sein wird, aber OHNE JEDE\n" " GEWÄHRLEISTUNG - sogar ohne die implizite Gewährleistung\n" " der MARKTREIFE oder der EIGNUNG FÜR EINEN BESTIMMTEN ZWECK.\n" " Details finden Sie in der GNU General Public License.\n" "\n" " Sie sollten eine Kopie der GNU General Public License zusammen\n" " mit diesem Programm erhalten haben. Falls nicht, schreiben Sie\n" " an die Free Software Foundation, Inc., 675 Mass Ave, Cambridge,\n" " MA 02139, USA.\n" "\n" "\n" " Fügen Sie auch einen kurzen Hinweis hinzu, wie Sie elektronisch und\n" " per Brief erreichbar sind.\n" " \n" " Wenn Ihr Programm interaktiv ist, sorgen Sie dafür, daß es nach dem\n" " Start einen kurzen Vermerk ausgibt:\n" " \n" " Gnomovision version 69, Copyright (C) 19[yy] [Name des Autors]\n" " Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type\n" " `show w'. This is free software, and you are welcome to redistribute\n" " it under certain conditions; type `show c' for details.\n" "\n" "\n" " Auf Deutsch:\n" " \n" " Gnomovision Version 69, Copyright (C) 19[jj] [Name des Autors]\n" " Für Gnomovision besteht KEINERLEI GARANTIE; geben Sie `show w'\n" " für Details ein. Gnomovision ist freie Software, die Sie unter\n" " bestimmten Bedingungen weitergeben dürfen; geben Sie `show c'\n" " für Details ein.\n" "\n" "\n" " Die hypothetischen Kommandos `show w' und `show c' sollten die\n" " entsprechenden Teile der GNU-GPL anzeigen. Natürlich können die von\n" " Ihnen verwendeten Kommandos anders heißen als `show w' und `show c';\n" " es könnten auch Mausklicks oder Menüpunkte sein - was immer am besten\n" " in Ihr Programm paßt.\n" " \n" " Soweit vorhanden, sollten Sie auch Ihren Arbeitgeber (wenn Sie als\n" " Programmierer arbeiten) oder Ihre Schule einen Copyright-Verzicht für\n" " das Programm unterschreiben lassen. Hier ein Beispiel; ändern Sie\n" " bitte die Namen:\n" " \n" " Yoyodyne, Inc., hereby disclaims all copyright interest in the\n" " program \"Gnomovision\" (which makes passes at compilers) written by\n" " James Hacker.\n" " \n" " [Unterschrift von Ty Coon], 1 April 1989\n" " Ty Coon, President of Vice\n" " \n" " Auf Deutsch:\n" " \n" " Die Yoyodyne GmbH erhebt keinerlei urheberrechtlichen Anspruch auf\n" " das Programm \"Gnomovision\" (einem Schrittmacher für Compiler),\n" " geschrieben von James Hacker.\n" " \n" " [Unterschrift von Ty Coon], 1. April 1989\n" " Ty Coon, Vizepräsident\n" " \n" " Diese General Public License gestattet nicht die Einbindung des\n" " Programms in proprietäre Programme. Ist Ihr Programm eine\n" " Funktionsbibliothek, so kann es sinnvoller sein, das Linken\n" " proprietärer Programme mit dieser Bibliothek zu gestatten. Wenn Sie\n" " dies tun wollen, sollten Sie die GNU Library General Public License\n" " anstelle dieser Lizenz verwenden.\n" "\n" #: src/kc/mod_320k.cc:149 #, c-format msgid "2,5 MB Modul Bank (%d / %02xh)" msgstr "2,5 MB Modul Bank (%d / %02xh)" #: src/kc/mod_fdc.cc:58 #, c-format msgid "" "It's not possible to have more than one\n" "module of type %s!\n" "\n" "(And due to some technical points of the emulator\n" "it's also not possible to have both the Kramer and\n" "Schneider variant of the floppy module active at\n" "the same time.)" msgstr "" "Es ist nicht möglich mehrere Module vom Typ\n" "%s zu aktivieren!\n" "\n" "(Außerdem ist es aufgrund der internen Struktur\n" "des Emulators nicht möglich gleichzeitig die\n" "Kramer- und Schneider-Variante des Floppy-Moduls\n" "zu aktivieren.)" #: src/kc/mod_gdc.cc:53 src/kc/mod_rtc.cc:50 #, c-format msgid "" "It's not possible to have more than one\n" "module of type %s!" msgstr "" "Es ist nicht möglich mehrere Module vom Typ\n" "%s zu aktivieren!" #: src/kc/mod_js.cc:152 msgid "Joystick removed!" msgstr "Joystick entfernt!" #: src/kc/mod_js.cc:163 #, c-format msgid "Joystick (%d.%d.%d): %s on %s" msgstr "Joystick (%d.%d.%d): %s on %s" #: src/kc/mod_js.cc:399 #, c-format msgid "" "Couldn't find any readable joystick device!\n" "\n" "If your joystick is connected properly and the correct\n" "driver is loaded give the device name of your joystick\n" "in the 'Joystick Device' section of the configuration\n" "file." msgstr "" #: src/kc/mod_js.cc:408 #, c-format msgid "" "Couldn't open joystick device (%s)!\n" "\n" "Make sure you have the joystick properly connected\n" "and loaded the correct driver for it.\n" "\n" "Also check the 'Joystick Device' section in the\n" "configuration file if the device name shown above\n" "looks bogus.\n" msgstr "" #: src/kc/mod_list.cc:197 msgid "" msgstr "" #: src/kc/mod_list.cc:207 msgid "RAM Module (1k/2400h)" msgstr "RAM Modul (1k/2400h)" #: src/kc/mod_list.cc:209 msgid "RAM Module (2k/2800h)" msgstr "RAM Modul (2k/2800h)" #: src/kc/mod_list.cc:211 msgid "RAM Module (4k/3000h)" msgstr "RAM Modul (4k/3000h)" #: src/kc/mod_list.cc:221 msgid "RAM Module (2k/0800h)" msgstr "RAM Modul (2k/0800h)" #: src/kc/mod_list.cc:223 msgid "RAM Module (4k/1000h)" msgstr "RAM Modul (4k/1000h)" #: src/kc/mod_list.cc:225 msgid "RAM Module (8k/2000h)" msgstr "RAM Modul (8k/2000h)" #: src/kc/mod_list.cc:234 src/kc/mod_list.cc:297 msgid "RAM Module (16k/4000h)" msgstr "RAM Modul (16k/4000h)" #: src/kc/mod_list.cc:236 msgid "RAM Module (32k/8000h)" msgstr "RAM Modul (32k/8000h)" #: src/kc/mod_list.cc:242 msgid "256k RAM Floppy" msgstr "256k RAM Floppy" #: src/kc/mod_list.cc:248 msgid "FDC (Schneider)" msgstr "FDC (Schneider)" #: src/kc/mod_list.cc:254 msgid "FDC (Kramer)" msgstr "FDC (Kramer)" #: src/kc/mod_list.cc:260 msgid "GDC 82720" msgstr "GDC 82720" #: src/kc/mod_list.cc:266 msgid "RTC (port 20h-2fh)" msgstr "RTC (Port 20h-2fh)" #: src/kc/mod_list.cc:272 msgid "RTC (port 70h-7fh)" msgstr "RTC (port 70h-7fh)" #: src/kc/mod_list.cc:279 msgid "Basic Module (c000h-e7ffh)" msgstr "Basic Modul (c000h-e7ffh)" #: src/kc/mod_list.cc:291 msgid "Plotter Module (c000h-e7ffh)" msgstr "Plotter Modul (c000h-e7ffh)" #: src/kc/mod_list.cc:299 msgid "RAM Module (16k/8000h)" msgstr "RAM Module (16k/8000h)" #: src/kc/mod_list.cc:308 msgid "ZM30 (c000h-ccffh)" msgstr "ZM30 (c000h-ccffh)" #: src/kc/mod_list.cc:315 msgid "EDAS (c000h-e7ffh)" msgstr "EDAS (c000h-e7ffh)" #: src/kc/mod_list.cc:322 msgid "IDAS / ZM (c000h-e7ffh)" msgstr "IDAS / ZM (c000h-e7ffh)" #: src/kc/mod_list.cc:329 msgid "BITEX (c000h-d7ffh)" msgstr "BITEX (c000h-d7ffh)" #: src/kc/mod_list.cc:354 msgid "KC-CAOS 3.1 (8000h-8fffh)" msgstr "KC-CAOS 3.1 (8000h-8fffh)" #: src/kc/mod_list.cc:367 msgid "192 KByte RAM/EPROM" msgstr "192 KByte RAM/EPROM" #: src/kc/mod_list.cc:374 msgid "KC-Pascal Module" msgstr "KC-Pascal Modul" #: src/kc/mod_list.cc:381 msgid "Mega-ROM Module" msgstr "Mega-ROM Modul" #: src/kc/mod_list.cc:388 msgid "128k ROM Bank" msgstr "128k ROM Bank" #: src/kc/mod_list.cc:397 src/ui/gtk/module.cc:266 msgid "IRM Color Expansion" msgstr "IRM Color Expansion" #: src/kc/mod_list.cc:412 msgid "Plotter XY4131" msgstr "Plotter XY4131" #: src/kc/mod_list.cc:419 msgid "CPM-Z9 BOOT (c000h-c7ffh)" msgstr "CPM-Z9 BOOT (c000h-c7ffh)" #: src/kc/mod_list.cc:425 msgid "CPM-Z9 Floppy" msgstr "CPM-Z9 Floppy" #: src/kc/mod_list.cc:431 msgid "CPM-Z9 64k RAM" msgstr "CPM-Z9 64k RAM" #: src/kc/mod_list.cc:437 msgid "RAF 4MB (port 20h)" msgstr "RAF 4MB (Port 20h)" #: src/kc/mod_list.cc:440 msgid "RAF 4MB (port 24h)" msgstr "RAF 4MB (Port 24h)" #: src/kc/mod_list.cc:446 msgid "M001: Digital In / Out" msgstr "M001: Digital In / Out" #: src/kc/mod_list.cc:453 msgid "M003: V24" msgstr "M003: V24" #: src/kc/mod_list.cc:461 msgid "M006: Basic" msgstr "M006: Basic" #: src/kc/mod_list.cc:468 msgid "M008: Joystick" msgstr "M008: Joystick" #: src/kc/mod_list.cc:475 msgid "M011: 64k RAM" msgstr "M011: 64k RAM" #: src/kc/mod_list.cc:482 msgid "M012: Texor" msgstr "M012: Texor" #: src/kc/mod_list.cc:488 msgid "M022: Expander RAM (16k)" msgstr "M022: Expander RAM (16k)" #: src/kc/mod_list.cc:495 msgid "M026: Forth" msgstr "M026: Forth" #: src/kc/mod_list.cc:502 msgid "M027: Development" msgstr "M027: Development" #: src/kc/mod_list.cc:508 msgid "M032: 256k Segmented RAM" msgstr "M032: 256k Segmented RAM" #: src/kc/mod_list.cc:515 msgid "M033: TypeStar + RAMDOS" msgstr "M033: TypeStar + RAMDOS" #: src/kc/mod_list.cc:521 msgid "M034: 512k Segmented RAM" msgstr "M034: 512k Segmented RAM" #: src/kc/mod_list.cc:527 msgid "M035: 1M Segmented RAM" msgstr "M035: 1M Segmented RAM" #: src/kc/mod_list.cc:533 msgid "M035x4: 4M RAM" msgstr "M035x4: 4M RAM" #: src/kc/mod_list.cc:539 msgid "M036: 128k Segmented RAM" msgstr "M036: 128k Segmented RAM" #: src/kc/mod_list.cc:546 msgid "M052: Network + USB" msgstr "M052: Network + USB" #: src/kc/mod_list.cc:553 msgid "M900: WordPro '86 (KC85/3)" msgstr "M900: WordPro '86 (KC85/3)" #: src/kc/mod_list.cc:560 msgid "M901: WordPro '86 (KC85/4)" msgstr "M901: WordPro '86 (KC85/4)" #: src/kc/mod_list.cc:566 msgid "VDIP: Vinculum USB" msgstr "VDIP: Vinculum USB" #: src/kc/mod_list.cc:570 msgid "VDIP1: Vinculum USB ROM V1.2" msgstr "VDIP1: Vinculum USB ROM V1.2" #: src/kc/mod_list.cc:574 msgid "VDIP2: Vinculum USB ROM V2.1" msgstr "VDIP2: Vinculum USB ROM V2.1" #: src/kc/mod_list.cc:588 msgid "Floppy Disk Basis F8" msgstr "Floppy Disk Basis F8" #: src/kc/mod_list.cc:597 msgid "Floppy Disk Basis FC" msgstr "Floppy Disk Basis FC" #: src/kc/mod_list.cc:795 msgid "Autostart" msgstr "Autostart" #: src/kc/mod_ramf.cc:50 #, c-format msgid "" "It's not possible to have more than two RAM-Floppy\n" "modules. The first one is running on port 98h and\n" "the second one on port 58h." msgstr "" "Es ist nicht möglich gleichzeitig mehr als 2 RAM-Floppy\n" "Module zu aktivieren. Der erste Modul läuft an Port 98h\n" "und der zweite an Port 58h." #: src/kc/tape.cc:96 #, c-format msgid "File `%s' loaded." msgstr "Datei `%s' geladen." #: src/kc/tape.cc:174 msgid "Select tape-archive..." msgstr "Select tape-archive..." #: src/kc/tape.cc:228 #, c-format msgid "tape-archive `%s' attached." msgstr "Kassetten-Datei `%s' aktiviert." #: src/kc/tape.cc:235 msgid "Can't attach tape-archive." msgstr "Kann Kassetten-Datei nicht aktivieren." #: src/kc/tape.cc:276 src/kc/tape.cc:310 msgid "Export As..." msgstr "Exportieren als..." #: src/kc/tape.cc:294 src/kc/tape.cc:328 #, c-format msgid "File `%s' saved." msgstr "Datei `%s' gespeichert." #: src/kc/tape.cc:299 src/kc/tape.cc:333 msgid "Can't export file." msgstr "Kann Datei nicht exportieren." #: src/kc/tape.cc:375 msgid "Select file..." msgstr "Datei auswählen..." #: src/kc/tape.cc:1763 msgid "The format of the selected file is not recognized." msgstr "Das Format der selektierten Datei konnte nicht bestimmt werden." #: src/kc/tape.cc:1798 #, c-format msgid "File `%s' [%s] added." msgstr "Datei `%s' [%s] hinzugefügt." #: src/kc/tape.cc:1807 msgid "" "The file you selected has a name that is already\n" "present in the current tape archive.\n" "\n" "Please select a different name to add this file\n" "to the tape archive or use the cancel button to\n" "skip this file." msgstr "" "Die ausgewählte Datei hat einen Namen der bereits\n" "im aktuellen Kassetten-Archiv enthalten ist.\n" "\n" "Bitte einen anderen Namen eingeben, um die Datei dem\n" "Kassetten-Archiv hinzuzufügen oder den Abbrechen-Knopf\n" "drücken, um die Datei zu überspringen." #: src/kc/wav.cc:280 #, c-format msgid "Reading %s `%s' (%d/%d/%d)." msgstr "Lese %s `%s' (%d/%d/%d)." #: src/kc/prefs/types.cc:208 msgid "rom_caos_c" msgstr "CAOS C" #: src/kc/prefs/types.cc:209 msgid "rom_caos_e" msgstr "CAOS E" #: src/kc/prefs/types.cc:210 msgid "rom_system" msgstr "System" #: src/kc/prefs/types.cc:211 msgid "rom_system_1" msgstr "System (1)" #: src/kc/prefs/types.cc:212 msgid "rom_system_2" msgstr "System (2)" #: src/kc/prefs/types.cc:213 msgid "rom_system_3" msgstr "System (3)" #: src/kc/prefs/types.cc:214 msgid "rom_system_4" msgstr "System (4)" #: src/kc/prefs/types.cc:215 msgid "rom_user" msgstr "User-ROM" #: src/kc/prefs/types.cc:216 msgid "rom_basic" msgstr "BASIC" #: src/kc/prefs/types.cc:217 msgid "rom_debugger" msgstr "Debugger" #: src/kc/prefs/types.cc:218 msgid "rom_reassembler" msgstr "Reassembler" #: src/kc/prefs/types.cc:219 msgid "rom_editor" msgstr "Editor" #: src/kc/prefs/types.cc:220 msgid "rom_assembler" msgstr "Assembler" #: src/kc/prefs/types.cc:221 msgid "rom_charset" msgstr "Zeichensatz" #: src/kc/prefs/types.cc:222 msgid "rom_d004_fc" msgstr "D004 (Schacht FC)" #: src/kc/prefs/types.cc:223 msgid "rom_d004_f8" msgstr "D004 (Schacht F8)" #: src/kc/prefs/types.cc:475 #, fuzzy msgid "" " Z1013 with 16k RAM and 2k ROM, running at 1MHz. This was the\n" " first version with cheap circuits so the CPU was clocked at only 1MHz\n" " The ROM contains the Z1013 monitor version 2.02.\n" msgstr "" " Z1013 mit 16k RAM und 2k ROM. Erste Version mit billigen Chips.\n" " Dadurch konnte die CPU nur mit 1MHz getaktet werden. Der ROM\n" " enthält die Z1013 Monitor-Version 2.02.\n" #: src/kc/prefs/types.cc:482 src/kc/prefs/types.cc:491 #: src/kc/prefs/types.cc:500 src/kc/prefs/types.cc:511 msgid "System-ROM V2.0" msgstr "System-ROM V2.0" #: src/kc/prefs/types.cc:483 src/kc/prefs/types.cc:492 #: src/kc/prefs/types.cc:501 src/kc/prefs/types.cc:512 #: src/kc/prefs/types.cc:523 src/kc/prefs/types.cc:533 #: src/kc/prefs/types.cc:544 src/kc/prefs/types.cc:554 msgid "Z1013 Charset-ROM" msgstr "Z1013 Zeichensatz-ROM" #: src/kc/prefs/types.cc:485 msgid "" " Z1013 with 1k sRAM and 2k ROM, running at 2MHz. Industry\n" " version with only 1k static RAM. Monitor version 2.02.\n" msgstr "" " Z1013 mit 1k statischem RAM und 2k ROM. Die CPU läuft mit 2MHz.\n" " (Industrie-Version die nicht für den normalen Verkauf gedacht war).\n" " Der ROM enthält die Monitor-Version 2.02.\n" #: src/kc/prefs/types.cc:494 msgid "" " Z1013 with 16k RAM and 2k ROM, running at 2MHz. Successor of\n" " the Z1013.01 but with industry grade circuits clocked at 2MHz.\n" msgstr "" " Z1013 mit 16k RAM und 2k ROM. Die CPU läuft mit 2MHz. Nachfolger\n" " des Z1013.01, jedoch mit hochwertigen Chips wodurch der 2MHz\n" " Systemtakt möglich wurde.\n" #: src/kc/prefs/types.cc:503 msgid "" " Z1013 with 64k RAM and 2x2k ROM, running at 2MHz. The ROM\n" " contains two system images with 2k each. Loaded is the first\n" " image with version 2.02 that is supposed to work with the foil keypad\n" " shipped by the manufacturer.\n" msgstr "" " Z1013 mit 64k RAM, 2x2k ROM und 2MHz Systemtakt. Der ROM enthält\n" " zwei Monitor-Versionen zu je 2k. Geladen wird die erste Version\n" " (2.02) die für die Arbeit mit der mitgelieferten Folientastatur\n" " gedacht ist.\n" #: src/kc/prefs/types.cc:514 msgid "" " Z1013 with 64k RAM and 2k ROM, running at 2MHz. The ROM\n" " contains two system images with 2k each. Loaded is the second\n" " image with version A.2 that supports an extended keyboard with an\n" " 8x8 matrix.\n" msgstr "" " Z1013 mit 64k RAM, 2x2k ROM und 2MHz Systemtakt. Der ROM enthält\n" " zwei Monitor-Versionen zu je 2k. Geladen wird die zweite Version\n" " (A.2) die eine erweiterte Tastatur mit einer 8x8 Matrix unterstützt.\n" " BIC/A5105, nur das Basis-Gerät ohne Floppy-Erweiterung.\n" #: src/kc/prefs/types.cc:522 msgid "System-ROM A2" msgstr "System-ROM A2" #: src/kc/prefs/types.cc:525 msgid "" " Z1013 with 64k RAM and 4k ROM. The ROM is the extended\n" " version tagged 2.028 RB that has a different keyboard driver for\n" " the keyboard K7659.\n" msgstr "" " Z1013 mit 64k RAM und 4k ROM. Der ROM enthält den von R. Brosig\n" " erweiterten Monitor mit der Versionsnummer 2.028 RB. Unterstützt\n" " wird die Tastatur K7659.\n" #: src/kc/prefs/types.cc:532 msgid "Brosig-ROM K7659/2.028" msgstr "Brosig-ROM K7659/2.028" #: src/kc/prefs/types.cc:535 msgid "" " Z1013 with 64k RAM and 4k ROM. The ROM contains the 'Super\n" " Ur-Lader 5.0' that can read arbitrary tape files as system monitor.\n" " The hardware modification port at address 4h is emulated which allows\n" " programs to switch off the system ROM.\n" msgstr "" " Z1013 mit 64k RAM und 4k ROM. Der ROM enthält den 'Super Ur-Lader 5.0'\n" " mit dem beliebige Dateien als System-Monitor geladen werden können.\n" " Emuliert wird auch die Hardware-Erweiterung nach J. Peters die es z.B.\n" " erlaubt über Port 4h den ROM komplett abzuschalten.\n" #: src/kc/prefs/types.cc:543 msgid "Super Ur-Lader 5.0" msgstr "Super Ur-Lader 5.0" #: src/kc/prefs/types.cc:546 msgid "" " Z1013 with 64k RAM and 4k ROM. The ROM contains the Bootloader\n" " BL4 that can load monitor images from floppy disk or can start the\n" " CP/M system.\n" msgstr "" " Z1013 mit 64k RAM und 4k ROM. Der ROM enthält den Bootlader BL4 der\n" " den System-Monitor von Diskette laden oder ein CP/M System starten\n" " kann.\n" #: src/kc/prefs/types.cc:553 msgid "Bootlader BL4" msgstr "Bootlader BL4" #: src/kc/prefs/types.cc:559 msgid "" " Z9001 (later called KC 85/1) with monochrome display, no internal BASIC\n" " ROM. This computer has 16k RAM and 4k ROM with the robotron z9001 " "system.\n" msgstr "" " Z9001 (später KC 85/1 genannt) mit schwarz/weiß Darstellung\n" " und ohne BASIC ROM. Das System enthält 16k RAM und 4k ROM.\n" #: src/kc/prefs/types.cc:565 src/kc/prefs/types.cc:581 #: src/kc/prefs/types.cc:734 src/kc/prefs/types.cc:751 #: src/kc/prefs/types.cc:768 src/kc/prefs/types.cc:786 #: src/kc/prefs/types.cc:803 src/kc/prefs/types.cc:820 #: src/kc/prefs/types.cc:846 src/kc/prefs/types.cc:901 #: src/kc/prefs/types.cc:912 src/kc/prefs/types.cc:920 msgid "System-ROM" msgstr "System-ROM" #: src/kc/prefs/types.cc:566 src/kc/prefs/types.cc:582 #: src/kc/prefs/types.cc:735 src/kc/prefs/types.cc:752 #: src/kc/prefs/types.cc:769 src/kc/prefs/types.cc:787 #: src/kc/prefs/types.cc:804 src/kc/prefs/types.cc:821 msgid "ROM-Bank System without menu" msgstr "ROM-Bank System ohne Menü" #: src/kc/prefs/types.cc:567 src/kc/prefs/types.cc:583 #: src/kc/prefs/types.cc:736 src/kc/prefs/types.cc:753 #: src/kc/prefs/types.cc:770 src/kc/prefs/types.cc:788 #: src/kc/prefs/types.cc:805 src/kc/prefs/types.cc:822 msgid "ROM-Bank System with menu" msgstr "ROM-Bank System mit Menü" #: src/kc/prefs/types.cc:570 src/kc/prefs/types.cc:586 #: src/kc/prefs/types.cc:740 src/kc/prefs/types.cc:757 #: src/kc/prefs/types.cc:774 src/kc/prefs/types.cc:792 #: src/kc/prefs/types.cc:809 src/kc/prefs/types.cc:826 msgid "Z9001 Charset-ROM" msgstr "Z9001 Zeichensatz-ROM" #: src/kc/prefs/types.cc:571 src/kc/prefs/types.cc:587 #: src/kc/prefs/types.cc:741 src/kc/prefs/types.cc:758 #: src/kc/prefs/types.cc:775 src/kc/prefs/types.cc:793 #: src/kc/prefs/types.cc:810 src/kc/prefs/types.cc:827 msgid "Z9001 Charset-ROM (german)" msgstr "Z9001 Zeichensatz-ROM (deutsch)" #: src/kc/prefs/types.cc:572 src/kc/prefs/types.cc:588 #: src/kc/prefs/types.cc:742 src/kc/prefs/types.cc:759 #: src/kc/prefs/types.cc:776 src/kc/prefs/types.cc:794 #: src/kc/prefs/types.cc:811 src/kc/prefs/types.cc:828 msgid "CGA Charset-ROM" msgstr "CGA Zeichensatz-ROM" #: src/kc/prefs/types.cc:573 src/kc/prefs/types.cc:589 #: src/kc/prefs/types.cc:743 src/kc/prefs/types.cc:760 #: src/kc/prefs/types.cc:777 src/kc/prefs/types.cc:795 #: src/kc/prefs/types.cc:812 src/kc/prefs/types.cc:829 msgid "CGA Charset-ROM (extended)" msgstr "CGA Zeichensatz-ROM (erweitert)" #: src/kc/prefs/types.cc:576 msgid " Like the z9001.10 but with color extension card.\n" msgstr " Wie z9001.10 aber mit Farberweiterung.\n" #: src/kc/prefs/types.cc:595 msgid "" " HC900 (later called KC 85/2) with 16k RAM and 8k ROM. System is called\n" " HC-CAOS 2.2 (home computer - cassette aided operating system). BASIC\n" " is only available as external module.\n" msgstr "" " HC900 (später KC 85/2 genannt) mit 16k RAM und 8k ROM. Als System wird\n" " HC-CAOS 2.2 (Home Computer - Cassette Aided Operating System) " "eingesetzt.\n" " BASIC ist nur als externer Modul vorhanden.\n" #: src/kc/prefs/types.cc:601 msgid "HC-900 CAOS" msgstr "HC-900 CAOS" #: src/kc/prefs/types.cc:602 msgid "CAOS 2.2" msgstr "CAOS 2.2" #: src/kc/prefs/types.cc:605 src/kc/prefs/types.cc:611 #: src/kc/prefs/types.cc:633 src/kc/prefs/types.cc:639 #: src/kc/prefs/types.cc:662 src/kc/prefs/types.cc:668 #: src/kc/prefs/types.cc:696 src/kc/prefs/types.cc:702 msgid "D004 Version 2.0 (02.01.1989)" msgstr "D004 Version 2.0 (02.01.1989)" #: src/kc/prefs/types.cc:606 src/kc/prefs/types.cc:612 #: src/kc/prefs/types.cc:634 src/kc/prefs/types.cc:640 #: src/kc/prefs/types.cc:663 src/kc/prefs/types.cc:669 #: src/kc/prefs/types.cc:697 src/kc/prefs/types.cc:703 msgid "D004 Version 3.0 (07.12.1997)" msgstr "D004 Version 3.0 (07.12.1997)" #: src/kc/prefs/types.cc:607 src/kc/prefs/types.cc:613 #: src/kc/prefs/types.cc:635 src/kc/prefs/types.cc:641 #: src/kc/prefs/types.cc:664 src/kc/prefs/types.cc:670 #: src/kc/prefs/types.cc:698 src/kc/prefs/types.cc:704 msgid "D004 Version 3.1 (22.01.2003)" msgstr "D004 Version 3.1 (22.01.2003)" #: src/kc/prefs/types.cc:608 src/kc/prefs/types.cc:614 #: src/kc/prefs/types.cc:636 src/kc/prefs/types.cc:642 #: src/kc/prefs/types.cc:665 src/kc/prefs/types.cc:671 #: src/kc/prefs/types.cc:699 src/kc/prefs/types.cc:705 msgid "D004 Version 3.2 (28.10.2008)" msgstr "D004 Version 3.2 (28.10.2008)" #: src/kc/prefs/types.cc:620 msgid "" " KC 85/3 with 16k RAM, 8k system ROM with HC-CAOS 3.1 and 8k BASIC ROM.\n" msgstr " KC 85/3 mit 16k RAM, 8k ROM mit HC-CAOS 3.1 und 8k BASIC ROM.\n" #: src/kc/prefs/types.cc:624 msgid "CAOS 3.1" msgstr "CAOS 3.1" #: src/kc/prefs/types.cc:625 msgid "CAOS 3.3" msgstr "CAOS 3.3" #: src/kc/prefs/types.cc:626 msgid "CAOS 3.4" msgstr "CAOS 3.4" #: src/kc/prefs/types.cc:627 msgid "OS PI/88 (yellow/blue)" msgstr "OS PI/88 (gelb/blau)" #: src/kc/prefs/types.cc:628 msgid "OS PI/88 (black/white)" msgstr "OS PI/88 (schwarz/weiß)" #: src/kc/prefs/types.cc:629 msgid "OS PI/88 (white/blue)" msgstr "OS PI/88 (weiß/blau)" #: src/kc/prefs/types.cc:631 src/kc/prefs/types.cc:660 #: src/kc/prefs/types.cc:738 src/kc/prefs/types.cc:755 #: src/kc/prefs/types.cc:772 src/kc/prefs/types.cc:790 #: src/kc/prefs/types.cc:807 src/kc/prefs/types.cc:824 msgid "KC-BASIC" msgstr "KC-BASIC" #: src/kc/prefs/types.cc:648 msgid "" " KC 85/4 with 64k RAM, 64k screen memory, 12k system ROM with HC-CAOS " "4.2\n" " and 8k BASIC ROM.\n" msgstr "" " KC 85/4 mit 64k RAM, 64k Bildschirmspeicher, 12k ROM mit HC-CAOS 4.2 " "und\n" " 8k BASIC ROM.\n" #: src/kc/prefs/types.cc:653 msgid "CAOS 4.1 (C)" msgstr "CAOS 4.1 (C)" #: src/kc/prefs/types.cc:654 msgid "CAOS 4.2 (C)" msgstr "CAOS 4.2 (C)" #: src/kc/prefs/types.cc:657 msgid "CAOS 4.1 (E)" msgstr "CAOS 4.1 (E)" #: src/kc/prefs/types.cc:658 msgid "CAOS 4.2 (E)" msgstr "CAOS 4.2 (E)" #: src/kc/prefs/types.cc:677 #, fuzzy msgid "" " Unofficial successor of the KC 85/4 with 256k RAM, 64k screen memory,\n" " 16k system ROM with HC-CAOS 4.4, 8k BASIC ROM and 24k User ROM. It is\n" " intended to be used with a modified D004 floppy device with additional\n" " hard-disk support.\n" msgstr "" " Inoffizieller Nachfolger des KC 85/4 mit 256k RAM, 64k " "Bildschirmspeicher,\n" " 16k System-ROM mit HC-CAOS 4.4, 8k BASIC ROM und 24k User ROM.\n" #: src/kc/prefs/types.cc:684 msgid "CAOS 4.3 (C)" msgstr "CAOS 4.3 (C)" #: src/kc/prefs/types.cc:685 msgid "CAOS 4.4 (C)" msgstr "CAOS 4.4 (C)" #: src/kc/prefs/types.cc:688 msgid "CAOS 4.3 (E)" msgstr "CAOS 4.3 (E)" #: src/kc/prefs/types.cc:689 msgid "CAOS 4.4 (E)" msgstr "CAOS 4.4 (E)" #: src/kc/prefs/types.cc:692 msgid "KC-BASIC (EDAS/TEMO/FORTH)" msgstr "KC-BASIC (EDAS/TEMO/FORTH)" #: src/kc/prefs/types.cc:693 msgid "KC-BASIC (EDAS/TEMO/USB)" msgstr "KC-BASIC (EDAS/TEMO/USB)" #: src/kc/prefs/types.cc:711 msgid " Polycomputer 880.\n" msgstr " Polycomputer 880.\n" #: src/kc/prefs/types.cc:715 src/kc/prefs/types.cc:839 #: src/kc/prefs/types.cc:852 src/kc/prefs/types.cc:864 #: src/kc/prefs/types.cc:874 msgid "System-ROM 1" msgstr "System-ROM 1" #: src/kc/prefs/types.cc:716 src/kc/prefs/types.cc:840 #: src/kc/prefs/types.cc:853 src/kc/prefs/types.cc:865 #: src/kc/prefs/types.cc:875 msgid "System-ROM 2" msgstr "System-ROM 2" #: src/kc/prefs/types.cc:717 src/kc/prefs/types.cc:718 msgid "Optional-ROM 1" msgstr "Optional-ROM 1" #: src/kc/prefs/types.cc:720 msgid " Polycomputer 880 with chess program rom from SC1.\n" msgstr " Polycomputer 880 mit dem Schach-Programm des SC1.\n" #: src/kc/prefs/types.cc:724 msgid "SC1-ROM" msgstr "SC1-ROM" #: src/kc/prefs/types.cc:729 msgid " Like the KC 87.11 but without the color extension card.\n" msgstr " Wie KC 87.11 aber ohne Farberweiterung.\n" #: src/kc/prefs/types.cc:746 msgid " Successor of the Z9001 with internal 10k BASIC ROM.\n" msgstr " Nachfolger des Z9001 mit internem 10k BASIC ROM.\n" #: src/kc/prefs/types.cc:763 msgid " Like the KC 87.21 but without the color extension card.\n" msgstr " Wie KC 87.21 aber ohne Farberweiterung.\n" #: src/kc/prefs/types.cc:780 msgid "" " New series with extended BASIC ROM (still 10k but with some routines " "for\n" " plotter support were added).\n" msgstr "" " Neue KC 87 Serie mit erweitertem BASIC ROM (Plotterunterstützung).\n" #: src/kc/prefs/types.cc:798 msgid " New batch of KC 87.20 with no known hardware differences.\n" msgstr " Neuauflage der KC 87.20 ohne Veränderung der Hardware.\n" #: src/kc/prefs/types.cc:815 msgid " New batch of KC 87.21 with no known hardware differences.\n" msgstr " Neuauflage der KC 87.21 ohne Veränderung der Hardware.\n" #: src/kc/prefs/types.cc:835 msgid " Single board computer LC 80 with 1k RAM and 2 x 1k ROM.\n" msgstr "" " Einplatinen-Rechner LC 80 mit 1k RAM und 2 x 1k ROM. Als Tastatur wurde\n" " ein Taschenrechner benutzt.\n" #: src/kc/prefs/types.cc:842 msgid " Single board computer LC 80 with 1k RAM and 1 x 2k ROM.\n" msgstr "" " Einplatinen-Rechner LC 80 mit 1k RAM und 1 x 2k ROM. Als Tastatur wurde\n" " ein Taschenrechner benutzt.\n" #: src/kc/prefs/types.cc:848 msgid " Export variant of the LC 80 with 12k ROM including chess program.\n" msgstr " Export Variante des LC 80 mit Schach-Programm in 12k ROM.\n" #: src/kc/prefs/types.cc:854 msgid "System-ROM 3" msgstr "System-ROM 3" #: src/kc/prefs/types.cc:859 msgid " BIC/A5105, only the base device is emulated, no floppy device.\n" msgstr " BIC/A5105, nur das Basis-Gerät ohne Floppy-Erweiterung.\n" #: src/kc/prefs/types.cc:866 src/kc/prefs/types.cc:876 msgid "DSE-ROM 1" msgstr "DSE-ROM 1" #: src/kc/prefs/types.cc:867 src/kc/prefs/types.cc:877 msgid "DSE-ROM 2" msgstr "DSE-ROM 2" #: src/kc/prefs/types.cc:869 msgid " BIC/A5105, the full system including the floppy device.\n" msgstr " BIC/A5105, das vollständige System mit Floppy-Erweiterung.\n" #: src/kc/prefs/types.cc:882 msgid "" " Micro-Computer presented in the book \"Praktische Microcomputertechnik" "\"\n" " by Manfred Kramer.\n" msgstr "" " Mikrocomputer entwickelt von Manfred Kramer, vorgestellt im Buch " "\"Praktische\n" " Microcomputertechnik\".\n" #: src/kc/prefs/types.cc:886 msgid "IO-Monitor" msgstr "IO-Monitor" #: src/kc/prefs/types.cc:887 msgid "BASIC" msgstr "BASIC" #: src/kc/prefs/types.cc:888 src/kc/prefs/types.cc:902 msgid "Charset-ROM" msgstr "Zeichensatz-ROM" #: src/kc/prefs/types.cc:889 msgid "Debugger" msgstr "Debugger" #: src/kc/prefs/types.cc:890 msgid "Reassembler" msgstr "Reassembler" #: src/kc/prefs/types.cc:891 msgid "Editor" msgstr "Editor" #: src/kc/prefs/types.cc:892 msgid "Assembler" msgstr "Assembler" #: src/kc/prefs/types.cc:897 msgid "" " CP/M based Micro-Computer presented in the magazine \"Funkamateur\"\n" " by A. Mugler and H. Mathes.\n" msgstr "" " CP/M basierter Kleincomputer der von A. Mugler und H. Mathes in der " "Zeitschrift\n" " \"Funkamateur\" vorgestellt wurde.\n" #: src/kc/prefs/types.cc:907 msgid "" " Minimal Z80 learning system presented in the magazine \"rfe\"\n" " by Eckhard Schiller.\n" msgstr "" " Minimales Z80 Lernsystem, entworfen von Eckhard Schiller, vorgestellt\n" " in der Zeitschrift \"rfe\".\n" #: src/kc/prefs/types.cc:917 msgid " Minimal Z80 learning system designed by Dipl.-Ing. Joachim Czepa.\n" msgstr "" " Minimales Z80 Lernsystem, entworfen von Dipl.-Ing. Joachim Czepa.\n" #: src/kc/prefs/types.cc:921 msgid "User-ROM" msgstr "User-ROM" #: src/kc/prefs/types.cc:1014 msgid "available emulations:" msgstr "verfügbare Emulationen:" #: src/libtape/kctape.cc:80 msgid "" "\n" "KCtape is part of KCemu the KC 85/4 Emulator and comes with\n" "ABSOLUTELY NO WARRANTY; for details run `kcemu --warranty'.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; run `kcemu --license' for details.\n" "\n" "usage: kctape -t tapefile [command [command_args]]\n" "\n" " commands:\n" " ---------\n" "\n" " -h|--help show this help text\n" " -v|--verbose be verbose about what's going on\n" " -t|--tape tape archive to process\n" " -l|--list list content of tape archive\n" " -c|--create create tape archive if it doesn't exist\n" " -a|--add add files (KC85/3 mode)\n" " -1|--add1 add files (KC85/1 mode)\n" " -A|--add-raw add binary files\n" " -r|--remove remove file from tape archive\n" " -x|--extract extract file from tape archive\n" " -d|--dump hexdump file\n" " -o|--output output file for extract\n" " -b|--print-bam show internal block allocation map\n" " -B|--print-block-list show internal block list\n" msgstr "" #: src/libtape/kctape.cc:584 #, c-format msgid "" "ERROR: no tape specified, use the -t option to select\n" " the tape archive you want to process\n" "\n" msgstr "" "FEHLER: Es wurde keine Tapedatei angegeben. Diese muss\n" " mit der Option -t übergeben werden.\n" "\n" #: src/ui/gtk/debug.cc:237 msgid "KCemu: Debugger" msgstr "KCemu: Debugger" #: src/ui/gtk/debug.cc:336 msgid "Trace" msgstr "Ablaufverfolgung" #: src/ui/gtk/debug.cc:343 msgid "Single Step" msgstr "Einzelschritt" #: src/ui/gtk/debug.cc:350 msgid "Execute Step" msgstr "Instruktion ausführen" #: src/ui/gtk/dialog.cc:54 msgid "???" msgstr "???" #: src/ui/gtk/fbrowse.cc:39 msgid "Select File..." msgstr "Datei auswählen..." #: src/ui/gtk/hedit.cc:96 msgid "no tape-filename given!" msgstr "no tape-filename given!" #: src/ui/gtk/hedit.cc:101 msgid "no KC-filename given!" msgstr "no KC-filename given!" #: src/ui/gtk/hedit.cc:106 src/ui/gtk/image.cc:89 msgid "" "error in given load address!\n" "\n" "valid addresses have to be in the range from 0 to 65535\n" "hexadecimal values need to be prefixed with 0x (e.g. 0x1234),\n" "octal values require a leading 0 (e.g. 0444)" msgstr "" "Fehler in der angegebenen Lade-Adresse!\n" "\n" "Eine gültige Adresse muß im Bereich 0 bis 65535 liegen,\n" "hexadezimale Werte können durch vorangestelltes 0x (z.B. 0x1234)\n" "angegeben werden, oktale durch eine führende 0 (z.B. 0444)" #: src/ui/gtk/hedit.cc:119 src/ui/gtk/image.cc:105 msgid "error in given start address!" msgstr "Fehler in der angegebenen Start-Adresse!" #: src/ui/gtk/hedit.cc:174 msgid "File Properties" msgstr "Datei Eigenschaften" #: src/ui/gtk/hedit.cc:199 msgid "Name in tape-directory:" msgstr "Name in tape-directory:" #: src/ui/gtk/hedit.cc:212 msgid "Name in KC file-header:" msgstr "Name in KC file-header:" #: src/ui/gtk/hedit.cc:225 src/ui/gtk/image.cc:156 msgid "Load address:" msgstr "Lade-Adresse:" #: src/ui/gtk/hedit.cc:251 msgid "autostart" msgstr "automatisch starten" #: src/ui/gtk/image.cc:126 msgid "Input Image Properties" msgstr "Input Image Properties" #: src/ui/gtk/image.cc:133 msgid "" "It was not possible to automatically determine the\n" "type of the selected file. Thus I don't know at which\n" "address the file should be loaded\n" "\n" "To load the file nevertheless you need to type in the\n" "needed values yourself." msgstr "" "It was not possible to automatically determine the\n" "type of the selected file. Thus I don't know at which\n" "address the file should be loaded\n" "\n" "To load the file nevertheless you need to type in the\n" "needed values yourself." #: src/ui/gtk/image.cc:185 msgid "Start Program after Loading" msgstr "Programm nach dem Laden starten" #: src/ui/gtk/image.cc:197 msgid "OK" msgstr "OK" #: src/ui/gtk/image.cc:209 msgid "Cancel" msgstr "Abbrechen" #: src/ui/gtk/info.cc:132 msgid "byte output" msgstr "byte output" #: src/ui/gtk/info.cc:133 msgid "byte input" msgstr "byte input" #: src/ui/gtk/info.cc:134 msgid "byte input/output" msgstr "byte input/output" #: src/ui/gtk/info.cc:135 msgid "bit input/output" msgstr "bit input/output" #: src/ui/gtk/info.cc:326 msgid "Mode:" msgstr "Mode:" #: src/ui/gtk/info.cc:345 src/ui/gtk/info.cc:419 msgid "IRQ:" msgstr "IRQ:" #: src/ui/gtk/info.cc:364 src/ui/gtk/info.cc:438 msgid "IRQ Vector:" msgstr "IRQ Vector:" #: src/ui/gtk/info.cc:391 msgid "Channel A" msgstr "Kanal A" #: src/ui/gtk/info.cc:395 msgid "Channel B" msgstr "Kanal B" #: src/ui/gtk/info.cc:464 msgid "Channel 0" msgstr "Kanal 0" #: src/ui/gtk/info.cc:468 msgid "Channel 1" msgstr "Kanal 1" #: src/ui/gtk/info.cc:472 msgid "Channel 2" msgstr "Kanal 2" #: src/ui/gtk/info.cc:476 msgid "Channel 3" msgstr "Kanal 3" #: src/ui/gtk/info.cc:491 msgid "KCemu: Info" msgstr "KCemu: Info" #: src/ui/gtk/info.cc:516 msgid "CPU" msgstr "CPU" #: src/ui/gtk/info.cc:519 msgid "PIO" msgstr "PIO" #: src/ui/gtk/info.cc:522 msgid "CTC" msgstr "CTC" #: src/ui/gtk/info.cc:545 msgid "Update" msgstr "Aktualisieren" #: src/ui/gtk/info.cc:555 src/ui/gtk/wav.cc:144 msgid "Close" msgstr "Schließen" #: src/ui/gtk/keyboard.cc:558 msgid "KCemu: Keyboard" msgstr "KCemu: Tastatur" #: src/ui/gtk/module.cc:211 msgid "No module slots available for this computer." msgstr "Für dieses System sind keine Modul-Schächte verfügbar." #: src/ui/gtk/module.cc:223 #, c-format msgid "Slot %d" msgstr "Modul %d" #: src/ui/gtk/module.cc:318 msgid "Floppy Disk Basis [F0]" msgstr "Floppy Disk Grundgerät [F0]" #: src/ui/gtk/module.cc:323 #, c-format msgid "D002: Busdriver [%02X]" msgstr "D002: Bus-Treiber [%02X]" #: src/ui/gtk/module.cc:331 src/ui/gtk/module.cc:333 msgid "Basis Device" msgstr "Grundgerät" #: src/ui/gtk/tape.cc:76 msgid "Please enter the new name for the file." msgstr "Bitte den Namen für die neue Datei eingeben." #: src/ui/gtk/tape.cc:272 msgid "/_Run File" msgstr "/Datei _Ausführen" #: src/ui/gtk/tape.cc:273 msgid "/_Load File" msgstr "/Datei _Laden" #: src/ui/gtk/tape.cc:274 msgid "/_Export File" msgstr "/Datei _Exportieren" #: src/ui/gtk/tape.cc:275 msgid "/Export _Wav" msgstr "/WAV Exportieren" #: src/ui/gtk/tape.cc:276 msgid "/sep1" msgstr "/sep1" #: src/ui/gtk/tape.cc:277 msgid "/Edit _Header" msgstr "/_Header Ändern" #: src/ui/gtk/tape.cc:278 msgid "/Re_name File" msgstr "/Datei _Umbenennen" #: src/ui/gtk/tape.cc:279 msgid "/_Delete File" msgstr "/_Datei Löschen" #: src/ui/gtk/tape.cc:280 msgid "/sep2" msgstr "/sep2" #: src/ui/gtk/tape.cc:281 msgid "/_Add File" msgstr "/Datei _Hinzufügen" #: src/ui/gtk/tape.cc:286 msgid "Name" msgstr "Name" #: src/ui/gtk/tape.cc:287 msgid "Type" msgstr "Typ" #: src/ui/gtk/tape.cc:288 msgid "Load" msgstr "Load" #: src/ui/gtk/tape.cc:289 msgid "Start" msgstr "Start" #: src/ui/gtk/tape.cc:290 msgid "Size" msgstr "Größe" #: src/ui/gtk/tape.cc:302 src/ui/gtk/tape.cc:308 msgid "" msgstr "" #: src/ui/gtk/tape.cc:309 msgid "/Run File" msgstr "/Datei Ausführen" #: src/ui/gtk/tape.cc:310 msgid "/Load File" msgstr "/Datei Laden" #: src/ui/gtk/tape.cc:311 msgid "/Edit Header" msgstr "/Header Ändern" #: src/ui/gtk/tape.cc:312 msgid "/Delete File" msgstr "/Datei Löschen" #: src/ui/gtk/tape.cc:313 msgid "/Rename File" msgstr "/Datei Umbenennen" #: src/ui/gtk/tape.cc:314 msgid "/Export File" msgstr "/Datei Exportieren" #: src/ui/gtk/tape.cc:315 msgid "/Export Wav" msgstr "/WAV Exportieren" #: src/ui/gtk/ui_gtk.cc:794 msgid "Info" msgstr "Info" #: src/ui/gtk/wav.cc:134 msgid "Open" msgstr "Öffnen" #: src/ui/gtk/wav.cc:154 msgid "Play" msgstr "Abspielen" #: src/ui/gtk/options.cc:94 msgid "Save profiles?" msgstr "Profile speichern?" #: src/ui/gtk/options.cc:96 msgid "" "Some profiles were changed!\n" "\n" "'Yes' will save changes to disk, 'No' will reject all changes.\n" "'Cancel': will allow to continue editing." msgstr "" "Einstellugen wurden verändert!\n" "\n" "'Ja' schreibt die Änderungen in die Konfigurationsdatei\n" "'Nein' verwirft die Ändrungen\n" "'Cancel' erlaubt das weitere Editieren der Profile." #: src/ui/gtk/options.cc:605 msgid "Open ROM Image..." msgstr "ROM Image öffnen..." #: src/ui/gtk/options.cc:892 #, c-format msgid "ROM image is '%s'. The ROM size needs to be %04xh (%d) bytes." msgstr "ROM-Image Datei: '%s'. Die ROM-Größe muss %04xh (%d) Byte betragen." #: src/ui/gtk/video.cc:258 msgid "" msgstr "-" #: src/ui/gtk/video.cc:262 msgid "Theora/Ogg" msgstr "Theora/Ogg" #: src/ui/gtk/video.cc:266 msgid "AVI" msgstr "AVI" #: src/ui/gtk/video.cc:270 msgid "MPEG 4" msgstr "MPEG 4" #: src/ui/gtk/video.cc:274 msgid "Dirac" msgstr "Dirac" #: src/ui/gtk/video.cc:278 msgid "Schroedinger" msgstr "Schroedinger" #: src/ui/gtk/video.cc:282 msgid "Animated GIF" msgstr "GIF (animiert)" #: src/ui/gtk/video.cc:286 msgid "VNC" msgstr "VNC" #~ msgid "Saturation" #~ msgstr "Sättigung" #~ msgid "Black Level" #~ msgstr "Schwarz Wert" #~ msgid "White Level" #~ msgstr "Weiß Wert" #~ msgid "A_udio..." #~ msgstr "_Audio..." #~ msgid "gtk-cancel" #~ msgstr "gtk-cancel" #~ msgid "" #~ "Marat Fayzullin\n" #~ " for the Z80 emulation core used for the main processor\n" #~ " (I needed to tweak some bits of the emulation core; see\n" #~ " src/z80core/README for the list of changes)\n" #~ "Marcel de Kogel\n" #~ " for the Z80 emulation core used for the KC floppy\n" #~ " processor\n" #~ "Thomas Bretz\n" #~ " for the OS/2 port of KCemu (see http://www.d4m.de/)\n" #~ "Thomas Ludwig\n" #~ " for the great KC website at http://www.kc85emu.de/ and\n" #~ " lots of bugreports and hints how to make KCemu better\n" #~ "Holger Krull\n" #~ " for providing lots of information about the LC 80\n" #~ " computer (see http://www.lc80.de/)\n" #~ "Kev Thacker\n" #~ " for interesting insights concerning the floppy emulation\n" #~ " (he's also the author of the KC driver for M.E.S.S. the\n" #~ " Multi-Emulator Super System, see http://mess.emuverse.com/)\n" #~ "Volker Pohlers\n" #~ " for help with the windows port, technical information and\n" #~ " bugreports\n" #~ "Alexander Schön\n" #~ " for starting the windows port, lots of tips and for providing\n" #~ " a huge pile of files for use with the emulator or with\n" #~ " information about the various systems" #~ msgstr "" #~ "Marat Fayzullin\n" #~ " für den Z80 Prozessor Emulator\n" #~ "Marcel de Kogel\n" #~ " für die Z80 Prozessor Emulator der bei der Emulation\n" #~ " des KC85 Floppy systems zum Einsatz kommt\n" #~ "Thomas Bretz\n" #~ " für die OS/2 Portierung (siehe http://www.d4m.de/)\n" #~ "Thomas Ludwig\n" #~ " für die großartigen Webseiten zum KC (http://www.kc85emu.de/),\n" #~ " Tips und Verbesserungsvorschläge sowie die Hilfe bei der\n" #~ " Fehlersuche\n" #~ "Holger Krull\n" #~ " für Informationen zum LC 80 (siehe http://www.lc80.de/) und\n" #~ " Z1013 (siehe http://www.z1013.de/)\n" #~ "Kev Thacker\n" #~ " für Tips & Tricks zur Floppy-Emulation\n" #~ " siehe http://mess.emuverse.com/ für seine KC Emulation für\n" #~ " M.E.S.S. (Multi-Emulator Super System)\n" #~ "Volker Pohlers\n" #~ " für seine Hilfe zur Windows-Version von KCemu und die\n" #~ " unermüdliche Unterstützung mit technischen Informationen\n" #~ " zu den verschiedenen emulierten Systemen\n" #~ " (siehe http://hc-ddr.hucki.net/)\n" #~ "Alexander Schön\n" #~ " für den Beginn der Windows-Version, Tips und Vorschläge\n" #~ " zur Verbesserung des Emulators und die Motivation weiterzumachen" #~ msgid "gtk-ok" #~ msgstr "gtk-ok" #~ msgid "" #~ "No\n" #~ "Yes" #~ msgstr "" #~ "Nein\n" #~ "Ja" #~ msgid "gtk-quit" #~ msgstr "gtk-quit" #~ msgid "gtk-clear" #~ msgstr "gtk-clear" #~ msgid "gtk-save" #~ msgstr "gtk-save" #~ msgid "VDIP2: Vinculum USB ROM (CAOS 4.2)" #~ msgstr "VDIP2: Vinculum USB ROM (CAOS 4.2)" #~ msgid "VDIP2: Vinculum USB ROM (CAOS 4.4)" #~ msgstr "VDIP2: Vinculum USB ROM (CAOS 4.4)" #~ msgid "Swap ROMs:" #~ msgstr "ROMs tauschen:" #~ msgid "" #~ "Swap the F8 and FC ROMs of the D004 device.\n" #~ "\n" #~ "The firmware version of the ROMs depends actually on the type of the " #~ "emulated system.\n" #~ "\n" #~ "KC85/2-4 default to the standard FC ROM version 2.0 whereas the KC85/5 " #~ "system has the extended ROM version 3.1 in slot FC by default." #~ msgstr "" #~ "Vertauschen der F8 und FC ROMs des D004 Floppy Geräts.\n" #~ "\n" #~ "Die Firmware-Version der ROMs hängt vom Typ des emulierten Systems ab.\n" #~ "\n" #~ "KC85/2-4 haben den Standard-ROM mit der Version 2.0 im Slot FC, der " #~ "KC85/5 dagegen den erweiterten ROM mit der Versionsnummer 3.1." #~ msgid "Z1013 Emulator" #~ msgstr "Z1013 Emulator" #~ msgid "KC 87 Emulator" #~ msgstr "KC 87 Emulator" #~ msgid "KC 85/1 Emulator" #~ msgstr "KC 85/1 Emulator" #~ msgid "KC 85/2 Emulator" #~ msgstr "KC 85/2 Emulator" #~ msgid "KC 85/3 Emulator" #~ msgstr "KC 85/3 Emulator" #~ msgid "KC 85/4 Emulator" #~ msgstr "KC 85/4 Emulator" #~ msgid "LC80 Emulator" #~ msgstr "LC80 Emulator" #~ msgid "A5105 Emulator" #~ msgstr "A5105 Emulator" #~ msgid "/Emulator/_Run..." #~ msgstr "/Emulator/_Ausführen..." #~ msgid "/Emulator/_Load..." #~ msgstr "/Emulator/_Laden..." #~ msgid "/Emulator/_Tape..." #~ msgstr "/Emulator/_Kassette..." #~ msgid "/Emulator/_Disk..." #~ msgstr "/Emulator/_Diskette..." #~ msgid "/Emulator/_Module..." #~ msgstr "/Emulator/_Module..." #~ msgid "/Emulator/A_udio..." #~ msgstr "/Emulator/A_udio..." #~ msgid "/Emulator/sep1" #~ msgstr "/Emulator/sep1" #~ msgid "/Emulator/R_eset" #~ msgstr "/Emulator/_Reset" #~ msgid "/Emulator/_Power On" #~ msgstr "/Emulator/_Einschalten" #~ msgid "/Emulator/sep2" #~ msgstr "/Emulator/sep2" #~ msgid "/Emulator/_Quit Emulator" #~ msgstr "/Emulator/Emulator _beenden" #~ msgid "/View/_Debugger" #~ msgstr "/Ansicht/_Debugger" #~ msgid "/View/_Info" #~ msgstr "/Ansicht/_Information" #~ msgid "/Options/_Colors" #~ msgstr "/Optionen/_Farben" #~ msgid "/Options/sep" #~ msgstr "/Optionen/sep" #~ msgid "/Help/_Help" #~ msgstr "/Hilfe/_Hilfe" #~ msgid "/Help/sep3" #~ msgstr "/Hilfe/sep3" #~ msgid "/Help/_About KCemu" #~ msgstr "/Hilfe/_Über KCemu" #~ msgid "/Help/_Thanks!" #~ msgstr "/Hilfe/_Danksagung" #~ msgid "/Help/sep4" #~ msgstr "/Hilfe/sep4" #~ msgid "/sep3" #~ msgstr "/sep3" #~ msgid "%s (%s)" #~ msgstr "%s (%s)" #~ msgid "[ Version ]" #~ msgstr "[ Version ]" #, fuzzy #~ msgid "/Options/Options..." #~ msgstr "/Optionen/sep" #~ msgid "Ok" #~ msgstr "Ok" #~ msgid "No" #~ msgstr "Nein" #~ msgid "Libraries & Projects" #~ msgstr "Projekte & Bibliotheken" #~ msgid "KCemu: Copying" #~ msgstr "KCemu: Lizenz" #~ msgid "Browse" #~ msgstr "Durchsuchen" #~ msgid "Eject" #~ msgstr "Auswerfen" #~ msgid "Attach" #~ msgstr "Aktivieren" #~ msgid "Detach" #~ msgstr "Deaktivieren" KCemu-0.5.1/po/de.gmo0000644001050700006200000025124711345001730013724 0ustar glaubitzfbedv4Lh(6i(P ^ipCu<uf vFsvvKywcw<)x<fx5xbxFy>zn[z6z{<{<U{8{{xP||}~"V q ~ ʁ ؁   "-3 9G[z>&(@ ^jquy  $>ȃ@ HR Xy  ΄ Մ   ' 4 A N [ h u Ʌ ,? F P Z d n x p$+4=Vl݇  !%*|P|͈<JCˉщ։މ 2AQcd ȊҊي/4[deȌ . ;H er z ͍0 GRY ku  ͎  !&=:R4ӑ "<MRX g t ƒ Ғ ޒ "1ATl~ Ǔԓ $)1 DO Tb y   єݔ 9P_x•ɕϕߕ   ( 2<DIay ,pՖFI`vї   ! (4'9 anv Θ֘*@Vl=ř:?Rel +ΚC >K Zetě ӛߛ!'̜Ҝ)'=BU \ g t  ĝʝ6ѝ)2 ۟ڠ ).2 anwɡѡ١  . 8E L V aox    ɢ Ӣ   '- >H^ oz £դ'(Pd${Υ! & > L V a l x  æ Ц ݦ P8j =@y>|B_,) ,V + l F!hc!<!< "HF"6""l"lJ#5##$R%e&F'`(()'*B*R*b*s*** *****++ %+3+F+L+ R+`+t++++=+$+$,=,X, v,,,, ,, ,,$,,G,I,- v-- -- -- - -- . . #./.8.A.J. S. `. m. z. . . . ..... /&/*/&./&U/|/ ///////// g0%r00 00 0001%1C1a11 1 1 1118182&=2Yd222 2 2 2 223 3 3 "3.363eI33334*5d5D6\L6 66&667 77 ,7M7S7g777777 78 8 8(8@8 I8 U8 c8q8 w88 8 88 88888>9::|;;;;;;<<< <-<@<$T<y<<< < <<< <<==5=R=d==== ==== >">(>0> A>N> S>a> x> >> > >> >>>??8?O?^?w???????????@@@ @)@2@9@>@V@ n@y@@@9@e@TAWApAAAAAAA&AB B+B 1B~VS5H'm6/XD!AJF%1~=}2IOe_ PdExu h3] SdM,W*g-hw}8\/MF347BKG(7m*ij_DH>;U9{c@^jan&p$ B:RER `2lst,YZ[#f =o|0t6g"rop rxLnUkl4<aq^Xv\e$VCz`Z #9N0 GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. KCemu comes with ABSOLUTELY NO WARRANTY; for details run `kcemu --warranty'. This is free software, and you are welcome to redistribute it under certain conditions; run `kcemu --license' for details. usage: kcemu [-0123456789aAcestfhdlvVHFMELW] -0: select Z1013 profile -1: select Z9001 / KC 85/1 profile -2: select KC 85/2 profile -3: select KC 85/3 profile -4: select KC 85/4 profile -5: select KC 85/5 profile -6: select Poly-880 profile -7: select KC 87 profile -8: select LC 80 profile -9: select BIC/A5105 profile -a --autostart: autostart program on startup (kc85/3 - kc85/5 only) -A --address: override start address of autostart program -d --datadir: set data directory (for ROM images) -E --effects: enable display effects for scaled screen output -f --floppy: attach disk on startup -F --fullscreen: start in fullscreen mode (if supported by gui) -h --help: display help -H --home: overwrite setting for home directory -l --localedir: set locale directory -L --license: show license -M --modules: insert modules on startup (e.g. -M M011,M027) -o --debug-output: write debug output to file -p --profile: start with given profile -P --select-profile: show profile selector -s --scale: scale display (allowed values: 1, 2 and 3) -t --tape: attach tape on startup -v --version: show KCemu version and configuration -V --viewlist: view verbose list of available emulations -W --warranty: show warranty NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. BIC/A5105, only the base device is emulated, no floppy device. BIC/A5105, the full system including the floppy device. CP/M based Micro-Computer presented in the magazine "Funkamateur" by A. Mugler and H. Mathes. Export variant of the LC 80 with 12k ROM including chess program. HC900 (later called KC 85/2) with 16k RAM and 8k ROM. System is called HC-CAOS 2.2 (home computer - cassette aided operating system). BASIC is only available as external module. KC 85/3 with 16k RAM, 8k system ROM with HC-CAOS 3.1 and 8k BASIC ROM. KC 85/4 with 64k RAM, 64k screen memory, 12k system ROM with HC-CAOS 4.2 and 8k BASIC ROM. Like the KC 87.11 but without the color extension card. Like the KC 87.21 but without the color extension card. Like the z9001.10 but with color extension card. Micro-Computer presented in the book "Praktische Microcomputertechnik" by Manfred Kramer. Minimal Z80 learning system designed by Dipl.-Ing. Joachim Czepa. Minimal Z80 learning system presented in the magazine "rfe" by Eckhard Schiller. New batch of KC 87.20 with no known hardware differences. New batch of KC 87.21 with no known hardware differences. New series with extended BASIC ROM (still 10k but with some routines for plotter support were added). Polycomputer 880 with chess program rom from SC1. Polycomputer 880. Single board computer LC 80 with 1k RAM and 1 x 2k ROM. Single board computer LC 80 with 1k RAM and 2 x 1k ROM. Successor of the Z9001 with internal 10k BASIC ROM. Z1013 with 16k RAM and 2k ROM, running at 2MHz. Successor of the Z1013.01 but with industry grade circuits clocked at 2MHz. Z1013 with 1k sRAM and 2k ROM, running at 2MHz. Industry version with only 1k static RAM. Monitor version 2.02. Z1013 with 64k RAM and 2k ROM, running at 2MHz. The ROM contains two system images with 2k each. Loaded is the second image with version A.2 that supports an extended keyboard with an 8x8 matrix. Z1013 with 64k RAM and 2x2k ROM, running at 2MHz. The ROM contains two system images with 2k each. Loaded is the first image with version 2.02 that is supposed to work with the foil keypad shipped by the manufacturer. Z1013 with 64k RAM and 4k ROM. The ROM contains the 'Super Ur-Lader 5.0' that can read arbitrary tape files as system monitor. The hardware modification port at address 4h is emulated which allows programs to switch off the system ROM. Z1013 with 64k RAM and 4k ROM. The ROM contains the Bootloader BL4 that can load monitor images from floppy disk or can start the CP/M system. Z1013 with 64k RAM and 4k ROM. The ROM is the extended version tagged 2.028 RB that has a different keyboard driver for the keyboard K7659. Z9001 (later called KC 85/1) with monochrome display, no internal BASIC ROM. This computer has 16k RAM and 4k ROM with the robotron z9001 system. (c) 1997-2010 Torsten Paul/Delete File/Edit Header/Edit _Header/Export File/Export Wav/Export _Wav/Load File/Re_name File/Rename File/Run File/_Add File/_Delete File/_Export File/_Load File/_Run File/sep1/sep2128k ROM Bank192 KByte RAM/EPROM2,5 MB Modul Bank (%d / %02xh)256k RAM FloppyNetwork settings for WizNET module (IP-Addresses only!)Special settings for KC 85/2..5System profiles...User profiles...[ Version ]???AVIAboutAnimated GIFAssemblerAudioAudio/Video codec library libavcodecAudio:Automatically scroll to end address if the address is changed.Automatically scroll to start address if the address is changed.AutostartBASICBBC Research - Dirac Video CodecBITEX (c000h-d7ffh)BackgroundBasic Module (c000h-e7ffh)Basis DeviceBootlader BL4BottomBrightnessBrosig-ROM K7659/2.028Busdrivers:CAOS 2.2CAOS 3.1CAOS 3.3CAOS 3.4CAOS 4.1 (C)CAOS 4.1 (E)CAOS 4.2 (C)CAOS 4.2 (E)CAOS 4.3 (C)CAOS 4.3 (E)CAOS 4.4 (C)CAOS 4.4 (E)CGA Charset-ROMCGA Charset-ROM (extended)CPM-Z9 64k RAMCPM-Z9 BOOT (c000h-c7ffh)CPM-Z9 FloppyCPUCTCCan't attach disk-file.Can't attach tape-archive.Can't export file.CancelChannel 0Channel 1Channel 2Channel 3Channel AChannel BCharset-ROMClear plotting area. When rendering to a PDF file a new page is created and plotting continues in the same file.CloseCollapse user profile level...ColorsComment:ContrastCopy selected profile...Create new profile...D002: Busdriver [%02X]D004 Version 2.0 (02.01.1989)D004 Version 3.0 (07.12.1997)D004 Version 3.1 (22.01.2003)D004 Version 3.2 (28.10.2008)D004:DNS Server:DSE-ROM 1DSE-ROM 2DebuggerDefine the color to use for plotting.Define the initial x position of the pen after clearing the plotting area. Measured in millimeters from the top left corner.Define the initial y position of the pen after clearing the plotting area. Measured in millimeters from the top left corner.Define the line width for plotting. Measured in millimeters.Delay between screen refreshes of the drawing area in milliseconds.DiracDiskDisk 1:Disk 2:Disk 3:Disk 4:DisplayDisplay Debug:Display Effects:Display IRM Access:Display Scale:Display refreshEDAS (c000h-e7ffh)ERROR: no tape specified, use the -t option to select the tape archive you want to process Edit TapeEditorEnable / Disable display debug code. When enabled the display cache behaviour will be graphically visualized. This setting is effective only if the display scale is set to 1.Enable / Disable display effects for scale factors above 1. When enabled a scan-line effect will be used for scale factor of 2 and a smoothing effect for scale factor 3.Enable or disable the D004 Floppy Basis Device.Enable or disable the second D004 ROM at slot F8. The standard ROM is available at slot FC.EncoderEnd address of the memory area to save. The byte at the given address is included in the memory dump.End address:Execute StepExpand user profile level...Export As...F8 ROM:FDC (Kramer)FDC (Schneider)FLAC - Free Lossless Audio CodecFileFile PropertiesFile `%s' [%s] added.File `%s' loaded.File `%s' saved.Floppy Disk Basis F8Floppy Disk Basis FCFloppy Disk Basis [F0]ForegroundFormatFrames per SecondGDC 82720GTK+ - The GIMP ToolkitGateway:HC-900 CAOSHard Disk 1:Hard Disk 2:HelpHelp _IndexIDAS / ZM (c000h-e7ffh)IO-MonitorIP Address:IRM Color ExpansionIRQ Vector:IRQ:InfoInput Image PropertiesIt was not possible to automatically determine the type of the selected file. Thus I don't know at which address the file should be loaded To load the file nevertheless you need to type in the needed values yourself.It's not possible to have more than one module of type %s!It's not possible to have more than one module of type %s! (And due to some technical points of the emulator it's also not possible to have both the Kramer and Schneider variant of the floppy module active at the same time.)It's not possible to have more than two RAM-Floppy modules. The first one is running on port 98h and the second one on port 58h.Joystick (%d.%d.%d): %s on %sJoystick removed!KC-BASICKC-BASIC (EDAS/TEMO/FORTH)KC-BASIC (EDAS/TEMO/USB)KC-CAOS 3.1 (8000h-8fffh)KC-Pascal ModuleKC85KCemuKCemu _LicenceKCemu: AboutKCemu: AudioKCemu: Can't load file...KCemu: Color ConfigurationKCemu: DebuggerKCemu: DiskKCemu: HelpKCemu: InfoKCemu: KeyboardKCemu: Licence & WarrantyKCemu: ModuleKCemu: PlotterKCemu: ProfilesKCemu: Rename FileKCemu: Save Memory DumpKCemu: ScreenshotKCemu: Select File...KCemu: Select profile...KCemu: TapeKCemu: ThanksKCemu: VideoKCemu: Vinculum USBKCemu: Warning...KeyboardLAME - LAME Ain't an MP3 EncoderLeftLength:License & WarrantyLine widthLoadLoad address:M001: Digital In / OutM003: V24M006: BasicM008: JoystickM011: 64k RAMM012: TexorM022: Expander RAM (16k)M026: ForthM027: DevelopmentM032: 256k Segmented RAMM033: TypeStar + RAMDOSM034: 512k Segmented RAMM035: 1M Segmented RAMM035x4: 4M RAMM036: 128k Segmented RAMM052: Network + USBM900: WordPro '86 (KC85/3)M901: WordPro '86 (KC85/4)MPEG 4MediaMega-ROM ModuleMode:ModuleModule 1:Module 2:Module 3:Module 4:Module 5:Module 6:Module 7:Module 8:ModulesNameName in KC file-header:Name in tape-directory:Netmask:NetworkNo _Speed LimitNo _Warranty!No module slots available for this computer.Number of D002 busdriver devices to add to the system. The maximum number of emulated busdrivers is currently 4.OKOS PI/88 (black/white)OS PI/88 (white/blue)OS PI/88 (yellow/blue)Ogg & Vorbis librariesOpenOpen Clip Art LibraryOpen ROM Image...Optional-ROM 1Override modules in this profilePIOPaper colorPausePen colorPeoplePl_otter...PlayPlease enter the new name for the file.Plot to PDF:PlotterPlotter Module (c000h-e7ffh)Plotter XY4131Profile Name:ProfilesProjects & LibrariesQualityRAF 4MB (port 20h)RAF 4MB (port 24h)RAM Module (16k/4000h)RAM Module (16k/8000h)RAM Module (1k/2400h)RAM Module (2k/0800h)RAM Module (2k/2800h)RAM Module (32k/8000h)RAM Module (4k/1000h)RAM Module (4k/3000h)RAM Module (8k/2000h)ROM image is '%s'. The ROM size needs to be %04xh (%d) bytes.ROM-Bank System with menuROM-Bank System without menuROMsRTC (port 20h-2fh)RTC (port 70h-7fh)R_esetReading %s `%s' (%d/%d/%d).ReassemblerRecordRightSC1-ROMSaveSave Memory DumpSave profiles?Save the plotted picture as PNG image file.Scaling factor for the emulation window. Allowed values are 1 to 3.SchroedingerScreens_hot...ScreenshotSelect File...Select Profile...Select disk...Select file...Select tape-archive...Show penShow plot areaSingle StepSizeSize of the memory dump in bytes.Slot %dSlot 1:Slot 2:Some profiles were changed! 'Yes' will save changes to disk, 'No' will reject all changes. 'Cancel': will allow to continue editing.Sorry, keyboard display not configured.StartStart Program after LoadingStart address of the memory area to save.Start address:Start record on resetStopSuper Ur-Lader 5.0SystemSystem-ROMSystem-ROM 1System-ROM 2System-ROM 3System-ROM A2System-ROM V2.0System:TapeTape name:Tape:ThanksThe file '%s' doesn't exist. Do you want to create it?The file you selected contains more than one program. Only the first program will be loaded. If you want to access all the contained programs add this file to a tape-archive!The file you selected couldn't be loaded!The file you selected has a name that is already present in the current tape archive. Please select a different name to add this file to the tape archive or use the cancel button to skip this file.The format of the selected file is not recognized.Theora/OggThis setting is only used when emulating a KC 85/3 where it enables the emulation of the display dissortion when the screen memory is accessed by the CPU.TopTraceTypeUpdateUser-ROMVDIP1: Vinculum USB ROM V1.2VDIP2: Vinculum USB ROM V2.1VDIP: Vinculum USBVNCVariant:VideoVideo fileVinculum USBVinculum _USB...X originXiph.org Foundation - Theora video compressionXvid projectY originZ1013 Charset-ROMZ9001 Charset-ROMZ9001 Charset-ROM (german)ZM30 (c000h-ccffh)Zoom x1Zoom x2Zoom x3Zoom x_1Zoom x_2Zoom x_3[ Build ][ Licence ][ Text ] [ more text ... ][ Title ][ Warranty ]_About_Audio..._Colors..._Context Help_Disk..._Display Effects_Emulator_Help_Keyboard_Load..._Menubar_Module..._Options_Power On_Profiles..._Quit Emulator_Run..._Save..._Statusbar_Tape..._Thanks!_Video..._View_Vinculum USB...autostartavailable emulations:bit input/outputbyte inputbyte input/outputbyte outputcreate file?decdisk-file `%s' attached.error in given load address! valid addresses have to be in the range from 0 to 65535 hexadecimal values need to be prefixed with 0x (e.g. 0x1234), octal values require a leading 0 (e.g. 0444)error in given start address!hexhttp://ffmpeg.org/http://flac.sourceforge.net/http://kcemu.sourceforge.net/http://lame.sourceforge.net/http://openclipart.org/http://www.bbc.co.uk/rd/projects/dirac/http://www.gtk.org/http://www.libsdl.org/http://www.mega-nerd.com/libsndfile/http://www.theora.org/http://www.vorbis.com/http://www.xvid.org/libSDL - Simple DirectMedia Layerlibsndfileno KC-filename given!no tape-filename given!rom_assemblerrom_basicrom_caos_crom_caos_erom_charsetrom_d004_f8rom_d004_fcrom_debuggerrom_editorrom_reassemblerrom_systemrom_system_1rom_system_2rom_system_3rom_system_4rom_usertape-archive `%s' attached.Project-Id-Version: KCemu v0.4 Report-Msgid-Bugs-To: Torsten.Paul@gmx.de POT-Creation-Date: 2010-03-07 20:51+0100 PO-Revision-Date: 2010-03-06 00:59+0100 Last-Translator: Torsten Paul Language-Team: German MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Poedit-Language: German X-Poedit-Country: GERMANY Deutsche Übersetzung der GNU General Public License Erstellt im Auftrag der S.u.S.E. GmbH [suse@suse.de] von Katja Lachmann Übersetzungen [na194@fim.uni-erlangen.de], überarbeitet von Peter Gerwinski [peter.gerwinski@uni-essen.de] (31. Oktober 1996) Diese Übersetzung wird mit der Absicht angeboten, das Verständnis der GNU General Public License (GNU-GPL) zu erleichtern. Es handelt sich jedoch nicht um eine offizielle oder im rechtlichen Sinne anerkannte Übersetzung. Die Free Software Foundation (FSF) ist nicht der Herausgeber dieser Übersetzung, und sie hat diese Übersetzung auch nicht als rechtskräftigen Ersatz für die Original-GNU-GPL anerkannt. Da die Übersetzung nicht sorgfältig von Anwälten überprüft wurde, können die Übersetzer nicht garantieren, daß die Übersetzung die rechtlichen Aussagen der GNU-GPL exakt wiedergibt. Wenn Sie sichergehen wollen, daß von Ihnen geplante Aktivitäten im Sinne der GNU-GPL gestattet sind, halten Sie sich bitte an die englischsprachige Originalversion. Die Free Software Foundation möchte Sie darum bitten, diese Übersetzung nicht als offizielle Lizenzbedingungen für von Ihnen geschriebene Programme zu verwenden. Bitte benutzen Sie hierfür stattdessen die von der Free Software Foundation herausgegebene englischsprachige Originalversion. This is a translation of the GNU General Public License into German. This translation is distributed in the hope that it will facilitate understanding, but it is not an official or legally approved translation. The Free Software Foundation is not the publisher of this translation and has not approved it as a legal substitute for the authentic GNU General Public License. The translation has not been reviewed carefully by lawyers, and therefore the translator cannot be sure that it exactly represents the legal meaning of the GNU General Public License. If you wish to be sure whether your planned activities are permitted by the GNU General Public License, please refer to the authentic English version. The Free Software Foundation strongly urges you not to use this translation as the official distribution terms for your programs; instead, please use the authentic English version published by the Free Software Foundation. _________________________________________________________________ GNU General Public License Deutsche Übersetzung der Version 2, Juni 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Jeder hat das Recht, diese Lizenzurkunde zu vervielfältigen und unveränderte Kopien zu verbreiten; Änderungen sind jedoch nicht gestattet. Diese Übersetzung ist kein rechtskräftiger Ersatz für die englischsprachige Originalversion! Vorwort Die meisten Softwarelizenzen sind daraufhin entworfen worden, Ihnen die Freiheit zu nehmen, die Software weiterzugeben und zu verändern. Im Gegensatz dazu soll Ihnen die GNU General Public License, die allgemeine öffentliche GNU-Lizenz, ebendiese Freiheit garantieren. Sie soll sicherstellen, daß die Software für alle Benutzer frei ist. Diese Lizenz gilt für den Großteil der von der Free Software Foundation herausgegebenen Software und für alle anderen Programme, deren Autoren ihr Werk dieser Lizenz unterstellt haben. Auch Sie können diese Möglichkeit der Lizenzierung für Ihre Programme anwenden. (Ein anderer Teil der Software der Free Software Foundation unterliegt stattdessen der GNU Library General Public License, der allgemeinen öffentlichen GNU-Lizenz für Bibliotheken. ) Die Bezeichnung "freie" Software bezieht sich auf Freiheit, nicht auf den Preis. Unsere Lizenzen sollen Ihnen die Freiheit garantieren, Kopien freier Software zu verbreiten (und etwas für diesen Service zu berechnen, wenn Sie möchten), die Möglichkeit, die Software im Quelltext zu erhalten oder den Quelltext auf Wunsch zu bekommen. Die Lizenzen sollen garantieren, daß Sie die Software ändern oder Teile davon in neuen freien Programmen verwenden dürfen - und daß Sie wissen, daß Sie dies alles tun dürfen. Um Ihre Rechte zu schützen, müssen wir Einschränkungen machen, die es jedem verbieten, Ihnen diese Rechte zu verweigern oder Sie aufzufordern, auf diese Rechte zu verzichten. Aus diesen Einschränkungen folgen bestimmte Verantwortlichkeiten für Sie, wenn Sie Kopien der Software verbreiten oder sie verändern. Beispielsweise müssen Sie den Empfängern alle Rechte gewähren, die Sie selbst haben, wenn Sie - kostenlos oder gegen Bezahlung - Kopien eines solchen Programms verbreiten. Sie müssen sicherstellen, daß auch sie den Quelltext erhalten bzw. erhalten können. Und Sie müssen ihnen diese Bedingungen zeigen, damit sie ihre Rechte kennen. Wir schützen Ihre Rechte in zwei Schritten: (1) Wir stellen die Software unter ein Urheberrecht (Copyright), und (2) wir bieten Ihnen diese Lizenz an, die Ihnen das Recht gibt, die Software zu vervielfältigen, zu verbreiten und/oder zu verändern. Um die Autoren und uns zu schützen, wollen wir darüberhinaus sicherstellen, daß jeder erfährt, daß für diese freie Software keinerlei Garantie besteht. Wenn die Software von jemand anderem modifiziert und weitergegeben wird, möchten wir, daß die Empfänger wissen, daß sie nicht das Original erhalten haben, damit von anderen verursachte Probleme nicht den Ruf des ursprünglichen Autors schädigen. Schließlich und endlich ist jedes freie Programm permanent durch Software-Patente bedroht. Wir möchten die Gefahr ausschließen, daß Distributoren eines freien Programms individuell Patente lizensieren - mit dem Ergebnis, daß das Programm proprietär würde. Um dies zu verhindern, haben wir klargestellt, daß jedes Patent entweder für freie Benutzung durch jedermann lizenziert werden muß oder überhaupt nicht lizenziert werden darf. Es folgen die genauen Bedingungen für die Vervielfältigung, Verbreitung und Bearbeitung: Bedingungen für die Vervielfältigung, Verbreitung und Bearbeitung Paragraph 0. Diese Lizenz gilt für jedes Programm und jedes andere Werk, in dem ein entsprechender Vermerk des Copyright-Inhabers darauf hinweist, daß das Werk unter den Bestimmungen dieser General Public License verbreitet werden darf. Im folgenden wird jedes derartige Programm oder Werk als "das Programm" bezeichnet; die Formulierung "auf dem Programm basierendes Werk" bezeichnet das Programm sowie jegliche Bearbeitung des Programms im urheberrechtlichen Sinne, also ein Werk, welches das Programm, auch auszugsweise, sei es unverändert oder verändert und/oder in eine andere Sprache übersetzt, enthält. (Im folgenden wird die Übersetzung ohne Einschränkung als "Bearbeitung" eingestuft.) Jeder Lizenznehmer wird im folgenden als "Sie" angesprochen. Andere Handlungen als Vervielfältigung, Verbreitung und Bearbeitung werden von dieser Lizenz nicht berührt; sie fallen nicht in ihren Anwendungsbereich. Der Vorgang der Ausführung des Programms wird nicht eingeschränkt, und die Ausgaben des Programms unterliegen dieser Lizenz nur, wenn der Inhalt ein auf dem Programm basierendes Werk darstellt (unabhängig davon, daß die Ausgabe durch die Ausführung des Programmes erfolgte). Ob dies zutrifft, hängt von den Funktionen des Programms ab. Paragraph 1. Sie dürfen auf beliebigen Medien unveränderte Kopien des Quelltextes des Programms, wie sie ihn erhalten haben, anfertigen und verbreiten. Voraussetzung hierfür ist, daß Sie mit jeder Kopie einen entsprechenden Copyright-Vermerk sowie einen Haftungsausschluß veröffentlichen, alle Vermerke, die sich auf diese Lizenz und das Fehlen einer Garantie beziehen, unverändert lassen und desweiteren allen anderen Empfängern des Programms zusammen mit dem Programm eine Kopie dieser Lizenz zukommen lassen. Sie dürfen für den eigentlichen Kopiervorgang eine Gebühr verlangen. Wenn Sie es wünschen, dürfen Sie auch gegen Entgelt eine Garantie für das Programm anbieten. Paragraph 2. Sie dürfen Ihre Kopie(n) des Programms oder eines Teils davon verändern, wodurch ein auf dem Programm basierendes Werk entsteht; Sie dürfen derartige Bearbeitungen unter den Bestimmungen von Paragraph 1 vervielfältigen und verbreiten, vorausgesetzt, daß zusätzlich alle folgenden Bedingungen erfüllt werden: (a) Sie müssen die veränderten Dateien mit einem auffälligen Vermerk versehen, der auf die von Ihnen vorgenommene Modifizierung und das Datum jeder Änderung hinweist. (b) Sie müssen dafür sorgen, daß jede von Ihnen verbreitete oder veröffentlichte Arbeit, die ganz oder teilweise von dem Programm oder Teilen davon abgeleitet ist, Dritten gegenüber als Ganzes unter den Bedingungen dieser Lizenz ohne Lizenzgebühren zur Verfügung gestellt wird. (c) Wenn das veränderte Programm normalerweise bei der Ausführung interaktiv Kommandos einliest, müssen Sie dafür sorgen, daß es, wenn es auf dem üblichsten Wege für solche interaktive Nutzung gestartet wird, eine Meldung ausgibt oder ausdruckt, die einen geeigneten Copyright-Vermerk enthält sowie einen Hinweis, daß es keine Gewährleistung gibt (oder anderenfalls, daß Sie Garantie leisten), und daß die Benutzer das Programm unter diesen Bedingungen weiter verbreiten dürfen. Auch muß der Benutzer darauf hingewiesen werden, wie er eine Kopie dieser Lizenz ansehen kann. (Ausnahme: Wenn das Programm selbst interaktiv arbeitet, aber normalerweise keine derartige Meldung ausgibt, muß Ihr auf dem Programm basierendes Werk auch keine solche Meldung ausgeben). Diese Anforderungen betreffen das veränderte Werk als Ganzes. Wenn identifizierbare Abschnitte des Werkes nicht von dem Programm abgeleitet sind und vernünftigerweise selbst als unabhängige und eigenständige Werke betrachtet werden können, dann erstrecken sich diese Lizenz und ihre Bedingungen nicht auf diese Abschnitte, wenn sie als eigenständige Werke verbreitet werden. Wenn Sie jedoch dieselben Abschnitte als Teil eines Ganzen verbreiten, das ein auf dem Programm basierendes Werk darstellt, dann muß die Verbreitung des Ganzen nach den Bedingungen dieser Lizenz erfolgen, deren Bedingungen für weitere Lizenznehmer somit auf die Gesamtheit ausgedehnt werden - und damit auf jeden einzelnen Teil, unabhängig vom jeweiligen Autor. Somit ist es nicht die Absicht dieses Abschnittes, Rechte für Werke in Anspruch zu nehmen oder zu beschneiden, die komplett von Ihnen geschrieben wurden; vielmehr ist es die Absicht, die Rechte zur Kontrolle der Verbreitung von Werken, die auf dem Programm basieren oder unter seiner auszugsweisen Verwendung zusammengestellt worden sind, auszuüben. Ferner bringt ein einfaches Zusammenstellen eines anderen Werkes, das nicht auf dem Programm basiert, zusammen mit dem Programm oder einem auf dem Programm basierenden Werk auf ein- und demselben Speicher- oder Vertriebsmedium das andere Werk nicht in den Anwendungsbereich dieser Lizenz. Paragraph 3. Sie dürfen das Programm (oder ein darauf basierendes Werk gemäß Paragraph 2) als Objectcode oder in ausführbarer Form unter den Bedingungen von Paragraph 1 und 2 vervielfältigen und verbreiten - vorausgesetzt, daß Sie außerdem eine der folgenden Leistungen erbringen: (a) Liefern Sie das Programm zusammen mit dem vollständigen zugehörigen maschinenlesbaren Quelltext auf einem für den Datenaustausch üblichen Medium aus, wobei die Verteilung unter den Bedingungen der Paragraphen 1 und 2 erfolgen muß. Oder: (b) Liefern Sie das Programm zusammen mit einem mindestens drei Jahre lang gültigen schriftlichen Angebot aus, jedem Dritten eine vollständige maschinenlesbare Kopie des Quelltextes zur Verfügung zu stellen - zu nicht höheren Kosten als denen, die durch den physikalischen Kopiervorgang anfallen -, wobei der Quelltext unter den Bedingungen der Paragraphen 1 und 2 auf einem für den Datenaustausch üblichen Medium weitergegeben wird. Oder: (c) Liefern Sie das Programm zusammen mit dem schriftlichen Angebot der Zurverfügungstellung des Quelltextes aus, das Sie selbst erhalten haben. (Diese Alternative ist nur für nicht-kommerzielle Verbreitung zulässig und nur, wenn Sie das Programm als Objectcode oder in ausführbarer Form mit einem entsprechenden Angebot gemäß Absatz b erhalten haben.) Unter dem Quelltext eines Werkes wird diejenige Form des Werkes verstanden, die für Bearbeitungen vorzugsweise verwendet wird. Für ein ausführbares Programm bedeutet "der komplette Quelltext": Der Quelltext aller im Programm enthaltenen Module einschließlich aller zugehörigen Modulschnittstellen-Definitionsdateien sowie der zur Compilation und Installation verwendeten Skripte. Als besondere Ausnahme jedoch braucht der verteilte Quelltext nichts von dem zu enthalten, was üblicherweise (entweder als Quelltext oder in binärer Form) zusammen mit den Hauptkomponenten des Betriebssystems (Kernel, Compiler usw.) geliefert wird, unter dem das Programm läuft - es sei denn, diese Komponente selbst gehört zum ausführbaren Programm. Wenn die Verbreitung eines ausführbaren Programms oder des Objectcodes dadurch erfolgt, daß der Kopierzugriff auf eine dafür vorgesehene Stelle gewährt wird, so gilt die Gewährung eines gleichwertigen Zugriffs auf den Quelltext als Verbreitung des Quelltextes, auch wenn Dritte nicht dazu gezwungen sind, den Quelltext zusammen mit dem Objectcode zu kopieren. Paragraph 4. Sie dürfen das Programm nicht vervielfältigen, verändern, weiter lizenzieren oder verbreiten, sofern es nicht durch diese Lizenz ausdrücklich gestattet ist. Jeder anderweitige Versuch der Vervielfältigung, Modifizierung, Weiterlizenzierung und Verbreitung ist nichtig und beendet automatisch Ihre Rechte unter dieser Lizenz. Jedoch werden die Lizenzen Dritter, die von Ihnen Kopien oder Rechte unter dieser Lizenz erhalten haben, nicht beendet, solange diese die Lizenz voll anerkennen und befolgen. Paragraph 5. Sie sind nicht verpflichtet, diese Lizenz anzunehmen, da Sie sie nicht unterzeichnet haben. Jedoch gibt Ihnen nichts anderes die Erlaubnis, das Programm oder von ihm abgeleitete Werke zu verändern oder zu verbreiten. Diese Handlungen sind gesetzlich verboten, wenn Sie diese Lizenz nicht anerkennen. Indem Sie das Programm (oder ein darauf basierendes Werk) verändern oder verbreiten, erklären Sie Ihr Einverständnis mit dieser Lizenz und mit allen ihren Bedingungen bezüglich der Vervielfältigung, Verbreitung und Veränderung des Programms oder eines darauf basierenden Werkes. Paragraph 6. Jedesmal, wenn Sie das Programm (oder ein auf dem Programm basierendes Werk) weitergeben, erhält der Empfänger automatisch vom ursprünglichen Lizenzgeber die Lizenz, das Programm entsprechend den hier festgelegten Bestimmungen zu vervielfältigen, zu verbreiten und zu verändern. Sie dürfen keine weiteren Einschränkungen der Durchsetzung der hierin zugestandenen Rechte des Empfängers vornehmen. Sie sind nicht dafür verantwortlich, die Einhaltung dieser Lizenz durch Dritte durchzusetzen. Paragraph 7. Sollten Ihnen infolge eines Gerichtsurteils, des Vorwurfs einer Patentverletzung oder aus einem anderen Grunde (nicht auf Patentfragen begrenzt) Bedingungen (durch Gerichtsbeschluß, Vergleich oder anderweitig) auferlegt werden, die den Bedingungen dieser Lizenz widersprechen, so befreien Sie diese Umstände nicht von den Bestimmungen dieser Lizenz. Wenn es Ihnen nicht möglich ist, das Programm unter gleichzeitiger Beachtung der Bedingungen in dieser Lizenz und Ihrer anderweitigen Verpflichtungen zu verbreiten, dann dürfen Sie als Folge das Programm überhaupt nicht verbreiten. Wenn zum Beispiel ein Patent nicht die gebührenfreie Weiterverbreitung des Programms durch diejenigen erlaubt, die das Programm direkt oder indirekt von Ihnen erhalten haben, dann besteht der einzige Weg, sowohl das Patentrecht als auch diese Lizenz zu befolgen, darin, ganz auf die Verbreitung des Programms zu verzichten. Sollte sich ein Teil dieses Paragraphen als ungültig oder unter bestimmten Umständen nicht durchsetzbar erweisen, so soll dieser Paragraph seinem Sinne nach angewandt werden; im übrigen soll dieser Paragraph als Ganzes gelten. Zweck dieses Paragraphen ist nicht, Sie dazu zu bringen, irgendwelche Patente oder andere Eigentumsansprüche zu verletzen oder die Gültigkeit solcher Ansprüche zu bestreiten; dieser Paragraph hat einzig den Zweck, die Integrität des Verbreitungssystems der freien Software zu schützen, das durch die Praxis öffentlicher Lizenzen verwirklicht wird. Viele Leute haben großzügige Beiträge zu dem großen Angebot der mit diesem System verbreiteten Software im Vertrauen auf die konsistente Anwendung dieses Systems geleistet; es liegt am Autor/Geber, zu entscheiden, ob er die Software mittels irgendeines anderen Systems verbreiten will; ein Lizenznehmer hat auf diese Entscheidung keinen Einfluß. Dieser Paragraph ist dazu gedacht, deutlich klarzustellen, was als Konsequenz aus dem Rest dieser Lizenz betrachtet wird. Paragraph 8. Wenn die Verbreitung und/oder die Benutzung des Programms in bestimmten Staaten entweder durch Patente oder durch urheberrechtlich geschützte Schnittstellen eingeschränkt ist, kann der Urheberrechtsinhaber, der das Programm unter diese Lizenz gestellt hat, eine explizite geographische Begrenzung der Verbreitung angeben, in der diese Staaten ausgeschlossen werden, so daß die Verbreitung nur innerhalb und zwischen den Staaten erlaubt ist, die nicht ausgeschlossen sind. In einem solchen Fall beinhaltet diese Lizenz die Beschränkung, als wäre sie in diesem Text niedergeschrieben. Paragraph 9. Die Free Software Foundation kann von Zeit zu Zeit überarbeitete und/oder neue Versionen der General Public License veröffentlichen. Solche neuen Versionen werden vom Grundprinzip her der gegenwärtigen entsprechen, können aber im Detail abweichen, um neuen Problemen und Anforderungen gerecht zu werden. Jede Version dieser Lizenz hat eine eindeutige Versionsnummer. Wenn in einem Programm angegeben wird, daß es dieser Lizenz in einer bestimmten Versionsnummer oder "jeder späteren Version" ("any later version") unterliegt, so haben Sie die Wahl, entweder den Bestimmungen der genannten Version zu folgen oder denen jeder beliebigen späteren Version, die von der Free Software Foundation veröffentlicht wurde. Wenn das Programm keine Versionsnummer angibt, können Sie eine beliebige Version wählen, die je von der Free Software Foundation veröffentlicht wurde. Paragraph 10. Wenn Sie den Wunsch haben, Teile des Programms in anderen freien Programmen zu verwenden, deren Bedingungen für die Verbreitung anders sind, schreiben Sie an den Autor, um ihn um die Erlaubnis zu bitten. Für Software, die unter dem Copyright der Free Software Foundation steht, schreiben Sie an die Free Software Foundation; wir machen zu diesem Zweck gelegentlich Ausnahmen. Unsere Entscheidung wird von den beiden Zielen geleitet werden, zum einen den freien Status aller von unserer freien Software abgeleiteten Werke zu erhalten und zum anderen das gemeinschaftliche Nutzen und Wiederverwenden von Software im allgemeinen zu fördern. Ende der Bedingungen _________________________________________________________________ Anhang: Wie Sie diese Bedingungen auf Ihre neuen Programme anwendbar machen Wenn Sie ein neues Programm entwickeln und wollen, daß es von größtmöglichem Nutzen für die Allgemeinheit ist, dann erreichen Sie das am besten, indem Sie es zu freier Software machen, die jeder unter diesen Bestimmungen weiterverbreiten und verändern kann. Um dies zu erreichen, fügen Sie die folgenden Anmerkungen zu Ihrem Programm hinzu. Am sichersten ist es, sie an den Anfang einer jeden Quelldatei zu stellen, um den Gewährleistungsausschluß möglichst deutlich darzustellen; außerdem sollte jede Datei mindestens eine "Copyright"-Zeile besitzen sowie einen kurzen Hinweis darauf, wo die vollständige Lizenz gefunden werden kann. [eine Zeile mit dem Programmnamen und einer kurzen Beschreibung] Copyright (C) 19[yy] [Name des Autors] This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Auf Deutsch: [eine Zeile mit dem Programmnamen und einer kurzen Beschreibung] Copyright (C) 19[jj] [Name des Autors] Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2 der Lizenz oder (wenn Sie es wünschen) jeder späteren Version. Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird, aber OHNE JEDE GEWÄHRLEISTUNG - sogar ohne die implizite Gewährleistung der MARKTREIFE oder der EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License. Sie sollten eine Kopie der GNU General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, schreiben Sie an die Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Fügen Sie auch einen kurzen Hinweis hinzu, wie Sie elektronisch und per Brief erreichbar sind. Wenn Ihr Programm interaktiv ist, sorgen Sie dafür, daß es nach dem Start einen kurzen Vermerk ausgibt: Gnomovision version 69, Copyright (C) 19[yy] [Name des Autors] Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. Auf Deutsch: Gnomovision Version 69, Copyright (C) 19[jj] [Name des Autors] Für Gnomovision besteht KEINERLEI GARANTIE; geben Sie `show w' für Details ein. Gnomovision ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen; geben Sie `show c' für Details ein. Die hypothetischen Kommandos `show w' und `show c' sollten die entsprechenden Teile der GNU-GPL anzeigen. Natürlich können die von Ihnen verwendeten Kommandos anders heißen als `show w' und `show c'; es könnten auch Mausklicks oder Menüpunkte sein - was immer am besten in Ihr Programm paßt. Soweit vorhanden, sollten Sie auch Ihren Arbeitgeber (wenn Sie als Programmierer arbeiten) oder Ihre Schule einen Copyright-Verzicht für das Programm unterschreiben lassen. Hier ein Beispiel; ändern Sie bitte die Namen: Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. [Unterschrift von Ty Coon], 1 April 1989 Ty Coon, President of Vice Auf Deutsch: Die Yoyodyne GmbH erhebt keinerlei urheberrechtlichen Anspruch auf das Programm "Gnomovision" (einem Schrittmacher für Compiler), geschrieben von James Hacker. [Unterschrift von Ty Coon], 1. April 1989 Ty Coon, Vizepräsident Diese General Public License gestattet nicht die Einbindung des Programms in proprietäre Programme. Ist Ihr Programm eine Funktionsbibliothek, so kann es sinnvoller sein, das Linken proprietärer Programme mit dieser Bibliothek zu gestatten. Wenn Sie dies tun wollen, sollten Sie die GNU Library General Public License anstelle dieser Lizenz verwenden. Für KCemu besteht KEINERLEI GARANTIE; starten Sie `kcemu --warranty' für Details. KCemu ist freie Software, die Sie unter bestimmten Bedingungen weitergeben dürfen; starten Sie `kcemu --license' für Details. Aufruf: kcemu [-0123456789aAcestfhdlvVHFMELW] -0: Starten mit Z1013 Profil -1: Starten mit Z9001 / KC 85/1 Profil -2: Starten mit KC 85/2 Profil -3: Starten mit KC 85/3 Profil -4: Starten mit KC 85/4 Profil -5: Starten mit KC 85/5 Profil -6: Starten mit Poly-880 Profil -7: Starten mit KC 87 Profil -8: Starten mit LC 80 Profil -9: Starten mit BIC/A5105 Profil -a --autostart: Automatischer Start des angegebenen Programms (nur kc85/3 - kc85/5) -A --address: Startadresse für das automatisch zu startende Programm -d --datadir: Setzen des Daten-Verzeichnisses (für ROM-Images) -E --effects: Anzeige mit Screen-Effekten bei vergrößerter Darstellung -f --floppy: Aktivieren eines Disketten-Images beim Start -F --fullscreen: Start im Vollbild-Modus (wenn durch GUI unterstützt) -h --help: diese Hilfe anzeigen -H --home: Überschreiben der Einstellung für das Homeverzeichnis -l --localedir: Setzen des Locale-Verzeichnisses für die Sprachanpassung -L --license: Anzeige der Lizenz -M --modules: Module beim Start aktivieren (e.g. -M M011,M027) -o --debug-output: Debug-Ausgabe in Datei umleiten -p --profile: Start mit dem angegebenen Profil -P --select-profile: Start mit Fenster zur Profil-Auswahl -s --scale: Vergrößerung der Anzeige (erlaubt sind die Werte 1, 2 und 3) -t --tape: Aktivieren eines Tape-Archives beim Start -v --version: Anzeige der KCemu Version und Konfiguration -V --viewlist: Ausführliche Liste der emulierten Typen -W --warranty: Anzeige des Haftungsausschlusses [ Diese Übersetzung wird mit der Absicht angeboten, das Verständnis der ] [ GNU General Public License (GNU-GPL) zu erleichtern. Es handelt sich ] [ jedoch nicht um eine offizielle oder im rechtlichen Sinne anerkannte ] [ Übersetzung. ] [ ] [ Erstellt im Auftrag der S.u.S.E. GmbH [suse@suse.de] ] [ von Katja Lachmann Übersetzungen [na194@fim.uni-erlangen.de], ] [ überarbeitet von Peter Gerwinski [peter.gerwinski@uni-essen.de] ] [ (31. Oktober 1996) ] Keine Gewährleistung Paragraph 11. Da das Programm ohne jegliche Kosten lizenziert wird, besteht keinerlei Gewährleistung für das Programm, soweit dies gesetzlich zulässig ist. Sofern nicht anderweitig schriftlich bestätigt, stellen die Copyright-Inhaber und/oder Dritte das Programm so zur Verfügung, "wie es ist", ohne irgendeine Gewährleistung, weder ausdrücklich noch implizit, einschließlich - aber nicht begrenzt auf - Marktreife oder Verwendbarkeit für einen bestimmten Zweck. Das volle Risiko bezüglich Qualität und Leistungsfähigkeit des Programms liegt bei Ihnen. Sollte sich das Programm als fehlerhaft herausstellen, liegen die Kosten für notwendigen Service, Reparatur oder Korrektur bei Ihnen. Paragraph 12. In keinem Fall, außer wenn durch geltendes Recht gefordert oder schriftlich zugesichert, ist irgendein Copyright-Inhaber oder irgendein Dritter, der das Programm wie oben erlaubt modifiziert oder verbreitet hat, Ihnen gegenüber für irgendwelche Schäden haftbar, einschließlich jeglicher allgemeiner oder spezieller Schäden, Schäden durch Seiteneffekte (Nebenwirkungen) oder Folgeschäden, die aus der Benutzung des Programms oder der Unbenutzbarkeit des Programms folgen (einschließlich - aber nicht beschränkt auf - Datenverluste, fehlerhafte Verarbeitung von Daten, Verluste, die von Ihnen oder anderen getragen werden müssen, oder dem Unvermögen des Programms, mit irgendeinem anderen Programm zusammenzuarbeiten), selbst wenn ein Copyright-Inhaber oder Dritter über die Möglichkeit solcher Schäden unterrichtet worden war. BIC/A5105, nur das Basis-Gerät ohne Floppy-Erweiterung. BIC/A5105, das vollständige System mit Floppy-Erweiterung. CP/M basierter Kleincomputer der von A. Mugler und H. Mathes in der Zeitschrift "Funkamateur" vorgestellt wurde. Export Variante des LC 80 mit Schach-Programm in 12k ROM. HC900 (später KC 85/2 genannt) mit 16k RAM und 8k ROM. Als System wird HC-CAOS 2.2 (Home Computer - Cassette Aided Operating System) eingesetzt. BASIC ist nur als externer Modul vorhanden. KC 85/3 mit 16k RAM, 8k ROM mit HC-CAOS 3.1 und 8k BASIC ROM. KC 85/4 mit 64k RAM, 64k Bildschirmspeicher, 12k ROM mit HC-CAOS 4.2 und 8k BASIC ROM. Wie KC 87.11 aber ohne Farberweiterung. Wie KC 87.21 aber ohne Farberweiterung. Wie z9001.10 aber mit Farberweiterung. Mikrocomputer entwickelt von Manfred Kramer, vorgestellt im Buch "Praktische Microcomputertechnik". Minimales Z80 Lernsystem, entworfen von Dipl.-Ing. Joachim Czepa. Minimales Z80 Lernsystem, entworfen von Eckhard Schiller, vorgestellt in der Zeitschrift "rfe". Neuauflage der KC 87.20 ohne Veränderung der Hardware. Neuauflage der KC 87.21 ohne Veränderung der Hardware. Neue KC 87 Serie mit erweitertem BASIC ROM (Plotterunterstützung). Polycomputer 880 mit dem Schach-Programm des SC1. Polycomputer 880. Einplatinen-Rechner LC 80 mit 1k RAM und 1 x 2k ROM. Als Tastatur wurde ein Taschenrechner benutzt. Einplatinen-Rechner LC 80 mit 1k RAM und 2 x 1k ROM. Als Tastatur wurde ein Taschenrechner benutzt. Nachfolger des Z9001 mit internem 10k BASIC ROM. Z1013 mit 16k RAM und 2k ROM. Die CPU läuft mit 2MHz. Nachfolger des Z1013.01, jedoch mit hochwertigen Chips wodurch der 2MHz Systemtakt möglich wurde. Z1013 mit 1k statischem RAM und 2k ROM. Die CPU läuft mit 2MHz. (Industrie-Version die nicht für den normalen Verkauf gedacht war). Der ROM enthält die Monitor-Version 2.02. Z1013 mit 64k RAM, 2x2k ROM und 2MHz Systemtakt. Der ROM enthält zwei Monitor-Versionen zu je 2k. Geladen wird die zweite Version (A.2) die eine erweiterte Tastatur mit einer 8x8 Matrix unterstützt. BIC/A5105, nur das Basis-Gerät ohne Floppy-Erweiterung. Z1013 mit 64k RAM, 2x2k ROM und 2MHz Systemtakt. Der ROM enthält zwei Monitor-Versionen zu je 2k. Geladen wird die erste Version (2.02) die für die Arbeit mit der mitgelieferten Folientastatur gedacht ist. Z1013 mit 64k RAM und 4k ROM. Der ROM enthält den 'Super Ur-Lader 5.0' mit dem beliebige Dateien als System-Monitor geladen werden können. Emuliert wird auch die Hardware-Erweiterung nach J. Peters die es z.B. erlaubt über Port 4h den ROM komplett abzuschalten. Z1013 mit 64k RAM und 4k ROM. Der ROM enthält den Bootlader BL4 der den System-Monitor von Diskette laden oder ein CP/M System starten kann. Z1013 mit 64k RAM und 4k ROM. Der ROM enthält den von R. Brosig erweiterten Monitor mit der Versionsnummer 2.028 RB. Unterstützt wird die Tastatur K7659. Z9001 (später KC 85/1 genannt) mit schwarz/weiß Darstellung und ohne BASIC ROM. Das System enthält 16k RAM und 4k ROM. (c) 1997-2010 Torsten Paul/Datei Löschen/Header Ändern/_Header Ändern/Datei Exportieren/WAV Exportieren/WAV Exportieren/Datei Laden/Datei _Umbenennen/Datei Umbenennen/Datei Ausführen/Datei _Hinzufügen/_Datei Löschen/Datei _Exportieren/Datei _Laden/Datei _Ausführen/sep1/sep2128k ROM Bank192 KByte RAM/EPROM2,5 MB Modul Bank (%d / %02xh)256k RAM FloppyEinstellungen für den WizNET Modul (Nur IP-Adressen!)Einstellungen für KC 85/2..5System-Profile...Benutzer-Profile...[ Version ]-???AVIÜber KCemuGIF (animiert)AssemblerAudioAudio/Video codec library libavcodecAudio:Automatisch zur End-Adresse springen, wenn die Adresse verändert wird.Automatisch zur Start-Adresse springen, wenn die Adresse verändert wird.AutostartBASICBBC Research - Dirac Video CodecBITEX (c000h-d7ffh)HintergrundBasic Modul (c000h-e7ffh)GrundgerätBootlader BL4UntenHelligkeitBrosig-ROM K7659/2.028Bustreiber:CAOS 2.2CAOS 3.1CAOS 3.3CAOS 3.4CAOS 4.1 (C)CAOS 4.1 (E)CAOS 4.2 (C)CAOS 4.2 (E)CAOS 4.3 (C)CAOS 4.3 (E)CAOS 4.4 (C)CAOS 4.4 (E)CGA Zeichensatz-ROMCGA Zeichensatz-ROM (erweitert)CPM-Z9 64k RAMCPM-Z9 BOOT (c000h-c7ffh)CPM-Z9 FloppyCPUCTCKann Disketten-Datei nicht aktivieren.Kann Kassetten-Datei nicht aktivieren.Kann Datei nicht exportieren.AbbrechenKanal 0Kanal 1Kanal 2Kanal 3Kanal AKanal BZeichensatz-ROMZeichenbereich löschen. Beim Zeichnen in eine PDF-Datei wird eine neue Seite erzeugt und in der gleichen Datei weiter gezeichnet.SchließenBenutzer-Profile im Baum zuklappen...FarbenKommentar:KontrastAusgewähltes Profil kopieren...Neues Profil erstellen...D002: Bus-Treiber [%02X]D004 Version 2.0 (02.01.1989)D004 Version 3.0 (07.12.1997)D004 Version 3.1 (22.01.2003)D004 Version 3.2 (28.10.2008)D004:DNS Server:DSE-ROM 1DSE-ROM 2DebuggerFarbe des Stiftes festlegen.Nullposition der X-Achse des Zeichenbereiches festlegen.Nullposition der Y-Achse des Zeichenbereiches festlegen.Stiftdicke festlegen (in Millimetern).Pause zwischen dem Neuzeichnen des Zeichenbereiches auf dem Bildschirm (in Millisekunden)DiracDisketteDiskette 1:Diskette 2:Diskette 3:Diskette 4:AnzeigeDebug:Effekte:IRM Zugriff:Skalierung:RefreshEDAS (c000h-e7ffh)FEHLER: Es wurde keine Tapedatei angegeben. Diese muss mit der Option -t übergeben werden. Header ÄndernEditorEin-/Ausschalten der Debug-Funktionen für die Anzeige. Wenn eingeschaltet, wird das Verhalten des Anzeige-Caches visualisiert. Die Einstellung hat nur Auswirkungen, wenn der Skalierungsfaktor auf 1 steht.Ein-/Ausschalten der Grafik-Effekte für Skalierungsfaktoren größer als 1. Wenn aktiv, werden bei einem Skalierungsfaktor von 2 ein Scanline-Effekt (jede 2. Zeile wird dunkler dargestellt) und bei einem Skalierungsfaktor von 3 ein Unschärfe-Effekt auf das dargestellte Bild angewandt.Ein-/Ausschalten des D004 Floppy Gerätes.Ein-/Ausschalten des zweiten D004 ROMs im Slot F8. Der Standard-ROM wird über Slot FC angesprochen.EncoderEnd-Adresse des Speicherbereiches. Das Byte an der angegebenen Adresse wird mit gespeichert.End-Adresse:Instruktion ausführenBenutzer-Profile im Baum aufklappen...Exportieren als...F8 ROM:FDC (Kramer)FDC (Schneider)FLAC - Free Lossless Audio CodecDateiDatei EigenschaftenDatei `%s' [%s] hinzugefügt.Datei `%s' geladen.Datei `%s' gespeichert.Floppy Disk Basis F8Floppy Disk Basis FCFloppy Disk Grundgerät [F0]VordergrundFormatBilder pro SekundeGDC 82720GTK+ - The GIMP ToolkitGateway:HC-900 CAOSFestplatte 1:Festplatte 2:HilfeHilfe _InhaltIDAS / ZM (c000h-e7ffh)IO-MonitorIP Adresse:IRM Color ExpansionIRQ Vector:IRQ:InfoInput Image PropertiesIt was not possible to automatically determine the type of the selected file. Thus I don't know at which address the file should be loaded To load the file nevertheless you need to type in the needed values yourself.Es ist nicht möglich mehrere Module vom Typ %s zu aktivieren!Es ist nicht möglich mehrere Module vom Typ %s zu aktivieren! (Außerdem ist es aufgrund der internen Struktur des Emulators nicht möglich gleichzeitig die Kramer- und Schneider-Variante des Floppy-Moduls zu aktivieren.)Es ist nicht möglich gleichzeitig mehr als 2 RAM-Floppy Module zu aktivieren. Der erste Modul läuft an Port 98h und der zweite an Port 58h.Joystick (%d.%d.%d): %s on %sJoystick entfernt!KC-BASICKC-BASIC (EDAS/TEMO/FORTH)KC-BASIC (EDAS/TEMO/USB)KC-CAOS 3.1 (8000h-8fffh)KC-Pascal ModulKC85KCemuKCemu _LizenzKCemu: Über KCemuKCemu: Audio PlayerKCemu: Kann die Datei nicht laden...KCemu: FarbeinstellungKCemu: DebuggerKCemu: DisketteKCemu: HilfeKCemu: InfoKCemu: TastaturKCemu: Lizenz & HaftungKCemu: ModuleKCemu: PlotterKCemu: ProfileKCemu: Datei umbenennenKCemu: Memory-Dump speichernKCemu: ScreenshotKCemu: Datei auswählen...KCemu: Profil auswählen...KCemu: Kassetten-ArchivKCemu: DanksagungKCemu: VideoKCemu: Vinculum USBKCemu: Warnung...TastaturLAME - LAME Ain't an MP3 EncoderLinksLänge:Lizenz & HaftungLinienbreiteLoadLade-Adresse:M001: Digital In / OutM003: V24M006: BasicM008: JoystickM011: 64k RAMM012: TexorM022: Expander RAM (16k)M026: ForthM027: DevelopmentM032: 256k Segmented RAMM033: TypeStar + RAMDOSM034: 512k Segmented RAMM035: 1M Segmented RAMM035x4: 4M RAMM036: 128k Segmented RAMM052: Network + USBM900: WordPro '86 (KC85/3)M901: WordPro '86 (KC85/4)MPEG 4MedienMega-ROM ModulMode:ModulModul 1:Modul 2:Modul 3:Modul 4:Modul 5:Modul 6:Modul 7:Modul 8:ModuleNameName in KC file-header:Name in tape-directory:Netzmaske:NetzwerkMaximale _GeschwindigkeitKeine _Gewährleistung!Für dieses System sind keine Modul-Schächte verfügbar.Anzahl von D002 Bustreibern die emuliert werden sollen. Es können maximal 4 Geräte emuliert werden.OKOS PI/88 (schwarz/weiß)OS PI/88 (weiß/blau)OS PI/88 (gelb/blau)Ogg & Vorbis librariesÖffnenOpen Clip Art LibraryROM Image öffnen...Optional-ROM 1Module in diesem Profil überschreibenPIOPapierfarbePauseStiftfarbePersonenPl_otter...AbspielenBitte den Namen für die neue Datei eingeben.In PDF-Datei plotten:PlotterPlotter Modul (c000h-e7ffh)Plotter XY4131Profil Name:ProfileProjekte & BibliothekenQualitätRAF 4MB (Port 20h)RAF 4MB (Port 24h)RAM Modul (16k/4000h)RAM Module (16k/8000h)RAM Modul (1k/2400h)RAM Modul (2k/0800h)RAM Modul (2k/2800h)RAM Modul (32k/8000h)RAM Modul (4k/1000h)RAM Modul (4k/3000h)RAM Modul (8k/2000h)ROM-Image Datei: '%s'. Die ROM-Größe muss %04xh (%d) Byte betragen.ROM-Bank System mit MenüROM-Bank System ohne MenüROMsRTC (Port 20h-2fh)RTC (port 70h-7fh)R_esetLese %s `%s' (%d/%d/%d).ReassemblerAufnahmeRechtsSC1-ROMSpeichernMemory-Dump speichernProfile speichern?Die Zeichnung als PNG Bild-Datei speichern.Skalierungsfaktor für das Hauptfenster. Erlaubt sind Werte von 1 bis 3.SchroedingerScreens_hot...ScreenshotDatei auswählen...Profil auswählen...Diskette auswählen...Datei auswählen...Select tape-archive...Stift anzeigenZeichenbereichEinzelschrittGrößeGröße des Memory-Dumps in Bytes.Modul %dSchacht 1:Schacht 2:Einstellugen wurden verändert! 'Ja' schreibt die Änderungen in die Konfigurationsdatei 'Nein' verwirft die Ändrungen 'Cancel' erlaubt das weitere Editieren der Profile.Tastatur-Ansicht noch nicht konfiguriert.StartProgramm nach dem Laden startenStart Adresse des Speicherbereiches.Start-Adresse:Aufnahme bei Reset startenStopSuper Ur-Lader 5.0SystemSystem-ROMSystem-ROM 1System-ROM 2System-ROM 3System-ROM A2System-ROM V2.0System:KassetteTapename:Kassette:DanksagungDie Datei '%s' existiert nicht. Wollen Sie, daß sie angelegt wird?Die ausgewählte Datei enthält mehr als ein Programm. Es wird nur das erste Programm geladen. Um auf alle enthaltenen Programme zugreifen zu können, muß die Datei einem Kassetten-Archiv hinzugefügt werden!Die ausgewählte Datei kann nicht geladen werden!Die ausgewählte Datei hat einen Namen der bereits im aktuellen Kassetten-Archiv enthalten ist. Bitte einen anderen Namen eingeben, um die Datei dem Kassetten-Archiv hinzuzufügen oder den Abbrechen-Knopf drücken, um die Datei zu überspringen.Das Format der selektierten Datei konnte nicht bestimmt werden.Theora/OggDiese Einstellung wird nur bei der Emulation eines KC 85/3 aktiv. Sie schaltet die Emulation der Bildstörungen beim Zugriff der CPU auf den IRM ein.ObenAblaufverfolgungTypAktualisierenUser-ROMVDIP1: Vinculum USB ROM V1.2VDIP2: Vinculum USB ROM V2.1VDIP: Vinculum USBVNCVariante:VideoVideo DateiVinculum USBVinculum _USB...Nullpunkt XXiph.org Foundation - Theora video compressionXvid projectNullpunkt YZ1013 Zeichensatz-ROMZ9001 Zeichensatz-ROMZ9001 Zeichensatz-ROM (deutsch)ZM30 (c000h-ccffh)Zoom x_1Zoom x_2Zoom x_3Zoom x_1Zoom x_2Zoom x_3[ Build ][ Lizenz ][ Text ] [ more text ... ][ Title ][ Haftung ]Über KCemuAud_io..._Farben..._Kontext Hilfe_Diskette..._Effekte_Emulator_Hilfe_Tastatur_Laden..._Menüleiste_Module..._OptionenEi_nschalten_Profile...Emulator _beenden_Ausführen..._Speichern..._Statusleiste_Kassette...Danksagung_Video..._Ansicht_Vinculum USB...automatisch startenverfügbare Emulationen:bit input/outputbyte inputbyte input/outputbyte outputDatei anlegen?DezDisketten-Datei `%s' aktiviert.Fehler in der angegebenen Lade-Adresse! Eine gültige Adresse muß im Bereich 0 bis 65535 liegen, hexadezimale Werte können durch vorangestelltes 0x (z.B. 0x1234) angegeben werden, oktale durch eine führende 0 (z.B. 0444)Fehler in der angegebenen Start-Adresse!Hexhttp://ffmpeg.org/http://flac.sourceforge.net/http://kcemu.sourceforge.net/http://lame.sourceforge.net/http://openclipart.org/http://www.bbc.co.uk/rd/projects/dirac/http://www.gtk.org/http://www.libsdl.org/http://www.mega-nerd.com/libsndfile/http://www.theora.org/http://www.vorbis.com/http://www.xvid.org/libSDL - Simple DirectMedia Layerlibsndfileno KC-filename given!no tape-filename given!AssemblerBASICCAOS CCAOS EZeichensatzD004 (Schacht F8)D004 (Schacht FC)DebuggerEditorReassemblerSystemSystem (1)System (2)System (3)System (4)User-ROMKassetten-Datei `%s' aktiviert.KCemu-0.5.1/po/KCemu.pot0000644001050700006200000020232511345001730014351 0ustar glaubitzfbedv# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Torsten Paul # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: KCemu 0.5.1\n" "Report-Msgid-Bugs-To: Torsten.Paul@gmx.de\n" "POT-Creation-Date: 2010-03-07 20:51+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: images/about.glade:6 msgid "KCemu: About" msgstr "" #: images/about.glade:25 msgid "About" msgstr "" #: images/about.glade:72 msgid "[ Version ]" msgstr "" #: images/about.glade:85 msgid "(c) 1997-2010 Torsten Paul" msgstr "" #: images/about.glade:96 msgid "" msgstr "" #: images/about.glade:111 msgid "http://kcemu.sourceforge.net/" msgstr "" #: images/about.glade:130 msgid "[ Build ]" msgstr "" #: images/audio.glade:6 msgid "KCemu: Audio" msgstr "" #: images/audio.glade:25 msgid "Audio" msgstr "" #: images/color.glade:39 msgid "KCemu: Color Configuration" msgstr "" #: images/color.glade:60 msgid "Colors" msgstr "" #: images/color.glade:132 images/color.glade:232 msgid "Brightness" msgstr "" #: images/color.glade:166 images/color.glade:266 msgid "Contrast" msgstr "" #: images/color.glade:183 msgid "Foreground" msgstr "" #: images/color.glade:283 msgid "Background" msgstr "" #: images/dialog.glade:6 msgid "KCemu" msgstr "" #: images/dialog.glade:27 msgid "[ Title ]" msgstr "" #: images/disk.glade:6 msgid "KCemu: Disk" msgstr "" #: images/disk.glade:26 msgid "Disk" msgstr "" #: images/disk.glade:268 images/options.glade:2193 msgid "Disk 4:" msgstr "" #: images/disk.glade:282 images/options.glade:2207 msgid "Disk 3:" msgstr "" #: images/disk.glade:296 images/options.glade:2221 msgid "Disk 2:" msgstr "" #: images/disk.glade:310 images/options.glade:2235 msgid "Disk 1:" msgstr "" #: images/help.glade:6 msgid "KCemu: Help" msgstr "" #: images/help.glade:26 msgid "Help" msgstr "" #: images/keyboard.glade:27 msgid "Keyboard" msgstr "" #: images/keyboard.glade:80 msgid "Sorry, keyboard display not configured." msgstr "" #: images/legal.glade:6 msgid "KCemu: Licence & Warranty" msgstr "" #: images/legal.glade:26 msgid "License & Warranty" msgstr "" #: images/legal.glade:84 msgid "[ Licence ]" msgstr "" #: images/legal.glade:97 msgid "[ Warranty ]" msgstr "" #: images/main.glade:19 msgid "_Emulator" msgstr "" #: images/main.glade:27 images/main.glade:388 msgid "_Run..." msgstr "" #: images/main.glade:34 images/main.glade:395 msgid "_Load..." msgstr "" #: images/main.glade:41 images/main.glade:402 msgid "_Save..." msgstr "" #: images/main.glade:48 images/main.glade:409 msgid "_Tape..." msgstr "" #: images/main.glade:55 images/main.glade:416 msgid "_Disk..." msgstr "" #: images/main.glade:62 images/main.glade:423 msgid "_Module..." msgstr "" #: images/main.glade:69 images/main.glade:430 msgid "_Audio..." msgstr "" #: images/main.glade:76 images/main.glade:437 msgid "Pl_otter..." msgstr "" #: images/main.glade:83 msgid "Vinculum _USB..." msgstr "" #: images/main.glade:95 images/main.glade:456 msgid "Screens_hot..." msgstr "" #: images/main.glade:102 images/main.glade:463 msgid "_Video..." msgstr "" #: images/main.glade:114 images/main.glade:544 msgid "R_eset" msgstr "" #: images/main.glade:121 images/main.glade:551 msgid "_Power On" msgstr "" #: images/main.glade:133 images/main.glade:563 msgid "_Quit Emulator" msgstr "" #: images/main.glade:144 images/main.glade:475 msgid "_View" msgstr "" #: images/main.glade:152 msgid "Zoom x_1" msgstr "" #: images/main.glade:159 msgid "Zoom x_2" msgstr "" #: images/main.glade:166 msgid "Zoom x_3" msgstr "" #: images/main.glade:178 images/main.glade:509 msgid "_Keyboard" msgstr "" #: images/main.glade:190 images/main.glade:521 msgid "_Menubar" msgstr "" #: images/main.glade:197 images/main.glade:528 msgid "_Statusbar" msgstr "" #: images/main.glade:208 msgid "_Options" msgstr "" #: images/main.glade:216 msgid "_Colors..." msgstr "" #: images/main.glade:223 msgid "_Display Effects" msgstr "" #: images/main.glade:230 msgid "No _Speed Limit" msgstr "" #: images/main.glade:242 msgid "_Profiles..." msgstr "" #: images/main.glade:253 images/main.glade:261 msgid "_Help" msgstr "" #: images/main.glade:268 msgid "Help _Index" msgstr "" #: images/main.glade:275 msgid "_Context Help" msgstr "" #: images/main.glade:287 msgid "_About" msgstr "" #: images/main.glade:294 msgid "_Thanks!" msgstr "" #: images/main.glade:306 msgid "KCemu _Licence" msgstr "" #: images/main.glade:313 msgid "No _Warranty!" msgstr "" #: images/main.glade:444 msgid "_Vinculum USB..." msgstr "" #: images/main.glade:483 msgid "Zoom x1" msgstr "" #: images/main.glade:490 msgid "Zoom x2" msgstr "" #: images/main.glade:497 msgid "Zoom x3" msgstr "" #: images/module.glade:6 msgid "KCemu: Module" msgstr "" #: images/module.glade:24 msgid "Module" msgstr "" #: images/options.glade:91 msgid "KCemu: Profiles" msgstr "" #: images/options.glade:114 msgid "Profiles" msgstr "" #: images/options.glade:165 msgid "Create new profile..." msgstr "" #: images/options.glade:188 msgid "Copy selected profile..." msgstr "" #: images/options.glade:250 msgid "Expand user profile level..." msgstr "" #: images/options.glade:270 msgid "Collapse user profile level..." msgstr "" #: images/options.glade:431 msgid "Comment:" msgstr "" #: images/options.glade:445 msgid "Variant:" msgstr "" #: images/options.glade:487 msgid "System:" msgstr "" #: images/options.glade:501 msgid "Profile Name:" msgstr "" #: images/options.glade:548 msgid "System" msgstr "" #: images/options.glade:611 msgid "" "Enable / Disable display debug code.\n" "\n" "When enabled the display cache behaviour will be graphically visualized. " "This setting is effective only if the display scale is set to 1." msgstr "" #: images/options.glade:636 msgid "Display Debug:" msgstr "" #: images/options.glade:650 msgid "Display Scale:" msgstr "" #: images/options.glade:662 msgid "Display Effects:" msgstr "" #: images/options.glade:676 msgid "Display IRM Access:" msgstr "" #: images/options.glade:740 msgid "Scaling factor for the emulation window. Allowed values are 1 to 3." msgstr "" #: images/options.glade:756 msgid "" "Enable / Disable display effects for scale factors above 1.\n" "\n" "When enabled a scan-line effect will be used for scale factor of 2 and a " "smoothing effect for scale factor 3." msgstr "" #: images/options.glade:781 msgid "" "This setting is only used when emulating a KC 85/3 where it enables the " "emulation of the display dissortion when the screen memory is accessed by " "the CPU." msgstr "" #: images/options.glade:812 msgid "Display" msgstr "" #: images/options.glade:1355 msgid "ROMs" msgstr "" #: images/options.glade:1476 msgid "Module 6:" msgstr "" #: images/options.glade:1490 msgid "Module 5:" msgstr "" #: images/options.glade:1504 msgid "Module 4:" msgstr "" #: images/options.glade:1518 msgid "Module 3:" msgstr "" #: images/options.glade:1532 msgid "Module 2:" msgstr "" #: images/options.glade:1546 msgid "Module 1:" msgstr "" #: images/options.glade:1558 msgid "Module 7:" msgstr "" #: images/options.glade:1572 msgid "Module 8:" msgstr "" #: images/options.glade:1613 msgid "Override modules in this profile" msgstr "" #: images/options.glade:1653 msgid "Modules" msgstr "" #: images/options.glade:2080 msgid "Hard Disk 2:" msgstr "" #: images/options.glade:2094 msgid "Hard Disk 1:" msgstr "" #: images/options.glade:2123 msgid "Audio:" msgstr "" #: images/options.glade:2261 msgid "Tape:" msgstr "" #: images/options.glade:2282 msgid "Media" msgstr "" #: images/options.glade:2334 msgid "" "Number of D002 busdriver devices to add to the system. The maximum number of " "emulated busdrivers is currently 4." msgstr "" #: images/options.glade:2352 msgid "Busdrivers:" msgstr "" #: images/options.glade:2383 msgid "" "Enable or disable the second D004 ROM at slot F8. The standard ROM is " "available at slot FC." msgstr "" #: images/options.glade:2406 msgid "F8 ROM:" msgstr "" #: images/options.glade:2437 msgid "Enable or disable the D004 Floppy Basis Device." msgstr "" #: images/options.glade:2459 msgid "D004:" msgstr "" #: images/options.glade:2474 msgid "Special settings for KC 85/2..5" msgstr "" #: images/options.glade:2496 msgid "KC85" msgstr "" #: images/options.glade:2525 msgid "IP Address:" msgstr "" #: images/options.glade:2538 msgid "Netmask:" msgstr "" #: images/options.glade:2551 msgid "Gateway:" msgstr "" #: images/options.glade:2564 msgid "DNS Server:" msgstr "" #: images/options.glade:2706 msgid "Network settings for WizNET module (IP-Addresses only!)" msgstr "" #: images/options.glade:2729 msgid "Network" msgstr "" #: images/plotter.glade:28 msgid "KCemu: Plotter" msgstr "" #: images/plotter.glade:48 msgid "Plotter" msgstr "" #: images/plotter.glade:305 msgid "Show pen" msgstr "" #: images/plotter.glade:334 msgid "Show plot area" msgstr "" #: images/plotter.glade:347 msgid "" "Define the initial y position of the pen after clearing the plotting area. " "Measured in millimeters from the top left corner." msgstr "" #: images/plotter.glade:365 msgid "Y origin" msgstr "" #: images/plotter.glade:394 msgid "Paper color" msgstr "" #: images/plotter.glade:407 msgid "X origin" msgstr "" #: images/plotter.glade:420 msgid "" "Define the initial x position of the pen after clearing the plotting area. " "Measured in millimeters from the top left corner." msgstr "" #: images/plotter.glade:438 msgid "Define the line width for plotting. Measured in millimeters." msgstr "" #: images/plotter.glade:456 msgid "Line width" msgstr "" #: images/plotter.glade:469 msgid "Plot to PDF:" msgstr "" #: images/plotter.glade:483 msgid "Delay between screen refreshes of the drawing area in milliseconds." msgstr "" #: images/plotter.glade:501 msgid "Display refresh" msgstr "" #: images/plotter.glade:515 msgid "Define the color to use for plotting." msgstr "" #: images/plotter.glade:528 msgid "Pen color" msgstr "" #: images/plotter.glade:590 msgid "" "Clear plotting area. When rendering to a PDF file a new page is created and " "plotting continues in the same file." msgstr "" #: images/plotter.glade:605 msgid "Save the plotted picture as PNG image file." msgstr "" #: images/savemem.glade:38 msgid "KCemu: Save Memory Dump" msgstr "" #: images/savemem.glade:58 msgid "Save Memory Dump" msgstr "" #: images/savemem.glade:97 images/savemem.glade:344 msgid "Automatically scroll to start address if the address is changed." msgstr "" #: images/savemem.glade:121 msgid "Automatically scroll to end address if the address is changed." msgstr "" #: images/savemem.glade:157 msgid "End address:" msgstr "" #: images/savemem.glade:170 src/ui/gtk/hedit.cc:238 src/ui/gtk/image.cc:169 msgid "Start address:" msgstr "" #: images/savemem.glade:182 images/savemem.glade:315 images/savemem.glade:330 msgid "dec" msgstr "" #: images/savemem.glade:196 images/savemem.glade:285 images/savemem.glade:300 msgid "hex" msgstr "" #: images/savemem.glade:228 msgid "Size of the memory dump in bytes." msgstr "" #: images/savemem.glade:246 msgid "Length:" msgstr "" #: images/savemem.glade:378 msgid "" "End address of the memory area to save. The byte at the given address is " "included in the memory dump." msgstr "" #: images/savemem.glade:395 msgid "Start address of the memory area to save." msgstr "" #: images/screenshot.glade:6 msgid "KCemu: Screenshot" msgstr "" #: images/screenshot.glade:26 images/screenshot.glade:372 msgid "Screenshot" msgstr "" #: images/screenshot.glade:143 msgid "Left" msgstr "" #: images/screenshot.glade:156 msgid "Top" msgstr "" #: images/screenshot.glade:171 msgid "Right" msgstr "" #: images/screenshot.glade:184 msgid "Bottom" msgstr "" #: images/screenshot.glade:199 msgid "File" msgstr "" #: images/screenshot.glade:212 msgid "Format" msgstr "" #: images/screenshot.glade:385 msgid "Save" msgstr "" #: images/selector.glade:7 msgid "KCemu: Select profile..." msgstr "" #: images/selector.glade:31 msgid "Select Profile..." msgstr "" #: images/selector.glade:102 msgid "System profiles..." msgstr "" #: images/selector.glade:144 msgid "User profiles..." msgstr "" #: images/tapeedit.glade:7 src/ui/gtk/tapeadd.cc:93 msgid "KCemu: Rename File" msgstr "" #: images/tapeedit.glade:28 msgid "Edit Tape" msgstr "" #: images/tapeedit.glade:63 msgid "" "[ Text ]\n" "\n" "[ more text ... ]" msgstr "" #: images/tapeedit.glade:80 msgid "Tape name:" msgstr "" #: images/tape.glade:11 msgid "KCemu: Tape" msgstr "" #: images/tape.glade:30 msgid "Tape" msgstr "" #: images/thanks.glade:6 msgid "" "Volker Pohlers\n" " for help with the windows port, technical information and\n" " bugreports\n" "Thomas Ludwig\n" " for the great KC website at http://www.kc85emu.de/ and\n" " lots of bugreports and hints how to make KCemu better\n" "Holger Krull\n" " for providing lots of information about the LC 80\n" " computer (see http://www.lc80.de/)\n" "Kev Thacker\n" " for interesting insights concerning the floppy emulation\n" " (he's also the author of the KC driver for M.E.S.S. the\n" " Multi-Emulator Super System, see http://mess.emuverse.com/)\n" "Alexander Schön\n" " for starting the windows port, lots of tips and for providing\n" " a huge pile of files for use with the emulator or with\n" " information about the various systems\n" "Sourceforge User Boo-boo\n" " for the libz80ex emulation library which is now used to emulate\n" " the Z80 CPUs\n" "Marat Fayzullin\n" " for the Z80 emulation core used for the main processor\n" " up to KCemu version 0.4.2\n" " (I needed to tweak some bits of the emulation core; see\n" " src/z80core/README for the list of changes)\n" "Marcel de Kogel\n" " for the Z80 emulation core used for the KC floppy\n" " processor up to KCemu version 0.4.2\n" "Thomas Bretz\n" " for the OS/2 port of KCemu (see http://www.d4m.de/)" msgstr "" #: images/thanks.glade:38 msgid "KCemu: Thanks" msgstr "" #: images/thanks.glade:58 msgid "Thanks" msgstr "" #: images/thanks.glade:114 msgid "" "I'd like to say thanks to many people who helped to bring KCemu to the point " "where it is now. The following list just lists some of them in no particular " "order..." msgstr "" #: images/thanks.glade:151 msgid "People" msgstr "" #: images/thanks.glade:168 msgid "" "Lots of tools and libraries made it easier to write KCemu. Many thanks to " "the people behind all those projects for their work..." msgstr "" #: images/thanks.glade:198 msgid "libsndfile" msgstr "" #: images/thanks.glade:229 msgid "Ogg & Vorbis libraries" msgstr "" #: images/thanks.glade:274 msgid "Open Clip Art Library" msgstr "" #: images/thanks.glade:306 msgid "LAME - LAME Ain't an MP3 Encoder" msgstr "" #: images/thanks.glade:324 msgid "FLAC - Free Lossless Audio Codec" msgstr "" #: images/thanks.glade:342 msgid "GTK+ - The GIMP Toolkit" msgstr "" #: images/thanks.glade:401 msgid "libSDL - Simple DirectMedia Layer" msgstr "" #: images/thanks.glade:431 msgid "Xiph.org Foundation - Theora video compression" msgstr "" #: images/thanks.glade:461 msgid "Audio/Video codec library libavcodec" msgstr "" #: images/thanks.glade:491 msgid "BBC Research - Dirac Video Codec" msgstr "" #: images/thanks.glade:521 msgid "Xvid project" msgstr "" #: images/thanks.glade:534 msgid "http://www.theora.org/" msgstr "" #: images/thanks.glade:555 msgid "http://ffmpeg.org/" msgstr "" #: images/thanks.glade:575 msgid "http://www.bbc.co.uk/rd/projects/dirac/" msgstr "" #: images/thanks.glade:596 msgid "http://www.xvid.org/" msgstr "" #: images/thanks.glade:617 msgid "http://www.gtk.org/" msgstr "" #: images/thanks.glade:639 msgid "http://www.libsdl.org/" msgstr "" #: images/thanks.glade:660 msgid "http://flac.sourceforge.net/" msgstr "" #: images/thanks.glade:681 msgid "http://lame.sourceforge.net/" msgstr "" #: images/thanks.glade:755 msgid "http://openclipart.org/" msgstr "" #: images/thanks.glade:776 msgid "http://www.vorbis.com/" msgstr "" #: images/thanks.glade:797 msgid "http://www.mega-nerd.com/libsndfile/" msgstr "" #: images/thanks.glade:1020 msgid "Projects & Libraries" msgstr "" #: images/vdip.glade:6 msgid "KCemu: Vinculum USB" msgstr "" #: images/vdip.glade:26 msgid "Vinculum USB" msgstr "" #: images/vdip.glade:65 msgid "Slot 1:" msgstr "" #: images/vdip.glade:77 msgid "Slot 2:" msgstr "" #: images/video.glade:6 msgid "KCemu: Video" msgstr "" #: images/video.glade:26 msgid "Video" msgstr "" #: images/video.glade:79 msgid "Frames per Second" msgstr "" #: images/video.glade:92 msgid "Start record on reset" msgstr "" #: images/video.glade:121 msgid "Encoder" msgstr "" #: images/video.glade:143 msgid "Quality" msgstr "" #: images/video.glade:173 msgid "Video file" msgstr "" #: images/video.glade:239 src/ui/gtk/wav.cc:174 msgid "Record" msgstr "" #: images/video.glade:279 msgid "Pause" msgstr "" #: images/video.glade:319 src/ui/gtk/wav.cc:164 msgid "Stop" msgstr "" #: src/cmd/image.cc:103 src/kc/wav.cc:81 msgid "KCemu: Select File..." msgstr "" #: src/cmd/image.cc:127 msgid "KCemu: Can't load file..." msgstr "" #: src/cmd/image.cc:129 msgid "The file you selected couldn't be loaded!" msgstr "" #: src/cmd/image.cc:142 msgid "KCemu: Warning..." msgstr "" #: src/cmd/image.cc:144 msgid "" "The file you selected contains more than one\n" "program. Only the first program will be loaded.\n" "If you want to access all the contained\n" "programs add this file to a tape-archive!" msgstr "" #: src/getopt/getopt.c:678 #, c-format msgid "%s: option `%s' is ambiguous\n" msgstr "" #: src/getopt/getopt.c:702 #, c-format msgid "%s: option `--%s' doesn't allow an argument\n" msgstr "" #: src/getopt/getopt.c:707 #, c-format msgid "%s: option `%c%s' doesn't allow an argument\n" msgstr "" #: src/getopt/getopt.c:724 src/getopt/getopt.c:897 #, c-format msgid "%s: option `%s' requires an argument\n" msgstr "" #: src/getopt/getopt.c:753 #, c-format msgid "%s: unrecognized option `--%s'\n" msgstr "" #: src/getopt/getopt.c:757 #, c-format msgid "%s: unrecognized option `%c%s'\n" msgstr "" #: src/getopt/getopt.c:783 #, c-format msgid "%s: illegal option -- %c\n" msgstr "" #: src/getopt/getopt.c:786 #, c-format msgid "%s: invalid option -- %c\n" msgstr "" #: src/getopt/getopt.c:816 src/getopt/getopt.c:946 #, c-format msgid "%s: option requires an argument -- %c\n" msgstr "" #: src/getopt/getopt.c:863 #, c-format msgid "%s: option `-W %s' is ambiguous\n" msgstr "" #: src/getopt/getopt.c:881 #, c-format msgid "%s: option `-W %s' doesn't allow an argument\n" msgstr "" #: src/kc/disk.cc:84 msgid "Select disk..." msgstr "" #: src/kc/disk.cc:124 src/kc/tape.cc:216 msgid "create file?" msgstr "" #: src/kc/disk.cc:126 src/kc/tape.cc:218 #, c-format msgid "" "The file '%s' doesn't exist.\n" "Do you want to create it?" msgstr "" #: src/kc/disk.cc:135 #, c-format msgid "disk-file `%s' attached." msgstr "" #: src/kc/disk.cc:140 msgid "Can't attach disk-file." msgstr "" #: src/kc/kc.cc:232 msgid "" "\n" "KCemu comes with ABSOLUTELY NO WARRANTY; for details run `kcemu --" "warranty'.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; run `kcemu --license' for details.\n" "\n" "usage: kcemu [-0123456789aAcestfhdlvVHFMELW]\n" "\n" " -0: select Z1013 profile\n" " -1: select Z9001 / KC 85/1 profile\n" " -2: select KC 85/2 profile\n" " -3: select KC 85/3 profile\n" " -4: select KC 85/4 profile\n" " -5: select KC 85/5 profile\n" " -6: select Poly-880 profile\n" " -7: select KC 87 profile\n" " -8: select LC 80 profile\n" " -9: select BIC/A5105 profile\n" " -a --autostart: autostart program on startup (kc85/3 - kc85/5 only)\n" " -A --address: override start address of autostart program\n" " -d --datadir: set data directory (for ROM images)\n" " -E --effects: enable display effects for scaled screen output\n" " -f --floppy: attach disk on startup\n" " -F --fullscreen: start in fullscreen mode (if supported by gui)\n" " -h --help: display help\n" " -H --home: overwrite setting for home directory\n" " -l --localedir: set locale directory\n" " -L --license: show license\n" " -M --modules: insert modules on startup (e.g. -M M011,M027)\n" " -o --debug-output: write debug output to file\n" " -p --profile: start with given profile\n" " -P --select-profile: show profile selector\n" " -s --scale: scale display (allowed values: 1, 2 and 3)\n" " -t --tape: attach tape on startup\n" " -v --version: show KCemu version and configuration\n" " -V --viewlist: view verbose list of available emulations\n" " -W --warranty: show warranty\n" msgstr "" #: src/kc/kc.cc:299 msgid "" "\n" "\t\t GNU GENERAL PUBLIC LICENSE\n" "\t\t Version 2, June 1991\n" "\n" " Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n" " 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" " Everyone is permitted to copy and distribute verbatim copies\n" " of this license document, but changing it is not allowed.\n" "\n" "\t\t\t Preamble\n" "\n" " The licenses for most software are designed to take away your\n" "freedom to share and change it. By contrast, the GNU General Public\n" "License is intended to guarantee your freedom to share and change free\n" "software--to make sure the software is free for all its users. This\n" "General Public License applies to most of the Free Software\n" "Foundation's software and to any other program whose authors commit to\n" "using it. (Some other Free Software Foundation software is covered by\n" "the GNU Library General Public License instead.) You can apply it to\n" "your programs, too.\n" "\n" " When we speak of free software, we are referring to freedom, not\n" "price. Our General Public Licenses are designed to make sure that you\n" "have the freedom to distribute copies of free software (and charge for\n" "this service if you wish), that you receive source code or can get it\n" "if you want it, that you can change the software or use pieces of it\n" "in new free programs; and that you know you can do these things.\n" "\n" " To protect your rights, we need to make restrictions that forbid\n" "anyone to deny you these rights or to ask you to surrender the rights.\n" "These restrictions translate to certain responsibilities for you if you\n" "distribute copies of the software, or if you modify it.\n" "\n" " For example, if you distribute copies of such a program, whether\n" "gratis or for a fee, you must give the recipients all the rights that\n" "you have. You must make sure that they, too, receive or can get the\n" "source code. And you must show them these terms so they know their\n" "rights.\n" "\n" " We protect your rights with two steps: (1) copyright the software, and\n" "(2) offer you this license which gives you legal permission to copy,\n" "distribute and/or modify the software.\n" "\n" " Also, for each author's protection and ours, we want to make certain\n" "that everyone understands that there is no warranty for this free\n" "software. If the software is modified by someone else and passed on, we\n" "want its recipients to know that what they have is not the original, so\n" "that any problems introduced by others will not reflect on the original\n" "authors' reputations.\n" "\n" " Finally, any free program is threatened constantly by software\n" "patents. We wish to avoid the danger that redistributors of a free\n" "program will individually obtain patent licenses, in effect making the\n" "program proprietary. To prevent this, we have made it clear that any\n" "patent must be licensed for everyone's free use or not licensed at all.\n" "\n" " The precise terms and conditions for copying, distribution and\n" "modification follow.\n" "\n" "\t\t GNU GENERAL PUBLIC LICENSE\n" " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n" "\n" " 0. This License applies to any program or other work which contains\n" "a notice placed by the copyright holder saying it may be distributed\n" "under the terms of this General Public License. The \"Program\", below,\n" "refers to any such program or work, and a \"work based on the Program\"\n" "means either the Program or any derivative work under copyright law:\n" "that is to say, a work containing the Program or a portion of it,\n" "either verbatim or with modifications and/or translated into another\n" "language. (Hereinafter, translation is included without limitation in\n" "the term \"modification\".) Each licensee is addressed as \"you\".\n" "\n" "Activities other than copying, distribution and modification are not\n" "covered by this License; they are outside its scope. The act of\n" "running the Program is not restricted, and the output from the Program\n" "is covered only if its contents constitute a work based on the\n" "Program (independent of having been made by running the Program).\n" "Whether that is true depends on what the Program does.\n" "\n" " 1. You may copy and distribute verbatim copies of the Program's\n" "source code as you receive it, in any medium, provided that you\n" "conspicuously and appropriately publish on each copy an appropriate\n" "copyright notice and disclaimer of warranty; keep intact all the\n" "notices that refer to this License and to the absence of any warranty;\n" "and give any other recipients of the Program a copy of this License\n" "along with the Program.\n" "\n" "You may charge a fee for the physical act of transferring a copy, and\n" "you may at your option offer warranty protection in exchange for a fee.\n" "\n" " 2. You may modify your copy or copies of the Program or any portion\n" "of it, thus forming a work based on the Program, and copy and\n" "distribute such modifications or work under the terms of Section 1\n" "above, provided that you also meet all of these conditions:\n" "\n" " a) You must cause the modified files to carry prominent notices\n" " stating that you changed the files and the date of any change.\n" "\n" " b) You must cause any work that you distribute or publish, that in\n" " whole or in part contains or is derived from the Program or any\n" " part thereof, to be licensed as a whole at no charge to all third\n" " parties under the terms of this License.\n" "\n" " c) If the modified program normally reads commands interactively\n" " when run, you must cause it, when started running for such\n" " interactive use in the most ordinary way, to print or display an\n" " announcement including an appropriate copyright notice and a\n" " notice that there is no warranty (or else, saying that you provide\n" " a warranty) and that users may redistribute the program under\n" " these conditions, and telling the user how to view a copy of this\n" " License. (Exception: if the Program itself is interactive but\n" " does not normally print such an announcement, your work based on\n" " the Program is not required to print an announcement.)\n" "\n" "These requirements apply to the modified work as a whole. If\n" "identifiable sections of that work are not derived from the Program,\n" "and can be reasonably considered independent and separate works in\n" "themselves, then this License, and its terms, do not apply to those\n" "sections when you distribute them as separate works. But when you\n" "distribute the same sections as part of a whole which is a work based\n" "on the Program, the distribution of the whole must be on the terms of\n" "this License, whose permissions for other licensees extend to the\n" "entire whole, and thus to each and every part regardless of who wrote it.\n" "\n" "Thus, it is not the intent of this section to claim rights or contest\n" "your rights to work written entirely by you; rather, the intent is to\n" "exercise the right to control the distribution of derivative or\n" "collective works based on the Program.\n" "\n" "In addition, mere aggregation of another work not based on the Program\n" "with the Program (or with a work based on the Program) on a volume of\n" "a storage or distribution medium does not bring the other work under\n" "the scope of this License.\n" "\n" " 3. You may copy and distribute the Program (or a work based on it,\n" "under Section 2) in object code or executable form under the terms of\n" "Sections 1 and 2 above provided that you also do one of the following:\n" "\n" " a) Accompany it with the complete corresponding machine-readable\n" " source code, which must be distributed under the terms of Sections\n" " 1 and 2 above on a medium customarily used for software interchange; " "or,\n" "\n" " b) Accompany it with a written offer, valid for at least three\n" " years, to give any third party, for a charge no more than your\n" " cost of physically performing source distribution, a complete\n" " machine-readable copy of the corresponding source code, to be\n" " distributed under the terms of Sections 1 and 2 above on a medium\n" " customarily used for software interchange; or,\n" "\n" " c) Accompany it with the information you received as to the offer\n" " to distribute corresponding source code. (This alternative is\n" " allowed only for noncommercial distribution and only if you\n" " received the program in object code or executable form with such\n" " an offer, in accord with Subsection b above.)\n" "\n" "The source code for a work means the preferred form of the work for\n" "making modifications to it. For an executable work, complete source\n" "code means all the source code for all modules it contains, plus any\n" "associated interface definition files, plus the scripts used to\n" "control compilation and installation of the executable. However, as a\n" "special exception, the source code distributed need not include\n" "anything that is normally distributed (in either source or binary\n" "form) with the major components (compiler, kernel, and so on) of the\n" "operating system on which the executable runs, unless that component\n" "itself accompanies the executable.\n" "\n" "If distribution of executable or object code is made by offering\n" "access to copy from a designated place, then offering equivalent\n" "access to copy the source code from the same place counts as\n" "distribution of the source code, even though third parties are not\n" "compelled to copy the source along with the object code.\n" "\n" " 4. You may not copy, modify, sublicense, or distribute the Program\n" "except as expressly provided under this License. Any attempt\n" "otherwise to copy, modify, sublicense or distribute the Program is\n" "void, and will automatically terminate your rights under this License.\n" "However, parties who have received copies, or rights, from you under\n" "this License will not have their licenses terminated so long as such\n" "parties remain in full compliance.\n" "\n" " 5. You are not required to accept this License, since you have not\n" "signed it. However, nothing else grants you permission to modify or\n" "distribute the Program or its derivative works. These actions are\n" "prohibited by law if you do not accept this License. Therefore, by\n" "modifying or distributing the Program (or any work based on the\n" "Program), you indicate your acceptance of this License to do so, and\n" "all its terms and conditions for copying, distributing or modifying\n" "the Program or works based on it.\n" "\n" " 6. Each time you redistribute the Program (or any work based on the\n" "Program), the recipient automatically receives a license from the\n" "original licensor to copy, distribute or modify the Program subject to\n" "these terms and conditions. You may not impose any further\n" "restrictions on the recipients' exercise of the rights granted herein.\n" "You are not responsible for enforcing compliance by third parties to\n" "this License.\n" "\n" " 7. If, as a consequence of a court judgment or allegation of patent\n" "infringement or for any other reason (not limited to patent issues),\n" "conditions are imposed on you (whether by court order, agreement or\n" "otherwise) that contradict the conditions of this License, they do not\n" "excuse you from the conditions of this License. If you cannot\n" "distribute so as to satisfy simultaneously your obligations under this\n" "License and any other pertinent obligations, then as a consequence you\n" "may not distribute the Program at all. For example, if a patent\n" "license would not permit royalty-free redistribution of the Program by\n" "all those who receive copies directly or indirectly through you, then\n" "the only way you could satisfy both it and this License would be to\n" "refrain entirely from distribution of the Program.\n" "\n" "If any portion of this section is held invalid or unenforceable under\n" "any particular circumstance, the balance of the section is intended to\n" "apply and the section as a whole is intended to apply in other\n" "circumstances.\n" "\n" "It is not the purpose of this section to induce you to infringe any\n" "patents or other property right claims or to contest validity of any\n" "such claims; this section has the sole purpose of protecting the\n" "integrity of the free software distribution system, which is\n" "implemented by public license practices. Many people have made\n" "generous contributions to the wide range of software distributed\n" "through that system in reliance on consistent application of that\n" "system; it is up to the author/donor to decide if he or she is willing\n" "to distribute software through any other system and a licensee cannot\n" "impose that choice.\n" "\n" "This section is intended to make thoroughly clear what is believed to\n" "be a consequence of the rest of this License.\n" "\n" " 8. If the distribution and/or use of the Program is restricted in\n" "certain countries either by patents or by copyrighted interfaces, the\n" "original copyright holder who places the Program under this License\n" "may add an explicit geographical distribution limitation excluding\n" "those countries, so that distribution is permitted only in or among\n" "countries not thus excluded. In such case, this License incorporates\n" "the limitation as if written in the body of this License.\n" "\n" " 9. The Free Software Foundation may publish revised and/or new versions\n" "of the General Public License from time to time. Such new versions will\n" "be similar in spirit to the present version, but may differ in detail to\n" "address new problems or concerns.\n" "\n" "Each version is given a distinguishing version number. If the Program\n" "specifies a version number of this License which applies to it and \"any\n" "later version\", you have the option of following the terms and conditions\n" "either of that version or of any later version published by the Free\n" "Software Foundation. If the Program does not specify a version number of\n" "this License, you may choose any version ever published by the Free " "Software\n" "Foundation.\n" "\n" " 10. If you wish to incorporate parts of the Program into other free\n" "programs whose distribution conditions are different, write to the author\n" "to ask for permission. For software which is copyrighted by the Free\n" "Software Foundation, write to the Free Software Foundation; we sometimes\n" "make exceptions for this. Our decision will be guided by the two goals\n" "of preserving the free status of all derivatives of our free software and\n" "of promoting the sharing and reuse of software generally.\n" "\n" msgstr "" #: src/kc/kc.cc:561 msgid "" "\n" "NO WARRANTY\n" "\n" " 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n" "FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\n" "OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\n" "PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER " "EXPRESSED\n" "OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n" "MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\n" "TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\n" "PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n" "REPAIR OR CORRECTION.\n" "\n" " 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n" "WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\n" "REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n" "INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n" "OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n" "TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n" "YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n" "PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n" "POSSIBILITY OF SUCH DAMAGES.\n" "\n" msgstr "" #: src/kc/kc.cc:588 msgid "" "\n" " END OF TERMS AND CONDITIONS\n" "\n" "\n" "\t How to Apply These Terms to Your New Programs\n" "\n" " If you develop a new program, and you want it to be of the greatest\n" "possible use to the public, the best way to achieve this is to make it\n" "free software which everyone can redistribute and change under these terms.\n" "\n" " To do so, attach the following notices to the program. It is safest\n" "to attach them to the start of each source file to most effectively\n" "convey the exclusion of warranty; and each file should have at least\n" "the \"copyright\" line and a pointer to where the full notice is found.\n" "\n" " \n" " Copyright (C) 19yy \n" "\n" " This program is free software; you can redistribute it and/or modify\n" " it under the terms of the GNU General Public License as published by\n" " the Free Software Foundation; either version 2 of the License, or\n" " (at your option) any later version.\n" "\n" " This program is distributed in the hope that it will be useful,\n" " but WITHOUT ANY WARRANTY; without even the implied warranty of\n" " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" " GNU General Public License for more details.\n" "\n" " You should have received a copy of the GNU General Public License\n" " along with this program; if not, write to the Free Software\n" " Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n" "\n" "Also add information on how to contact you by electronic and paper mail.\n" "\n" "If the program is interactive, make it output a short notice like this\n" "when it starts in an interactive mode:\n" "\n" " Gnomovision version 69, Copyright (C) 19yy name of author\n" " Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show " "w'.\n" " This is free software, and you are welcome to redistribute it\n" " under certain conditions; type `show c' for details.\n" "\n" "The hypothetical commands `show w' and `show c' should show the appropriate\n" "parts of the General Public License. Of course, the commands you use may\n" "be called something other than `show w' and `show c'; they could even be\n" "mouse-clicks or menu items--whatever suits your program.\n" "\n" "You should also get your employer (if you work as a programmer) or your\n" "school, if any, to sign a \"copyright disclaimer\" for the program, if\n" "necessary. Here is a sample; alter the names:\n" "\n" " Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n" " `Gnomovision' (which makes passes at compilers) written by James Hacker.\n" "\n" " , 1 April 1989\n" " Ty Coon, President of Vice\n" "\n" "This General Public License does not permit incorporating your program into\n" "proprietary programs. If your program is a subroutine library, you may\n" "consider it more useful to permit linking proprietary applications with the\n" "library. If this is what you want to do, use the GNU Library General\n" "Public License instead of this License.\n" "\n" msgstr "" #: src/kc/mod_320k.cc:149 #, c-format msgid "2,5 MB Modul Bank (%d / %02xh)" msgstr "" #: src/kc/mod_fdc.cc:58 #, c-format msgid "" "It's not possible to have more than one\n" "module of type %s!\n" "\n" "(And due to some technical points of the emulator\n" "it's also not possible to have both the Kramer and\n" "Schneider variant of the floppy module active at\n" "the same time.)" msgstr "" #: src/kc/mod_gdc.cc:53 src/kc/mod_rtc.cc:50 #, c-format msgid "" "It's not possible to have more than one\n" "module of type %s!" msgstr "" #: src/kc/mod_js.cc:152 msgid "Joystick removed!" msgstr "" #: src/kc/mod_js.cc:163 #, c-format msgid "Joystick (%d.%d.%d): %s on %s" msgstr "" #: src/kc/mod_js.cc:399 #, c-format msgid "" "Couldn't find any readable joystick device!\n" "\n" "If your joystick is connected properly and the correct\n" "driver is loaded give the device name of your joystick\n" "in the 'Joystick Device' section of the configuration\n" "file." msgstr "" #: src/kc/mod_js.cc:408 #, c-format msgid "" "Couldn't open joystick device (%s)!\n" "\n" "Make sure you have the joystick properly connected\n" "and loaded the correct driver for it.\n" "\n" "Also check the 'Joystick Device' section in the\n" "configuration file if the device name shown above\n" "looks bogus.\n" msgstr "" #: src/kc/mod_list.cc:197 msgid "" msgstr "" #: src/kc/mod_list.cc:207 msgid "RAM Module (1k/2400h)" msgstr "" #: src/kc/mod_list.cc:209 msgid "RAM Module (2k/2800h)" msgstr "" #: src/kc/mod_list.cc:211 msgid "RAM Module (4k/3000h)" msgstr "" #: src/kc/mod_list.cc:221 msgid "RAM Module (2k/0800h)" msgstr "" #: src/kc/mod_list.cc:223 msgid "RAM Module (4k/1000h)" msgstr "" #: src/kc/mod_list.cc:225 msgid "RAM Module (8k/2000h)" msgstr "" #: src/kc/mod_list.cc:234 src/kc/mod_list.cc:297 msgid "RAM Module (16k/4000h)" msgstr "" #: src/kc/mod_list.cc:236 msgid "RAM Module (32k/8000h)" msgstr "" #: src/kc/mod_list.cc:242 msgid "256k RAM Floppy" msgstr "" #: src/kc/mod_list.cc:248 msgid "FDC (Schneider)" msgstr "" #: src/kc/mod_list.cc:254 msgid "FDC (Kramer)" msgstr "" #: src/kc/mod_list.cc:260 msgid "GDC 82720" msgstr "" #: src/kc/mod_list.cc:266 msgid "RTC (port 20h-2fh)" msgstr "" #: src/kc/mod_list.cc:272 msgid "RTC (port 70h-7fh)" msgstr "" #: src/kc/mod_list.cc:279 msgid "Basic Module (c000h-e7ffh)" msgstr "" #: src/kc/mod_list.cc:291 msgid "Plotter Module (c000h-e7ffh)" msgstr "" #: src/kc/mod_list.cc:299 msgid "RAM Module (16k/8000h)" msgstr "" #: src/kc/mod_list.cc:308 msgid "ZM30 (c000h-ccffh)" msgstr "" #: src/kc/mod_list.cc:315 msgid "EDAS (c000h-e7ffh)" msgstr "" #: src/kc/mod_list.cc:322 msgid "IDAS / ZM (c000h-e7ffh)" msgstr "" #: src/kc/mod_list.cc:329 msgid "BITEX (c000h-d7ffh)" msgstr "" #: src/kc/mod_list.cc:354 msgid "KC-CAOS 3.1 (8000h-8fffh)" msgstr "" #: src/kc/mod_list.cc:367 msgid "192 KByte RAM/EPROM" msgstr "" #: src/kc/mod_list.cc:374 msgid "KC-Pascal Module" msgstr "" #: src/kc/mod_list.cc:381 msgid "Mega-ROM Module" msgstr "" #: src/kc/mod_list.cc:388 msgid "128k ROM Bank" msgstr "" #: src/kc/mod_list.cc:397 src/ui/gtk/module.cc:266 msgid "IRM Color Expansion" msgstr "" #: src/kc/mod_list.cc:412 msgid "Plotter XY4131" msgstr "" #: src/kc/mod_list.cc:419 msgid "CPM-Z9 BOOT (c000h-c7ffh)" msgstr "" #: src/kc/mod_list.cc:425 msgid "CPM-Z9 Floppy" msgstr "" #: src/kc/mod_list.cc:431 msgid "CPM-Z9 64k RAM" msgstr "" #: src/kc/mod_list.cc:437 msgid "RAF 4MB (port 20h)" msgstr "" #: src/kc/mod_list.cc:440 msgid "RAF 4MB (port 24h)" msgstr "" #: src/kc/mod_list.cc:446 msgid "M001: Digital In / Out" msgstr "" #: src/kc/mod_list.cc:453 msgid "M003: V24" msgstr "" #: src/kc/mod_list.cc:461 msgid "M006: Basic" msgstr "" #: src/kc/mod_list.cc:468 msgid "M008: Joystick" msgstr "" #: src/kc/mod_list.cc:475 msgid "M011: 64k RAM" msgstr "" #: src/kc/mod_list.cc:482 msgid "M012: Texor" msgstr "" #: src/kc/mod_list.cc:488 msgid "M022: Expander RAM (16k)" msgstr "" #: src/kc/mod_list.cc:495 msgid "M026: Forth" msgstr "" #: src/kc/mod_list.cc:502 msgid "M027: Development" msgstr "" #: src/kc/mod_list.cc:508 msgid "M032: 256k Segmented RAM" msgstr "" #: src/kc/mod_list.cc:515 msgid "M033: TypeStar + RAMDOS" msgstr "" #: src/kc/mod_list.cc:521 msgid "M034: 512k Segmented RAM" msgstr "" #: src/kc/mod_list.cc:527 msgid "M035: 1M Segmented RAM" msgstr "" #: src/kc/mod_list.cc:533 msgid "M035x4: 4M RAM" msgstr "" #: src/kc/mod_list.cc:539 msgid "M036: 128k Segmented RAM" msgstr "" #: src/kc/mod_list.cc:546 msgid "M052: Network + USB" msgstr "" #: src/kc/mod_list.cc:553 msgid "M900: WordPro '86 (KC85/3)" msgstr "" #: src/kc/mod_list.cc:560 msgid "M901: WordPro '86 (KC85/4)" msgstr "" #: src/kc/mod_list.cc:566 msgid "VDIP: Vinculum USB" msgstr "" #: src/kc/mod_list.cc:570 msgid "VDIP1: Vinculum USB ROM V1.2" msgstr "" #: src/kc/mod_list.cc:574 msgid "VDIP2: Vinculum USB ROM V2.1" msgstr "" #: src/kc/mod_list.cc:588 msgid "Floppy Disk Basis F8" msgstr "" #: src/kc/mod_list.cc:597 msgid "Floppy Disk Basis FC" msgstr "" #: src/kc/mod_list.cc:795 msgid "Autostart" msgstr "" #: src/kc/mod_ramf.cc:50 #, c-format msgid "" "It's not possible to have more than two RAM-Floppy\n" "modules. The first one is running on port 98h and\n" "the second one on port 58h." msgstr "" #: src/kc/tape.cc:96 #, c-format msgid "File `%s' loaded." msgstr "" #: src/kc/tape.cc:174 msgid "Select tape-archive..." msgstr "" #: src/kc/tape.cc:228 #, c-format msgid "tape-archive `%s' attached." msgstr "" #: src/kc/tape.cc:235 msgid "Can't attach tape-archive." msgstr "" #: src/kc/tape.cc:276 src/kc/tape.cc:310 msgid "Export As..." msgstr "" #: src/kc/tape.cc:294 src/kc/tape.cc:328 #, c-format msgid "File `%s' saved." msgstr "" #: src/kc/tape.cc:299 src/kc/tape.cc:333 msgid "Can't export file." msgstr "" #: src/kc/tape.cc:375 msgid "Select file..." msgstr "" #: src/kc/tape.cc:1763 msgid "The format of the selected file is not recognized." msgstr "" #: src/kc/tape.cc:1798 #, c-format msgid "File `%s' [%s] added." msgstr "" #: src/kc/tape.cc:1807 msgid "" "The file you selected has a name that is already\n" "present in the current tape archive.\n" "\n" "Please select a different name to add this file\n" "to the tape archive or use the cancel button to\n" "skip this file." msgstr "" #: src/kc/wav.cc:280 #, c-format msgid "Reading %s `%s' (%d/%d/%d)." msgstr "" #: src/kc/prefs/types.cc:208 msgid "rom_caos_c" msgstr "" #: src/kc/prefs/types.cc:209 msgid "rom_caos_e" msgstr "" #: src/kc/prefs/types.cc:210 msgid "rom_system" msgstr "" #: src/kc/prefs/types.cc:211 msgid "rom_system_1" msgstr "" #: src/kc/prefs/types.cc:212 msgid "rom_system_2" msgstr "" #: src/kc/prefs/types.cc:213 msgid "rom_system_3" msgstr "" #: src/kc/prefs/types.cc:214 msgid "rom_system_4" msgstr "" #: src/kc/prefs/types.cc:215 msgid "rom_user" msgstr "" #: src/kc/prefs/types.cc:216 msgid "rom_basic" msgstr "" #: src/kc/prefs/types.cc:217 msgid "rom_debugger" msgstr "" #: src/kc/prefs/types.cc:218 msgid "rom_reassembler" msgstr "" #: src/kc/prefs/types.cc:219 msgid "rom_editor" msgstr "" #: src/kc/prefs/types.cc:220 msgid "rom_assembler" msgstr "" #: src/kc/prefs/types.cc:221 msgid "rom_charset" msgstr "" #: src/kc/prefs/types.cc:222 msgid "rom_d004_fc" msgstr "" #: src/kc/prefs/types.cc:223 msgid "rom_d004_f8" msgstr "" #: src/kc/prefs/types.cc:475 msgid "" " Z1013 with 16k RAM and 2k ROM, running at 1MHz. This was the\n" " first version with cheap circuits so the CPU was clocked at only 1MHz\n" " The ROM contains the Z1013 monitor version 2.02.\n" msgstr "" #: src/kc/prefs/types.cc:482 src/kc/prefs/types.cc:491 #: src/kc/prefs/types.cc:500 src/kc/prefs/types.cc:511 msgid "System-ROM V2.0" msgstr "" #: src/kc/prefs/types.cc:483 src/kc/prefs/types.cc:492 #: src/kc/prefs/types.cc:501 src/kc/prefs/types.cc:512 #: src/kc/prefs/types.cc:523 src/kc/prefs/types.cc:533 #: src/kc/prefs/types.cc:544 src/kc/prefs/types.cc:554 msgid "Z1013 Charset-ROM" msgstr "" #: src/kc/prefs/types.cc:485 msgid "" " Z1013 with 1k sRAM and 2k ROM, running at 2MHz. Industry\n" " version with only 1k static RAM. Monitor version 2.02.\n" msgstr "" #: src/kc/prefs/types.cc:494 msgid "" " Z1013 with 16k RAM and 2k ROM, running at 2MHz. Successor of\n" " the Z1013.01 but with industry grade circuits clocked at 2MHz.\n" msgstr "" #: src/kc/prefs/types.cc:503 msgid "" " Z1013 with 64k RAM and 2x2k ROM, running at 2MHz. The ROM\n" " contains two system images with 2k each. Loaded is the first\n" " image with version 2.02 that is supposed to work with the foil keypad\n" " shipped by the manufacturer.\n" msgstr "" #: src/kc/prefs/types.cc:514 msgid "" " Z1013 with 64k RAM and 2k ROM, running at 2MHz. The ROM\n" " contains two system images with 2k each. Loaded is the second\n" " image with version A.2 that supports an extended keyboard with an\n" " 8x8 matrix.\n" msgstr "" #: src/kc/prefs/types.cc:522 msgid "System-ROM A2" msgstr "" #: src/kc/prefs/types.cc:525 msgid "" " Z1013 with 64k RAM and 4k ROM. The ROM is the extended\n" " version tagged 2.028 RB that has a different keyboard driver for\n" " the keyboard K7659.\n" msgstr "" #: src/kc/prefs/types.cc:532 msgid "Brosig-ROM K7659/2.028" msgstr "" #: src/kc/prefs/types.cc:535 msgid "" " Z1013 with 64k RAM and 4k ROM. The ROM contains the 'Super\n" " Ur-Lader 5.0' that can read arbitrary tape files as system monitor.\n" " The hardware modification port at address 4h is emulated which allows\n" " programs to switch off the system ROM.\n" msgstr "" #: src/kc/prefs/types.cc:543 msgid "Super Ur-Lader 5.0" msgstr "" #: src/kc/prefs/types.cc:546 msgid "" " Z1013 with 64k RAM and 4k ROM. The ROM contains the Bootloader\n" " BL4 that can load monitor images from floppy disk or can start the\n" " CP/M system.\n" msgstr "" #: src/kc/prefs/types.cc:553 msgid "Bootlader BL4" msgstr "" #: src/kc/prefs/types.cc:559 msgid "" " Z9001 (later called KC 85/1) with monochrome display, no internal BASIC\n" " ROM. This computer has 16k RAM and 4k ROM with the robotron z9001 " "system.\n" msgstr "" #: src/kc/prefs/types.cc:565 src/kc/prefs/types.cc:581 #: src/kc/prefs/types.cc:734 src/kc/prefs/types.cc:751 #: src/kc/prefs/types.cc:768 src/kc/prefs/types.cc:786 #: src/kc/prefs/types.cc:803 src/kc/prefs/types.cc:820 #: src/kc/prefs/types.cc:846 src/kc/prefs/types.cc:901 #: src/kc/prefs/types.cc:912 src/kc/prefs/types.cc:920 msgid "System-ROM" msgstr "" #: src/kc/prefs/types.cc:566 src/kc/prefs/types.cc:582 #: src/kc/prefs/types.cc:735 src/kc/prefs/types.cc:752 #: src/kc/prefs/types.cc:769 src/kc/prefs/types.cc:787 #: src/kc/prefs/types.cc:804 src/kc/prefs/types.cc:821 msgid "ROM-Bank System without menu" msgstr "" #: src/kc/prefs/types.cc:567 src/kc/prefs/types.cc:583 #: src/kc/prefs/types.cc:736 src/kc/prefs/types.cc:753 #: src/kc/prefs/types.cc:770 src/kc/prefs/types.cc:788 #: src/kc/prefs/types.cc:805 src/kc/prefs/types.cc:822 msgid "ROM-Bank System with menu" msgstr "" #: src/kc/prefs/types.cc:570 src/kc/prefs/types.cc:586 #: src/kc/prefs/types.cc:740 src/kc/prefs/types.cc:757 #: src/kc/prefs/types.cc:774 src/kc/prefs/types.cc:792 #: src/kc/prefs/types.cc:809 src/kc/prefs/types.cc:826 msgid "Z9001 Charset-ROM" msgstr "" #: src/kc/prefs/types.cc:571 src/kc/prefs/types.cc:587 #: src/kc/prefs/types.cc:741 src/kc/prefs/types.cc:758 #: src/kc/prefs/types.cc:775 src/kc/prefs/types.cc:793 #: src/kc/prefs/types.cc:810 src/kc/prefs/types.cc:827 msgid "Z9001 Charset-ROM (german)" msgstr "" #: src/kc/prefs/types.cc:572 src/kc/prefs/types.cc:588 #: src/kc/prefs/types.cc:742 src/kc/prefs/types.cc:759 #: src/kc/prefs/types.cc:776 src/kc/prefs/types.cc:794 #: src/kc/prefs/types.cc:811 src/kc/prefs/types.cc:828 msgid "CGA Charset-ROM" msgstr "" #: src/kc/prefs/types.cc:573 src/kc/prefs/types.cc:589 #: src/kc/prefs/types.cc:743 src/kc/prefs/types.cc:760 #: src/kc/prefs/types.cc:777 src/kc/prefs/types.cc:795 #: src/kc/prefs/types.cc:812 src/kc/prefs/types.cc:829 msgid "CGA Charset-ROM (extended)" msgstr "" #: src/kc/prefs/types.cc:576 msgid " Like the z9001.10 but with color extension card.\n" msgstr "" #: src/kc/prefs/types.cc:595 msgid "" " HC900 (later called KC 85/2) with 16k RAM and 8k ROM. System is called\n" " HC-CAOS 2.2 (home computer - cassette aided operating system). BASIC\n" " is only available as external module.\n" msgstr "" #: src/kc/prefs/types.cc:601 msgid "HC-900 CAOS" msgstr "" #: src/kc/prefs/types.cc:602 msgid "CAOS 2.2" msgstr "" #: src/kc/prefs/types.cc:605 src/kc/prefs/types.cc:611 #: src/kc/prefs/types.cc:633 src/kc/prefs/types.cc:639 #: src/kc/prefs/types.cc:662 src/kc/prefs/types.cc:668 #: src/kc/prefs/types.cc:696 src/kc/prefs/types.cc:702 msgid "D004 Version 2.0 (02.01.1989)" msgstr "" #: src/kc/prefs/types.cc:606 src/kc/prefs/types.cc:612 #: src/kc/prefs/types.cc:634 src/kc/prefs/types.cc:640 #: src/kc/prefs/types.cc:663 src/kc/prefs/types.cc:669 #: src/kc/prefs/types.cc:697 src/kc/prefs/types.cc:703 msgid "D004 Version 3.0 (07.12.1997)" msgstr "" #: src/kc/prefs/types.cc:607 src/kc/prefs/types.cc:613 #: src/kc/prefs/types.cc:635 src/kc/prefs/types.cc:641 #: src/kc/prefs/types.cc:664 src/kc/prefs/types.cc:670 #: src/kc/prefs/types.cc:698 src/kc/prefs/types.cc:704 msgid "D004 Version 3.1 (22.01.2003)" msgstr "" #: src/kc/prefs/types.cc:608 src/kc/prefs/types.cc:614 #: src/kc/prefs/types.cc:636 src/kc/prefs/types.cc:642 #: src/kc/prefs/types.cc:665 src/kc/prefs/types.cc:671 #: src/kc/prefs/types.cc:699 src/kc/prefs/types.cc:705 msgid "D004 Version 3.2 (28.10.2008)" msgstr "" #: src/kc/prefs/types.cc:620 msgid "" " KC 85/3 with 16k RAM, 8k system ROM with HC-CAOS 3.1 and 8k BASIC ROM.\n" msgstr "" #: src/kc/prefs/types.cc:624 msgid "CAOS 3.1" msgstr "" #: src/kc/prefs/types.cc:625 msgid "CAOS 3.3" msgstr "" #: src/kc/prefs/types.cc:626 msgid "CAOS 3.4" msgstr "" #: src/kc/prefs/types.cc:627 msgid "OS PI/88 (yellow/blue)" msgstr "" #: src/kc/prefs/types.cc:628 msgid "OS PI/88 (black/white)" msgstr "" #: src/kc/prefs/types.cc:629 msgid "OS PI/88 (white/blue)" msgstr "" #: src/kc/prefs/types.cc:631 src/kc/prefs/types.cc:660 #: src/kc/prefs/types.cc:738 src/kc/prefs/types.cc:755 #: src/kc/prefs/types.cc:772 src/kc/prefs/types.cc:790 #: src/kc/prefs/types.cc:807 src/kc/prefs/types.cc:824 msgid "KC-BASIC" msgstr "" #: src/kc/prefs/types.cc:648 msgid "" " KC 85/4 with 64k RAM, 64k screen memory, 12k system ROM with HC-CAOS " "4.2\n" " and 8k BASIC ROM.\n" msgstr "" #: src/kc/prefs/types.cc:653 msgid "CAOS 4.1 (C)" msgstr "" #: src/kc/prefs/types.cc:654 msgid "CAOS 4.2 (C)" msgstr "" #: src/kc/prefs/types.cc:657 msgid "CAOS 4.1 (E)" msgstr "" #: src/kc/prefs/types.cc:658 msgid "CAOS 4.2 (E)" msgstr "" #: src/kc/prefs/types.cc:677 msgid "" " Unofficial successor of the KC 85/4 with 256k RAM, 64k screen memory,\n" " 16k system ROM with HC-CAOS 4.4, 8k BASIC ROM and 24k User ROM. It is\n" " intended to be used with a modified D004 floppy device with additional\n" " hard-disk support.\n" msgstr "" #: src/kc/prefs/types.cc:684 msgid "CAOS 4.3 (C)" msgstr "" #: src/kc/prefs/types.cc:685 msgid "CAOS 4.4 (C)" msgstr "" #: src/kc/prefs/types.cc:688 msgid "CAOS 4.3 (E)" msgstr "" #: src/kc/prefs/types.cc:689 msgid "CAOS 4.4 (E)" msgstr "" #: src/kc/prefs/types.cc:692 msgid "KC-BASIC (EDAS/TEMO/FORTH)" msgstr "" #: src/kc/prefs/types.cc:693 msgid "KC-BASIC (EDAS/TEMO/USB)" msgstr "" #: src/kc/prefs/types.cc:711 msgid " Polycomputer 880.\n" msgstr "" #: src/kc/prefs/types.cc:715 src/kc/prefs/types.cc:839 #: src/kc/prefs/types.cc:852 src/kc/prefs/types.cc:864 #: src/kc/prefs/types.cc:874 msgid "System-ROM 1" msgstr "" #: src/kc/prefs/types.cc:716 src/kc/prefs/types.cc:840 #: src/kc/prefs/types.cc:853 src/kc/prefs/types.cc:865 #: src/kc/prefs/types.cc:875 msgid "System-ROM 2" msgstr "" #: src/kc/prefs/types.cc:717 src/kc/prefs/types.cc:718 msgid "Optional-ROM 1" msgstr "" #: src/kc/prefs/types.cc:720 msgid " Polycomputer 880 with chess program rom from SC1.\n" msgstr "" #: src/kc/prefs/types.cc:724 msgid "SC1-ROM" msgstr "" #: src/kc/prefs/types.cc:729 msgid " Like the KC 87.11 but without the color extension card.\n" msgstr "" #: src/kc/prefs/types.cc:746 msgid " Successor of the Z9001 with internal 10k BASIC ROM.\n" msgstr "" #: src/kc/prefs/types.cc:763 msgid " Like the KC 87.21 but without the color extension card.\n" msgstr "" #: src/kc/prefs/types.cc:780 msgid "" " New series with extended BASIC ROM (still 10k but with some routines " "for\n" " plotter support were added).\n" msgstr "" #: src/kc/prefs/types.cc:798 msgid " New batch of KC 87.20 with no known hardware differences.\n" msgstr "" #: src/kc/prefs/types.cc:815 msgid " New batch of KC 87.21 with no known hardware differences.\n" msgstr "" #: src/kc/prefs/types.cc:835 msgid " Single board computer LC 80 with 1k RAM and 2 x 1k ROM.\n" msgstr "" #: src/kc/prefs/types.cc:842 msgid " Single board computer LC 80 with 1k RAM and 1 x 2k ROM.\n" msgstr "" #: src/kc/prefs/types.cc:848 msgid " Export variant of the LC 80 with 12k ROM including chess program.\n" msgstr "" #: src/kc/prefs/types.cc:854 msgid "System-ROM 3" msgstr "" #: src/kc/prefs/types.cc:859 msgid " BIC/A5105, only the base device is emulated, no floppy device.\n" msgstr "" #: src/kc/prefs/types.cc:866 src/kc/prefs/types.cc:876 msgid "DSE-ROM 1" msgstr "" #: src/kc/prefs/types.cc:867 src/kc/prefs/types.cc:877 msgid "DSE-ROM 2" msgstr "" #: src/kc/prefs/types.cc:869 msgid " BIC/A5105, the full system including the floppy device.\n" msgstr "" #: src/kc/prefs/types.cc:882 msgid "" " Micro-Computer presented in the book \"Praktische Microcomputertechnik" "\"\n" " by Manfred Kramer.\n" msgstr "" #: src/kc/prefs/types.cc:886 msgid "IO-Monitor" msgstr "" #: src/kc/prefs/types.cc:887 msgid "BASIC" msgstr "" #: src/kc/prefs/types.cc:888 src/kc/prefs/types.cc:902 msgid "Charset-ROM" msgstr "" #: src/kc/prefs/types.cc:889 msgid "Debugger" msgstr "" #: src/kc/prefs/types.cc:890 msgid "Reassembler" msgstr "" #: src/kc/prefs/types.cc:891 msgid "Editor" msgstr "" #: src/kc/prefs/types.cc:892 msgid "Assembler" msgstr "" #: src/kc/prefs/types.cc:897 msgid "" " CP/M based Micro-Computer presented in the magazine \"Funkamateur\"\n" " by A. Mugler and H. Mathes.\n" msgstr "" #: src/kc/prefs/types.cc:907 msgid "" " Minimal Z80 learning system presented in the magazine \"rfe\"\n" " by Eckhard Schiller.\n" msgstr "" #: src/kc/prefs/types.cc:917 msgid " Minimal Z80 learning system designed by Dipl.-Ing. Joachim Czepa.\n" msgstr "" #: src/kc/prefs/types.cc:921 msgid "User-ROM" msgstr "" #: src/kc/prefs/types.cc:1014 msgid "available emulations:" msgstr "" #: src/libtape/kctape.cc:80 msgid "" "\n" "KCtape is part of KCemu the KC 85/4 Emulator and comes with\n" "ABSOLUTELY NO WARRANTY; for details run `kcemu --warranty'.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; run `kcemu --license' for details.\n" "\n" "usage: kctape -t tapefile [command [command_args]]\n" "\n" " commands:\n" " ---------\n" "\n" " -h|--help show this help text\n" " -v|--verbose be verbose about what's going on\n" " -t|--tape tape archive to process\n" " -l|--list list content of tape archive\n" " -c|--create create tape archive if it doesn't exist\n" " -a|--add add files (KC85/3 mode)\n" " -1|--add1 add files (KC85/1 mode)\n" " -A|--add-raw add binary files\n" " -r|--remove remove file from tape archive\n" " -x|--extract extract file from tape archive\n" " -d|--dump hexdump file\n" " -o|--output output file for extract\n" " -b|--print-bam show internal block allocation map\n" " -B|--print-block-list show internal block list\n" msgstr "" #: src/libtape/kctape.cc:584 #, c-format msgid "" "ERROR: no tape specified, use the -t option to select\n" " the tape archive you want to process\n" "\n" msgstr "" #: src/ui/gtk/debug.cc:237 msgid "KCemu: Debugger" msgstr "" #: src/ui/gtk/debug.cc:336 msgid "Trace" msgstr "" #: src/ui/gtk/debug.cc:343 msgid "Single Step" msgstr "" #: src/ui/gtk/debug.cc:350 msgid "Execute Step" msgstr "" #: src/ui/gtk/dialog.cc:54 msgid "???" msgstr "" #: src/ui/gtk/fbrowse.cc:39 msgid "Select File..." msgstr "" #: src/ui/gtk/hedit.cc:96 msgid "no tape-filename given!" msgstr "" #: src/ui/gtk/hedit.cc:101 msgid "no KC-filename given!" msgstr "" #: src/ui/gtk/hedit.cc:106 src/ui/gtk/image.cc:89 msgid "" "error in given load address!\n" "\n" "valid addresses have to be in the range from 0 to 65535\n" "hexadecimal values need to be prefixed with 0x (e.g. 0x1234),\n" "octal values require a leading 0 (e.g. 0444)" msgstr "" #: src/ui/gtk/hedit.cc:119 src/ui/gtk/image.cc:105 msgid "error in given start address!" msgstr "" #: src/ui/gtk/hedit.cc:174 msgid "File Properties" msgstr "" #: src/ui/gtk/hedit.cc:199 msgid "Name in tape-directory:" msgstr "" #: src/ui/gtk/hedit.cc:212 msgid "Name in KC file-header:" msgstr "" #: src/ui/gtk/hedit.cc:225 src/ui/gtk/image.cc:156 msgid "Load address:" msgstr "" #: src/ui/gtk/hedit.cc:251 msgid "autostart" msgstr "" #: src/ui/gtk/image.cc:126 msgid "Input Image Properties" msgstr "" #: src/ui/gtk/image.cc:133 msgid "" "It was not possible to automatically determine the\n" "type of the selected file. Thus I don't know at which\n" "address the file should be loaded\n" "\n" "To load the file nevertheless you need to type in the\n" "needed values yourself." msgstr "" #: src/ui/gtk/image.cc:185 msgid "Start Program after Loading" msgstr "" #: src/ui/gtk/image.cc:197 msgid "OK" msgstr "" #: src/ui/gtk/image.cc:209 msgid "Cancel" msgstr "" #: src/ui/gtk/info.cc:132 msgid "byte output" msgstr "" #: src/ui/gtk/info.cc:133 msgid "byte input" msgstr "" #: src/ui/gtk/info.cc:134 msgid "byte input/output" msgstr "" #: src/ui/gtk/info.cc:135 msgid "bit input/output" msgstr "" #: src/ui/gtk/info.cc:326 msgid "Mode:" msgstr "" #: src/ui/gtk/info.cc:345 src/ui/gtk/info.cc:419 msgid "IRQ:" msgstr "" #: src/ui/gtk/info.cc:364 src/ui/gtk/info.cc:438 msgid "IRQ Vector:" msgstr "" #: src/ui/gtk/info.cc:391 msgid "Channel A" msgstr "" #: src/ui/gtk/info.cc:395 msgid "Channel B" msgstr "" #: src/ui/gtk/info.cc:464 msgid "Channel 0" msgstr "" #: src/ui/gtk/info.cc:468 msgid "Channel 1" msgstr "" #: src/ui/gtk/info.cc:472 msgid "Channel 2" msgstr "" #: src/ui/gtk/info.cc:476 msgid "Channel 3" msgstr "" #: src/ui/gtk/info.cc:491 msgid "KCemu: Info" msgstr "" #: src/ui/gtk/info.cc:516 msgid "CPU" msgstr "" #: src/ui/gtk/info.cc:519 msgid "PIO" msgstr "" #: src/ui/gtk/info.cc:522 msgid "CTC" msgstr "" #: src/ui/gtk/info.cc:545 msgid "Update" msgstr "" #: src/ui/gtk/info.cc:555 src/ui/gtk/wav.cc:144 msgid "Close" msgstr "" #: src/ui/gtk/keyboard.cc:558 msgid "KCemu: Keyboard" msgstr "" #: src/ui/gtk/module.cc:211 msgid "No module slots available for this computer." msgstr "" #: src/ui/gtk/module.cc:223 #, c-format msgid "Slot %d" msgstr "" #: src/ui/gtk/module.cc:318 msgid "Floppy Disk Basis [F0]" msgstr "" #: src/ui/gtk/module.cc:323 #, c-format msgid "D002: Busdriver [%02X]" msgstr "" #: src/ui/gtk/module.cc:331 src/ui/gtk/module.cc:333 msgid "Basis Device" msgstr "" #: src/ui/gtk/tape.cc:76 msgid "Please enter the new name for the file." msgstr "" #: src/ui/gtk/tape.cc:272 msgid "/_Run File" msgstr "" #: src/ui/gtk/tape.cc:273 msgid "/_Load File" msgstr "" #: src/ui/gtk/tape.cc:274 msgid "/_Export File" msgstr "" #: src/ui/gtk/tape.cc:275 msgid "/Export _Wav" msgstr "" #: src/ui/gtk/tape.cc:276 msgid "/sep1" msgstr "" #: src/ui/gtk/tape.cc:277 msgid "/Edit _Header" msgstr "" #: src/ui/gtk/tape.cc:278 msgid "/Re_name File" msgstr "" #: src/ui/gtk/tape.cc:279 msgid "/_Delete File" msgstr "" #: src/ui/gtk/tape.cc:280 msgid "/sep2" msgstr "" #: src/ui/gtk/tape.cc:281 msgid "/_Add File" msgstr "" #: src/ui/gtk/tape.cc:286 msgid "Name" msgstr "" #: src/ui/gtk/tape.cc:287 msgid "Type" msgstr "" #: src/ui/gtk/tape.cc:288 msgid "Load" msgstr "" #: src/ui/gtk/tape.cc:289 msgid "Start" msgstr "" #: src/ui/gtk/tape.cc:290 msgid "Size" msgstr "" #: src/ui/gtk/tape.cc:302 src/ui/gtk/tape.cc:308 msgid "" msgstr "" #: src/ui/gtk/tape.cc:309 msgid "/Run File" msgstr "" #: src/ui/gtk/tape.cc:310 msgid "/Load File" msgstr "" #: src/ui/gtk/tape.cc:311 msgid "/Edit Header" msgstr "" #: src/ui/gtk/tape.cc:312 msgid "/Delete File" msgstr "" #: src/ui/gtk/tape.cc:313 msgid "/Rename File" msgstr "" #: src/ui/gtk/tape.cc:314 msgid "/Export File" msgstr "" #: src/ui/gtk/tape.cc:315 msgid "/Export Wav" msgstr "" #: src/ui/gtk/ui_gtk.cc:794 msgid "Info" msgstr "" #: src/ui/gtk/wav.cc:134 msgid "Open" msgstr "" #: src/ui/gtk/wav.cc:154 msgid "Play" msgstr "" #: src/ui/gtk/options.cc:94 msgid "Save profiles?" msgstr "" #: src/ui/gtk/options.cc:96 msgid "" "Some profiles were changed!\n" "\n" "'Yes' will save changes to disk, 'No' will reject all changes.\n" "'Cancel': will allow to continue editing." msgstr "" #: src/ui/gtk/options.cc:605 msgid "Open ROM Image..." msgstr "" #: src/ui/gtk/options.cc:892 #, c-format msgid "ROM image is '%s'. The ROM size needs to be %04xh (%d) bytes." msgstr "" #: src/ui/gtk/video.cc:258 msgid "" msgstr "" #: src/ui/gtk/video.cc:262 msgid "Theora/Ogg" msgstr "" #: src/ui/gtk/video.cc:266 msgid "AVI" msgstr "" #: src/ui/gtk/video.cc:270 msgid "MPEG 4" msgstr "" #: src/ui/gtk/video.cc:274 msgid "Dirac" msgstr "" #: src/ui/gtk/video.cc:278 msgid "Schroedinger" msgstr "" #: src/ui/gtk/video.cc:282 msgid "Animated GIF" msgstr "" #: src/ui/gtk/video.cc:286 msgid "VNC" msgstr "" KCemu-0.5.1/po/Makefile.in.in0000644001050700006200000003552411340261610015300 0ustar glaubitzfbedv# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2007 by Ulrich Drepper # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License but which still want to provide support for the GNU gettext # functionality. # Please note that the actual code of GNU gettext is covered by the GNU # General Public License and is *not* in the public domain. # # Origin: gettext-0.17 GETTEXT_MACRO_VERSION = 0.17 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) MSGFMT_ = @MSGFMT@ MSGFMT_no = @MSGFMT@ MSGFMT_yes = @MSGFMT_015@ MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: check-macro-version all-@USE_NLS@ all-yes: stamp-po all-no: # Ensure that the gettext macros and this Makefile.in.in are in sync. check-macro-version: @test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ exit 1; \ } # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that # LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. # In this case, stamp-po is a nop (i.e. a phony target). # stamp-po is a timestamp denoting the last time at which the CATALOGS have # been loosely updated. Its purpose is that when a developer or translator # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, # "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent # invocations of "make" will do nothing. This timestamp would not be necessary # if updating the $(CATALOGS) would always touch them; however, the rule for # $(POFILES) has been designed to not touch files that don't need to be # changed. stamp-po: $(srcdir)/$(DOMAIN).pot test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ echo "touch stamp-po" && \ echo timestamp > stamp-poT && \ mv stamp-poT stamp-po; \ } # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed if LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null | grep -v 'libtool:' >/dev/null; then \ package_gnu='GNU '; \ else \ package_gnu=''; \ fi; \ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ *) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --package-name="$${package_gnu}@PACKAGE@" \ --package-version='@VERSION@' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ esac test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(srcdir)/$(DOMAIN).pot @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) && $(MSGMERGE_UPDATE) $${lang}.po $(DOMAIN).pot; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all $(mkdir_p) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: $(mkdir_p) $(DESTDIR)$(datadir) @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: mostlyclean: rm -f remove-potcdate.sed rm -f stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: $(MAKE) update-po @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: stamp-po $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir) || exit 1; \ else \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if $(MSGMERGE) $$lang.po $(DOMAIN).pot -o $$tmpdir/$$lang.new.po; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && $(SHELL) ./config.status $(subdir)/$@.in po-directories force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/po/en@quot.header0000644001050700006200000000226311321666453015422 0ustar glaubitzfbedv# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # KCemu-0.5.1/po/boldquot.sed0000644001050700006200000000033111321666453015155 0ustar glaubitzfbedvs/"\([^"]*\)"/“\1”/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“”/""/g s/“/“/g s/”/”/g s/‘/‘/g s/’/’/g KCemu-0.5.1/po/POTFILES.in0000644001050700006200000001172211345001577014406 0ustar glaubitzfbedv# List of source files which contain translatable strings. # images/about.glade images/audio.glade images/color.glade images/dialog.glade images/disk.glade images/help.glade images/keyboard.glade images/legal.glade images/main.glade images/module.glade images/options.glade images/plotter.glade images/savemem.glade images/screenshot.glade images/selector.glade images/tapeedit.glade images/tape.glade images/thanks.glade images/vdip.glade images/video.glade src/cmd/cmd.cc src/cmd/cmdargs.cc src/cmd/dbg.cc src/cmd/image.cc src/cmd/load.cc src/cmd/quit.cc src/cmd/reset.cc src/fileio/kc2img.c src/fileio/kc2raw.c src/fileio/kc2tap.c src/fileio/kc2wav.c src/fileio/load.c src/fileio/load_AF.c src/fileio/load_BASIC.c src/fileio/load_BASICODE.c src/fileio/load_BIN.c src/fileio/load_GPF.c src/fileio/load_HS.c src/fileio/load_SSS.c src/fileio/load_TAPE.c src/fileio/load_UNKNOWN.c src/fileio/save_IMG.c src/fileio/save_RAW.c src/fileio/save_TAP.c src/fileio/save_WAV.c src/fileio/test_load.c src/getopt/getopt.c src/getopt/getopt1.c src/kc/cb_list.cc src/kc/ctc.cc src/kc/ctc1.cc src/kc/ctc3.cc src/kc/ctc6.cc src/kc/ctc8.cc src/kc/ctc9.cc src/kc/ctc_base.cc src/kc/ctc_dio.cc src/kc/ctc_fdc.cc src/kc/daisy.cc src/kc/disk.cc src/kc/disk_io.cc src/kc/fdc.cc src/kc/fdc0s.cc src/kc/fdc4.cc src/kc/fdc7.cc src/kc/fdc9.cc src/kc/fdc_cmd.cc src/kc/floppy.cc src/kc/gdc.cc src/kc/gide.cc src/kc/ic.cc src/kc/kc.cc src/kc/keyb0.cc src/kc/keyb1.cc src/kc/keyb3.cc src/kc/keyb6.cc src/kc/keyb8.cc src/kc/keyb9.cc src/kc/kramermc/keyboard.cc src/kc/kramermc/memory.cc src/kc/kramermc/pio.cc src/kc/memory.cc src/kc/memory0.cc src/kc/memory1.cc src/kc/memory2.cc src/kc/memory3.cc src/kc/memory4.cc src/kc/memory6.cc src/kc/memory7.cc src/kc/memory8.cc src/kc/memory9.cc src/kc/mod_128k.cc src/kc/mod_192k.cc src/kc/mod_1m.cc src/kc/mod_256k.cc src/kc/mod_320k.cc src/kc/mod_4131.cc src/kc/mod_4m.cc src/kc/mod_512k.cc src/kc/mod_64k.cc src/kc/mod_auto.cc src/kc/mod_boot.cc src/kc/mod_cpm.cc src/kc/mod_dio.cc src/kc/mod_disk.cc src/kc/mod_fdc.cc src/kc/mod_gdc.cc src/kc/mod_js.cc src/kc/mod_list.cc src/kc/mod_r64.cc src/kc/mod_ram.cc src/kc/mod_ram1.cc src/kc/mod_ram8.cc src/kc/mod_ramf.cc src/kc/mod_rom.cc src/kc/mod_rom1.cc src/kc/mod_romb.cc src/kc/mod_rtc.cc src/kc/mod_segm.cc src/kc/mod_urom.cc src/kc/mod_v24.cc src/kc/module.cc src/kc/muglerpc/ctc.cc src/kc/muglerpc/keyboard.cc src/kc/muglerpc/memory.cc src/kc/muglerpc/pio.cc src/kc/muglerpc/ports.cc src/kc/pio.cc src/kc/pio0.cc src/kc/pio1.cc src/kc/pio2.cc src/kc/pio3.cc src/kc/pio4.cc src/kc/pio6.cc src/kc/pio8.cc src/kc/pio9.cc src/kc/pio_dio.cc src/kc/poly880.cc src/kc/ports.cc src/kc/ports0.cc src/kc/ports4.cc src/kc/ports6.cc src/kc/sh_mem.cc src/kc/sound.cc src/kc/sound3.cc src/kc/sound8.cc src/kc/svg.cc src/kc/tape.cc src/kc/timer.cc src/kc/timer1.cc src/kc/timer3.cc src/kc/vis.cc src/kc/wav.cc src/kc/z80.cc src/kc/z80_fdc.cc src/kc/kcemu-send.c src/kc/prefs/prefs.cc src/kc/prefs/parser.cc src/kc/prefs/profile.cc src/kc/prefs/types.cc src/kc/prefs/strlist.cc src/kc/prefs/dirlist.cc src/kc/vcs80/keyboard.cc src/kc/vcs80/memory.cc src/kc/vcs80/pio.cc src/kc/c80/keyboard.cc src/kc/c80/memory.cc src/kc/c80/pio.cc src/kc/c80/display.cc src/libaudio/load.c src/libaudio/load_als.c src/libaudio/load_aud.c src/libaudio/load_flc.c src/libaudio/load_mp3.c src/libaudio/load_ogg.c src/libaudio/load_oss.c src/libaudio/load_raw.c src/libaudio/load_snd.c src/libaudio/load_wav.c src/libdbg/dbg-test.cc src/libdbg/dbg.cc src/libdisk/disk.c src/libdisk/load_22dsk.c src/libdisk/load_cdm.c src/libdisk/load_dir.c src/libdisk/load_td0.c src/libdisk/tdtodump.c src/libdisk/teledisk.c src/libtape/kcread2tap.c src/libtape/kct.cc src/libtape/kctape.cc src/libtape/show_tap.c src/libtape/test.c src/ui/commands.cc src/ui/error.cc src/ui/generic/memaccess.cc src/ui/generic/module.cc src/ui/generic/scanline.cc src/ui/generic/tape.cc src/ui/generic/ui_0.cc src/ui/generic/ui_1.cc src/ui/generic/ui_3.cc src/ui/generic/ui_4.cc src/ui/generic/ui_6.cc src/ui/generic/ui_8.cc src/ui/generic/ui_9.cc src/ui/generic/ui_kramermc.cc src/ui/generic/ui_led.cc src/ui/generic/ui_muglerpc.cc src/ui/generic/ui_vcs80.cc src/ui/generic/ui_base.cc src/ui/generic/ui_c80.cc src/ui/gtk/about.cc src/ui/gtk/cmd.cc src/ui/gtk/color.cc src/ui/gtk/copying.cc src/ui/gtk/debug.cc src/ui/gtk/dialog.cc src/ui/gtk/disk.cc src/ui/gtk/fbrowse.cc src/ui/gtk/hedit.cc src/ui/gtk/help.cc src/ui/gtk/image.cc src/ui/gtk/info.cc src/ui/gtk/kcemu-remote.c src/ui/gtk/keyboard.cc src/ui/gtk/module.cc src/ui/gtk/tape.cc src/ui/gtk/tapeadd.cc src/ui/gtk/thanks.cc src/ui/gtk/ui_gtk.cc src/ui/gtk/ui_gtk0.cc src/ui/gtk/ui_gtk1.cc src/ui/gtk/ui_gtk3.cc src/ui/gtk/ui_gtk4.cc src/ui/gtk/ui_gtk6.cc src/ui/gtk/ui_gtk8.cc src/ui/gtk/ui_gtk9.cc src/ui/gtk/ui_gtk_kramermc.cc src/ui/gtk/ui_gtk_muglerpc.cc src/ui/gtk/wav.cc src/ui/gtk/window.cc src/ui/gtk/ui_gtk_vcs80.cc src/ui/gtk/selector.cc src/ui/gtk/main.cc src/ui/gtk/ui_gtk_base.cc src/ui/gtk/ui_gtk_c80.cc src/ui/gtk/options.cc src/ui/gtk/video.cc src/ui/hsv2rgb.cc src/ui/log.cc src/ui/status.cc KCemu-0.5.1/po/en@boldquot.header0000644001050700006200000000247111321666453016264 0ustar glaubitzfbedv# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # KCemu-0.5.1/po/en.gmo0000644001050700006200000024177211345001730013740 0ustar glaubitzfbedv\)6)P _Kk/r?vC{<W{f{F{B|K}cM}<}<}5+~ba~F~Y >e>n6R<<݀8Sx؁Q&Cކ,?%],- އ&&Ff ˆ ψ ڈ  & 2=C IWk>&8P nz $ъ>؊@ Xb h  Ë Ћދ  %. 7 D Q ^ k x ʌٌ  !<O V ` j t ~ p4;DMf=,BYwѐ א %|&|< C]Ē̒Ԓ'c: _/ [:e   ;H P] m˖ܖ (/ AKc l x  F ^ iu :˙.L^gƛ˛ћ / ? K Wcs ͜ & 2 @Mas | ȝ ͝۝\ s }  ˞מ3JYrßɟٟߟ    " ,6>C[s| ,pϠ@CZpˡ ڡ   ".'3 [hp ȢТ $:Pf}=49L_f +ȤC 8E T_n ͥ٥!ޥ'Ʀ̦)!7<O V a n {  ħ6˧)ۨ2 թ{Ԫ #3.< kxӰ۰   8 BO V ` ky   ʱ ӱ ݱ  '17 HRh y ̲³߳'2Zn$ش! 0 H V ` k v  µ ͵ ڵ  &6۷P E)9C <Q f F < K cG < < 5% b[ F Y >_ > n 6L<<8MxK  =, 9%W,}- & @` {              ,7= CQe>&2J ht{  $>@ R\ b      ( 1 > K X e r   6I P Z d n x  p .5>G`7&<Sq   %| |< CW           !!!!c4! !!!Y"/#[4##e# # $$ 5$B$ J$W$ g$$$$$$$$% %"%)% ;%E%]% f% r% %% %%@& X& c&o& &&&&&:''(()F)X)a)|)))))) ) ))*)* 9* E* Q*]*m* *******+ + ,+ :+G+[+m+ v++++ ++ ++V, m, w,, , ,, ,,,,---D-S-l-------- - - - - . . . &.0.8.=.U.m.v.~. .,.p.:/=/T/j////// // /0 00 0(0'-0 U0b0j00 00000001141J1`1w111=112.232F2Y2`2 |2222222+2C2 23?3 N3Y3h3z33333 33!334 44'444)4 551565I5 P5 [5 h5 u5 5555 555655)6627 77u8y8888888888 8 8 99->.6> e>r>{>>>>>>>>>> ? ?? 2? Psv}_":6\cwefgMXE&i-XM  .eLO $ha tYh%KI4!o+SgBn{s_ "=ub<n|uA;!li]8$,(NWIv' 7wlTG9z&VWS-U cN k =F'q2Vr*9Z+ (/[yQT/6?0: >?@O1}HL*RdmzDBRq\xQd14a, GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. KCemu comes with ABSOLUTELY NO WARRANTY; for details run `kcemu --warranty'. This is free software, and you are welcome to redistribute it under certain conditions; run `kcemu --license' for details. usage: kcemu [-0123456789aAcestfhdlvVHFMELW] -0: select Z1013 profile -1: select Z9001 / KC 85/1 profile -2: select KC 85/2 profile -3: select KC 85/3 profile -4: select KC 85/4 profile -5: select KC 85/5 profile -6: select Poly-880 profile -7: select KC 87 profile -8: select LC 80 profile -9: select BIC/A5105 profile -a --autostart: autostart program on startup (kc85/3 - kc85/5 only) -A --address: override start address of autostart program -d --datadir: set data directory (for ROM images) -E --effects: enable display effects for scaled screen output -f --floppy: attach disk on startup -F --fullscreen: start in fullscreen mode (if supported by gui) -h --help: display help -H --home: overwrite setting for home directory -l --localedir: set locale directory -L --license: show license -M --modules: insert modules on startup (e.g. -M M011,M027) -o --debug-output: write debug output to file -p --profile: start with given profile -P --select-profile: show profile selector -s --scale: scale display (allowed values: 1, 2 and 3) -t --tape: attach tape on startup -v --version: show KCemu version and configuration -V --viewlist: view verbose list of available emulations -W --warranty: show warranty KCtape is part of KCemu the KC 85/4 Emulator and comes with ABSOLUTELY NO WARRANTY; for details run `kcemu --warranty'. This is free software, and you are welcome to redistribute it under certain conditions; run `kcemu --license' for details. usage: kctape -t tapefile [command [command_args]] commands: --------- -h|--help show this help text -v|--verbose be verbose about what's going on -t|--tape tape archive to process -l|--list list content of tape archive -c|--create create tape archive if it doesn't exist -a|--add add files (KC85/3 mode) -1|--add1 add files (KC85/1 mode) -A|--add-raw add binary files -r|--remove remove file from tape archive -x|--extract extract file from tape archive -d|--dump hexdump file -o|--output output file for extract -b|--print-bam show internal block allocation map -B|--print-block-list show internal block list NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. BIC/A5105, only the base device is emulated, no floppy device. BIC/A5105, the full system including the floppy device. CP/M based Micro-Computer presented in the magazine "Funkamateur" by A. Mugler and H. Mathes. Export variant of the LC 80 with 12k ROM including chess program. HC900 (later called KC 85/2) with 16k RAM and 8k ROM. System is called HC-CAOS 2.2 (home computer - cassette aided operating system). BASIC is only available as external module. KC 85/3 with 16k RAM, 8k system ROM with HC-CAOS 3.1 and 8k BASIC ROM. KC 85/4 with 64k RAM, 64k screen memory, 12k system ROM with HC-CAOS 4.2 and 8k BASIC ROM. Like the KC 87.11 but without the color extension card. Like the KC 87.21 but without the color extension card. Like the z9001.10 but with color extension card. Micro-Computer presented in the book "Praktische Microcomputertechnik" by Manfred Kramer. Minimal Z80 learning system designed by Dipl.-Ing. Joachim Czepa. Minimal Z80 learning system presented in the magazine "rfe" by Eckhard Schiller. New batch of KC 87.20 with no known hardware differences. New batch of KC 87.21 with no known hardware differences. New series with extended BASIC ROM (still 10k but with some routines for plotter support were added). Polycomputer 880 with chess program rom from SC1. Polycomputer 880. Single board computer LC 80 with 1k RAM and 1 x 2k ROM. Single board computer LC 80 with 1k RAM and 2 x 1k ROM. Successor of the Z9001 with internal 10k BASIC ROM. Z1013 with 16k RAM and 2k ROM, running at 2MHz. Successor of the Z1013.01 but with industry grade circuits clocked at 2MHz. Z1013 with 1k sRAM and 2k ROM, running at 2MHz. Industry version with only 1k static RAM. Monitor version 2.02. Z1013 with 64k RAM and 2k ROM, running at 2MHz. The ROM contains two system images with 2k each. Loaded is the second image with version A.2 that supports an extended keyboard with an 8x8 matrix. Z1013 with 64k RAM and 2x2k ROM, running at 2MHz. The ROM contains two system images with 2k each. Loaded is the first image with version 2.02 that is supposed to work with the foil keypad shipped by the manufacturer. Z1013 with 64k RAM and 4k ROM. The ROM contains the 'Super Ur-Lader 5.0' that can read arbitrary tape files as system monitor. The hardware modification port at address 4h is emulated which allows programs to switch off the system ROM. Z1013 with 64k RAM and 4k ROM. The ROM contains the Bootloader BL4 that can load monitor images from floppy disk or can start the CP/M system. Z1013 with 64k RAM and 4k ROM. The ROM is the extended version tagged 2.028 RB that has a different keyboard driver for the keyboard K7659. Z9001 (later called KC 85/1) with monochrome display, no internal BASIC ROM. This computer has 16k RAM and 4k ROM with the robotron z9001 system. %s: illegal option -- %c %s: invalid option -- %c %s: option `%c%s' doesn't allow an argument %s: option `%s' is ambiguous %s: option `%s' requires an argument %s: option `--%s' doesn't allow an argument %s: option `-W %s' doesn't allow an argument %s: option `-W %s' is ambiguous %s: option requires an argument -- %c %s: unrecognized option `%c%s' %s: unrecognized option `--%s' (c) 1997-2010 Torsten Paul/Delete File/Edit Header/Edit _Header/Export File/Export Wav/Export _Wav/Load File/Re_name File/Rename File/Run File/_Add File/_Delete File/_Export File/_Load File/_Run File/sep1/sep2128k ROM Bank192 KByte RAM/EPROM2,5 MB Modul Bank (%d / %02xh)256k RAM FloppyNetwork settings for WizNET module (IP-Addresses only!)Special settings for KC 85/2..5System profiles...User profiles...[ Version ]???AVIAboutAnimated GIFAssemblerAudioAudio/Video codec library libavcodecAudio:Automatically scroll to end address if the address is changed.Automatically scroll to start address if the address is changed.AutostartBASICBBC Research - Dirac Video CodecBITEX (c000h-d7ffh)BackgroundBasic Module (c000h-e7ffh)Basis DeviceBootlader BL4BottomBrightnessBrosig-ROM K7659/2.028Busdrivers:CAOS 2.2CAOS 3.1CAOS 3.3CAOS 3.4CAOS 4.1 (C)CAOS 4.1 (E)CAOS 4.2 (C)CAOS 4.2 (E)CAOS 4.3 (C)CAOS 4.3 (E)CAOS 4.4 (C)CAOS 4.4 (E)CGA Charset-ROMCGA Charset-ROM (extended)CPM-Z9 64k RAMCPM-Z9 BOOT (c000h-c7ffh)CPM-Z9 FloppyCPUCTCCan't attach disk-file.Can't attach tape-archive.Can't export file.CancelChannel 0Channel 1Channel 2Channel 3Channel AChannel BCharset-ROMClear plotting area. When rendering to a PDF file a new page is created and plotting continues in the same file.CloseCollapse user profile level...ColorsComment:ContrastCopy selected profile...Couldn't find any readable joystick device! If your joystick is connected properly and the correct driver is loaded give the device name of your joystick in the 'Joystick Device' section of the configuration file.Couldn't open joystick device (%s)! Make sure you have the joystick properly connected and loaded the correct driver for it. Also check the 'Joystick Device' section in the configuration file if the device name shown above looks bogus. Create new profile...D002: Busdriver [%02X]D004 Version 2.0 (02.01.1989)D004 Version 3.0 (07.12.1997)D004 Version 3.1 (22.01.2003)D004 Version 3.2 (28.10.2008)D004:DNS Server:DSE-ROM 1DSE-ROM 2DebuggerDefine the color to use for plotting.Define the initial x position of the pen after clearing the plotting area. Measured in millimeters from the top left corner.Define the initial y position of the pen after clearing the plotting area. Measured in millimeters from the top left corner.Define the line width for plotting. Measured in millimeters.Delay between screen refreshes of the drawing area in milliseconds.DiracDiskDisk 1:Disk 2:Disk 3:Disk 4:DisplayDisplay Debug:Display Effects:Display IRM Access:Display Scale:Display refreshEDAS (c000h-e7ffh)ERROR: no tape specified, use the -t option to select the tape archive you want to process Edit TapeEditorEnable / Disable display debug code. When enabled the display cache behaviour will be graphically visualized. This setting is effective only if the display scale is set to 1.Enable / Disable display effects for scale factors above 1. When enabled a scan-line effect will be used for scale factor of 2 and a smoothing effect for scale factor 3.Enable or disable the D004 Floppy Basis Device.Enable or disable the second D004 ROM at slot F8. The standard ROM is available at slot FC.EncoderEnd address of the memory area to save. The byte at the given address is included in the memory dump.End address:Execute StepExpand user profile level...Export As...F8 ROM:FDC (Kramer)FDC (Schneider)FLAC - Free Lossless Audio CodecFileFile PropertiesFile `%s' [%s] added.File `%s' loaded.File `%s' saved.Floppy Disk Basis F8Floppy Disk Basis FCFloppy Disk Basis [F0]ForegroundFormatFrames per SecondGDC 82720GTK+ - The GIMP ToolkitGateway:HC-900 CAOSHard Disk 1:Hard Disk 2:HelpHelp _IndexI'd like to say thanks to many people who helped to bring KCemu to the point where it is now. The following list just lists some of them in no particular order...IDAS / ZM (c000h-e7ffh)IO-MonitorIP Address:IRM Color ExpansionIRQ Vector:IRQ:InfoInput Image PropertiesIt was not possible to automatically determine the type of the selected file. Thus I don't know at which address the file should be loaded To load the file nevertheless you need to type in the needed values yourself.It's not possible to have more than one module of type %s!It's not possible to have more than one module of type %s! (And due to some technical points of the emulator it's also not possible to have both the Kramer and Schneider variant of the floppy module active at the same time.)It's not possible to have more than two RAM-Floppy modules. The first one is running on port 98h and the second one on port 58h.Joystick (%d.%d.%d): %s on %sJoystick removed!KC-BASICKC-BASIC (EDAS/TEMO/FORTH)KC-BASIC (EDAS/TEMO/USB)KC-CAOS 3.1 (8000h-8fffh)KC-Pascal ModuleKC85KCemuKCemu _LicenceKCemu: AboutKCemu: AudioKCemu: Can't load file...KCemu: Color ConfigurationKCemu: DebuggerKCemu: DiskKCemu: HelpKCemu: InfoKCemu: KeyboardKCemu: Licence & WarrantyKCemu: ModuleKCemu: PlotterKCemu: ProfilesKCemu: Rename FileKCemu: Save Memory DumpKCemu: ScreenshotKCemu: Select File...KCemu: Select profile...KCemu: TapeKCemu: ThanksKCemu: VideoKCemu: Vinculum USBKCemu: Warning...KeyboardLAME - LAME Ain't an MP3 EncoderLeftLength:License & WarrantyLine widthLoadLoad address:Lots of tools and libraries made it easier to write KCemu. Many thanks to the people behind all those projects for their work...M001: Digital In / OutM003: V24M006: BasicM008: JoystickM011: 64k RAMM012: TexorM022: Expander RAM (16k)M026: ForthM027: DevelopmentM032: 256k Segmented RAMM033: TypeStar + RAMDOSM034: 512k Segmented RAMM035: 1M Segmented RAMM035x4: 4M RAMM036: 128k Segmented RAMM052: Network + USBM900: WordPro '86 (KC85/3)M901: WordPro '86 (KC85/4)MPEG 4MediaMega-ROM ModuleMode:ModuleModule 1:Module 2:Module 3:Module 4:Module 5:Module 6:Module 7:Module 8:ModulesNameName in KC file-header:Name in tape-directory:Netmask:NetworkNo _Speed LimitNo _Warranty!No module slots available for this computer.Number of D002 busdriver devices to add to the system. The maximum number of emulated busdrivers is currently 4.OKOS PI/88 (black/white)OS PI/88 (white/blue)OS PI/88 (yellow/blue)Ogg & Vorbis librariesOpenOpen Clip Art LibraryOpen ROM Image...Optional-ROM 1Override modules in this profilePIOPaper colorPausePen colorPeoplePl_otter...PlayPlease enter the new name for the file.Plot to PDF:PlotterPlotter Module (c000h-e7ffh)Plotter XY4131Profile Name:ProfilesProjects & LibrariesQualityRAF 4MB (port 20h)RAF 4MB (port 24h)RAM Module (16k/4000h)RAM Module (16k/8000h)RAM Module (1k/2400h)RAM Module (2k/0800h)RAM Module (2k/2800h)RAM Module (32k/8000h)RAM Module (4k/1000h)RAM Module (4k/3000h)RAM Module (8k/2000h)ROM image is '%s'. The ROM size needs to be %04xh (%d) bytes.ROM-Bank System with menuROM-Bank System without menuROMsRTC (port 20h-2fh)RTC (port 70h-7fh)R_esetReading %s `%s' (%d/%d/%d).ReassemblerRecordRightSC1-ROMSaveSave Memory DumpSave profiles?Save the plotted picture as PNG image file.Scaling factor for the emulation window. Allowed values are 1 to 3.SchroedingerScreens_hot...ScreenshotSelect File...Select Profile...Select disk...Select file...Select tape-archive...Show penShow plot areaSingle StepSizeSize of the memory dump in bytes.Slot %dSlot 1:Slot 2:Some profiles were changed! 'Yes' will save changes to disk, 'No' will reject all changes. 'Cancel': will allow to continue editing.Sorry, keyboard display not configured.StartStart Program after LoadingStart address of the memory area to save.Start address:Start record on resetStopSuper Ur-Lader 5.0SystemSystem-ROMSystem-ROM 1System-ROM 2System-ROM 3System-ROM A2System-ROM V2.0System:TapeTape name:Tape:ThanksThe file '%s' doesn't exist. Do you want to create it?The file you selected contains more than one program. Only the first program will be loaded. If you want to access all the contained programs add this file to a tape-archive!The file you selected couldn't be loaded!The file you selected has a name that is already present in the current tape archive. Please select a different name to add this file to the tape archive or use the cancel button to skip this file.The format of the selected file is not recognized.Theora/OggThis setting is only used when emulating a KC 85/3 where it enables the emulation of the display dissortion when the screen memory is accessed by the CPU.TopTraceTypeUpdateUser-ROMVDIP1: Vinculum USB ROM V1.2VDIP2: Vinculum USB ROM V2.1VDIP: Vinculum USBVNCVariant:VideoVideo fileVinculum USBVinculum _USB...Volker Pohlers for help with the windows port, technical information and bugreports Thomas Ludwig for the great KC website at http://www.kc85emu.de/ and lots of bugreports and hints how to make KCemu better Holger Krull for providing lots of information about the LC 80 computer (see http://www.lc80.de/) Kev Thacker for interesting insights concerning the floppy emulation (he's also the author of the KC driver for M.E.S.S. the Multi-Emulator Super System, see http://mess.emuverse.com/) Alexander Schön for starting the windows port, lots of tips and for providing a huge pile of files for use with the emulator or with information about the various systems Sourceforge User Boo-boo for the libz80ex emulation library which is now used to emulate the Z80 CPUs Marat Fayzullin for the Z80 emulation core used for the main processor up to KCemu version 0.4.2 (I needed to tweak some bits of the emulation core; see src/z80core/README for the list of changes) Marcel de Kogel for the Z80 emulation core used for the KC floppy processor up to KCemu version 0.4.2 Thomas Bretz for the OS/2 port of KCemu (see http://www.d4m.de/)X originXiph.org Foundation - Theora video compressionXvid projectY originZ1013 Charset-ROMZ9001 Charset-ROMZ9001 Charset-ROM (german)ZM30 (c000h-ccffh)Zoom x1Zoom x2Zoom x3Zoom x_1Zoom x_2Zoom x_3[ Build ][ Licence ][ Text ] [ more text ... ][ Title ][ Warranty ]_About_Audio..._Colors..._Context Help_Disk..._Display Effects_Emulator_Help_Keyboard_Load..._Menubar_Module..._Options_Power On_Profiles..._Quit Emulator_Run..._Save..._Statusbar_Tape..._Thanks!_Video..._View_Vinculum USB...autostartavailable emulations:bit input/outputbyte inputbyte input/outputbyte outputcreate file?decdisk-file `%s' attached.error in given load address! valid addresses have to be in the range from 0 to 65535 hexadecimal values need to be prefixed with 0x (e.g. 0x1234), octal values require a leading 0 (e.g. 0444)error in given start address!hexhttp://ffmpeg.org/http://flac.sourceforge.net/http://kcemu.sourceforge.net/http://lame.sourceforge.net/http://openclipart.org/http://www.bbc.co.uk/rd/projects/dirac/http://www.gtk.org/http://www.libsdl.org/http://www.mega-nerd.com/libsndfile/http://www.theora.org/http://www.vorbis.com/http://www.xvid.org/libSDL - Simple DirectMedia Layerlibsndfileno KC-filename given!no tape-filename given!rom_assemblerrom_basicrom_caos_crom_caos_erom_charsetrom_d004_f8rom_d004_fcrom_debuggerrom_editorrom_reassemblerrom_systemrom_system_1rom_system_2rom_system_3rom_system_4rom_usertape-archive `%s' attached.Project-Id-Version: KCemu 0.4 Report-Msgid-Bugs-To: Torsten.Paul@gmx.de POT-Creation-Date: 2010-03-07 20:51+0100 PO-Revision-Date: 2010-03-06 00:58+0100 Last-Translator: Torsten Paul Language-Team: English MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Poedit-Language: English X-Poedit-Country: GERMANY GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) 19yy This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) 19yy name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. KCemu comes with ABSOLUTELY NO WARRANTY; for details run `kcemu --warranty'. This is free software, and you are welcome to redistribute it under certain conditions; run `kcemu --license' for details. usage: kcemu [-0123456789aAcestfhdlvVHFMELW] -0: select Z1013 profile -1: select Z9001 / KC 85/1 profile -2: select KC 85/2 profile -3: select KC 85/3 profile -4: select KC 85/4 profile -5: select KC 85/5 profile -6: select Poly-880 profile -7: select KC 87 profile -8: select LC 80 profile -9: select BIC/A5105 profile -a --autostart: autostart program on startup (kc85/3 - kc85/5 only) -A --address: override start address of autostart program -d --datadir: set data directory (for ROM images) -E --effects: enable display effects for scaled screen output -f --floppy: attach disk on startup -F --fullscreen: start in fullscreen mode (if supported by gui) -h --help: display help -H --home: overwrite setting for home directory -l --localedir: set locale directory -L --license: show license -M --modules: insert modules on startup (e.g. -M M011,M027) -o --debug-output: write debug output to file -p --profile: start with given profile -P --select-profile: show profile selector -s --scale: scale display (allowed values: 1, 2 and 3) -t --tape: attach tape on startup -v --version: show KCemu version and configuration -V --viewlist: view verbose list of available emulations -W --warranty: show warranty KCtape is part of KCemu the KC 85/4 Emulator and comes with ABSOLUTELY NO WARRANTY; for details run `kcemu --warranty'. This is free software, and you are welcome to redistribute it under certain conditions; run `kcemu --license' for details. usage: kctape -t tapefile [command [command_args]] commands: --------- -h|--help show this help text -v|--verbose be verbose about what's going on -t|--tape tape archive to process -l|--list list content of tape archive -c|--create create tape archive if it doesn't exist -a|--add add files (KC85/3 mode) -1|--add1 add files (KC85/1 mode) -A|--add-raw add binary files -r|--remove remove file from tape archive -x|--extract extract file from tape archive -d|--dump hexdump file -o|--output output file for extract -b|--print-bam show internal block allocation map -B|--print-block-list show internal block list NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. BIC/A5105, only the base device is emulated, no floppy device. BIC/A5105, the full system including the floppy device. CP/M based Micro-Computer presented in the magazine "Funkamateur" by A. Mugler and H. Mathes. Export variant of the LC 80 with 12k ROM including chess program. HC900 (later called KC 85/2) with 16k RAM and 8k ROM. System is called HC-CAOS 2.2 (home computer - cassette aided operating system). BASIC is only available as external module. KC 85/3 with 16k RAM, 8k system ROM with HC-CAOS 3.1 and 8k BASIC ROM. KC 85/4 with 64k RAM, 64k screen memory, 12k system ROM with HC-CAOS 4.2 and 8k BASIC ROM. Like the KC 87.11 but without the color extension card. Like the KC 87.21 but without the color extension card. Like the z9001.10 but with color extension card. Micro-Computer presented in the book "Praktische Microcomputertechnik" by Manfred Kramer. Minimal Z80 learning system designed by Dipl.-Ing. Joachim Czepa. Minimal Z80 learning system presented in the magazine "rfe" by Eckhard Schiller. New batch of KC 87.20 with no known hardware differences. New batch of KC 87.21 with no known hardware differences. New series with extended BASIC ROM (still 10k but with some routines for plotter support were added). Polycomputer 880 with chess program rom from SC1. Polycomputer 880. Single board computer LC 80 with 1k RAM and 1 x 2k ROM. Single board computer LC 80 with 1k RAM and 2 x 1k ROM. Successor of the Z9001 with internal 10k BASIC ROM. Z1013 with 16k RAM and 2k ROM, running at 2MHz. Successor of the Z1013.01 but with industry grade circuits clocked at 2MHz. Z1013 with 1k sRAM and 2k ROM, running at 2MHz. Industry version with only 1k static RAM. Monitor version 2.02. Z1013 with 64k RAM and 2k ROM, running at 2MHz. The ROM contains two system images with 2k each. Loaded is the second image with version A.2 that supports an extended keyboard with an 8x8 matrix. Z1013 with 64k RAM and 2x2k ROM, running at 2MHz. The ROM contains two system images with 2k each. Loaded is the first image with version 2.02 that is supposed to work with the foil keypad shipped by the manufacturer. Z1013 with 64k RAM and 4k ROM. The ROM contains the 'Super Ur-Lader 5.0' that can read arbitrary tape files as system monitor. The hardware modification port at address 4h is emulated which allows programs to switch off the system ROM. Z1013 with 64k RAM and 4k ROM. The ROM contains the Bootloader BL4 that can load monitor images from floppy disk or can start the CP/M system. Z1013 with 64k RAM and 4k ROM. The ROM is the extended version tagged 2.028 RB that has a different keyboard driver for the keyboard K7659. Z9001 (later called KC 85/1) with monochrome display, no internal BASIC ROM. This computer has 16k RAM and 4k ROM with the robotron z9001 system. %s: illegal option -- %c %s: invalid option -- %c %s: option `%c%s' doesn't allow an argument %s: option `%s' is ambiguous %s: option `%s' requires an argument %s: option `--%s' doesn't allow an argument %s: option `-W %s' doesn't allow an argument %s: option `-W %s' is ambiguous %s: option requires an argument -- %c %s: unrecognized option `%c%s' %s: unrecognized option `--%s' (c) 1997-2010 Torsten Paul/Delete File/Edit Header/Edit _Header/Export File/Export Wav/Export _Wav/Load File/Re_name File/Rename File/Run File/_Add File/_Delete File/_Export File/_Load File/_Run File/sep1/sep2128k ROM Bank192 KByte RAM/EPROM2,5 MB Modul Bank (%d / %02xh)256k RAM FloppyNetwork settings for WizNET module (IP-Addresses only!)Special settings for KC 85/2..5System profiles...User profiles...[ Version ]???AVIAboutAnimated GIFAssemblerAudioAudio/Video codec library libavcodecAudio:Automatically scroll to end address if the address is changed.Automatically scroll to start address if the address is changed.AutostartBASICBBC Research - Dirac Video CodecBITEX (c000h-d7ffh)BackgroundBasic Module (c000h-e7ffh)Basis DeviceBootlader BL4BottomBrightnessBrosig-ROM K7659/2.028Busdrivers:CAOS 2.2CAOS 3.1CAOS 3.3CAOS 3.4CAOS 4.1 (C)CAOS 4.1 (E)CAOS 4.2 (C)CAOS 4.2 (E)CAOS 4.3 (C)CAOS 4.3 (E)CAOS 4.4 (C)CAOS 4.4 (E)CGA Charset-ROMCGA Charset-ROM (extended)CPM-Z9 64k RAMCPM-Z9 BOOT (c000h-c7ffh)CPM-Z9 FloppyCPUCTCCan't attach disk-file.Can't attach tape-archive.Can't export file.CancelChannel 0Channel 1Channel 2Channel 3Channel AChannel BCharset-ROMClear plotting area. When rendering to a PDF file a new page is created and plotting continues in the same file.CloseCollapse user profile level...ColorsComment:ContrastCopy selected profile...Couldn't find any readable joystick device! If your joystick is connected properly and the correct driver is loaded give the device name of your joystick in the 'Joystick Device' section of the configuration file.Couldn't open joystick device (%s)! Make sure you have the joystick properly connected and loaded the correct driver for it. Also check the 'Joystick Device' section in the configuration file if the device name shown above looks bogus. Create new profile...D002: Busdriver [%02X]D004 Version 2.0 (02.01.1989)D004 Version 3.0 (07.12.1997)D004 Version 3.1 (22.01.2003)D004 Version 3.2 (28.10.2008)D004:DNS Server:DSE-ROM 1DSE-ROM 2DebuggerDefine the color to use for plotting.Define the initial x position of the pen after clearing the plotting area. Measured in millimeters from the top left corner.Define the initial y position of the pen after clearing the plotting area. Measured in millimeters from the top left corner.Define the line width for plotting. Measured in millimeters.Delay between screen refreshes of the drawing area in milliseconds.DiracDiskDisk 1:Disk 2:Disk 3:Disk 4:DisplayDisplay Debug:Display Effects:Display IRM Access:Display Scale:Display refreshEDAS (c000h-e7ffh)ERROR: no tape specified, use the -t option to select the tape archive you want to process Edit TapeEditorEnable / Disable display debug code. When enabled the display cache behaviour will be graphically visualized. This setting is effective only if the display scale is set to 1.Enable / Disable display effects for scale factors above 1. When enabled a scan-line effect will be used for scale factor of 2 and a smoothing effect for scale factor 3.Enable or disable the D004 Floppy Basis Device.Enable or disable the second D004 ROM at slot F8. The standard ROM is available at slot FC.EncoderEnd address of the memory area to save. The byte at the given address is included in the memory dump.End address:Execute StepExpand user profile level...Export As...F8 ROM:FDC (Kramer)FDC (Schneider)FLAC - Free Lossless Audio CodecFileFile PropertiesFile `%s' [%s] added.File `%s' loaded.File `%s' saved.Floppy Disk Basis F8Floppy Disk Basis FCFloppy Disk Basis [F0]ForegroundFormatFrames per SecondGDC 82720GTK+ - The GIMP ToolkitGateway:HC-900 CAOSHard Disk 1:Hard Disk 2:HelpHelp _IndexI'd like to say thanks to many people who helped to bring KCemu to the point where it is now. The following list just lists some of them in no particular order...IDAS / ZM (c000h-e7ffh)IO-MonitorIP Address:IRM Color ExpansionIRQ Vector:IRQ:InfoInput Image PropertiesIt was not possible to automatically determine the type of the selected file. Thus I don't know at which address the file should be loaded To load the file nevertheless you need to type in the needed values yourself.It's not possible to have more than one module of type %s!It's not possible to have more than one module of type %s! (And due to some technical points of the emulator it's also not possible to have both the Kramer and Schneider variant of the floppy module active at the same time.)It's not possible to have more than two RAM-Floppy modules. The first one is running on port 98h and the second one on port 58h.Joystick (%d.%d.%d): %s on %sJoystick removed!KC-BASICKC-BASIC (EDAS/TEMO/FORTH)KC-BASIC (EDAS/TEMO/USB)KC-CAOS 3.1 (8000h-8fffh)KC-Pascal ModuleKC85KCemuKCemu _LicenceKCemu: AboutKCemu: AudioKCemu: Can't load file...KCemu: Color ConfigurationKCemu: DebuggerKCemu: DiskKCemu: HelpKCemu: InfoKCemu: KeyboardKCemu: Licence & WarrantyKCemu: ModuleKCemu: PlotterKCemu: ProfilesKCemu: Rename FileKCemu: Save Memory DumpKCemu: ScreenshotKCemu: Select File...KCemu: Select profile...KCemu: TapeKCemu: ThanksKCemu: VideoKCemu: Vinculum USBKCemu: Warning...KeyboardLAME - LAME Ain't an MP3 EncoderLeftLength:License & WarrantyLine widthLoadLoad address:Lots of tools and libraries made it easier to write KCemu. Many thanks to the people behind all those projects for their work...M001: Digital In / OutM003: V24M006: BasicM008: JoystickM011: 64k RAMM012: TexorM022: Expander RAM (16k)M026: ForthM027: DevelopmentM032: 256k Segmented RAMM033: TypeStar + RAMDOSM034: 512k Segmented RAMM035: 1M Segmented RAMM035x4: 4M RAMM036: 128k Segmented RAMM052: Network + USBM900: WordPro '86 (KC85/3)M901: WordPro '86 (KC85/4)MPEG 4MediaMega-ROM ModuleMode:ModuleModule 1:Module 2:Module 3:Module 4:Module 5:Module 6:Module 7:Module 8:ModulesNameName in KC file-header:Name in tape-directory:Netmask:NetworkNo _Speed LimitNo _Warranty!No module slots available for this computer.Number of D002 busdriver devices to add to the system. The maximum number of emulated busdrivers is currently 4.OKOS PI/88 (black/white)OS PI/88 (white/blue)OS PI/88 (yellow/blue)Ogg & Vorbis librariesOpenOpen Clip Art LibraryOpen ROM Image...Optional-ROM 1Override modules in this profilePIOPaper colorPausePen colorPeoplePl_otter...PlayPlease enter the new name for the file.Plot to PDF:PlotterPlotter Module (c000h-e7ffh)Plotter XY4131Profile Name:ProfilesProjects & LibrariesQualityRAF 4MB (port 20h)RAF 4MB (port 24h)RAM Module (16k/4000h)RAM Module (16k/8000h)RAM Module (1k/2400h)RAM Module (2k/0800h)RAM Module (2k/2800h)RAM Module (32k/8000h)RAM Module (4k/1000h)RAM Module (4k/3000h)RAM Module (8k/2000h)ROM image is '%s'. The ROM size needs to be %04xh (%d) bytes.ROM-Bank System with menuROM-Bank System without menuROMsRTC (port 20h-2fh)RTC (port 70h-7fh)R_esetReading %s `%s' (%d/%d/%d).ReassemblerRecordRightSC1-ROMSaveSave Memory DumpSave profiles?Save the plotted picture as PNG image file.Scaling factor for the emulation window. Allowed values are 1 to 3.SchroedingerScreens_hot...ScreenshotSelect File...Select Profile...Select disk...Select file...Select tape-archive...Show penShow plot areaSingle StepSizeSize of the memory dump in bytes.Slot %dSlot 1:Slot 2:Some profiles were changed! 'Yes' will save changes to disk, 'No' will reject all changes. 'Cancel': will allow to continue editing.Sorry, keyboard display not configured.StartStart Program after LoadingStart address of the memory area to save.Start address:Start record on resetStopSuper Ur-Lader 5.0SystemSystem-ROMSystem-ROM 1System-ROM 2System-ROM 3System-ROM A2System-ROM V2.0System:TapeTape name:Tape:ThanksThe file '%s' doesn't exist. Do you want to create it?The file you selected contains more than one program. Only the first program will be loaded. If you want to access all the contained programs add this file to a tape-archive!The file you selected couldn't be loaded!The file you selected has a name that is already present in the current tape archive. Please select a different name to add this file to the tape archive or use the cancel button to skip this file.The format of the selected file is not recognized.Theora/OggThis setting is only used when emulating a KC 85/3 where it enables the emulation of the display dissortion when the screen memory is accessed by the CPU.TopTraceTypeUpdateUser-ROMVDIP1: Vinculum USB ROM V1.2VDIP2: Vinculum USB ROM V2.1VDIP: Vinculum USBVNCVariant:VideoVideo fileVinculum USBVinculum _USB...Volker Pohlers for help with the windows port, technical information and bugreports Thomas Ludwig for the great KC website at http://www.kc85emu.de/ and lots of bugreports and hints how to make KCemu better Holger Krull for providing lots of information about the LC 80 computer (see http://www.lc80.de/) Kev Thacker for interesting insights concerning the floppy emulation (he's also the author of the KC driver for M.E.S.S. the Multi-Emulator Super System, see http://mess.emuverse.com/) Alexander Schön for starting the windows port, lots of tips and for providing a huge pile of files for use with the emulator or with information about the various systems Sourceforge User Boo-boo for the libz80ex emulation library which is now used to emulate the Z80 CPUs Marat Fayzullin for the Z80 emulation core used for the main processor up to KCemu version 0.4.2 (I needed to tweak some bits of the emulation core; see src/z80core/README for the list of changes) Marcel de Kogel for the Z80 emulation core used for the KC floppy processor up to KCemu version 0.4.2 Thomas Bretz for the OS/2 port of KCemu (see http://www.d4m.de/)X originXiph.org Foundation - Theora video compressionXvid projectY originZ1013 Charset-ROMZ9001 Charset-ROMZ9001 Charset-ROM (german)ZM30 (c000h-ccffh)Zoom x1Zoom x2Zoom x3Zoom x_1Zoom x_2Zoom x_3[ Build ][ Licence ][ Text ] [ more text ... ][ Title ][ Warranty ]_About_Audio..._Colors..._Context Help_Disk..._Display Effects_Emulator_Help_Keyboard_Load..._Menubar_Module..._Options_Power On_Profiles..._Quit Emulator_Run..._Save..._Statusbar_Tape..._Thanks!_Video..._View_Vinculum USB...autostartavailable emulations:bit input/outputbyte inputbyte input/outputbyte outputcreate file?decdisk-file `%s' attached.error in given load address! valid addresses have to be in the range from 0 to 65535 hexadecimal values need to be prefixed with 0x (e.g. 0x1234), octal values require a leading 0 (e.g. 0444)error in given start address!hexhttp://ffmpeg.org/http://flac.sourceforge.net/http://kcemu.sourceforge.net/http://lame.sourceforge.net/http://openclipart.org/http://www.bbc.co.uk/rd/projects/dirac/http://www.gtk.org/http://www.libsdl.org/http://www.mega-nerd.com/libsndfile/http://www.theora.org/http://www.vorbis.com/http://www.xvid.org/libSDL - Simple DirectMedia Layerlibsndfileno KC-filename given!no tape-filename given!AssemblerBASICCAOS CCAOS ECharsetD004 (Slot F8)D004 (Slot FC)DebuggerEditorReassemblerSystemSystem (1)System (2)System (3)System (4)User-ROMtape-archive `%s' attached.KCemu-0.5.1/include/0000755001050700006200000000000011412404770013630 5ustar glaubitzfbedvKCemu-0.5.1/include/ui/0000755001050700006200000000000011412404771014246 5ustar glaubitzfbedvKCemu-0.5.1/include/ui/generic/0000755001050700006200000000000011412404771015662 5ustar glaubitzfbedvKCemu-0.5.1/include/ui/generic/ui_vcs80.h0000644001050700006200000000256011345001576017477 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_ui_vcs80_h #define __ui_generic_ui_vcs80_h #include "kc/system.h" #include "ui/generic/ui_led.h" class UI_VCS80 : public UI_LED { private: enum { VCS80_NR_OF_LEDS = 8 }; byte_t _counter; byte_t _led_value[VCS80_NR_OF_LEDS]; public: UI_VCS80(void); virtual ~UI_VCS80(void); virtual void led_update(void); virtual void generic_signal_v_retrace(bool value); virtual void generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache); }; #endif /* __ui_generic_ui_vcs80_h */ KCemu-0.5.1/include/ui/generic/module.h0000644001050700006200000000236611345001576017330 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_module_h #define __ui_generic_module_h #include "kc/system.h" #include "ui/module.h" class DummyModuleHandler : public UI_ModuleInterface { public: DummyModuleHandler(void); virtual ~DummyModuleHandler(void); /* * UI_ModuleInterface */ virtual void insert(int slot, ModuleInterface *m); virtual void activate(int slot, byte_t value); }; #endif /* __ui_generic_module_h */ KCemu-0.5.1/include/ui/generic/ui_led.h0000644001050700006200000000331011345001576017272 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_ui_led_h #define __ui_generic_ui_led_h #include "kc/system.h" #include "ui/generic/ui_base.h" class UI_LED : public UI_Base { private: int _width; int _height; int _a, _b, _c, _d, _e, _f, _g, _h; protected: UI_LED(int width, int height, int a, int b, int c, int d, int e, int f, int g, int h); virtual ~UI_LED(void); virtual void generic_put_pixel(int x, int y, byte_t col, bool clear_cache); virtual void generic_draw_led(int x, int y, byte_t col, bool clear_cache); virtual void generic_draw_hline(int x, int y, byte_t col, bool clear_cache); virtual void generic_draw_vline(int x, int y, byte_t col, bool clear_cache); virtual void generic_draw_point(int x, int y, byte_t col, bool clear_cache); virtual void generic_draw_digit(int x, int y, int index, byte_t led_value, bool clear_cache); }; #endif /* __ui_generic_ui_led_h */ KCemu-0.5.1/include/ui/generic/memaccess.h0000644001050700006200000000250511345001576017776 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_memaccess_h #define __ui_generic_memaccess_h #include "kc/system.h" class MemAccess { private: enum { BUFFER_SIZE = 40 * 256 }; long long _base_counter; byte_t _buf[BUFFER_SIZE]; public: MemAccess(void); virtual ~MemAccess(void); void update(void); byte_t get_value(int x, int y); void set_value(int x, int y, byte_t value); void reset(); void memory_read(word_t addr); void memory_write(word_t addr); }; #endif /* __ui_generic_memaccess_h */ KCemu-0.5.1/include/ui/generic/Makefile.am0000644001050700006200000000043611155311277017723 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ ui_base.h \ ui_0.h \ ui_1.h \ ui_3.h \ ui_4.h \ ui_6.h \ ui_8.h \ ui_9.h \ ui_led.h \ ui_kramermc.h \ ui_muglerpc.h \ ui_vcs80.h \ ui_c80.h \ tape.h \ module.h \ scanline.h \ memaccess.h KCemu-0.5.1/include/ui/generic/scanline.h0000644001050700006200000000257511345001576017641 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_scanline_h #define __ui_generic_scanline_h #include "kc/system.h" class Scanline { private: bool _enabled; int _val; int _idx; int _count; word_t _vec[48]; word_t *_v1; word_t *_v2; word_t *_v3; long long _time; long long _frame_time; public: Scanline(void); virtual ~Scanline(void); virtual void update(void); virtual void trigger(bool enable); virtual void reset(bool enable); virtual int get_value(int y); }; #endif /* __ui_generic_scanline_h */ KCemu-0.5.1/include/ui/generic/ui_0.h0000644001050700006200000000351711345001576016676 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_ui_0_h #define __ui_generic_ui_0_h #include "kc/system.h" #include "ui/generic/ui_base.h" class UI_0 : public UI_Base { public: enum { UI_GENERIC_MODE_Z1013_32x32 = 0, UI_GENERIC_MODE_Z1013_64x16 = 1, UI_GENERIC_MODE_GDC = 2, }; protected: byte_t *_font; byte_t *_pix_cache; byte_t *_col_cache; int _mode; protected: void init(void); void dispose(void); inline void generic_put_pixels(byte_t *ptr, byte_t val, word_t color); virtual void generic_update_gdc(byte_t *font, bool clear_cache); virtual void generic_update_32x32(byte_t *font, bool clear_cache); virtual void generic_update_64x16(byte_t *font, bool clear_cache); public: UI_0(void); virtual ~UI_0(void); virtual int generic_get_mode(void); virtual void generic_set_mode(int mode); virtual void generic_signal_v_retrace(bool value); virtual void generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache); }; #endif /* __ui_generic_ui_0_h */ KCemu-0.5.1/include/ui/generic/ui_muglerpc.h0000644001050700006200000000251311345001576020350 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_ui_muglerpc_h #define __ui_generic_ui_muglerpc_h #include "kc/system.h" #include "ui/generic/ui_base.h" class UI_MuglerPC : public UI_Base { protected: int _mode; byte_t *_font; byte_t *_pix_cache; protected: inline void generic_put_pixels(byte_t *ptr, byte_t val); public: UI_MuglerPC(void); virtual ~UI_MuglerPC(void); virtual void generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache); }; #endif /* __ui_generic_ui_muglerpc_h */ KCemu-0.5.1/include/ui/generic/ui_8.h0000644001050700006200000000222311345001576016677 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_ui_8_h #define __ui_generic_ui_8_h #include "kc/system.h" #include "ui/generic/ui_led.h" class UI_8 : public UI_LED { public: UI_8(void); virtual ~UI_8(void); virtual void generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache); }; #endif /* __ui_generic_ui_8_h */ KCemu-0.5.1/include/ui/generic/ui_9.h0000644001050700006200000000370511345001576016706 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_ui_9_h #define __ui_generic_ui_9_h #include "kc/system.h" #include "ui/generic/ui_base.h" class UI_9 : public UI_Base { public: enum { UI_GENERIC_MODE_LORES = 0, UI_GENERIC_MODE_HIRES = 1, }; int _mode; int _width; int _height; protected: byte_t *_pix_cache; byte_t *_col_cache; int _max_ptr; protected: void init(void); void dispose(void); void set_pixel(int x, int y, int color); void set_char(int x, int y, int c, int fg, int bg, int width, int lines); void generic_update_border(int border, int lines); void generic_update_graphic_2(bool clear_cache); void generic_update_graphic_3(bool clear_cache); void generic_update_graphic_5(bool clear_cache); void generic_update_text(int width, int height, int lines, bool clear_cache); public: UI_9(void); virtual ~UI_9(void); virtual int generic_get_mode(void); virtual void generic_set_mode(int mode); virtual void generic_signal_v_retrace(bool value); virtual void generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache); }; #endif /* __ui_generic_ui_9_h */ KCemu-0.5.1/include/ui/generic/ui_base.h0000644001050700006200000000332211345001576017443 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_ui_base_h #define __ui_generic_ui_base_h class Scanline; class MemAccess; class UI_Base { private: int _width; int _height; protected: byte_t *_bitmap; byte_t *_dirty; int _dirty_size; void create_buffer(int buffer_size); void set_real_screen_size(int width, int height); public: UI_Base(void); virtual ~UI_Base(void); int get_real_width(void); int get_real_height(void); virtual byte_t * get_buffer(void); virtual byte_t * get_dirty_buffer(void); virtual int get_dirty_buffer_size(void); virtual int generic_get_mode(void); virtual void generic_set_mode(int mode); virtual void generic_signal_v_retrace(bool value); virtual void generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache) = 0; }; #endif /* __ui_generic_ui_base_h */ KCemu-0.5.1/include/ui/generic/ui_kramermc.h0000644001050700006200000000256211345001576020337 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_ui_kramermc_h #define __ui_generic_ui_kramermc_h #include "kc/system.h" #include "ui/generic/ui_base.h" class UI_KramerMC : public UI_Base { protected: byte_t *_font; byte_t *_pix_cache; int _mode; int _width; int _height; protected: inline void generic_put_pixels(byte_t *ptr, byte_t val); public: UI_KramerMC(void); virtual ~UI_KramerMC(void); virtual void generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache); }; #endif /* __ui_generic_ui_kramermc_h */ KCemu-0.5.1/include/ui/generic/ui_3.h0000644001050700006200000000270611345001576016700 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_ui_3_h #define __ui_generic_ui_3_h #include "kc/system.h" #include "ui/generic/ui_base.h" #include "ui/generic/scanline.h" #include "ui/generic/memaccess.h" class UI_3 : public UI_Base { protected: byte_t *_pix_cache; byte_t *_col_cache; byte_t *_scan_cache; int _bitswap1[256]; int _bitswap2[256]; int _bitswap3[256]; protected: void generic_put_pixels(int x, int y, byte_t val, byte_t fg, byte_t bg); public: UI_3(void); virtual ~UI_3(void); virtual void generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache); }; #endif /* __ui_generic_ui_3_h */ KCemu-0.5.1/include/ui/generic/tape.h0000644001050700006200000000315611345001576016772 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_tape_h #define __ui_generic_tape_h #include "kc/system.h" #include "ui/tape.h" class DummyTapeHandler : public TapeInterface { public: DummyTapeHandler(void); virtual ~DummyTapeHandler(void); /* * TapeInterface */ virtual void tapeAttach(const char *name); virtual void tapeDetach(void); virtual void tapePower(bool power); virtual void tapeProgress(int val); virtual void tapeNext(void); virtual void tapeAddFile(const char *name, long load, long start, long size, unsigned char type); virtual void tapeRemoveFile(int idx); virtual int tapeGetSelected(void); virtual const char * tapeGetName(int idx); virtual void tapeAddArchive(const char *name); }; #endif /* __ui_generic_tape_h */ KCemu-0.5.1/include/ui/generic/ui_c80.h0000644001050700006200000000231711345001576017126 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_ui_c80_h #define __ui_generic_ui_c80_h #include "kc/system.h" #include "ui/generic/ui_led.h" class UI_C80 : public UI_LED { private: enum { C80_NR_OF_LEDS = 8 }; public: UI_C80(void); virtual ~UI_C80(void); virtual void generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache); }; #endif /* __ui_generic_ui_c80_h */ KCemu-0.5.1/include/ui/generic/ui_4.h0000644001050700006200000000301711345001576016675 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_ui_4_h #define __ui_generic_ui_4_h #include "kc/system.h" #include "ui/generic/ui_base.h" #include "ui/generic/scanline.h" class UI_4 : public UI_Base { protected: byte_t *_pix_cache; byte_t *_col_cache; byte_t *_scn_cache; protected: void generic_put_pixels(int x, int y, byte_t pixel, byte_t fg, byte_t bg); virtual void generic_update_hires(Scanline *scanline, byte_t *irm, bool clear_cache); virtual void generic_update_lores(Scanline *scanline, byte_t *irm, bool clear_cache); public: UI_4(void); virtual ~UI_4(void); virtual void generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache); }; #endif /* __ui_generic_ui_4_h */ KCemu-0.5.1/include/ui/generic/ui_1.h0000644001050700006200000000314411345001576016673 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_ui_1_h #define __ui_generic_ui_1_h #include "kc/system.h" #include "ui/generic/ui_base.h" class UI_1 : public UI_Base { protected: byte_t *_pix_cache; byte_t *_col_cache; protected: inline void generic_put_pixels(byte_t *ptr, byte_t val, word_t color); void generic_update_20(int width, int height, int fchg, byte_t flash, bool clear_cache); void generic_update_24(int width, int height, int fchg, byte_t flash, bool clear_cache); void generic_set_border_20(int width, int height, byte_t border); void generic_set_border_24(int width, int height, byte_t border); public: UI_1(void); virtual ~UI_1(void); virtual void generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache); }; #endif /* __ui_generic_ui_1_h */ KCemu-0.5.1/include/ui/generic/ui_6.h0000644001050700006200000000241411345001576016677 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_generic_ui_6_h #define __ui_generic_ui_6_h #include "kc/system.h" #include "ui/generic/ui_led.h" class UI_6 : public UI_LED { private: enum { HISTORY_LEN = 4, NR_OF_LEDS = 8, }; int _idx; byte_t _data[NR_OF_LEDS][HISTORY_LEN]; public: UI_6(void); virtual ~UI_6(void); virtual void generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache); }; #endif /* __ui_generic_ui_6_h */ KCemu-0.5.1/include/ui/generic/Makefile.in0000644001050700006200000003132411412404771017732 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/ui/generic DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ ui_base.h \ ui_0.h \ ui_1.h \ ui_3.h \ ui_4.h \ ui_6.h \ ui_8.h \ ui_9.h \ ui_led.h \ ui_kramermc.h \ ui_muglerpc.h \ ui_vcs80.h \ ui_c80.h \ tape.h \ module.h \ scanline.h \ memaccess.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/ui/generic/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/ui/generic/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/ui/module.h0000644001050700006200000000323111345001576015704 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_module_h #define __ui_module_h #include "kc/system.h" #include "kc/module.h" class UI_ModuleInterface { public: UI_ModuleInterface(void) {} virtual ~UI_ModuleInterface(void) {} /** * insert a module into the specified slot * the ModuleInterface that is given here has to be the * template module which is stored in the ModuleList * class (kc/mod_list.c) not the cloned module! * * if the ModuleInterface parameter is 0 the currently * active module is removed */ virtual void insert(int slot, ModuleInterface *m) = 0; /** * the value given for this activate function is the * module specific byte which is written to port 80h * it comes directly from the CAOS SWITCH command */ virtual void activate(int slot, byte_t value) = 0; }; #endif /* __ui_module_h */ KCemu-0.5.1/include/ui/Makefile.am0000644001050700006200000000037011340261610016273 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in SUBDIRS = generic gtk EXTRA_DIST = \ ui.h \ log.h \ tape.h \ debug.h \ error.h \ errorl.h \ module.h \ status.h \ statusl.h \ commands.h \ window.h \ hsv2rgb.h \ font0.h KCemu-0.5.1/include/ui/error.h0000644001050700006200000000237511345001576015560 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_error_h #define __ui_error_h #include #include "ui/errorl.h" class Error; class Error { typedef std::list error_list_t; private: static Error *_instance; error_list_t _l; protected: Error(void); ~Error(void) {} public: static Error * instance(void); void info(const char *msg); void addErrorListener(ErrorListener *listener); }; #endif /* __ui_error_h */ KCemu-0.5.1/include/ui/log.h0000644001050700006200000000227211345001576015204 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_log_h #define __ui_log_h #include "ui/errorl.h" #include "ui/statusl.h" class LOG : public StatusListener, public ErrorListener { public: LOG(void); virtual ~LOG(void); /* * StatusListener */ void setStatus(const char *msg); /* * ErrorListener */ void errorInfo(const char *msg); }; #endif /* __ui_log_h */ KCemu-0.5.1/include/ui/commands.h0000644001050700006200000000164411345001576016226 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_commands_h #define __ui_commands_h #endif /* __ui_commands_h */ KCemu-0.5.1/include/ui/debug.h0000644001050700006200000000236111345001576015510 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_debug_h #define __ui_debug_h class DebugInterface { public: DebugInterface(void) {} virtual ~DebugInterface(void) {} /** * called before each instruction when * tracing is enabled */ virtual void debugTrace(void) = 0; /** * called before each instruction when * singlestepping is enabled */ virtual void debugSingleStep(void) = 0; }; #endif /* __ui_debug_h */ KCemu-0.5.1/include/ui/ui.h0000644001050700006200000000450511345001576015041 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_ui_h #define __ui_ui_h #include "kc/ic.h" #include "kc/cb.h" #include "kc/profile.h" #include "ui/tape.h" #include "ui/debug.h" #include "ui/module.h" #include "cmd/cmdargs.h" #define WINDOW_NAME ("KC 85/4 Emulator") #define ICON_NAME ("KC 85/4") class UI : public InterfaceCircuit, public Callback, public CMD_Caller { public: UI(void) : InterfaceCircuit("UI"), Callback("UI") {} virtual ~UI(void) {} virtual int get_mode(void) = 0; virtual void set_mode(int mode) = 0; virtual void flash(bool enable) = 0; virtual void memory_read(word_t addr) = 0; virtual void memory_write(word_t addr) = 0; virtual void update(bool full_update = false, bool clear_cache = false) = 0; virtual void init(int *argc, char ***argv) = 0; virtual void init2(void) = 0; virtual char * select_profile(void) = 0; virtual void show(void) = 0; virtual void callback(void *data) = 0; /* * interface handling */ virtual UI_ModuleInterface * getModuleInterface(void) = 0; virtual TapeInterface * getTapeInterface(void) = 0; virtual DebugInterface * getDebugInterface(void) = 0; /* * InterfaceCircuit */ virtual void reti(void) {} virtual void irqreq(void) {} virtual word_t irqack() { return IRQ_NOT_ACK; } virtual void reset(bool power_on = false) {} }; #endif /* __ui_ui_h */ KCemu-0.5.1/include/ui/status.h0000644001050700006200000000242211345001576015743 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_status_h #define __ui_status_h #include #include "ui/statusl.h" class Status; class Status { typedef std::list status_list_t; private: static Status *_instance; status_list_t _l; protected: Status(void); ~Status(void) {} public: static Status * instance(void); void setMessage(const char *msg); void addStatusListener(StatusListener *listener); }; #endif /* __ui_status_h */ KCemu-0.5.1/include/ui/errorl.h0000644001050700006200000000205411345001576015726 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_errorl_h #define __ui_errorl_h class ErrorListener { public: ErrorListener(void) {} virtual ~ErrorListener(void) {} virtual void errorInfo(const char *msg) = 0; }; #endif /* __ui_errorl_h */ KCemu-0.5.1/include/ui/gtk/0000755001050700006200000000000011412404771015033 5ustar glaubitzfbedvKCemu-0.5.1/include/ui/gtk/wav.h0000644001050700006200000000332411345001576016004 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_wav_h #define __ui_gtk_wav_h #include #include "kc/system.h" #include "ui/gtk/window.h" class WavWindow : public UI_Gtk_Window { private: enum { NUM_POINTS = 8000, WINDOW_WIDTH = 400, WINDOW_HEIGHT = 400, }; struct { GtkWidget *canvas; GtkWidget *comboboxentry; GtkWidget *open; GtkWidget *close; GtkWidget *play; GtkWidget *stop; GtkWidget *record; GdkGC *gc; GtkTooltips *tooltips; } _w; GdkImage *_image; int _image_y; CMD *_cmd_wav_info; CMD *_cmd_wav_toggle; protected: static void sf_expose(GtkWidget *widget, GdkEvent *event, gpointer *data); void init(void); void expose(void); public: WavWindow(const char *ui_xml_file); virtual ~WavWindow(void); void update(int gap); void selected(const char *filename); }; #endif /* __ui_gtk_wav_h */ KCemu-0.5.1/include/ui/gtk/plotter.h0000644001050700006200000000526211345001576016703 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_plotter_h #define __ui_gtk_plotter_h #include #include #include "kc/system.h" #include "ui/gtk/window.h" class PlotterWindow : public UI_Gtk_Window { private: struct { GtkWidget *canvas; GtkWidget *comboboxentry; GtkWidget *open; GtkWidget *close; GtkWidget *next_page; GtkWidget *save_as_png; GtkWidget *line_width; GtkWidget *origin_x; GtkWidget *origin_y; GtkWidget *bg_color; GtkWidget *pen_color; GtkWidget *show_pen; GtkWidget *show_plot_area; GtkWidget *display_refresh; guint timeout_id; } _w; guint _display_refresh; CMD *_cmd_plotter_toggle; protected: static void sf_next_page(GtkWidget *widget, gpointer data); static void sf_open_pdf(GtkWidget *widget, gpointer data); static void sf_close_pdf(GtkWidget *widget, gpointer data); static void sf_save_as_png(GtkWidget *widget, gpointer data); static void sf_bg_color(GtkColorButton *widget, gpointer data); static void sf_pen_color(GtkColorButton *widget, gpointer data); static void sf_line_width(GtkSpinButton *widget, gpointer data); static void sf_origin_x(GtkSpinButton *widget, gpointer data); static void sf_origin_y(GtkSpinButton *widget, gpointer data); static void sf_display_refresh(GtkSpinButton *widget, gpointer data); static void sf_show_pen(GtkToggleButton *widget, gpointer data); static void sf_show_plot_area(GtkToggleButton *widget, gpointer data); static void sf_expose(GtkWidget *widget, GdkEventExpose *event, gpointer data); static gboolean timeout_handler(PlotterWindow *self); void init(void); void init_timeout(void); void expose(GdkEventExpose *event); public: PlotterWindow(const char *ui_xml_file); virtual ~PlotterWindow(void); void toggle(void); void selected(const char *filename); }; #endif /* __ui_gtk_plotter_h */ KCemu-0.5.1/include/ui/gtk/ui_gtk4.h0000644001050700006200000000222611345001576016555 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_ui_gtk4_h #define __ui_ui_gtk4_h #include "ui/generic/scanline.h" #include "ui/gtk/ui_gtk_base.h" class UI_Gtk4 : public UI_Gtk_Base { private: Scanline _scanline; public: UI_Gtk4(void); virtual ~UI_Gtk4(void); virtual Scanline * get_scanline(void); }; #endif /* __ui_ui_gtk4_h */ KCemu-0.5.1/include/ui/gtk/fbrowse.h0000644001050700006200000000252011345001576016653 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_fbrowse_h #define __ui_gtk_fbrowse_h #include #include "kc/system.h" #include "cmd/cmd.h" class FileBrowser : public CMD { private: CMD_Args *_args; public: FileBrowser(void); virtual ~FileBrowser(void); protected: void init(const char *title, const char *path, bool dironly); static void sf_response(GtkDialog *dialog, gint response_id, gpointer user_data); public: void execute(CMD_Args *args, CMD_Context context); }; #endif /* __ui_gtk_fbrowse_h */ KCemu-0.5.1/include/ui/gtk/module.h0000644001050700006200000000376511345001576016505 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_module_h #define __ui_gtk_module_h #include #include "kc/system.h" #include "ui/module.h" #include "ui/gtk/window.h" class ModuleWindow : public UI_Gtk_Window, public UI_ModuleInterface { private: int _nr_of_bd; enum { MAX_BD = 63, NR_OF_SLOTS = 4 * MAX_BD + 2, }; struct { GtkWidget *vbox; GtkWidget *frame[MAX_BD + 1]; GtkWidget *table[MAX_BD + 1]; GtkWidget *l[NR_OF_SLOTS]; GtkWidget *m[NR_OF_SLOTS]; GtkWidget *led[NR_OF_SLOTS]; GtkWidget *color_exp; GSList *g[NR_OF_SLOTS]; } _w; CMD *_cmd; protected: void init(void); void init2(void); void init_device(const char *name, int base, int active_slots); void init_device_1(const char *name, int nr_of_slots); GtkWidget *create_menu(int slot); static void sf_activate(GtkWidget *widget, gpointer data); static void sf_color_expansion(GtkWidget *widget, gpointer data); public: ModuleWindow(const char *ui_xml_file); virtual ~ModuleWindow(void); /* * UI_ModuleInterface */ virtual void insert(int slot, ModuleInterface *m); virtual void activate(int slot, byte_t value); }; #endif /* __ui_gtk_module_h */ KCemu-0.5.1/include/ui/gtk/video.h0000644001050700006200000000415011345001576016313 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_video_h #define __ui_gtk_video_h #include "kc/system.h" #include "ui/gtk/window.h" class VideoWindow : public UI_Gtk_Window { private: UI_Gtk *_ui; struct { GtkWidget *encoder_combobox; GtkWidget *filebutton; GtkWidget *fps_combobox; GtkWidget *quality_spinbutton; GtkWidget *start_on_reset_checkbutton; GtkWidget *record_button; GtkWidget *stop_button; GtkWidget *pause_button; } _w; CMD *_cmd_video_toggle; CMD *_cmd_video_record; protected: void init(void); void init_fps(GtkComboBox *combobox); void init_encoder(GtkComboBox *combobox); void set_state(int state); void set_config_widget_sensitivity(bool enable); static void on_record_clicked(GtkWidget *widget, gpointer user_data); static void on_stop_clicked(GtkWidget *widget, gpointer user_data); static void on_pause_clicked(GtkWidget *widget, gpointer user_data); static void on_config_changed(GtkWidget *widget, gpointer user_data); static void on_encoder_changed(GtkComboBox *combobox, gpointer user_data); static gint get_active_value_as_int(GtkComboBox *combobox, int column); public: VideoWindow(const char *ui_xml_file, UI_Gtk *ui); virtual ~VideoWindow(void); void ui_set_state(int state); }; #endif /* __ui_gtk_video_h */ KCemu-0.5.1/include/ui/gtk/vnc.h0000644001050700006200000000314211345001577015774 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_vnc_h #define __ui_gtk_vnc_h #include "kc/config.h" #ifdef HAVE_LIBVNCSERVER #include #include #undef max #include "kc/system.h" #include "ui/gtk/videoenc.h" class VncVideoEncoder : public VideoEncoder { private: typedef struct { int r, g, b; } color_t; int _width; int _height; rfbScreenInfoPtr _rfbScreen; private: color_t _col[256]; public: VncVideoEncoder(void); virtual ~VncVideoEncoder(void); virtual bool init(const char *filename, int width, int height, int fps_den, double quality); virtual void allocate_color_rgb(int idx, int r, int g, int b); virtual bool encode(byte_t *image, byte_t *dirty); virtual void close(void); }; #endif /* HAVE_LIBVNCSERVER */ #endif /* __ui_gtk_vnc_h */ KCemu-0.5.1/include/ui/gtk/xvid.h0000644001050700006200000000336511345001577016167 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_xvid_h #define __ui_gtk_xvid_h #include "kc/config.h" #ifdef HAVE_LIBXVIDCORE #include #include #include "kc/system.h" #include "ui/gtk/videoenc.h" class XvidVideoEncoder : public VideoEncoder { private: typedef struct { int r, g, b; } color_t; private: FILE *_f; color_t _col[256]; byte_t *_buf; byte_t *_image; double _quality; xvid_gbl_init_t _gbl_init; xvid_enc_create_t _enc_create; xvid_plugin_single_t _plugin_single; xvid_enc_plugin_t _plugins[1]; public: XvidVideoEncoder(void); virtual ~XvidVideoEncoder(void); virtual bool init(const char *filename, int width, int height, int fps_den, double quality); virtual void allocate_color_rgb(int idx, int r, int g, int b); virtual bool encode(byte_t *image, byte_t *dirty); virtual void close(void); }; #endif /* HAVE_LIBXVIDCORE */ #endif /* __ui_gtk_xvid_h */ KCemu-0.5.1/include/ui/gtk/savemem.h0000644001050700006200000000717011345001576016647 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_savemem_h #define __ui_gtk_savemem_h #include #include "kc/system.h" #include "ui/gtk/window.h" class SaveMemoryWindow : public UI_Gtk_Window { private: enum { NR_OF_LINES = 4096, }; struct { GtkButton *button_save; GtkButton *button_refresh; GtkToggleButton *toggle_button_jump_to_start; GtkToggleButton *toggle_button_jump_to_end; GtkSpinButton *spin_button_start_hex; GtkSpinButton *spin_button_start_dec; GtkSpinButton *spin_button_end_hex; GtkSpinButton *spin_button_end_dec; GtkSpinButton *spin_button_length_hex; GtkSpinButton *spin_button_length_dec; GtkAdjustment *adjustment_start; GtkAdjustment *adjustment_end; GtkAdjustment *adjustment_length; GtkTextView *text_view; GtkTextBuffer *text_buffer; GtkTextTag *text_tag_bold; GtkTextTag *text_tag_italic; GtkTextTag *text_tag_monospace; gint on_adjustment_start_value_changed_id; gint on_adjustment_end_value_changed_id; gint on_adjustment_length_value_changed_id; } _w; bool line_selected[NR_OF_LINES]; CMD *_cmd_window_toggle; protected: void init(void); void show(void); void refresh(void); void jump_to(int line, gdouble within_margin, gboolean use_align, gdouble yalign); void load_memory(int start_addr, int end_addr); void apply_selection(int start_addr, int end_addr); void remove_selection(int start_line, int end_line); void apply_line_selection(int line, int bytes, int line_offset, int line_offset2, int separator_offset, int chars_per_byte, bool add); void set_length_adjustment(void); void save(const char *filename, int start_addr, int end_addr); void set_adjustment_value_with_blocked_handler(GtkAdjustment *adjustment, gdouble value, gint handler_id); static void on_save(GtkButton *button, gpointer user_data); static void on_refresh(GtkButton *button, gpointer user_data); static void on_jump_to_start(GtkToggleButton *button, gpointer user_data); static void on_jump_to_end(GtkToggleButton *button, gpointer user_data); static void on_populate_popup(GtkTextView *textview, GtkMenu *menu, gpointer user_data); static gboolean on_output(GtkSpinButton *spin_button, gpointer user_data); static gboolean on_input(GtkSpinButton *spin_button, gdouble *new_value, gpointer user_data); static void on_adjustment_start_value_changed(GtkAdjustment *adjustment, gpointer user_data); static void on_adjustment_end_value_changed(GtkAdjustment *adjustment, gpointer user_data); static void on_adjustment_length_value_changed(GtkAdjustment *adjustment, gpointer user_data); public: SaveMemoryWindow(const char *ui_xml_file); virtual ~SaveMemoryWindow(void); }; #endif /* __ui_gtk_savemem_h */ KCemu-0.5.1/include/ui/gtk/ui_gtk0.h0000644001050700006200000000204211345001576016545 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_ui_gtk0_h #define __ui_ui_gtk0_h #include "ui/gtk/ui_gtk_base.h" class UI_Gtk0 : public UI_Gtk_Base { public: UI_Gtk0(void); virtual ~UI_Gtk0(void); }; #endif /* __ui_ui_gtk0_h */ KCemu-0.5.1/include/ui/gtk/ui_gtk.h0000644001050700006200000001466211345001577016501 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_ui_gtk_h #define __ui_ui_gtk_h #include #include "ui/ui.h" #include "ui/errorl.h" #include "ui/commands.h" #include "ui/generic/ui_base.h" #include "ui/gtk/ui_gtk_base.h" #include "ui/gtk/cmd.h" #include "ui/gtk/fbrowse.h" #include "ui/gtk/dialog.h" #include "ui/gtk/hedit.h" #include "ui/gtk/videoenc.h" #include "cmd/cmd.h" #include "cmd/cmdargs.h" class MainWindow; class UI_Gtk : public ErrorListener, public UI { protected: enum { CB_OFFSET = 35000, /* 50 Hz */ }; bool _auto_skip; int _cur_auto_skip; int _max_auto_skip; int _video_skip; int _video_frame; int _video_encoder_state; unsigned long long _callback_value; unsigned long long _callback_value_retrace; UI_Gtk_Base *_ui; MainWindow *_main_window; VideoEncoder *_video_encoder; VideoEncoder *_video_encoder_dummy; const char *_video_encoder_filename; double _video_encoder_quality; int _video_encoder_frame_skip; bool _video_encoder_start_on_reset; UI_Gtk_Window *_debug_window; UI_Gtk_Window *_about_window; UI_Gtk_Window *_help_window; UI_Gtk_Window *_thanks_window; UI_Gtk_Window *_color_window; UI_Gtk_Window *_copying_window; UI_Gtk_Window *_options_window; UI_Gtk_Window *_selector_window; UI_Gtk_Window *_tape_window; UI_Gtk_Window *_tape_add_window; UI_Gtk_Window *_disk_window; UI_Gtk_Window *_vdip_window; UI_Gtk_Window *_module_window; UI_Gtk_Window *_keyboard_window; UI_Gtk_Window *_info_window; UI_Gtk_Window *_wav_window; UI_Gtk_Window *_screenshot_window; UI_Gtk_Window *_plotter_window; UI_Gtk_Window *_save_memory_window; UI_Gtk_Window *_video_window; FileBrowser *_file_browser; DialogWindow *_dialog_window; EditHeaderWindow *_edit_header_window; bool _init; bool _shift_lock; bool _speed_limit; void create_ui(void); void destroy_ui(void); void add_callback(void); int ensure_range(double val); void tapeSelect(void); void text_update(void); void wire_menu_item(const char *name, const char *shortcut, const char *command); static void on_pixbuf_destroy(guchar *pixels, gpointer user_data); static void sf_selection_received(GtkWidget *widget, GtkSelectionData *sel_data, gpointer *data); static void key_press_release(GdkEventKey *event, bool press); static void mc_view_menubar(GtkWidget *widget, gpointer data); static void mc_view_tape_window(GtkWidget *widget, gpointer data); static void mc_view_tape_add_window(GtkWidget *widget, gpointer data); static void mc_view_statusbar(GtkWidget *widget, gpointer data); static void mc_tape_remove_file(GtkWidget *widget, gpointer data); static void mc_tape_load_file(GtkWidget *widget, gpointer data); static void mc_tape_delete_file(GtkWidget *widget, gpointer data); static void mc_tape_add_tape_file(GtkWidget *widget, gpointer data); static void sf_focus_in(GtkWidget *widget, GdkEventFocus *event); static void sf_focus_out(GtkWidget *widget, GdkEventFocus *event); static gboolean sf_key_press(GtkWidget *widget, GdkEventKey *event); static gboolean sf_key_release(GtkWidget *widget, GdkEventKey *event); static void sf_leave_notify(GtkWidget *widget, GdkEventCrossing *event); static void sf_button_press(GtkWidget *widget, GdkEventButton *event); static void sf_tape_button_press(GtkWidget *widget, GdkEventButton *event); static void sf_tape_file_selection_ok(GtkWidget *w, GtkFileSelection *fs); static void sf_tape_file_select(GtkWidget *widget, gint row, gint column, GdkEventButton * bevent); static void sf_load(void); static void sf_load_ok(GtkWidget *widget, GtkFileSelection *fs); static void sf_quit(void); static void idle(void); public: UI_Gtk(void); virtual ~UI_Gtk(void); virtual void processEvents(void); virtual void update(bool full_update = false, bool clear_cache = false); virtual void flash(bool enable); virtual int get_mode(void); virtual void set_mode(int mode); virtual void init(int *argc, char ***argv); virtual void init2(void); virtual void show(void); virtual int get_width(void); virtual int get_height(void); virtual void memory_read(word_t addr); virtual void memory_write(word_t addr); virtual void callback(void *data); virtual char *select_profile(void); virtual GdkPixbuf * get_screenshot(void); virtual void speed_limit_toggle(void); virtual void display_effects_toggle(void); virtual void allocate_colors(double brightness_fg, double contrast_fg, double brightness_bg, double contrast_bg); virtual void set_video_encoder(VideoEncoder *encoder); virtual void set_video_encoder_state(int state); virtual void set_video_encoder_config(const char *filename, double quality, int frame_skip, bool start_on_reset); void gtk_sync(void); void gtk_resize(void); void gtk_zoom(int zoom); /* * ErrorListener */ void errorInfo(const char *msg); /* * interface handling */ virtual UI_ModuleInterface * getModuleInterface(void); virtual TapeInterface * getTapeInterface(void); virtual DebugInterface * getDebugInterface(void); friend class KeyboardWindow; // allow KeyboardWindow to call event handlers virtual void reset(bool power_on = false); }; #endif /* __ui_ui_gtk_h */ KCemu-0.5.1/include/ui/gtk/tapeadd.h0000644001050700006200000000331611345001576016612 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_tapeadd_h #define __ui_gtk_tapeadd_h #include #include "kc/system.h" #include "cmd/cmd.h" #include "ui/gtk/window.h" class TapeAddWindow : public UI_Gtk_Window, public CMD { private: struct { GtkWidget *vbox; GtkWidget *table; GtkWidget *filename; GtkWidget *tapename; GtkWidget *kcname; GtkWidget *load_addr; GtkWidget *start_addr; GtkWidget *separator; GtkWidget *bbox; GtkWidget *b_ok; GtkWidget *b_cancel; } _tape_add; CMD_Args *_args; protected: static void ok(GtkWidget *widget, gpointer *data); static void cancel(GtkWidget *widget, gpointer *data); void init(void); public: TapeAddWindow(const char *ui_xml_file); ~TapeAddWindow(void); void init(const char *tapename, const char *text); void execute(CMD_Args *args, CMD_Context context); }; #endif /* __ui_gtk_tapeadd_h */ KCemu-0.5.1/include/ui/gtk/theora.h0000644001050700006200000000377211345001576016500 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_theora_h #define __ui_gtk_theora_h #include "kc/config.h" #ifdef HAVE_LIBTHEORA #include #include #include #include "kc/system.h" #include "ui/gtk/videoenc.h" class TheoraVideoEncoder : public VideoEncoder { private: typedef struct { int y, u, v; } color_t; private: FILE *_f; th_info _info; th_pixel_fmt _format; th_enc_ctx *_context; ogg_stream_state _stream; byte_t *_buf_y; byte_t *_buf_u; byte_t *_buf_v; color_t _col[256]; protected: virtual bool flush(void); virtual bool write_page(ogg_page *page); virtual void encode_444(byte_t *image, byte_t *dirty); virtual void encode_420(byte_t *image, byte_t *dirty); public: TheoraVideoEncoder(void); virtual ~TheoraVideoEncoder(void); virtual bool init(const char *filename, int width, int height, int fps_den, double quality); virtual void allocate_color_rgb(int idx, int r, int g, int b); virtual bool encode(byte_t *image, byte_t *dirty); virtual void close(void); }; #endif /* HAVE_LIBTHEORA */ #endif /* __ui_gtk_theora_h */ KCemu-0.5.1/include/ui/gtk/cmds.h0000644001050700006200000000214011345001576016130 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_cmds_h #define __ui_gtk_cmds_h #if 0 #include #include "kc/system.h" #include "cmd/cmd.h" class UI_Cmds { protected: UI_Cmds(void); ~UI_Cmds(void); public: static void init(void); }; #endif #endif /* __ui_gtk_cmds_h */ KCemu-0.5.1/include/ui/gtk/ui_gtk9.h0000644001050700006200000000204211345001576016556 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_ui_gtk9_h #define __ui_ui_gtk9_h #include "ui/gtk/ui_gtk_base.h" class UI_Gtk9 : public UI_Gtk_Base { public: UI_Gtk9(void); virtual ~UI_Gtk9(void); }; #endif /* __ui_ui_gtk9_h */ KCemu-0.5.1/include/ui/gtk/ui_gtk_base.h0000644001050700006200000000415011345001576017461 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_ui_gtk_base_h #define __ui_gtk_ui_gtk_base_h #include #include "kc/system.h" #include "ui/ui.h" #include "ui/generic/ui_base.h" using namespace std; class UI_Color { private: bool _is_bg; bool _is_rgb; int _r, _g, _b; double _hue; public: UI_Color(const UI_Color &c): _is_bg(c._is_bg), _is_rgb(c._is_rgb), _r(c._r), _g(c._g), _b(c._b), _hue(c._hue) {} UI_Color(bool bg, int r, int g, int b) : _is_bg(bg), _is_rgb(true), _r(r), _g(g), _b(b), _hue(0) {} UI_Color(bool bg, double hue) : _is_bg(bg), _is_rgb(false), _r(0), _g(0), _b(0), _hue(hue) {} bool is_bg(void) const { return _is_bg; } bool is_rgb(void) const { return _is_rgb; } int get_red(void) const { return _r; }; int get_green(void) const { return _g; }; int get_blue(void) const { return _b; }; double get_hue(void) const { return _hue; } }; class UI_Gtk_Base { private: UI_Base *_generic_ui; protected: list _colors; public: UI_Gtk_Base(UI_Base *generic_ui); virtual ~UI_Gtk_Base(void); virtual UI_Base * get_generic_ui(void) const; virtual const list & get_colors(void) const; virtual Scanline * get_scanline(void); virtual MemAccess * get_mem_access(void); }; #endif /* __ui_gtk_ui_gtk_base_h */ KCemu-0.5.1/include/ui/gtk/main.h0000644001050700006200000000774211345001576016143 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_main_h #define __ui_gtk_main_h #include "kc/system.h" #include "ui/statusl.h" #include "ui/hsv2rgb.h" #include "ui/generic/ui_base.h" #include "ui/gtk/window.h" using namespace std; class MainWindow : public StatusListener, public UI_Gtk_Window { private: struct { GtkDrawingArea *drawingarea; GtkMenu *popup_menu; GtkMenuBar *menubar; GtkHBox *status_hbox; GtkLabel *status_label; GtkStatusbar *status_statusbar; GtkAccelGroup *accel_group; guint idle_id; long status_sec; } _w; int _width; int _height; bool _expose; GdkGC *_gc; GdkVisual *_visual; GdkImage *_image; byte_t *_dirty_old; GdkColormap *_colormap; GdkColor _col[24]; CMD *_cmd_ui_toggle; string _accel_map_path; protected: void init(void); void init_icon(void); void add_menu_accel_group(const char *base, const char *name); void wire_menu_item(const char *name, const char *shortcut, const char *command); gulong get_col(byte_t *bitmap, int which, int idx, int width); void update_1(byte_t *bitmap, byte_t *dirty, int dirty_size, int width, int height); void update_2(byte_t *bitmap, byte_t *dirty, int dirty_size, int width, int height); void update_3(byte_t *bitmap, byte_t *dirty, int dirty_size, int width, int height); void update_1_debug(byte_t *bitmap, byte_t *dirty, int dirty_size, int width, int height); void update_2_scanline(byte_t *bitmap, byte_t *dirty, int dirty_size, int width, int height); void update_3_smooth(byte_t *bitmap, byte_t *dirty, int dirty_size, int width, int height); void attach_remote_listener(void); static gboolean on_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer user_data); static gboolean on_button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer user_data); static void on_accel_group_changed(GtkAccelGroup *accel_group, guint keyval, GdkModifierType modifier, GClosure *accel_closure, gpointer user_data); static gboolean on_accel_group_changed_idle_func(gpointer data); static gboolean on_property_change(GtkWidget *widget, GdkEventProperty *event, gpointer data); public: MainWindow(const char *ui_xml_file); virtual ~MainWindow(void); virtual GtkWidget * get_main_window(void); virtual void process_events(void); virtual void show(int width, int height); virtual bool resize(int width, int height); virtual void update(UI_Base *ui, int image_width, int image_height, bool full_update); virtual void allocate_color_rgb(int idx, int r, int g, int b); virtual gboolean get_display_effect(void); virtual void set_display_effect(gboolean effect); virtual void set_fps(unsigned long fps); virtual void status_bar_toggle(void); virtual void menu_bar_toggle(void); virtual GdkColor * get_colormap(void); /* * StatusListener */ virtual void setStatus(const char *msg); }; #endif /* __ui_gtk_main_h */ KCemu-0.5.1/include/ui/gtk/Makefile.am0000644001050700006200000000137211345001576017073 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ ui_gtk.h \ ui_gtk_base.h \ ui_gtk0.h \ ui_gtk1.h \ ui_gtk3.h \ ui_gtk4.h \ ui_gtk6.h \ ui_gtk8.h \ ui_gtk9.h \ ui_gtk_kramermc.h \ ui_gtk_muglerpc.h \ ui_gtk_vcs80.h \ ui_gtk_c80.h \ cmd.h \ cmds.h \ util.h \ main.h \ disk.h \ vdip.h \ help.h \ tape.h \ tapeadd.h \ info.h \ debug.h \ about.h \ thanks.h \ color.h \ module.h \ keyboard.h \ options.h \ selector.h \ screenshot.h \ copying.h \ savemem.h \ window.h \ fbrowse.h \ dialog.h \ image.h \ hedit.h \ wav.h \ plotter.h \ video.h \ videoenc.h \ theora.h \ gif.h \ xvid.h \ dirac.h \ schro.h \ ffmpeg.h \ vnc.h KCemu-0.5.1/include/ui/gtk/info.h0000644001050700006200000000550011345001576016140 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_info_h #define __ui_gtk_info_h #include #include "ui/gtk/window.h" class InfoWindow : public UI_Gtk_Window { private: typedef enum { A, B, C, D, E, F, H, L, IX, IY, BC, DE, HL, SP, PC, NR_OF_REGS } _regs; struct { GtkWidget *vbox; GtkWidget *notebook; GtkWidget *b; GtkWidget *separator; GtkWidget *bbox; GtkWidget *b_update; GtkWidget *b_close; } _w; struct { GtkWidget *table; GtkWidget *reg_f[NR_OF_REGS]; GtkWidget *reg_v[NR_OF_REGS]; /* vbox */ GtkWidget *reg_led[NR_OF_REGS]; /* label pointer */ GtkWidget *reg_lp[NR_OF_REGS]; /* label pointer */ GtkWidget *reg_h[NR_OF_REGS]; /* hbox */ GtkWidget *reg_lh[NR_OF_REGS]; /* label hex */ GtkWidget *reg_ld[NR_OF_REGS]; /* label dec */ } _cpu; struct { GtkWidget *hbox; GtkWidget *frame[2]; GtkWidget *table[2]; GtkWidget *mode_l[2]; GtkWidget *mode_v[2]; GtkWidget *irq_l[2]; GtkWidget *irq_v[2]; GtkWidget *irqvec_l[2]; GtkWidget *irqvec_v[2]; } _pio; struct { GtkWidget *hbox; GtkWidget *frame[4]; GtkWidget *table[4]; GtkWidget *irq_l[4]; GtkWidget *irq_v[4]; GtkWidget *irqvec_l[4]; GtkWidget *irqvec_v[4]; } _ctc; CMD *_cmd; protected: void init(void); GtkWidget * create_page_cpu(); GtkWidget * create_page_pio(); GtkWidget * create_page_ctc(); GtkWidget * create_channel_pio(int channel, const char *frame_title); GtkWidget * create_channel_ctc(int channel, const char *frame_title); GtkWidget * create_reg(int reg, const char *frame_title, int led); static void update(GtkWidget *w, InfoWindow *self); static void switch_page(GtkWidget *w, GtkNotebookPage *page, gint page_num, InfoWindow *self); void do_update(int page); void do_update_cpu(void); void do_update_pio(void); void do_update_ctc(void); public: InfoWindow(void); virtual ~InfoWindow(void); }; #endif /* __ui_gtk_info_h */ KCemu-0.5.1/include/ui/gtk/schro.h0000644001050700006200000000347211345001576016331 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_schro_h #define __ui_gtk_schro_h #include "kc/config.h" #ifdef HAVE_LIBSCHROEDINGER #include #include #include "kc/system.h" #include "ui/gtk/videoenc.h" class SchroedingerVideoEncoder : public VideoEncoder { private: typedef struct { int y, u, v; } color_t; private: FILE *_f; color_t _col[256]; byte_t *_buf; int _width; int _height; byte_t *_image; int _image_size; SchroEncoder *_encoder; protected: bool encode_loop(void); static void image_free(SchroFrame *frame, void *priv); public: SchroedingerVideoEncoder(void); virtual ~SchroedingerVideoEncoder(void); virtual bool init(const char *filename, int width, int height, int fps_den, double quality); virtual void allocate_color_rgb(int idx, int r, int g, int b); virtual bool encode(byte_t *image, byte_t *dirty); virtual void close(void); }; #endif /* HAVE_LIBSCHROEDINGER */ #endif /* __ui_gtk_schro_h */ KCemu-0.5.1/include/ui/gtk/videoenc.h0000644001050700006200000000340211345001577017001 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_videoenc_h #define __ui_gtk_videoenc_h #include "kc/system.h" class VideoEncoder { public: enum { VIDEO_ENCODER_STATE_STOP = 0, VIDEO_ENCODER_STATE_RECORD = 1, VIDEO_ENCODER_STATE_PAUSE = 2, }; public: virtual bool init(const char *filename, int width, int height, int fps_den, double quality) = 0; virtual void allocate_color_rgb(int idx, int r, int g, int b) = 0; virtual bool encode(byte_t *image, byte_t *dirty) = 0; virtual void close(void) = 0; }; class DummyVideoEncoder : public VideoEncoder { virtual bool init(const char *filename, int width, int height, int fps_den, double quality) { return false; } virtual void allocate_color_rgb(int idx, int r, int g, int b) {} virtual void allocate_color_hsv(int idx, double h, double s, double v) {} virtual bool encode(byte_t *image, byte_t *dirty) { return true; } virtual void close(void) {} }; #endif /* __ui_gtk_videoenc_h */ KCemu-0.5.1/include/ui/gtk/ui_gtk6.h0000644001050700006200000000203711345001576016557 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_ui_gtk6_h #define __ui_ui_gtk6_h #include "ui/gtk/ui_gtk_base.h" class UI_Gtk6 : public UI_Gtk_Base { public: UI_Gtk6(void); virtual ~UI_Gtk6(void); }; #endif /* __ui_ui_gtk6_h */ KCemu-0.5.1/include/ui/gtk/debug.h0000644001050700006200000001236311345001576016300 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_debug_h #define __ui_gtk_debug_h #include #include "ui/debug.h" #include "ui/gtk/window.h" typedef enum { SCROLL_NONE, SCROLL_FORWARD, SCROLL_BACKWARD, SCROLL_NEXT_PAGE, SCROLL_PREV_PAGE } scroll_dir_t; class debug_op_t; #define DEBUG_NR_OF_ASM_LABELS (12) #define DEBUG_NR_OF_MEM_LABELS (8) #define DEBUG_NR_OF_REG_LABELS (4) #define DEBUG_ASM_NAME _("Disassembler") #define DEBUG_MEM_NAME _("Memory") #define DEBUG_REG_NAME _("Registers") #define DEBUG_ASM_HEADLINE _("Disassembler (incomplete, use CTRL-d to activate)") #define DEBUG_MEM_HEADLINE _("Memory (use CTRL-m to activate)") #define DEBUG_REG_HEADLINE _("Registers") class DebugWindow : public UI_Gtk_Window, public DebugInterface { private: // // argh, the following declarations trigger a compiler error :-( // 'Internal compiler error 19970302.' // //static const int DEBUG_NR_OF_ASM_LABELS; //static const int DEBUG_NR_OF_MEM_LABELS; //static const int DEBUG_NR_OF_REG_LABELS; //static char * DEBUG_ASM; //static char * DEBUG_MEM; //static char * DEBUG_REG; private: struct { GtkWidget *vbox; GtkWidget *hbox; GtkWidget *active; GtkWidget *op; GtkWidget *evb_asm; GtkWidget *frame_asm; GtkWidget *vbox_asm; GtkWidget *evb_mem; GtkWidget *frame_mem; GtkWidget *vbox_mem; GtkWidget *evb_reg; GtkWidget *frame_reg; GtkWidget *vbox_reg; GtkWidget *l_asm[DEBUG_NR_OF_ASM_LABELS]; GtkWidget *l_mem[DEBUG_NR_OF_MEM_LABELS]; GtkWidget *l_reg[DEBUG_NR_OF_REG_LABELS]; GtkWidget *trace; GtkWidget *single_step; GtkWidget *execute_step; } _w; int _pc; int _pc_np; int _mem; bool _minibuffer_active; CMD *_cmd1; CMD *_cmd2; PangoFontDescription *_font_desc; protected: void init(void); void do_goto_string(const char *str); static gint key_press_func(GtkWidget *widget, GdkEventKey *event, gpointer data); debug_op_t *_op; public: DebugWindow(void); virtual ~DebugWindow(void); void do_goto_int(int addr); virtual void debugTrace(void) {} virtual void debugSingleStep(void) {} friend class debug_op_t; friend class debug_op_asm; friend class debug_op_mem; friend class debug_op_reg; }; /* * this generates an operator new() that makes the class * a singleton; that means every new call for this class returns * the _same_ object! */ #define __NEW_SINGLETON(classname) \ void * operator new(size_t size) { \ static classname *ptr = 0; \ if (!ptr) ptr = ::new classname(); \ return ptr; \ } #define __CAPABILITIES(can_goto) \ virtual bool can_go_to(void) { return can_goto; } class debug_op_t { public: debug_op_t(void) {}; virtual ~debug_op_t(void) {}; void activate(DebugWindow *w); virtual void go_to(DebugWindow *w, int addr) {} virtual void update(DebugWindow *w, scroll_dir_t d = SCROLL_NONE) {} virtual const char * get_name(void) = 0; virtual const char * get_headline(void) = 0; virtual bool can_go_to(void) = 0; }; class debug_op_asm : public debug_op_t { public: debug_op_asm(void) {}; virtual ~debug_op_asm(void) {}; virtual void go_to(DebugWindow *w, int addr); virtual void update(DebugWindow *w, scroll_dir_t d = SCROLL_NONE); virtual const char * get_name(void) { return DEBUG_ASM_NAME; } virtual const char * get_headline(void) { return DEBUG_ASM_HEADLINE; } __NEW_SINGLETON(debug_op_asm); __CAPABILITIES(true); }; class debug_op_mem : public debug_op_t { public: debug_op_mem(void) {}; virtual ~debug_op_mem(void) {}; virtual void go_to(DebugWindow *w, int addr); virtual void update(DebugWindow *w, scroll_dir_t d = SCROLL_NONE); virtual const char * get_name(void) { return DEBUG_MEM_NAME; } virtual const char * get_headline(void) { return DEBUG_MEM_HEADLINE; } __NEW_SINGLETON(debug_op_mem); __CAPABILITIES(true); }; class debug_op_reg : public debug_op_t { public: debug_op_reg(void) {}; virtual ~debug_op_reg(void) {}; //virtual void go_to(DebugWindow *w, int addr); virtual void update(DebugWindow *w, scroll_dir_t d = SCROLL_NONE); virtual const char * get_name(void) { return DEBUG_REG_NAME; } virtual const char * get_headline(void) { return DEBUG_REG_HEADLINE; } __NEW_SINGLETON(debug_op_reg); __CAPABILITIES(false); }; #undef __NEW_SINGLETON #undef __CAPABILITIES #endif /* __ui_gtk_debug_h */ KCemu-0.5.1/include/ui/gtk/ffmpeg.h0000644001050700006200000000340611345001576016454 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_ffmpeg_h #define __ui_gtk_ffmpeg_h #include "kc/config.h" #ifdef HAVE_LIBAVFORMAT #include extern "C" { #define __STDC_CONSTANT_MACROS #include } #include "kc/system.h" #include "ui/gtk/videoenc.h" class FfmpegVideoEncoder : public VideoEncoder { private: typedef struct { int y, u, v; } color_t; private: color_t _col[256]; byte_t *_buf; int _bufsize; int _width; int _height; AVFormatContext *_context; AVStream *_stream; AVFrame *_frame; public: FfmpegVideoEncoder(void); virtual ~FfmpegVideoEncoder(void); virtual bool init(const char *filename, int width, int height, int fps_den, double quality); virtual void allocate_color_rgb(int idx, int r, int g, int b); virtual bool encode(byte_t *image, byte_t *dirty); virtual void close(void); }; #endif /* HAVE_LIBAVFORMAT */ #endif /* __ui_gtk_ffmpeg_h */ KCemu-0.5.1/include/ui/gtk/disk.h0000644001050700006200000000323011345001576016135 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_disk_h #define __ui_gtk_disk_h #include #include "kc/system.h" #include "ui/gtk/window.h" class DiskWindow : public UI_Gtk_Window { enum { NR_OF_DISKS = 4 }; private: struct { GtkWidget *vbox; GtkWidget *table; GtkWidget *label[NR_OF_DISKS]; GtkWidget *combo[NR_OF_DISKS]; GtkWidget *browse[NR_OF_DISKS]; GtkWidget *eject[NR_OF_DISKS]; GtkWidget *separator; GtkWidget *close; guint combo_signal_id[NR_OF_DISKS]; } _w; CMD *_cmd_attach; CMD *_cmd_update; CMD *_cmd_window_toggle; protected: void init(void); static void sf_disk_attach(GtkWidget *widget, gpointer data); public: DiskWindow(const char *ui_xml_file); virtual ~DiskWindow(void); virtual void set_name(int idx, const char *name); }; #endif /* __ui_gtk_disk_h */ KCemu-0.5.1/include/ui/gtk/color.h0000644001050700006200000000360711345001576016331 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_color_h #define __ui_gtk_color_h #include #include "kc/system.h" #include "ui/gtk/window.h" class ColorWindow : public UI_Gtk_Window { private: struct { GtkWidget *b_fg_vscale; GtkWidget *b_bg_vscale; GtkWidget *c_fg_vscale; GtkWidget *c_bg_vscale; GtkAdjustment *s_fg_adj; GtkAdjustment *s_bg_adj; GtkAdjustment *v_fg_adj; GtkAdjustment *v_bg_adj; } _w; double _brightness_fg; double _brightness_bg; double _contrast_fg; double _contrast_bg; CMD *_cmd; protected: static void sf_adjustment_changed(GtkAdjustment *adj, double *data); void init(void); GtkAdjustment * init_adjustment(GtkRange* range, double *val_ptr); public: ColorWindow(const char *ui_xml_file); virtual ~ColorWindow(void); virtual double get_brightness_fg() { return _brightness_fg; } virtual double get_brightness_bg() { return _brightness_bg; } virtual double get_contrast_fg() { return _contrast_fg; } virtual double get_contrast_bg() { return _contrast_bg; } }; #endif /* __ui_gtk_color_h */ KCemu-0.5.1/include/ui/gtk/copying.h0000644001050700006200000000264111345001576016660 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_copying_h #define __ui_gtk_copying_h #include #include "kc/system.h" #include "cmd/cmd.h" #include "ui/gtk/window.h" class CopyingWindow : public UI_Gtk_Window { private: struct { GtkWidget *label_license; GtkWidget *label_warranty; GtkWidget *scrolled_window; } _w; CMD *_cmd; PangoFontDescription *_font_desc; protected: void init(void); public: CopyingWindow(const char *ui_xml_file); virtual ~CopyingWindow(void); void scroll_to_copying(void); void scroll_to_warranty(void); }; #endif /* __ui_gtk_copying_h */ KCemu-0.5.1/include/ui/gtk/ui_gtk_muglerpc.h0000644001050700006200000000212211345001576020362 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_ui_gtk_muglerpc_h #define __ui_ui_gtk_muglerpc_h #include "ui/gtk/ui_gtk_base.h" class UI_Gtk_MuglerPC : public UI_Gtk_Base { public: UI_Gtk_MuglerPC(void); virtual ~UI_Gtk_MuglerPC(void); }; #endif /* __ui_ui_gtk_muglerpc_h */ KCemu-0.5.1/include/ui/gtk/image.h0000644001050700006200000000317711345001576016277 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_image_h #define __ui_gtk_image_h #include #include "kc/system.h" #include "cmd/cmd.h" class CMD_ui_image_props : public CMD { private: CMD_Args *_args; struct { GtkWidget *dialog; GtkWidget *load_addr; GtkWidget *start_addr; } _w; bool _autostart; protected: static void ok(GtkWidget */*widget*/, gpointer data); static void cancel(GtkWidget */*widget*/, gpointer data); static int delete_event(GtkWidget */*widget*/, GdkEvent *event, gpointer data); static void toggle_autostart(GtkWidget *checkbutton, gpointer data); virtual bool check_values(CMD_Args *args); public: CMD_ui_image_props(void); virtual ~CMD_ui_image_props(void); virtual void execute(CMD_Args *args, CMD_Context context); }; #endif /* __ui_gtk_image_h */ KCemu-0.5.1/include/ui/gtk/hedit.h0000644001050700006200000000473611345001576016314 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_hedit_h #define __ui_gtk_hedit_h #include #include "kc/system.h" #include "cmd/cmd.h" #include "ui/gtk/window.h" class EditHeaderWindow : public CMD { private: CMD_Args *_args; struct { GtkWidget *window; GtkWidget *vbox; GtkWidget *table; GtkWidget *tapename; GtkWidget *kcname; GtkWidget *load_addr; GtkWidget *start_addr; GtkWidget *separator; GtkWidget *bbox; GtkWidget *b_ok; GtkWidget *b_close; } _w; const char *_tape_filename; const char *_kc_filename; unsigned long _load_address; unsigned long _start_address; bool _autostart; protected: void init(const char *tapename, const char *kcname); bool check_values(CMD_Args *args); static void ok(GtkWidget */*widget*/, gpointer data); static void cancel(GtkWidget */*widget*/, gpointer data); static int delete_event(GtkWidget */*widget*/, GdkEvent *event, gpointer data); static void sf_toggle_autostart(GtkWidget *checkbutton, gpointer data); public: EditHeaderWindow(void); virtual ~EditHeaderWindow(void); void execute(CMD_Args *args, CMD_Context context); const char * get_tape_filename(void) { return gtk_entry_get_text(GTK_ENTRY(_w.tapename)); } const char * get_kc_filename(void) { return gtk_entry_get_text(GTK_ENTRY(_w.kcname)); } const char * get_load_address(void) { return gtk_entry_get_text(GTK_ENTRY(_w.load_addr)); } const char * get_start_address(void) { return gtk_entry_get_text(GTK_ENTRY(_w.start_addr)); } }; #endif /* __ui_gtk_hedit_h */ KCemu-0.5.1/include/ui/gtk/ui_gtk_kramermc.h0000644001050700006200000000212211345001576020345 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_ui_gtk_kramermc_h #define __ui_ui_gtk_kramermc_h #include "ui/gtk/ui_gtk_base.h" class UI_Gtk_KramerMC : public UI_Gtk_Base { public: UI_Gtk_KramerMC(void); virtual ~UI_Gtk_KramerMC(void); }; #endif /* __ui_ui_gtk_kramermc_h */ KCemu-0.5.1/include/ui/gtk/options.h0000644001050700006200000002542111345001576016704 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_options_h #define __ui_gtk_options_h #include #include #include "kc/system.h" #include "kc/prefs/profile.h" #include "ui/gtk/window.h" using namespace std; class OptionsWindow : public UI_Gtk_Window { private: enum { TREE_INT_COLUMN, TREE_TEXT_COLUMN, TREE_ICON_COLUMN, TREE_CONFIG_NAME_COLUMN, TREE_N_COLUMNS }; enum { MODULES_NAME_COLUMN, MODULES_MODIF_COLUMN, MODULES_POINTER_COLUMN, MODULES_N_COLUMNS }; enum { ROMS_DESCRIPTION_COLUMN, ROMS_FILENAME_COLUMN, ROMS_TYPE_COLUMN, ROMS_N_COLUMNS }; enum { NR_OF_MODULES = 8, NR_OF_ROMS = 8, NR_OF_NETWORK_SETTINGS = 4, }; static const char * FILE_CHOOSER_BUTTON_KEY; static const char * FILE_CHOOSER_CLEAR_BUTTON_KEY; static const char * DATA_KEY_CHECK_BUTTON; static const char * PREFERENCES_KEY; static const char * DEFAULT_DIR_KEY; static const char * TARGET_WIDGET1_KEY; static const char * TARGET_WIDGET2_KEY; static const char * TARGET_WIDGET3_KEY; // unfortunately the signature of gtk_tree_path_prev and // gtk_tree_path_next are different. but as we just need to // treat them as void, we cast them to the following type. typedef void (*GtkPathMoveFunc)(GtkTreePath *); typedef void (*GtkIterMoveFunc)(GtkTreeStore *, GtkTreeIter *, GtkTreeIter *); struct { GtkWidget *treeview; GtkWidget *b_new; GtkWidget *b_copy; GtkWidget *b_delete; GtkWidget *b_up; GtkWidget *b_down; GtkWidget *b_ok; GtkWidget *b_close; GtkWidget *b_expand; GtkWidget *b_collapse; GtkNotebook *notebook; GtkEntry *entry_profile_name; GtkComboBox *combobox_system_type; GtkComboBox *combobox_system_variant; GtkCheckButton *check_button_system_variant; GtkTextView *textview_comment; GtkTextBuffer *textbuffer_comment; GtkCheckButton *check_button_display_scale; GtkCheckButton *check_button_display_effects; GtkCheckButton *check_button_display_mem_access; GtkCheckButton *check_button_display_debug; GtkCheckButton *check_button_d004; GtkCheckButton *check_button_f8_rom; GtkCheckButton *check_button_busdrivers; GtkComboBox *combobox_d004; GtkComboBox *combobox_f8_rom; GtkSpinButton *spin_button_busdrivers; GtkSpinButton *spin_button_display_scale; GtkComboBox *combobox_display_effects; GtkComboBox *combobox_display_mem_access; GtkComboBox *combobox_display_debug; GtkComboBox *combobox_module[NR_OF_MODULES]; GtkCheckButton *check_button_modules; GtkEntry *entry_network_ip_address; GtkEntry *entry_network_netmask; GtkEntry *entry_network_gateway; GtkEntry *entry_network_dns_server; GtkLabel *roms_label[NR_OF_ROMS]; GtkComboBoxEntry *roms_comboboxentry[NR_OF_ROMS]; GtkButton *roms_open_button[NR_OF_ROMS]; GtkCheckButton *roms_check_button[NR_OF_ROMS]; GtkTreeStore *treestore; GtkListStore *liststore_system; GtkListStore *liststore_modules; GdkPixbuf *pixbuf_root; GdkPixbuf *pixbuf_default; GdkPixbuf *pixbuf_deleted; gint on_profile_name_changed_id; gint on_comment_changed_id; gint on_system_type_changed_id; gint on_system_variant_changed_id; gint on_display_scale_value_changed_id; gint on_display_effects_changed_id; gint on_display_mem_access_changed_id; gint on_display_debug_changed_id; gint on_kc85_d004_changed_id; gint on_kc85_f8_rom_changed_id; gint on_kc85_busdrivers_changed_id; gint on_module_changed_id[NR_OF_MODULES]; gint on_rom_changed_id[NR_OF_ROMS]; gint on_network_changed_id[NR_OF_NETWORK_SETTINGS]; } _w; CMD *_cmd; CMD *_cmd_dialog; kc_type_t _current_kc_type; Profile *_current_profile; list _delete_path; char *_open_rom_last_path; protected: void init(void); bool is_ip_address(const char *addr); GtkTreeStore * get_tree_model(void); GtkListStore * get_system_list_model(void); GtkListStore * get_variant_list_model(kc_variant_t kc_variant, const char *name, ...); GtkListStore * get_modules_list_model(kc_type_t kc_type); GtkTreeModel * get_selected_tree_iter(GtkTreeIter *iter); void expand_and_select(GtkTreeView *treeview, GtkTreeModel *model, GtkTreeIter *iter); ProfileValue * get_current_profile_value(const char *key); const char * get_preferences_key(GObject *object); void set_preferences_key(GObject *object, const char *key); void apply_profile(void); void apply_comment(void); void apply_system_type(void); void apply_kc85_settings(void); void apply_display_settings(void); void apply_network_settings(void); void apply_modules_settings(kc_type_t kc_type); void apply_roms_settings(kc_type_t kc_type, kc_variant_t kc_variant); void apply_system_variant(kc_type_t kc_type, kc_variant_t kc_variant); void apply_filechooserbutton(GtkFileChooser *filechooser); void apply_entry_value(GtkEntry *entry, gint signal_id); void apply_combobox_value(GtkCheckButton *check_button, GtkComboBox *combobox, gint handler_id); void apply_spin_button_value(GtkCheckButton *check_button, GtkSpinButton *spin_button, gint signal_id, int default_value); void expand_tree(void); void collapse_tree(void); void add_system(GtkTreeStore *store, GtkTreeIter *iter, const char *name, const char *config_name, const char *icon_name); void move_row(GtkPathMoveFunc path_func, GtkIterMoveFunc move_func); void set_roms_liststore(int idx, const char *rom_key, SystemROM *rom); bool check_button_toggled(GtkToggleButton *togglebutton); void set_widget_sensitive_by_key(GObject *object, const gchar *key, bool sensitive); void wire_check_button(const char *preferences_key, GtkCheckButton *check_button, GCallback callback, GtkWidget *target1, GtkWidget *target2 = NULL, GtkWidget *target3 = NULL); void wire_check_button(const char *preferences_key, const char *default_dir, const char *check_button_name, const char *filechooser_button_name, const char *button_clear_name); static void on_button_new_clicked(GtkButton *button, gpointer user_data); static void on_button_copy_clicked(GtkButton *button, gpointer user_data); static void on_button_delete_clicked(GtkButton *button, gpointer user_data); static void on_button_up_clicked(GtkButton *button, gpointer user_data); static void on_button_down_clicked(GtkButton *button, gpointer user_data); static void on_button_expand_clicked(GtkButton *button, gpointer user_data); static void on_button_collapse_clicked(GtkButton *button, gpointer user_data); static void on_button_ok_clicked(GtkButton *button, gpointer user_data); static void on_button_close_clicked(GtkButton *button, gpointer user_data); static void on_tree_selection_changed(GtkTreeSelection *selection, gpointer user_data); static void on_media_check_button_toggled(GtkToggleButton *togglebutton, gpointer user_data); static void on_media_clear_button_clicked(GtkButton *button, gpointer user_data); static void on_media_filechooser_file_set(GtkFileChooserButton *filechooserbutton, gpointer user_data); static void on_display_check_button_toggled(GtkToggleButton *togglebutton, gpointer user_data); static void on_display_scale_value_changed(GtkSpinButton *spin_button, gpointer user_data); static void on_display_effects_changed(GtkComboBox *combobox, gpointer user_data); static void on_display_debug_changed(GtkComboBox *combobox, gpointer user_data); static void on_display_mem_access_changed(GtkComboBox *combobox, gpointer user_data); static void on_profile_name_changed(GtkEditable *editable, gpointer user_data); static void on_comment_changed(GtkTextBuffer *textbuffer, gpointer user_data); static void on_system_type_changed(GtkComboBox *combobox, gpointer user_data); static void on_system_variant_changed(GtkComboBox *combobox, gpointer user_data); static void on_system_variant_check_button_toggled(GtkToggleButton *togglebutton, gpointer user_data); static void on_module_changed(GtkComboBox *combobox, gpointer user_data); static void on_modules_check_button_toggled(GtkToggleButton *togglebutton, gpointer user_data); static void on_kc85_settings_check_button_toggled(GtkToggleButton *togglebutton, gpointer user_data); static void on_kc85_d004_changed(GtkComboBox *combobox, gpointer user_data); static void on_kc85_f8_rom_changed(GtkComboBox *combobox, gpointer user_data); static void on_kc85_busdrivers_changed(GtkSpinButton *spin_button, gpointer user_data); static void on_rom_changed(GtkComboBoxEntry *comboboxentry, gpointer user_data); static void on_rom_open_clicked(GtkButton *button, gpointer user_data); static void on_roms_settings_check_button_toggled(GtkToggleButton *togglebutton, gpointer user_data); static void on_network_settings_check_button_toggled(GtkToggleButton *togglebutton, gpointer user_data); static void on_network_changed(GtkEntry *entry, gpointer user_data); static gboolean tree_model_foreach_func_delete(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data); public: OptionsWindow(const char *ui_xml_file); virtual ~OptionsWindow(void); void save(void); void reject(void); }; #endif /* __ui_gtk_options_h */ KCemu-0.5.1/include/ui/gtk/ui_gtk1.h0000644001050700006200000000204211345001576016546 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_ui_gtk1_h #define __ui_ui_gtk1_h #include "ui/gtk/ui_gtk_base.h" class UI_Gtk1 : public UI_Gtk_Base { public: UI_Gtk1(void); virtual ~UI_Gtk1(void); }; #endif /* __ui_ui_gtk1_h */ KCemu-0.5.1/include/ui/gtk/window.h0000644001050700006200000000457311345001576016525 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_window_h #define __ui_gtk_window_h #include #include #include "cmd/cmd.h" #include "ui/window.h" using namespace std; class UI_Gtk_Window : public UI_Window { private: bool _visible; CMD_Args *_help_args; GtkBuilder *_gtk_builder; static bool _static_init; static string _icon_path; static string _image_path; GtkSettingsValue _setting_gtk_can_change_accels; private: void static_init(void); protected: GtkWidget *_window; virtual void init(void) = 0; GdkPixbuf * get_pixbuf(string path); GdkPixbuf * get_icon(const char *name); GdkPixbuf * get_image(const char *name); GtkCellRenderer * add_text_renderer(GtkTreeView *treeview, GtkTreeViewColumn *, const char *title, ...); GtkCellRenderer * add_icon_renderer(GtkTreeView *treeview, GtkTreeViewColumn *, const char *title, ...); GtkCellRenderer * bind_list_model_column(GtkComboBox *combobox, int column, ...); static void sf_help(GtkWidget *widget, gpointer data); static void sf_help_recursive(GtkWidget *widget, gpointer data); public: UI_Gtk_Window(void); UI_Gtk_Window(const char *ui_xml_file); virtual ~UI_Gtk_Window(void); void show(void); void hide(void); void toggle(void); bool is_visible(void); GtkWidget * get_window(void); GtkWidget * get_widget(const char *name); GtkWidget * get_widget(const char *name, int nr); GtkWidget * get_widget_or_null(const char *name); void init_dialog(const char *close_button_func, const char *help_topic); }; #endif /* __ui_gtk_window_h */ KCemu-0.5.1/include/ui/gtk/thanks.h0000644001050700006200000000225711345001576016503 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_thanks_h #define __ui_gtk_thanks_h #include #include "kc/system.h" #include "ui/gtk/window.h" class ThanksWindow : public UI_Gtk_Window { private: CMD *_cmd; protected: void init(void); public: ThanksWindow(const char *ui_xml_file); virtual ~ThanksWindow(void); }; #endif /* __ui_gtk_thanks_h */ KCemu-0.5.1/include/ui/gtk/cmd.h0000644001050700006200000000326411345001576015755 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_cmd_h #define __ui_gtk_cmd_h #include #include "kc/system.h" #include "cmd/cmd.h" /* * cmd_exec as GTK+ signal function */ void cmd_exec_sf(GtkWidget *widget, gpointer data); /* * cmd_exec as GTK+ event function returning true * (e.g. for "delete_event") */ int cmd_exec_sft(GtkWidget *widget, GdkEvent *event, gpointer data); /* * cmd_exec for toggle buttons * this functions calls the command only if the button is pressed */ void cmd_exec_sftb(GtkWidget *widget, gpointer data); /* * cmd_exec as GTK+ menu callback */ void cmd_exec_mc(gpointer data, guint action, GtkWidget *widget); /* * cmd_exec as GTK+ menu callback, with data being an array of * callback names and action the index to this array. */ void cmd_exec_mci(gpointer data, guint action, GtkWidget *widget); #endif /* __ui_gtk_cmd_h */ KCemu-0.5.1/include/ui/gtk/dirac.h0000644001050700006200000000335511345001576016275 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_dirac_h #define __ui_gtk_dirac_h #include "kc/config.h" #ifdef HAVE_LIBDIRAC #include #include #include "kc/system.h" #include "ui/gtk/videoenc.h" class DiracVideoEncoder : public VideoEncoder { private: typedef struct { int y, u, v; } color_t; private: FILE *_f; color_t _col[256]; byte_t *_buf; byte_t *_image; int _image_size; dirac_encoder_context_t _context; dirac_encoder_t *_encoder; protected: bool encode_loop(void); public: DiracVideoEncoder(void); virtual ~DiracVideoEncoder(void); virtual bool init(const char *filename, int width, int height, int fps_den, double quality); virtual void allocate_color_rgb(int idx, int r, int g, int b); virtual bool encode(byte_t *image, byte_t *dirty); virtual void close(void); }; #endif /* HAVE_LIBDIRAC */ #endif /* __ui_gtk_dirac_h */ KCemu-0.5.1/include/ui/gtk/tape.h0000644001050700006200000000654211345001576016145 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_tape_h #define __ui_gtk_tape_h #include #include "kc/system.h" #include "ui/tape.h" #include "ui/gtk/window.h" class TapeWindow : public UI_Gtk_Window, public TapeInterface { private: enum { TREEVIEW_COLUMN_NAME, TREEVIEW_COLUMN_TYPE, TREEVIEW_COLUMN_LOAD, TREEVIEW_COLUMN_START, TREEVIEW_COLUMN_SIZE, TREEVIEW_N_COLUMNS }; struct { GtkWidget *treeview; GtkWidget *b_play; GtkWidget *b_stop; GtkWidget *b_record; GtkWidget *b_next; GtkWidget *b_prev; GtkWidget *b_attach; GtkWidget *b_detach; GtkListStore *list_store; GtkAdjustment *scale_adj; GtkWidget *b_close; GtkWidget *vbox; GtkWidget *combo_hbox; GtkWidget *combo_label; GtkWidget *combo; GtkWidget *sw; GtkWidget *hbox; GtkWidget *led_power; GtkWidget *scale; GtkWidget *bbox; GtkWidget *m_run; GtkWidget *m_load; GtkWidget *m_edit; GtkWidget *m_delete; GtkWidget *m_rename; GtkWidget *m_export; GtkWidget *m_wav; GtkWidget *menu; } _w; int _nr_of_files; int _selected; int _play; int _record; int _power; double _scale_value; GdkColormap *_colormap; GdkColor _col[4]; protected: static void sf_power_expose(TapeWindow *self); static void sf_tape_scale_changed(GtkAdjustment *adjustment, gpointer data); static void sf_tape_button(GtkWidget *widget, int x); static int sf_tape_button_press(GtkWidget *widget, GdkEventButton *event, gpointer data); static void sf_tape_file_select(GtkTreeSelection *selection, gpointer data); static void sf_tape_archive_select(GtkWidget *widget, gpointer data); void init(void); void allocate_colors(void); void set_selected_index(GtkTreeSelection *selection); virtual void clear_list(void); public: TapeWindow(const char *ui_xml_file); virtual ~TapeWindow(void); virtual void stop(void); virtual void attached(const char *name); /* * TapeInterface */ virtual void tapeAttach(const char *name); virtual void tapeDetach(void); virtual void tapePower(bool power); virtual void tapeProgress(int val); virtual void tapeNext(void); virtual void tapeAddFile(const char *name, long load, long start, long size, unsigned char type); virtual void tapeRemoveFile(int idx); virtual int tapeGetSelected(void); virtual const char * tapeGetName(int idx); virtual void tapeAddArchive(const char *name); }; #endif /* __ui_gtk_tape_h */ KCemu-0.5.1/include/ui/gtk/dialog.h0000644001050700006200000000506611345001576016453 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_dialog_h #define __ui_gtk_dialog_h #include #include "kc/system.h" #include "ui/gtk/window.h" #include "cmd/cmd.h" class DialogWindow : public UI_Gtk_Window, public CMD { private: CMD_Args *_args; int _dialog_result; gint _delete_handler_id; struct { GtkWidget *button_ok; GtkWidget *button_cancel; GtkWidget *button_yes; GtkWidget *button_no; GtkWidget *image_info; GtkWidget *image_question; } _w; public: DialogWindow(const char *ui_xml_file); virtual ~DialogWindow(void); protected: void init(void); void init_ok(const char *title, const char *text); void init_yes_no(const char *title, const char *text); void init_yes_no_cancel(const char *title, const char *text); void init_misc(const char *title, const char *text, GCallback callback); void show_buttons(bool button_ok, bool button_cancel, bool button_yes, bool button_no); static void ok(GtkWidget */*widget*/, gpointer data); static void no(GtkWidget */*widget*/, gpointer data); static void yes(GtkWidget */*widget*/, gpointer data); static void cancel(GtkWidget */*widget*/, gpointer data); static int delete_event_ok(GtkWidget *widget, GdkEvent *event, gpointer data); static int delete_event_yes_no(GtkWidget *widget, GdkEvent *event, gpointer data); static int delete_event_yes_no_cancel(GtkWidget *widget, GdkEvent *event, gpointer data); public: void execute(CMD_Args *args, CMD_Context context); void show_dialog_ok(const char *title, const char *text); void show_dialog_yes_no(const char *title, const char *text); void show_dialog_yes_no_cancel(const char *title, const char *text); int get_dialog_result(void); }; #endif /* __ui_gtk_dialog_h */ KCemu-0.5.1/include/ui/gtk/util.h0000644001050700006200000000164411345001576016167 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_util_h #define __ui_gtk_util_h #endif /* __ui_gtk_util_h */ KCemu-0.5.1/include/ui/gtk/screenshot.h0000644001050700006200000000512711345001576017367 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_screenshot_h #define __ui_gtk_screenshot_h #include #include #include "kc/system.h" #include "ui/gtk/ui_gtk.h" #include "ui/gtk/window.h" class ScreenshotWindow : public UI_Gtk_Window { private: struct { GtkWidget *canvas; GtkWidget *crop_left_spinbutton; GtkWidget *crop_right_spinbutton; GtkWidget *crop_top_spinbutton; GtkWidget *crop_bottom_spinbutton; GtkWidget *button_save; GtkWidget *button_screenshot; GtkWidget *format_combobox; GtkWidget *filebutton; GtkListStore *store; guint timeout_id; } _w; int _width; int _height; double _offset; GdkPixbuf *_pixbuf; UI_Gtk *_ui; CMD *_cmd_screenshot_toggle; protected: void init(void); void expose(GdkEventExpose *event); void save(void); void screenshot(void); GtkListStore * get_pixbuf_formats(void); void configure_spinbutton(GtkWidget *spinbutton1, GtkWidget *spinbutton2, double range); static void on_save_clicked(GtkButton *button, gpointer user_data); static void on_screenshot_clicked(GtkButton *button, gpointer user_data); static void on_spinbutton_left_changed(GtkSpinButton *spinbutton, gpointer user_data); static void on_spinbutton_right_changed(GtkSpinButton *spinbutton, gpointer user_data); static void on_spinbutton_top_changed(GtkSpinButton *spinbutton, gpointer user_data); static void on_spinbutton_bottom_changed(GtkSpinButton *spinbutton, gpointer user_data); static void on_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer data); static gboolean timeout_handler(ScreenshotWindow *self); public: ScreenshotWindow(const char *ui_xml_file, UI_Gtk *ui); virtual ~ScreenshotWindow(void); void toggle(void); }; #endif /* __ui_gtk_screenshot_h */ KCemu-0.5.1/include/ui/gtk/ui_gtk8.h0000644001050700006200000000203711345001576016561 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_ui_gtk8_h #define __ui_ui_gtk8_h #include "ui/gtk/ui_gtk_base.h" class UI_Gtk8 : public UI_Gtk_Base { public: UI_Gtk8(void); virtual ~UI_Gtk8(void); }; #endif /* __ui_ui_gtk8_h */ KCemu-0.5.1/include/ui/gtk/gif.h0000644001050700006200000000331311345001576015752 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_gif_h #define __ui_gtk_gif_h #include "kc/config.h" #ifdef HAVE_LIBGIF #include #include #include "kc/system.h" #include "ui/gtk/videoenc.h" class GifVideoEncoder : public VideoEncoder { private: typedef struct { int r, g, b; } color_t; enum { MAX_FRAME_DELAY = 65535 }; int _width; int _height; int _fps_den; int _frame_delay; GifFileType *_gif; ColorMapObject *_cmap; byte_t *_buf; protected: virtual bool flush_buffer(byte_t *buf, int delay); public: GifVideoEncoder(void); virtual ~GifVideoEncoder(void); virtual bool init(const char *filename, int width, int height, int fps_den, double quality); virtual void allocate_color_rgb(int idx, int r, int g, int b); virtual bool encode(byte_t *image, byte_t *dirty); virtual void close(void); }; #endif /* HAVE_LIBGIF */ #endif /* __ui_gtk_gif_h */ KCemu-0.5.1/include/ui/gtk/keyboard.h0000644001050700006200000000504211345001576017006 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_keyboard_h #define __ui_gtk_keyboard_h #include #include "kc/system.h" #include "ui/gtk/window.h" struct _key_struct { const char *key; int key_val; GdkRectangle rect; GdkRegion *region; const char *info; }; class KeyboardWindow : public UI_Gtk_Window { private: struct { GtkWidget *notebook; GtkWidget *eventbox; GtkWidget *canvas; GtkWidget *not_configured_label; GtkWidget *label_info; } _w; GdkPixbuf *_pixbuf_normal; GdkPixbuf *_pixbuf_pressed; gboolean _key_active; gboolean _has_info; gint _delay; struct _key_struct _keys[256]; struct _key_struct *_key_pressed; CMD *_cmd; protected: void init(void); void init_key_regions(void); int get_key_val(const char *key); void draw_key_normal(struct _key_struct *key); void draw_key_pressed(struct _key_struct *key); GdkPixbuf * load_pixmap(const char *keymap_dir, char *filename_buffer); void check_regions(GdkEventMotion *event); static gboolean timeout_callback(gpointer data); static gboolean sf_expose(GtkWidget *widget, GdkEventExpose *event, gpointer data); static gboolean sf_motion_notify(GtkWidget *widget, GdkEventMotion *event, gpointer data); static gboolean sf_button_press(GtkWidget *widget, GdkEventButton *event, gpointer data); static gboolean sf_button_release(GtkWidget *widget, GdkEventButton *event, gpointer data); static gboolean sf_key_press(GtkWidget *widget, GdkEventKey *event, gpointer data); static gboolean sf_key_release(GtkWidget *widget, GdkEventKey *event, gpointer data); public: KeyboardWindow(const char *ui_xml_file); virtual ~KeyboardWindow(void); }; #endif /* __ui_gtk_keyboard_h */ KCemu-0.5.1/include/ui/gtk/ui_gtk3.h0000644001050700006200000000240011345001576016546 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_ui_gtk3_h #define __ui_ui_gtk3_h #include "ui/gtk/ui_gtk_base.h" #include "ui/generic/scanline.h" #include "ui/generic/memaccess.h" class UI_Gtk3 : public UI_Gtk_Base { private: Scanline _scanline; MemAccess _memaccess; public: UI_Gtk3(void); virtual ~UI_Gtk3(void); virtual Scanline * get_scanline(void); virtual MemAccess * get_mem_access(void); }; #endif /* __ui_ui_gtk3_h */ KCemu-0.5.1/include/ui/gtk/ui_gtk_c80.h0000644001050700006200000000206411345001576017143 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_ui_gtk_c80_h #define __ui_ui_gtk_c80_h #include "ui/gtk/ui_gtk_base.h" class UI_Gtk_C80 : public UI_Gtk_Base { public: UI_Gtk_C80(void); virtual ~UI_Gtk_C80(void); }; #endif /* __ui_ui_gtk_c80_h */ KCemu-0.5.1/include/ui/gtk/ui_gtk_vcs80.h0000644001050700006200000000210011345001576017503 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_ui_gtk_vcs80_h #define __ui_ui_gtk_vcs80_h #include "ui/gtk/ui_gtk_base.h" class UI_Gtk_VCS80 : public UI_Gtk_Base { public: UI_Gtk_VCS80(void); virtual ~UI_Gtk_VCS80(void); }; #endif /* __ui_ui_gtk_vcs80_h */ KCemu-0.5.1/include/ui/gtk/help.h0000644001050700006200000001122611345001576016137 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * Parts of this file are taken from the gtk demos source code provided * as example for programming with GTK - The GIMP Toolkit. * * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_help_h #define __ui_gtk_help_h #include #include "kc/system.h" #include "ui/gtk/window.h" class HelpWindow : public UI_Gtk_Window { private: struct { GtkWidget *text_view; GtkWidget *button_back; GtkWidget *button_next; GtkTextTag *tag_bold; GtkTextTag *tag_italic; GtkTextTag *tag_underline; GtkTextTag *tag_center; GtkTextTag *tag_monospace; GtkTextTag *tag_size[7]; GtkTextBuffer *text_buffer; } _w; GList *_history; GList *_history_ptr; enum { PARSE_FLAGS_DEFAULT = 0, PARSE_FLAGS_BOLD = (1 << 0), PARSE_FLAGS_ITALIC = (1 << 1), PARSE_FLAGS_UNDERLINE = (1 << 2), PARSE_FLAGS_CENTER = (1 << 3), PARSE_FLAGS_MONOSPACE = (1 << 4), }; typedef enum { PARSE_STATE_NONE = 0, PARSE_STATE_TEXT = 1, PARSE_STATE_LINK = 2, } parse_state_t; GtkTextIter iter; GMarkupParser parser; int parse_flags; int text_size; char *link_name; parse_state_t parse_state; GdkCursor *_hand_cursor; GdkCursor *_regular_cursor; gboolean _hovering_over_link; const char *_delayed_help_topic; gboolean _realized; CMD *_cmd; protected: void init(void); void init2(void); void load_text(void); void follow_if_link(GtkWidget *text_view, GtkTextIter *iter); void set_cursor_if_appropriate (GtkTextView *text_view, gint x, gint y); void insert_ref(const char *name); void insert_image(const char *name); void insert_link(const char *text, const char *ref); void insert_text(const char *text, GtkTextTag *tag); void history_next(void); void history_back(void); static gboolean context_help_button_press(GtkWidget *widget, GdkEventButton *bevent, gpointer data); static void sf_button_back(GtkButton *button, gpointer data); static void sf_button_forward(GtkButton *button, gpointer data); static void sf_button_home(GtkButton *button, gpointer data); static void sf_button_index(GtkButton *button, gpointer data); static void sf_button_refresh(GtkButton *button, gpointer data); static gboolean sf_key_press_event(GtkWidget *text_view, GdkEventKey *event, gpointer data); static gboolean sf_visibility_notify_event(GtkWidget *text_view, GdkEventVisibility *event, gpointer data); static gboolean sf_motion_notify_event(GtkWidget *text_view, GdkEventMotion *event, gpointer data); static gboolean sf_event_after(GtkWidget *text_view, GdkEvent *ev, gpointer data); /* * parser callback functions */ static void sf_parser_start_element_handler(GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer user_data, GError **error); static void sf_parser_end_element_handler(GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error); static void sf_parser_text_handler(GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error); static void sf_parser_passthrough_handler(GMarkupParseContext *context, const gchar *passthrough_text, gsize text_len, gpointer user_data, GError **error); static void sf_parser_error_handler(GMarkupParseContext *context,GError *error, gpointer user_data); static const gchar * get_attribute(const gchar *name, const gchar **attribute_names, const gchar **attribute_values); public: HelpWindow(const char *ui_xml_file); virtual ~HelpWindow(void); gboolean scroll_to(const char *topic, gboolean update_history); static gboolean context_help_idle_start(gpointer widget); }; #endif /* __ui_gtk_help_h */ KCemu-0.5.1/include/ui/gtk/vdip.h0000644001050700006200000000307711345001576016156 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_vdip_h #define __ui_gtk_vdip_h #include #include "kc/system.h" #include "ui/gtk/window.h" class VDIPWindow : public UI_Gtk_Window { private: struct { GtkWidget *vbox; GtkWidget *table; GtkWidget *label[2]; GtkWidget *combo[2]; GtkWidget *browse[2]; GtkWidget *eject[2]; GtkWidget *separator; GtkWidget *close; guint combo_signal_id[2]; } _w; CMD *_cmd_attach; CMD *_cmd_update; CMD *_cmd_window_toggle; protected: void init(void); static void sf_vdip_attach(GtkWidget *widget, gpointer data); public: VDIPWindow(const char *ui_xml_file); virtual ~VDIPWindow(void); virtual void set_name(int idx, const char *name); }; #endif /* __ui_gtk_vdip_h */ KCemu-0.5.1/include/ui/gtk/about.h0000644001050700006200000000230411345001576016316 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_about_h #define __ui_gtk_about_h #include #include "kc/system.h" #include "ui/gtk/window.h" class AboutWindow : public UI_Gtk_Window { private: static char APP_NAME[]; CMD *_cmd; protected: void init(void); public: AboutWindow(const char *ui_xml_file); virtual ~AboutWindow(void); }; #endif /* __ui_gtk_about_h */ KCemu-0.5.1/include/ui/gtk/selector.h0000644001050700006200000000675711345001576017044 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_gtk_selector_h #define __ui_gtk_selector_h #include "kc/system.h" #include "kc/prefs/profile.h" #include "ui/gtk/window.h" using namespace std; class ProfileSelectorWindow : public UI_Gtk_Window { private: enum { ICONVIEW_PIXBUF_COLUMN, ICONVIEW_TEXT_COLUMN, ICONVIEW_TOOLTIP_COLUMN, ICONVIEW_DATA_COLUMN, ICONVIEW_N_COLUMNS }; enum { TREEVIEW_PIXBUF_COLUMN, TREEVIEW_TEXT_COLUMN, TREEVIEW_COMMENT_COLUMN, TREEVIEW_DATA_COLUMN, TREEVIEW_ALIGN_COLUMN, TREEVIEW_WEIGHT_COLUMN, TREEVIEW_WEIGHT_SET_COLUMN, TREEVIEW_N_COLUMNS }; struct { GtkIconView *iconview; GtkTreeView *treeview; GtkExpander *expander_system_profiles; GtkExpander *expander_user_profiles; GtkButton *button_ok; GtkButton *button_quit; GtkListStore *liststore_iconview; GtkTreeStore *treestore_treeview; } _w; CMD *_cmd; string _selected_profile; int _nr_of_user_profiles; protected: void init(void); GtkListStore * get_iconview_model(void); GtkTreeStore * get_treeview_model(void); void show(void); void close(void); void cancel(void); void select(const char *profile); void select(GtkTreeModel *model, GtkTreePath *path, int column); void iconview_model_add(GtkListStore *store, GdkPixbuf *pixbuf, const char *text, const char *tooltip, const char *profile); void treeview_model_add(GtkTreeStore *store, GdkPixbuf *pixbuf, const char *text, const char *comment, const char *profile, GtkTreeIter *iter, GtkTreeIter *parent); static void on_dialog_ok(GtkWidget *widget, gpointer user_data); static void on_dialog_cancel(GtkWidget *widget, gpointer user_data); static void on_dialog_quit(GtkWidget *widget, gpointer user_data); static void on_edit_button_clicked(GtkButton *button, gpointer user_data); static void on_iconview_selection_changed(GtkIconView *iconview, gpointer user_data); static void on_iconview_item_activated(GtkIconView *iconview, GtkTreePath *path, gpointer user_data); static void on_tree_selection_changed(GtkTreeSelection *selection, gpointer user_data); static void on_tree_row_activated(GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data); static gboolean on_window_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data); public: ProfileSelectorWindow(const char *ui_xml_file); virtual ~ProfileSelectorWindow(void); char * get_selected_profile(void); }; #endif /* __ui_gtk_selector_h */ KCemu-0.5.1/include/ui/gtk/Makefile.in0000644001050700006200000003224411412404771017105 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/ui/gtk DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ ui_gtk.h \ ui_gtk_base.h \ ui_gtk0.h \ ui_gtk1.h \ ui_gtk3.h \ ui_gtk4.h \ ui_gtk6.h \ ui_gtk8.h \ ui_gtk9.h \ ui_gtk_kramermc.h \ ui_gtk_muglerpc.h \ ui_gtk_vcs80.h \ ui_gtk_c80.h \ cmd.h \ cmds.h \ util.h \ main.h \ disk.h \ vdip.h \ help.h \ tape.h \ tapeadd.h \ info.h \ debug.h \ about.h \ thanks.h \ color.h \ module.h \ keyboard.h \ options.h \ selector.h \ screenshot.h \ copying.h \ savemem.h \ window.h \ fbrowse.h \ dialog.h \ image.h \ hedit.h \ wav.h \ plotter.h \ video.h \ videoenc.h \ theora.h \ gif.h \ xvid.h \ dirac.h \ schro.h \ ffmpeg.h \ vnc.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/ui/gtk/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/ui/gtk/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/ui/font0.h0000644001050700006200000004072211345001576015453 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_font0_h #define __ui_font0_h #include "kc/system.h" static byte_t __font[] = { 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x00 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x01 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x02 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x03 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x04 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x05 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x06 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x07 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x08 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x09 */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0a */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0b */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0c */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0d */ 0x00, 0x00, 0x18, 0x24, 0x24, 0x18, 0x24, 0x42, /* 0x0e */ 0xdb, 0xa5, 0x81, 0xff, 0x24, 0x24, 0x24, 0x42, /* 0x0f */ 0x08, 0x34, 0x42, 0x81, 0x91, 0x69, 0x09, 0x31, /* 0x10 */ 0x42, 0x7e, 0x81, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x11 */ 0x18, 0x24, 0x42, 0x99, 0xbd, 0x99, 0x42, 0x24, /* 0x12 */ 0x7e, 0x42, 0x99, 0xe7, 0x00, 0x00, 0x00, 0x00, /* 0x13 */ 0x18, 0xdb, 0xc3, 0x18, 0x99, 0xe7, 0x81, 0x42, /* 0x14 */ 0x18, 0x24, 0x18, 0xc3, 0xbd, 0x81, 0x81, 0x42, /* 0x15 */ 0x24, 0x7e, 0x81, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x16 */ 0x00, 0x00, 0x18, 0x3c, 0x3c, 0x18, 0x3c, 0x7e, /* 0x17 */ 0xdb, 0xff, 0xff, 0xff, 0x3c, 0x3c, 0x3c, 0x7e, /* 0x18 */ 0x08, 0x3c, 0x7e, 0xff, 0xff, 0x6f, 0x0f, 0x3f, /* 0x19 */ 0x7e, 0x7e, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x1a */ 0x18, 0x3c, 0x7e, 0xe7, 0xc3, 0xe7, 0x7e, 0x3c, /* 0x1b */ 0x7e, 0x7e, 0xff, 0xe7, 0x00, 0x00, 0x00, 0x00, /* 0x1c */ 0x18, 0xdb, 0xc3, 0x18, 0x99, 0xff, 0xff, 0x7e, /* 0x1d */ 0x18, 0x3c, 0x18, 0xc3, 0xff, 0xff, 0xff, 0x7e, /* 0x1e */ 0x3c, 0x3c, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x1f */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x20 */ 0x10, 0x10, 0x10, 0x10, 0x00, 0x00, 0x10, 0x00, /* 0x21 */ 0x28, 0x28, 0x28, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x22 */ 0x24, 0x7e, 0x24, 0x24, 0x24, 0x7e, 0x24, 0x00, /* 0x23 */ 0x10, 0x3c, 0x50, 0x38, 0x14, 0x78, 0x10, 0x00, /* 0x24 */ 0x60, 0x64, 0x08, 0x10, 0x20, 0x4c, 0x0c, 0x00, /* 0x25 */ 0x10, 0x28, 0x28, 0x30, 0x54, 0x48, 0x34, 0x00, /* 0x26 */ 0x10, 0x10, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x27 */ 0x08, 0x10, 0x20, 0x20, 0x20, 0x10, 0x08, 0x00, /* 0x28 */ 0x20, 0x10, 0x08, 0x08, 0x08, 0x10, 0x20, 0x00, /* 0x29 */ 0x00, 0x10, 0x54, 0x38, 0x54, 0x10, 0x00, 0x00, /* 0x2a */ 0x00, 0x10, 0x10, 0x7c, 0x10, 0x10, 0x00, 0x00, /* 0x2b */ 0x00, 0x00, 0x00, 0x00, 0x10, 0x10, 0x20, 0x00, /* 0x2c */ 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, 0x00, 0x00, /* 0x2d */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, /* 0x2e */ 0x00, 0x04, 0x08, 0x10, 0x20, 0x40, 0x00, 0x00, /* 0x2f */ 0x38, 0x44, 0x44, 0x54, 0x44, 0x44, 0x38, 0x00, /* 0x30 */ 0x10, 0x30, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, /* 0x31 */ 0x38, 0x44, 0x04, 0x08, 0x10, 0x20, 0x7c, 0x00, /* 0x32 */ 0x7c, 0x08, 0x10, 0x08, 0x04, 0x44, 0x38, 0x00, /* 0x33 */ 0x08, 0x18, 0x28, 0x48, 0x7c, 0x08, 0x08, 0x00, /* 0x34 */ 0x7c, 0x40, 0x78, 0x04, 0x04, 0x44, 0x38, 0x00, /* 0x35 */ 0x18, 0x20, 0x40, 0x78, 0x44, 0x44, 0x38, 0x00, /* 0x36 */ 0x7c, 0x04, 0x08, 0x10, 0x20, 0x20, 0x20, 0x00, /* 0x37 */ 0x38, 0x44, 0x44, 0x38, 0x44, 0x44, 0x38, 0x00, /* 0x38 */ 0x38, 0x44, 0x44, 0x3c, 0x04, 0x08, 0x30, 0x00, /* 0x39 */ 0x00, 0x30, 0x30, 0x00, 0x30, 0x30, 0x00, 0x00, /* 0x3a */ 0x00, 0x00, 0x10, 0x00, 0x10, 0x10, 0x20, 0x00, /* 0x3b */ 0x08, 0x10, 0x20, 0x40, 0x20, 0x10, 0x08, 0x00, /* 0x3c */ 0x00, 0x00, 0x7c, 0x00, 0x7c, 0x00, 0x00, 0x00, /* 0x3d */ 0x20, 0x10, 0x08, 0x04, 0x08, 0x10, 0x20, 0x00, /* 0x3e */ 0x38, 0x44, 0x04, 0x08, 0x10, 0x00, 0x10, 0x00, /* 0x3f */ 0x38, 0x44, 0x5c, 0x54, 0x5c, 0x40, 0x3c, 0x00, /* 0x40 */ 0x38, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x00, /* 0x41 */ 0x78, 0x24, 0x24, 0x38, 0x24, 0x24, 0x78, 0x00, /* 0x42 */ 0x38, 0x44, 0x40, 0x40, 0x40, 0x44, 0x38, 0x00, /* 0x43 */ 0x78, 0x24, 0x24, 0x24, 0x24, 0x24, 0x78, 0x00, /* 0x44 */ 0x7c, 0x40, 0x40, 0x78, 0x40, 0x40, 0x7c, 0x00, /* 0x45 */ 0x7c, 0x40, 0x40, 0x78, 0x40, 0x40, 0x40, 0x00, /* 0x46 */ 0x38, 0x44, 0x40, 0x40, 0x4c, 0x44, 0x3c, 0x00, /* 0x47 */ 0x44, 0x44, 0x44, 0x7c, 0x44, 0x44, 0x44, 0x00, /* 0x48 */ 0x38, 0x10, 0x10, 0x10, 0x10, 0x10, 0x38, 0x00, /* 0x49 */ 0x1c, 0x08, 0x08, 0x08, 0x08, 0x48, 0x30, 0x00, /* 0x4a */ 0x44, 0x48, 0x50, 0x60, 0x50, 0x48, 0x44, 0x00, /* 0x4b */ 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x7c, 0x00, /* 0x4c */ 0x44, 0x6c, 0x54, 0x54, 0x44, 0x44, 0x44, 0x00, /* 0x4d */ 0x44, 0x44, 0x64, 0x54, 0x4c, 0x44, 0x44, 0x00, /* 0x4e */ 0x38, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, /* 0x4f */ 0x78, 0x44, 0x44, 0x78, 0x40, 0x40, 0x40, 0x00, /* 0x50 */ 0x38, 0x44, 0x44, 0x44, 0x54, 0x48, 0x34, 0x00, /* 0x51 */ 0x78, 0x44, 0x44, 0x78, 0x50, 0x48, 0x44, 0x00, /* 0x52 */ 0x3c, 0x40, 0x40, 0x38, 0x04, 0x04, 0x78, 0x00, /* 0x53 */ 0x7c, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, /* 0x54 */ 0x44, 0x44, 0x44, 0x44, 0x44, 0x44, 0x38, 0x00, /* 0x55 */ 0x44, 0x44, 0x44, 0x44, 0x44, 0x28, 0x10, 0x00, /* 0x56 */ 0x44, 0x44, 0x44, 0x54, 0x54, 0x6c, 0x44, 0x00, /* 0x57 */ 0x44, 0x44, 0x28, 0x10, 0x28, 0x44, 0x44, 0x00, /* 0x58 */ 0x44, 0x44, 0x44, 0x28, 0x10, 0x10, 0x10, 0x00, /* 0x59 */ 0x7c, 0x04, 0x08, 0x10, 0x20, 0x40, 0x7c, 0x00, /* 0x5a */ 0x38, 0x20, 0x20, 0x20, 0x20, 0x20, 0x38, 0x00, /* 0x5b */ 0x00, 0x40, 0x20, 0x10, 0x08, 0x04, 0x00, 0x00, /* 0x5c */ 0x38, 0x08, 0x08, 0x08, 0x08, 0x08, 0x38, 0x00, /* 0x5d */ 0x10, 0x28, 0x44, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x5e */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x5f */ 0x00, 0x20, 0x10, 0x08, 0x00, 0x00, 0x00, 0x00, /* 0x60 */ 0x00, 0x00, 0x34, 0x4c, 0x44, 0x44, 0x3a, 0x00, /* 0x61 */ 0x40, 0x40, 0x58, 0x64, 0x44, 0x44, 0x78, 0x00, /* 0x62 */ 0x00, 0x00, 0x38, 0x44, 0x40, 0x44, 0x38, 0x00, /* 0x63 */ 0x04, 0x04, 0x34, 0x4c, 0x44, 0x44, 0x3a, 0x00, /* 0x64 */ 0x00, 0x00, 0x38, 0x44, 0x7c, 0x40, 0x38, 0x00, /* 0x65 */ 0x08, 0x10, 0x38, 0x10, 0x10, 0x10, 0x10, 0x00, /* 0x66 */ 0x00, 0x00, 0x34, 0x4c, 0x44, 0x3c, 0x04, 0x38, /* 0x67 */ 0x40, 0x40, 0x58, 0x64, 0x44, 0x44, 0x44, 0x00, /* 0x68 */ 0x10, 0x00, 0x10, 0x10, 0x10, 0x10, 0x08, 0x00, /* 0x69 */ 0x10, 0x00, 0x10, 0x10, 0x10, 0x10, 0x10, 0x20, /* 0x6a */ 0x40, 0x40, 0x48, 0x50, 0x70, 0x48, 0x44, 0x00, /* 0x6b */ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x08, 0x00, /* 0x6c */ 0x00, 0x00, 0x68, 0x54, 0x54, 0x54, 0x54, 0x00, /* 0x6d */ 0x00, 0x00, 0x58, 0x64, 0x44, 0x44, 0x44, 0x00, /* 0x6e */ 0x00, 0x00, 0x38, 0x44, 0x44, 0x44, 0x38, 0x00, /* 0x6f */ 0x00, 0x00, 0x58, 0x64, 0x44, 0x78, 0x40, 0x40, /* 0x70 */ 0x00, 0x00, 0x34, 0x4c, 0x44, 0x3c, 0x04, 0x04, /* 0x71 */ 0x00, 0x00, 0x58, 0x64, 0x40, 0x40, 0x40, 0x00, /* 0x72 */ 0x00, 0x00, 0x38, 0x40, 0x38, 0x04, 0x78, 0x00, /* 0x73 */ 0x10, 0x10, 0x38, 0x10, 0x10, 0x10, 0x08, 0x00, /* 0x74 */ 0x00, 0x00, 0x44, 0x44, 0x44, 0x4c, 0x34, 0x00, /* 0x75 */ 0x00, 0x00, 0x44, 0x44, 0x44, 0x28, 0x10, 0x00, /* 0x76 */ 0x00, 0x00, 0x54, 0x54, 0x54, 0x54, 0x28, 0x00, /* 0x77 */ 0x00, 0x00, 0x44, 0x28, 0x10, 0x28, 0x44, 0x00, /* 0x78 */ 0x00, 0x00, 0x44, 0x44, 0x44, 0x3c, 0x04, 0x38, /* 0x79 */ 0x00, 0x00, 0x7c, 0x08, 0x10, 0x20, 0x7c, 0x00, /* 0x7a */ 0x08, 0x10, 0x10, 0x20, 0x10, 0x10, 0x08, 0x00, /* 0x7b */ 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x10, 0x00, /* 0x7c */ 0x20, 0x10, 0x10, 0x08, 0x10, 0x10, 0x20, 0x00, /* 0x7d */ 0x00, 0x00, 0x00, 0x32, 0x4c, 0x00, 0x00, 0x00, /* 0x7e */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x7f */ 0xc0, 0x20, 0x10, 0x10, 0x10, 0x10, 0x20, 0xc0, /* 0x80 */ 0x03, 0x04, 0x08, 0x08, 0x08, 0x08, 0x04, 0x03, /* 0x81 */ 0x81, 0x81, 0x42, 0x3c, 0x00, 0x00, 0x00, 0x00, /* 0x82 */ 0x00, 0x00, 0x00, 0x00, 0x3c, 0x42, 0x81, 0x81, /* 0x83 */ 0x10, 0x10, 0x20, 0xc0, 0x00, 0x00, 0x00, 0x00, /* 0x84 */ 0x08, 0x08, 0x04, 0x03, 0x00, 0x00, 0x00, 0x00, /* 0x85 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x04, 0x08, 0x08, /* 0x86 */ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x20, 0x10, 0x10, /* 0x87 */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0xff, /* 0x88 */ 0xff, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, /* 0x89 */ 0x00, 0x10, 0x28, 0x44, 0x82, 0x44, 0x28, 0x10, /* 0x8a */ 0xff, 0xef, 0xc7, 0x83, 0x01, 0x83, 0xc7, 0xef, /* 0x8b */ 0x3c, 0x42, 0x81, 0x81, 0x81, 0x81, 0x42, 0x3c, /* 0x8c */ 0xc3, 0x81, 0x00, 0x00, 0x00, 0x00, 0x81, 0xc3, /* 0x8d */ 0xff, 0xfe, 0xfc, 0xf8, 0xf0, 0xe0, 0xc0, 0x80, /* 0x8e */ 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe, 0xff, /* 0x8f */ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, /* 0x90 */ 0x80, 0x40, 0x20, 0x10, 0x08, 0x04, 0x02, 0x01, /* 0x91 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x0c, 0x30, 0xc0, /* 0x92 */ 0x03, 0x0c, 0x30, 0xc0, 0x00, 0x00, 0x00, 0x00, /* 0x93 */ 0x03, 0x0c, 0x30, 0xc0, 0xc0, 0x30, 0x0c, 0x03, /* 0x94 */ 0x00, 0x00, 0x00, 0x00, 0xc0, 0x30, 0x0c, 0x03, /* 0x95 */ 0xc0, 0x30, 0x0c, 0x03, 0x00, 0x00, 0x00, 0x00, /* 0x96 */ 0xc0, 0x30, 0x0c, 0x03, 0x03, 0x0c, 0x30, 0xc0, /* 0x97 */ 0x10, 0x10, 0x20, 0x20, 0x40, 0x40, 0x80, 0x80, /* 0x98 */ 0x01, 0x01, 0x02, 0x02, 0x04, 0x04, 0x08, 0x08, /* 0x99 */ 0x81, 0x81, 0x42, 0x42, 0x24, 0x24, 0x18, 0x18, /* 0x9a */ 0x80, 0x80, 0x40, 0x40, 0x20, 0x20, 0x10, 0x10, /* 0x9b */ 0x08, 0x08, 0x04, 0x04, 0x02, 0x02, 0x01, 0x01, /* 0x9c */ 0x18, 0x18, 0x24, 0x24, 0x42, 0x42, 0x81, 0x81, /* 0x9d */ 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x9e */ 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0x9f */ 0x00, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, 0x00, /* 0xa0 */ 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, /* 0xa1 */ 0x18, 0x18, 0x18, 0xff, 0xff, 0x00, 0x00, 0x00, /* 0xa2 */ 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x18, 0x18, 0x18, /* 0xa3 */ 0x00, 0x00, 0x00, 0xff, 0xff, 0x18, 0x18, 0x18, /* 0xa4 */ 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x18, 0x18, 0x18, /* 0xa5 */ 0x18, 0x18, 0x18, 0xff, 0xff, 0x18, 0x18, 0x18, /* 0xa6 */ 0x18, 0x18, 0x18, 0x1f, 0x1f, 0x00, 0x00, 0x00, /* 0xa7 */ 0x00, 0x00, 0x00, 0x1f, 0x1f, 0x18, 0x18, 0x18, /* 0xa8 */ 0x00, 0x00, 0x00, 0xf8, 0xf8, 0x18, 0x18, 0x18, /* 0xa9 */ 0x18, 0x18, 0x18, 0xf8, 0xf8, 0x00, 0x00, 0x00, /* 0xaa */ 0x80, 0x80, 0x80, 0x40, 0x40, 0x20, 0x18, 0x07, /* 0xab */ 0x01, 0x01, 0x01, 0x02, 0x02, 0x04, 0x18, 0xe0, /* 0xac */ 0xe0, 0x18, 0x04, 0x02, 0x02, 0x01, 0x01, 0x01, /* 0xad */ 0x07, 0x18, 0x20, 0x40, 0x40, 0x80, 0x80, 0x80, /* 0xae */ 0x81, 0x42, 0x24, 0x18, 0x18, 0x24, 0x42, 0x81, /* 0xaf */ 0xf0, 0xf0, 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, /* 0xb0 */ 0x0f, 0x0f, 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, /* 0xb1 */ 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, 0x0f, 0x0f, /* 0xb2 */ 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xb3 */ 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xb4 */ 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, 0x0f, /* 0xb5 */ 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0xb6 */ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0xb7 */ 0xf0, 0xf0, 0xf0, 0xf0, 0x0f, 0x0f, 0x0f, 0x0f, /* 0xb8 */ 0x0f, 0x0f, 0x0f, 0x0f, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xb9 */ 0x0f, 0x0f, 0x0f, 0x0f, 0xff, 0xff, 0xff, 0xff, /* 0xba */ 0xf0, 0xf0, 0xf0, 0xf0, 0xff, 0xff, 0xff, 0xff, /* 0xbb */ 0xff, 0xff, 0xff, 0xff, 0xf0, 0xf0, 0xf0, 0xf0, /* 0xbc */ 0xff, 0xff, 0xff, 0xff, 0x0f, 0x0f, 0x0f, 0x0f, /* 0xbd */ 0x01, 0x03, 0x07, 0x0f, 0x1f, 0x3f, 0x7f, 0xff, /* 0xbe */ 0xff, 0x7f, 0x3f, 0x1f, 0x0f, 0x07, 0x03, 0x01, /* 0xbf */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, /* 0xc0 */ 0xff, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, 0x80, /* 0xc1 */ 0xff, 0x80, 0x80, 0x9c, 0x9c, 0x9c, 0x80, 0x80, /* 0xc2 */ 0xff, 0xff, 0xff, 0xe3, 0xe3, 0xe3, 0xff, 0xff, /* 0xc3 */ 0x18, 0x3c, 0x7e, 0x3c, 0x18, 0x3c, 0x7e, 0xff, /* 0xc4 */ 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, 0xff, 0x00, /* 0xc5 */ 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, 0xaa, /* 0xc6 */ 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55, 0xaa, /* 0xc7 */ 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0xff, /* 0xc8 */ 0x00, 0x10, 0x38, 0x7c, 0xfe, 0x7c, 0x38, 0x10, /* 0xc9 */ 0x38, 0x10, 0x92, 0xfe, 0x92, 0x10, 0x38, 0x7c, /* 0xca */ 0x00, 0x6c, 0xfe, 0xfe, 0xfe, 0x7c, 0x38, 0x10, /* 0xcb */ 0x10, 0x38, 0x7c, 0xfe, 0xfe, 0x7c, 0x10, 0x7c, /* 0xcc */ 0xe7, 0xe7, 0x42, 0xff, 0xff, 0x42, 0xe7, 0xe7, /* 0xcd */ 0xdb, 0xff, 0xdb, 0x18, 0x18, 0xdb, 0xff, 0xdb, /* 0xce */ 0x3c, 0x7e, 0xff, 0xff, 0xff, 0xff, 0x7e, 0x3c, /* 0xcf */ 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd0 */ 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd1 */ 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd2 */ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xd3 */ 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, /* 0xd4 */ 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, 0x00, 0x00, /* 0xd5 */ 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, 0x00, 0x00, /* 0xd6 */ 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, /* 0xd7 */ 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0x00, 0x00, /* 0xd8 */ 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, 0x00, 0x00, /* 0xd9 */ 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, 0x00, 0x00, /* 0xda */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x00, 0x00, /* 0xdb */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, /* 0xdc */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x30, 0x30, /* 0xdd */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0c, 0x0c, /* 0xde */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0xdf */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0f, 0x0f, /* 0xe0 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3f, 0x3f, /* 0xe1 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0xe2 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0xfc, /* 0xe3 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xf0, /* 0xe4 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, /* 0xe5 */ 0x00, 0x00, 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xe6 */ 0x00, 0x00, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xe7 */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, /* 0xe8 */ 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, /* 0xe9 */ 0xc0, 0xc0, 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, /* 0xea */ 0xc0, 0xc0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xeb */ 0xf0, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xec */ 0xfc, 0xfc, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xed */ 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xee */ 0x3f, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xef */ 0x0f, 0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf0 */ 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xf1 */ 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, 0x00, 0x00, /* 0xf2 */ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x00, 0x00, /* 0xf3 */ 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, /* 0xf4 */ 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, 0x03, 0x03, /* 0xf5 */ 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, 0x03, 0x03, /* 0xf6 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x03, /* 0xf7 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0xf8 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0xf9 */ 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, /* 0xfa */ 0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0xfb */ 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xfc */ 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xfd */ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xfe */ 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0xff */ }; #endif /* __ui_font0_h */ KCemu-0.5.1/include/ui/window.h0000644001050700006200000000212011345001576015722 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_window_h #define __ui_window_h class UI_Window { public: UI_Window(void) {} virtual ~UI_Window(void) {} virtual void show(void) = 0; virtual void hide(void) = 0; virtual void toggle(void) = 0; }; #endif /* __ui_window_h */ KCemu-0.5.1/include/ui/tape.h0000644001050700006200000000275611345001576015363 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_tape_h #define __ui_tape_h #include "libtape/kct.h" class TapeInterface { public: TapeInterface(void) {} virtual ~TapeInterface(void) {} virtual void tapeAttach(const char *name) = 0; virtual void tapeDetach(void) = 0; virtual void tapePower(bool power) = 0; virtual void tapeProgress(int val) = 0; virtual void tapeNext(void) = 0; virtual void tapeAddFile(const char *name, long load, long start, long size, unsigned char type) = 0; virtual void tapeRemoveFile(int idx) = 0; virtual int tapeGetSelected(void) = 0; virtual const char * tapeGetName(int idx) = 0; }; #endif /* __ui_tape_h */ KCemu-0.5.1/include/ui/hsv2rgb.h0000644001050700006200000000211111345001576015770 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_hsv2rgb_h #define __ui_hsv2rgb_h /* * input: * h in [0,360] * s, v in [0,1] * output: * r, g, b in [0, 255] */ void hsv2rgb(double h, double s, double v, int *r, int *g, int *b); #endif /* __ui_hsv2rgb_h */ KCemu-0.5.1/include/ui/statusl.h0000644001050700006200000000206211345001576016117 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __ui_statusl_h #define __ui_statusl_h class StatusListener { public: StatusListener(void) {} virtual ~StatusListener(void) {} virtual void setStatus(const char *msg) = 0; }; #endif /* __ui_statusl_h */ KCemu-0.5.1/include/ui/Makefile.in0000644001050700006200000004734311412404771016326 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/ui DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = generic gtk EXTRA_DIST = \ ui.h \ log.h \ tape.h \ debug.h \ error.h \ errorl.h \ module.h \ status.h \ statusl.h \ commands.h \ window.h \ hsv2rgb.h \ font0.h all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/ui/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/ui/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/sys/0000755001050700006200000000000011412404771014447 5ustar glaubitzfbedvKCemu-0.5.1/include/sys/Makefile.am0000644001050700006200000000012410527416074016505 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ sysdep.h KCemu-0.5.1/include/sys/sysdep.h0000644001050700006200000001337411345001576016140 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __sys_sysdep_h #define __sys_sysdep_h #ifdef __cplusplus extern "C" { #endif /* * Sleep for the specified number of microseconds. */ void sys_usleep(long microseconds); /* * Return local time. * * This works like localtime_r() as it copies the values * into a buffers supplied by the caller instead of returning * a pointer to some statically allocated memory */ void sys_localtime(int *year, int *month, int *day, int *hour, int *minute, int *second); /* * Return local time converted from given time value. * * This is the same as sys_localtime, but does not return * the current time but the time converted from the given * value. */ void sys_converttime(long time, int *year, int *month, int *day, int *hour, int *minute, int *second); /* * Return system time. * * This works like gettimeofday() but instead of returning the * values in a struct timeval the values are directly stored * in the specified variables. */ void sys_gettimeofday(long *tv_sec, long *tv_usec); /* * Return system time * * This works like gettimeofday() but instead of returning the * values in a struct timeval the values are directly stored * in the specified variables. */ void sys_gettimeofday(long *tv_sec, long *tv_usec); /* * Return basename (filename without directory) for a given * full pathname. * * This works like basename() but doesn't handle NULL arguments * and special values like "/". * The returned string is allocated with strdup() so it must * be freed with free(). */ char * sys_basename(const char *path); /* * Return true if the given path denotes an absolute path * name for the specific system (e.g. if it starts with * a '/' for linux or with a drive letter followed by a ':' * for mingw). */ int sys_isabsolutepath(const char *path); /* * Return the directory of the currently running program. * * Returns where the executable is located, not the current * working directory! if it's not possible to retrieve this * information the function returns NULL. * * The returned string should be freed with free(). */ char * sys_getprogrampath(void); /* * Return the user home directory. * * The returned string should be freed with free(). */ char * sys_gethome(void); /* * Create new directory, given permissions are ignored on * some platforms (e.g. MinGW). */ int sys_mkdir(const char *pathname, int mode); /* * Return disk information for the given path. * * The information is stored in the caller provided buffer. the * data is only valid if the return value of the call is 0, which * means there was no error while retrieving the data from the * operating system. * * As the return value is currently 32 bit, the values are clamped * at 4GB. */ int sys_getdiskinfo(const char *path, unsigned long *total, unsigned long *available, unsigned short *block_size); /* * Convert short integer (16-bit) from host to network byte order */ unsigned short sys_htons(unsigned short hostshort); /* * Convert long integer (32-bit) from host to network byte order */ unsigned long sys_htonl(unsigned long hostlong); #define SYS_SOCKET_ERR_INTR (-1) #define SYS_SOCKET_ERR_INPROGRESS (-2) #define SYS_SOCKET_ERR_ALREADY (-3) #define SYS_SOCKET_ERR_ISCONN (-4) /* * Initialize system socket implementation (e.g. WinSocket) * * This will be called once when starting the application, and * should make the socket interface usable. For Unix systems * this is normally a no-op, but it's required for the WinSocket * implementation to call WSAStartup() before using any socket * related functions. * * On success sys_socket_init() returns 0. */ int sys_socket_init(void); /* * Create a socket. * * If stream is set to non-zero value, the socket is opened in * stream mode, otherwise in datagram mode. A non-zero value * for nonblocking will set stream to nonblocking mode. */ int sys_socket_create(int stream, int nonblocking); /* * Close a socket. */ void sys_socket_close(int socket); /* * Connect socket to given ip address and port. */ int sys_socket_connect(int socket, unsigned char ip0, unsigned char ip1, unsigned char ip2, unsigned char ip3, unsigned short port); /* * Receive a datagram from a socket. * * The data is placed into the given buffer and if the * ipX and port parameters are not NULL the ip address * and port of the source will be written into the * given variables. */ int sys_socket_recvfrom(int socket, unsigned char *buf, int bufsize, unsigned char *ip0, unsigned char *ip1, unsigned char *ip2, unsigned char *ip3, unsigned short *port); /* * Send data to a connected socket. */ int sys_socket_send(int socket, unsigned char *buf, int bufsize); /* * Send data to the given ip address and port. */ int sys_socket_sendto(int socket, unsigned char *buf, int bufsize, unsigned char ip0, unsigned char ip1, unsigned char ip2, unsigned char ip3, unsigned short port); #ifdef __cplusplus } #endif #endif /* __sys_sysdep_h */ KCemu-0.5.1/include/sys/Makefile.in0000644001050700006200000003076511412404771016527 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/sys DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ sysdep.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/sys/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/sys/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/Makefile.am0000644001050700006200000000021211340261610015651 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in SUBDIRS = kc cmd getopt fileio libdbg libtape libdisk libaudio libgtkex ui sys KCemu-0.5.1/include/libdisk/0000755001050700006200000000000011412404771015252 5ustar glaubitzfbedvKCemu-0.5.1/include/libdisk/teledisk.h0000644001050700006200000000320411345001576017227 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __libdisk_teledisk_h #define __libdisk_teledisk_h #include #ifdef __cplusplus extern "C" { #endif typedef struct teledisk_prop { FILE *f; char id[3]; int volume; int signature; int version_minor; int version_major; int heads; int cylinders; int sectors; int sector_size; int sectors_total; int dos_mode; char *comment; char *comment_date; char *filename; char *density; char *drive_type; unsigned char buf[2048]; struct { int h, c, s, l; long o; } offset[8192]; } teledisk_prop_t; teledisk_prop_t * teledisk_open(const char *filename); int teledisk_read_sector(teledisk_prop_t *prop, int c, int h, int s); void teledisk_close(teledisk_prop_t *prop); #ifdef __cplusplus } #endif #endif /* __libdisk_teledisk_h */ KCemu-0.5.1/include/libdisk/Makefile.am0000644001050700006200000000016110527416074017311 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ libdisk.h \ libdiskP.h \ teledisk.h KCemu-0.5.1/include/libdisk/libdiskP.h0000644001050700006200000000327211345001576017171 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __libdisk_libdiskp_h #define __libdisk_libdiskp_h #include "libdisk/libdisk.h" typedef struct libdisk_dpb { int spt; int bsh; int blm; int exm; int dsm; int drm; int al0; int al1; int cks; int ofs; int psh; int phm; int eot; int gap; int ntr; } libdisk_dpb_t; typedef struct libdisk_loader { const char * (*get_name)(void); int (*open)(libdisk_prop_t *prop, const char *path); void (*close)(libdisk_prop_t *prop); int (*read_sector)(libdisk_prop_t *prop, unsigned char *buf, int len); int (*write_sector)(libdisk_prop_t *prop, unsigned char *buf, int len); } libdisk_loader_t; #define MAX_DISK_LOADERS (10) int libdisk_register_loader(libdisk_loader_t *loader); void loader_dir_init(void); void loader_cdm_init(void); void loader_td0_init(void); void loader_22dsk_init(void); #endif /* __libdisk_libdiskp_h */ KCemu-0.5.1/include/libdisk/libdisk.h0000644001050700006200000000367611345001576017061 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __libdisk_libdisk_h #define __libdisk_libdisk_h #ifdef __cplusplus extern "C" { #endif typedef enum { LIBDISK_DISK_TYPE_UNKNOWN, LIBDISK_DISK_TYPE_22DSK, LIBDISK_DISK_TYPE_CDM, LIBDISK_DISK_TYPE_DIR, } libdisk_type_t; typedef struct libdisk_prop { libdisk_type_t type; int read_only; int head_count; int cylinder_count; int sector_count; int sector_size; int sectors_per_cylinder; int head; int cylinder; int sector; struct libdisk_loader *loader; void *data; struct libdisk_prop *next; } libdisk_prop_t; /* * initialize loader modules */ void libdisk_init(void); int libdisk_open(libdisk_prop_t **prop, const char *path); void libdisk_close(libdisk_prop_t **prop); int libdisk_seek(libdisk_prop_t **prop, int head, int cylinder, int sector); int libdisk_read_sector(libdisk_prop_t **prop, unsigned char *buf, int len); int libdisk_write_sector(libdisk_prop_t **prop, unsigned char *buf, int len); void libdisk_show_config(void); #ifdef __cplusplus } #endif #endif /* __libdisk_libdisk_h */ KCemu-0.5.1/include/libdisk/Makefile.in0000644001050700006200000003103611412404771017322 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/libdisk DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ libdisk.h \ libdiskP.h \ teledisk.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/libdisk/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/libdisk/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/fileio/0000755001050700006200000000000011412404770015077 5ustar glaubitzfbedvKCemu-0.5.1/include/fileio/loadP.h0000644001050700006200000000346511345001576016321 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __fileio_loadp_h #define __fileio_loadp_h #include "fileio/load.h" typedef struct file_loader { int (*check)(const char *filename, unsigned char *data, long size); int (*load)(const char *filename, unsigned char *data, long size, fileio_prop_t **prop); const char * (*get_type)(void); const char * (*get_name)(void); } file_loader_t; #define MAX_FILE_LOADERS (10) void fill_header_COM(unsigned char *data, fileio_prop_t *prop); void fileio_copy_blocks(unsigned char *dptr, const unsigned char *sptr, long size, int block); int fileio_register_loader(file_loader_t *loader); void loader_AF_init(void); void loader_GPF_init(void); void loader_SSS_init(void); void loader_BASIC_init(void); void loader_BASICODE_init(void); void loader_HS_init(void); void loader_BIN_init(void); void loader_TAPE_init(void); void loader_UNKNOWN_init(void); #endif /* __fileio_loadp_h */ KCemu-0.5.1/include/fileio/load.h0000644001050700006200000000717411345001576016202 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __fileio_load_h #define __fileio_load_h #ifdef __cplusplus extern "C" { #endif typedef enum { FILEIO_KC85_1, FILEIO_KC85_3, /* default */ FILEIO_Z1013, } fileio_kctype_t; typedef enum { FILEIO_V_NONE = 0x00, FILEIO_V_LOAD_ADDR = 0x01, FILEIO_V_START_ADDR = 0x02, FILEIO_V_AUTOSTART = 0x04, } fileio_valid_t; typedef enum { FILEIO_TYPE_UNKNOWN, FILEIO_TYPE_COM, FILEIO_TYPE_BAS, FILEIO_TYPE_PROT_BAS, FILEIO_TYPE_BASICODE, FILEIO_TYPE_DATA, /* produced with CSAVE*"FILENAME";ARRAYNAME */ FILEIO_TYPE_LIST, /* produced with LIST#1"FILENAME" */ } fileio_type_t; typedef struct fileio_prop { fileio_type_t type; fileio_valid_t valid; unsigned char name[12]; unsigned short load_addr; unsigned short start_addr; int autostart; long size; const char *filetype; unsigned char *data; struct fileio_prop *next; } fileio_prop_t; /* * initialize loader modules */ void fileio_init(void); /* * set the kc-type for the file io handling */ void fileio_set_kctype(fileio_kctype_t type); /* * return the kc-type for the file io handling */ fileio_kctype_t fileio_get_kctype(void); /* * load file(s) into memory */ int fileio_load_file(const char *filename, fileio_prop_t **prop); /* * save file in wav format */ int fileio_save_wav_prop(const char *filename, fileio_prop_t *prop); int fileio_save_wav(const char *filename, const unsigned char *data, int size); /* * save file in tap format */ int fileio_save_tap_prop(const char *filename, fileio_prop_t *prop); int fileio_save_tap(const char *filename, const unsigned char *data, int size); /* * save file in image format */ int fileio_save_img_prop(const char *filename, fileio_prop_t *prop); int fileio_save_img(const char *filename, const unsigned char *data, int size); /* * save file in raw format (memory dump) */ int fileio_save_raw_prop(const char *filename, fileio_prop_t *prop); int fileio_save_raw(const char *filename, const unsigned char *data, int size, int load, int start); /* * free loaded files and the associated property data */ void fileio_free_prop(fileio_prop_t **prop); /* * convert internal file format into a raw memory image, returns the * length of the stored image * * the allocated buffer should have prop->size bytes which * is guarantied to be slightly more than needed */ long fileio_get_image(fileio_prop_t *prop, unsigned char *buf); /* * dump configuration to stdout */ void fileio_show_config(void); /* * only for DEBUG */ void fileio_debug_dump(fileio_prop_t *prop, int write_file); #ifdef __cplusplus } #endif #endif /* __fileio_load_h */ KCemu-0.5.1/include/fileio/Makefile.am0000644001050700006200000000013510527416074017140 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ load.h \ loadP.h KCemu-0.5.1/include/fileio/Makefile.in0000644001050700006200000003100711412404770017145 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/fileio DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ load.h \ loadP.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/fileio/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/fileio/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/kc/0000755001050700006200000000000011412404770014225 5ustar glaubitzfbedvKCemu-0.5.1/include/kc/mod_v24.h0000644001050700006200000000564211345001576015661 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_v24_h #define __kc_mod_v24_h #include #include #include "kc/ic.h" #include "kc/ports.h" #include "kc/module.h" class ModuleV24 : public ModuleInterface, public PortInterface, public InterfaceCircuit { private: typedef enum { IO_NONE, IO_FILE, IO_SOCKET, IO_FIFO } io_type_t; enum { A = 0, B = 1, CHANNELS = 2, WR_REGS = 7, RD_REGS = 3, INBUF_LEN = 1024, }; byte_t _in_buf[INBUF_LEN], *_in_buf_ptr; int _reg[CHANNELS]; byte_t _reg_wr[CHANNELS][WR_REGS]; byte_t _reg_rd[CHANNELS][RD_REGS]; byte_t _data_in[CHANNELS]; int _irq_pending[CHANNELS]; int _irq_active[CHANNELS]; int _fd_in[CHANNELS]; int _fd_out[CHANNELS]; struct termios _tio_old[CHANNELS]; struct termios _tio_new[CHANNELS]; bool _ok; byte_t _id; byte_t _val; const char *_name; char *_socket_name; int _pid; PortGroup *_portg; io_type_t _io_type; protected: void open_device(void); void close_device(void); bool open_device_serial(int dev, const char *dev_name); bool open_device_socket_or_fifo(io_type_t io_type); void set_signal_handler(int fd, void (*sig_func)(int)); static void signal_handler_IO_read(int status); static void signal_handler_IO_recv(int status); void push_data(char *buf, int len); void socket_server(int fd); void fifo_server(int fd); public: ModuleV24(ModuleV24 &tmpl); ModuleV24(const char *name, byte_t id); virtual ~ModuleV24(void); virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); virtual byte_t in_reg(int channel); virtual void out_reg(int channel, byte_t val); /* * InterfaceCircuit functions * * FIXME: reset() is inherited twice from both * FIXME: ModuleInterface and InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void) {} virtual word_t irqack() { return IRQ_NOT_ACK; } virtual void reset(bool power_on = false); /* * PortInterface */ virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_mod_v24_h */ KCemu-0.5.1/include/kc/wav.h0000644001050700006200000000347411345001576015205 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_wav_h #define __kc_wav_h #include #include "kc/system.h" #include "kc/cb.h" #include "cmd/cmd.h" #include "libaudio/libaudio.h" class WavPlayer : public Callback { private: enum { FILTER_SIZE = 100, }; private: CMD *_cmd; libaudio_prop_t *_prop; bool _stopped; int _val; int _th_low; int _th_high; int _sample_freq; int _sample_size; int _channels; int _bit_0; int _bit_1; int _bit_s; int _eof; float _kernel[FILTER_SIZE + 1]; int _buf[FILTER_SIZE + 1]; CMD_Args _info_args; protected: int get_y(float value); void init_filter_kernel(void); public: WavPlayer(int bit_0, int bit_1, int bit_s); virtual ~WavPlayer(void); virtual bool open(const char *filename); virtual bool play(void); virtual void stop(void); virtual void close(void); virtual void record(void); virtual void callback(void *data); virtual void do_play(void); virtual void do_record(void); }; #endif /* __kc_wav_h */ KCemu-0.5.1/include/kc/memory3.h0000644001050700006200000000343711345001576016002 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_memory3_h #define __kc_memory3_h #include "kc/system.h" #include "kc/kc.h" #include "kc/memory.h" class Memory3 : public Memory { private: byte_t _ram[0x4000]; byte_t _rom_caos[0x2000]; byte_t _rom_basic[0x2000]; byte_t _irm[0x4000]; bool _access_color; MemAreaGroup *_m_scr; /* scratch memory */ MemAreaGroup *_m_caos; /* CAOS e000h - ffffh */ MemAreaGroup *_m_basic; /* BASIC c000h - dfffh */ MemAreaGroup *_m_ram; /* RAM 0000h - 3fffh */ MemAreaGroup *_m_irm; /* IRM 8000h - bfffh */ public: Memory3(void); virtual ~Memory3(void); void dumpCore(void); byte_t memRead8(word_t addr); void memWrite8(word_t addr, byte_t val); byte_t * get_irm(void); byte_t * get_char_rom(void); void enableCAOS_E(int v); void enableBASIC_C(int v); void enableRAM(int v); void protectRAM(int v); void enableIRM(int v); virtual void reset(bool power_on = false); }; #endif /* __kc_memory3_h */ KCemu-0.5.1/include/kc/plotter.h0000644001050700006200000001146111345001576016074 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_plotter_h #define __kc_plotter_h #include #include "kc/kc.h" class Plotter { private: /** paper width in mm (A4) */ static const double WIDTH_MM = 210.0; /** paper height in mm (A4) */ static const double HEIGHT_MM = 297.0; /** plotting area width in mm */ static const double PLOTTING_AREA_WIDTH_MM = 188.0; /** plotting area height in mm */ static const double PLOTTING_AREA_HEIGHT_MM = 255.0; /** scaling factor for the buffer image surface */ static const double BUFFER_SURFACE_SCALE = 10.0; /** scaling factor for the onscreen image surface */ static const double ONSCREEN_SURFACE_SCALE = 3.0; /** plotter step width in cm */ static const double STEP_WIDTH = 0.1; /** convert mm to points per inch (for pdf output) */ static const double MM_TO_INCH = 72.0 / 25.4; private: /** current coordianates of the plotting pen */ double _x, _y; /** pen color, a.k.a. the foreground color */ double _red, _green, _blue; /** paper color, a.k.a. the background color */ double _bg_red, _bg_green, _bg_blue; double _line_width; double _pen_down_factor; bool _pen_down; bool _show_pen; bool _show_plot_area; double _origin_x; double _origin_y; double _origin_x_new; double _origin_y_new; bool _dirty; double _dirty_x1; double _dirty_y1; double _dirty_x2; double _dirty_y2; bool _invalidated; /** * Image surface that is used for direct onscreen rendering. */ cairo_t *_onscreen_cr; cairo_surface_t *_onscreen_surface; /** * Cairo surface and context for the double buffer image, the * size of the image will be 2100 x 2970 pixel which matches the * resolution of the plotter XY4131 (A4 paper size with step * width of 0.1mm). The actual plotting area is 1800 x 2550 pixel. */ cairo_t *_buffer_cr; cairo_surface_t *_buffer_surface; /** * PDF surface and context that is only present if a pdf file * was opened by the user. */ cairo_t *_pdf_cr; cairo_surface_t *_pdf_surface; private: virtual void set_point(cairo_t *cr, double x, double y); virtual void draw_to(cairo_t *cr, double x, double y); virtual void invalidate(void); virtual void clear_dirty_rect(void); virtual void update_dirty_rect(double x, double y); virtual cairo_t * replace_cairo_context(cairo_t *old_cr, cairo_surface_t *surface, double scale_factor); virtual void clear_surface(cairo_surface_t *surface, double scale_factor); virtual void init_image_surface(cairo_surface_t **surface, cairo_t **cr, double width, double height); public: Plotter(void); virtual ~Plotter(void); virtual void init(void); virtual void pen_up(void); virtual void pen_down(void); virtual void step(int delta_x, int delta_y); virtual void show_page(void); virtual void open_pdf(const char *filename); virtual void close_pdf(void); virtual cairo_status_t save_as_png(const char *filename); virtual bool is_dirty(void); virtual cairo_rectangle_t * get_dirty_rectangle(void); virtual cairo_surface_t * get_onscreen_surface(void); virtual double get_line_width(void); virtual void set_line_width(double line_width); virtual double get_origin_x(void); virtual void set_origin_x(double origin_x); virtual double get_origin_y(void); virtual void set_origin_y(double origin_y); virtual double get_bg_red(void); virtual double get_bg_green(void); virtual double get_bg_blue(void); virtual void set_bg_color(double red, double green, double blue); virtual double get_pen_red(void); virtual double get_pen_green(void); virtual double get_pen_blue(void); virtual void set_pen_color(double red, double green, double blue); virtual double get_x(void); virtual double get_y(void); virtual bool is_show_pen(void); virtual void set_show_pen(bool show_pen); virtual bool is_show_plot_area(void); virtual void set_show_plot_area(bool show_plot_area); virtual bool is_show_helpers(void); virtual bool is_pen_down(void); }; #endif /* __kc_plotter_h */ KCemu-0.5.1/include/kc/ports0.h0000644001050700006200000000237011345001576015631 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_ports0_h #define __kc_ports0_h #include "kc/ports.h" class Ports0 : public PortInterface { public: enum { NR_PORTS = 256, }; protected: byte_t inout[NR_PORTS]; protected: virtual void change_0x08(byte_t changed, byte_t val); public: Ports0(void); virtual ~Ports0(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_ports0_h */ KCemu-0.5.1/include/kc/memory2.h0000644001050700006200000000327511345001576016001 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_memory2_h #define __kc_memory2_h #include "kc/system.h" #include "kc/kc.h" #include "kc/memory.h" class Memory2 : public Memory { private: byte_t _ram[0x4000]; byte_t _rom_caos[0x2000]; byte_t _irm[0x4000]; bool _access_color; MemAreaGroup *_m_scr; /* scratch memory */ MemAreaGroup *_m_caos; /* CAOS e000h - e7ffh, f000h - f7ffh */ MemAreaGroup *_m_ram; /* RAM 0000h - 3fffh */ MemAreaGroup *_m_irm; /* IRM 8000h - bfffh */ public: Memory2(void); virtual ~Memory2(void); void dumpCore(void); byte_t memRead8(word_t addr); void memWrite8(word_t addr, byte_t val); byte_t * get_irm(void); byte_t * get_char_rom(void); void enableCAOS(int v); void enableIRM(int v); void enableRAM(int v); void protectRAM(int v); virtual void reset(bool power_on = false); }; #endif /* __kc_memory2_h */ KCemu-0.5.1/include/kc/mod_romb.h0000644001050700006200000000326711345001576016206 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_romb_h #define __kc_mod_romb_h #include "kc/romdi.h" #include "kc/ports.h" #include "kc/memory.h" #include "kc/module.h" class ModuleROMBank : public ModuleInterface, public PortInterface { private: enum { ROM_BANK_SIZE = 0x20000, }; private: int _bank; byte_t *_rom; MemAreaGroup *_group; PortGroup *_portg; protected: virtual void activate_bank(void); public: ModuleROMBank(ModuleROMBank &tmpl); ModuleROMBank(const char *filename, const char *name); virtual ~ModuleROMBank(void); /* * ModuleInterface */ virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); virtual void m_out(word_t addr, byte_t val); /* * PortInterface */ virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_mod_romb_h */ KCemu-0.5.1/include/kc/fdc.h0000644001050700006200000001610611345001576015140 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_fdc_h #define __kc_fdc_h #include "kc/system.h" #include "kc/ic.h" #include "kc/cb.h" #include "kc/ports.h" #include "kc/fdc_cmd.h" #include "kc/floppy.h" class SectorDesc { private: long _size; byte_t *_buf; public: SectorDesc(long size, byte_t *buf); long get_size(void) { return _size; } byte_t get_byte(int idx) { return _buf[idx]; } }; class FloppyState { private: byte_t _head; byte_t _cylinder; byte_t _sector; Floppy *_floppy; SectorDesc *_sect; public: FloppyState(byte_t head, byte_t cylinder, byte_t sector, Floppy *floppy); virtual ~FloppyState(void); byte_t get_head(void) { return _head; } byte_t get_cylinder(void) { return _cylinder; } byte_t get_sector(void) { return _sector; } virtual Floppy * get_floppy(void) { return _floppy; } void set_head(byte_t head) { _head = head; } void set_cylinder(byte_t cylinder) { _cylinder = cylinder; } void set_sector(byte_t sector) { _sector = sector; } bool seek(void) { if (_floppy == 0) return false; return _floppy->seek(_head, _cylinder, _sector); } }; class FDC : public InterfaceCircuit, public PortInterface, public Callback { public: typedef enum { FDC_STATE_IDLE, FDC_STATE_COMMAND, FDC_STATE_EXECUTE, FDC_STATE_DATA, FDC_STATE_RESULT } fdc_state_t; enum { NR_OF_FLOPPIES = 4, ST_MAIN_BUSY_MASK = 0x0f, ST_MAIN_FDD0_BUSY = 0x01, /* FDD number 0 is in the seek mode */ ST_MAIN_FDD1_BUSY = 0x02, /* FDD number 1 is in the seek mode */ ST_MAIN_FDD2_BUSY = 0x04, /* FDD number 2 is in the seek mode */ ST_MAIN_FDD3_BUSY = 0x08, /* FDD number 3 is in the seek mode */ ST_MAIN_READ_WRITE = 0x10, /* read or write command in progress */ ST_MAIN_NON_DMA = 0x20, /* FDC is in NON-DMA mode */ ST_MAIN_DIO = 0x40, /* direction of data transfer */ ST_MAIN_RQM = 0x80, /* Data Register ready */ /* * STATUS REGISTER 0 */ ST_0_ALL_MASK = 0xff, ST_0_IC_MASK = 0xc0, /* Interrupt Code */ ST_0_IC_NORMAL_TERMINATION = 0x00, /* Normal Termination of Command */ ST_0_IC_ABNORMAL_TERMINATION = 0x40, /* Abnormal Termination of Command */ ST_0_IC_INVALID_COMMAND = 0x80, /* Invalid Command issued */ ST_0_IC_FDD_NOT_READY = 0xc0, /* Abnormal Termination, not ready */ ST_0_SEEK_END = 0x20, /* Seek End */ ST_0_EC = 0x10, /* Equipment Check */ ST_0_NR = 0x08, /* Not Ready */ ST_0_HEAD_ADDRESS = 0x04, /* Head Address */ ST_0_UNIT_SELECT_MASK = 0x03, ST_0_UNIT_SELECT_1 = 0x02, ST_0_UNIT_SELECT_0 = 0x01, /* * STATUS REGISTER 1 */ ST_1_ALL_MASK = 0xff, ST_1_END_OF_CYLINDER = 0x80, ST_1_UNUSED1 = 0x40, ST_1_DATA_ERROR = 0x20, ST_1_OVER_RUN = 0x10, ST_1_UNUSED2 = 0x08, ST_1_NO_DATE = 0x04, ST_1_NOT_WRITEABLE = 0x02, ST_1_MISSING_ADDRESS_MARK = 0x01, /* * STATUS REGISTER 2 */ ST_2_UNUSED = 0x80, ST_2_CONTROL_MARK = 0x40, ST_2_DATA_ERROR_IN_DATA = 0x20, ST_2_WRONG_CYLINDER = 0x10, ST_2_SCAN_MASK = 0x0c, ST_2_SCAN_EQUAL_HIT = 0x08, ST_2_SCAN_NOT_SATISFIED = 0x04, ST_2_BAD_CYLINDER = 0x02, ST_2_MISSING_ADDRESS_MARK = 0x01, /* * STATUS REGISTER 3 */ ST_3_ALL_MASK = 0xff, ST_3_FAULT = 0x80, ST_3_WRITE_PROTECTED = 0x40, ST_3_READY = 0x20, ST_3_TRACK_0 = 0x10, ST_3_TWO_SIDE = 0x08, ST_3_HEAD_ADDRESS = 0x04, /* side select signal */ ST_3_UNIT_SELECT_MASK = 0x03, ST_3_UNIT_SELECT_1 = 0x02, ST_3_UNIT_SELECT_0 = 0x01, /* * Callback selector */ CB_MASK = 0xff0000, CB_TYPE_SEEK = 0x010000, CB_TYPE_INDEX = 0x020000, }; private: fdc_state_t _state; FDC_CMD *_cmds[32]; FDC_CMD *_cur_cmd; Floppy *_floppy[NR_OF_FLOPPIES]; FloppyState *_fstate[NR_OF_FLOPPIES]; FloppyState *_cur_floppy; int _selected_unit; int _selected_device; // select line of the floppy drive, not in the FDC byte_t _MSR; /* Main Status Register */ byte_t _INPUT_GATE; byte_t _ST0; byte_t _ST1; byte_t _ST2; byte_t _ST3; byte_t _head; byte_t _cylinder; byte_t _sector; int _read_bytes; bool _terminal_count; void init(void); public: FDC(void); virtual ~FDC(void); void callback(void *data); void callback_seek(void *data); void callback_index(void *data); void drive_select(byte_t val); virtual byte_t in_data(word_t addr); virtual void out_data(word_t addr, byte_t val); virtual byte_t read_byte(void); virtual void write_byte(byte_t val); Floppy * get_floppy(void); Floppy * get_floppy(int idx); int get_head(void); int get_cylinder(void); int get_sector(void); void select_floppy(int floppy_nr); void set_state(fdc_state_t state); bool seek(byte_t head, byte_t cylinder, byte_t sector); bool seek_internal(byte_t head, byte_t cylinder, byte_t sector); byte_t get_input_gate(void); void set_input_gate(byte_t mask, byte_t val); byte_t get_msr(void); void set_msr(byte_t mask, byte_t val); void set_terminal_count(bool val); byte_t get_ST0(void); byte_t get_ST1(void); byte_t get_ST2(void); byte_t get_ST3(void); void set_ST0(byte_t mask, byte_t val); void set_ST1(byte_t mask, byte_t val); void set_ST2(byte_t mask, byte_t val); void set_ST3(byte_t mask, byte_t val); virtual long long get_counter() = 0; virtual void add_callback(unsigned long long offset, Callback *cb, void *data) = 0; /* * PortInterface */ virtual byte_t in(word_t addr) = 0; virtual void out(word_t addr, byte_t val) = 0; /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void) {} virtual word_t irqack() { return IRQ_NOT_ACK; } virtual void reset(bool power_on = false); }; #endif /* __kc_fdc_h */ KCemu-0.5.1/include/kc/pio_vdip.h0000644001050700006200000000240111345001576016206 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_pio_vdip_h #define __kc_pio_vdip_h #include "kc/pio.h" #include "kc/tape.h" class PIO_VDIP : public PIO { byte_t _data_out; protected: virtual void change_A(byte_t changed, byte_t val); virtual void change_B(byte_t changed, byte_t val); public: PIO_VDIP(void); virtual ~PIO_VDIP(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_pio_vdip_h */ KCemu-0.5.1/include/kc/daisy.h0000644001050700006200000000241711345001576015515 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_daisy_h #define __kc_daisy_h #include #include "kc/system.h" #include "kc/ic.h" class DaisyChain { private: typedef std::list daisy_chain_list_t; daisy_chain_list_t _daisy_chain_list; public: DaisyChain(void); virtual ~DaisyChain(void); void add_last(InterfaceCircuit *ic); void remove(InterfaceCircuit *ic); word_t irq_ack(void); void reti(void); }; #endif /* __kc_daisy_h */ KCemu-0.5.1/include/kc/memory5.h0000644001050700006200000000223511345001576015777 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_memory5_h #define __kc_memory5_h #include "kc/memory4.h" class Memory5 : public Memory4 { protected: virtual void init(void); virtual void configureRAM_8(void); public: Memory5(void); ~Memory5(void); void dumpCore(void); virtual void reset(bool power_on = false); }; #endif /* __kc_memory5_h */ KCemu-0.5.1/include/kc/fdc_cmd.h0000644001050700006200000001274111345001576015764 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_fdc_cmd_h #define __kc_fdc_cmd_h #include "kc/system.h" class FDC; class SectorDesc; class FDC_CMD { private: enum { MAX_ARGS = 10, MAX_RESULTS = 10, }; FDC *_fdc; int _args; int _results; int _r_idx; int _w_idx; char *_name; SectorDesc *_sect; protected: byte_t _arg[MAX_ARGS]; byte_t _result[MAX_RESULTS]; bool _data_transfer; virtual void execute(void) = 0; virtual void execute_cmd(void); public: FDC_CMD(FDC *fdc, int args, int results, const char *name); virtual ~FDC_CMD(void); virtual const char * get_name(void); virtual FDC * get_fdc(void); virtual void start(byte_t val); virtual bool write_arg(byte_t val); virtual byte_t read_result(void); virtual void finish_cmd(void); virtual byte_t read_byte(void); virtual int get_read_idx(void); virtual void write_byte(byte_t val); virtual int get_write_idx(void); }; class FDC_CMD_INVALID : public FDC_CMD { protected: virtual void execute(void); public: FDC_CMD_INVALID(FDC *fdc); virtual ~FDC_CMD_INVALID(void); }; /* * 0x02 */ class FDC_CMD_READ_TRACK : public FDC_CMD { protected: virtual void execute(void); public: FDC_CMD_READ_TRACK(FDC *fdc); virtual ~FDC_CMD_READ_TRACK(void); }; /* * 0x03 */ class FDC_CMD_SPECIFY : public FDC_CMD { protected: virtual void execute(void); public: FDC_CMD_SPECIFY(FDC *fdc); virtual ~FDC_CMD_SPECIFY(void); }; /* * 0x04 */ class FDC_CMD_SENSE_DRIVE_STATUS : public FDC_CMD { protected: virtual void execute(void); public: FDC_CMD_SENSE_DRIVE_STATUS(FDC *fdc); virtual ~FDC_CMD_SENSE_DRIVE_STATUS(void); }; /* * 0x05 */ class FDC_CMD_WRITE_DATA : public FDC_CMD { private: int _idx; int _sector_size; int _head, _cylinder, _sector; byte_t *_buf; protected: virtual void execute(void); public: FDC_CMD_WRITE_DATA(FDC *fdc); virtual ~FDC_CMD_WRITE_DATA(void); virtual void write_byte(byte_t val); }; /* * 0x06 */ class FDC_CMD_READ_DATA : public FDC_CMD { private: int _idx; int _size; byte_t *_buf; protected: virtual void execute(void); public: FDC_CMD_READ_DATA(FDC *fdc); virtual ~FDC_CMD_READ_DATA(void); virtual bool fetch_next_sector(void); virtual byte_t read_byte(void); }; /* * 0x07 */ class FDC_CMD_RECALIBRATE : public FDC_CMD { protected: virtual void execute(void); public: FDC_CMD_RECALIBRATE(FDC *fdc); virtual ~FDC_CMD_RECALIBRATE(void); }; /* * 0x08 */ class FDC_CMD_SENSE_INTERRUPT_STATUS : public FDC_CMD { protected: virtual void execute(void); public: FDC_CMD_SENSE_INTERRUPT_STATUS(FDC *fdc); virtual ~FDC_CMD_SENSE_INTERRUPT_STATUS(void); }; /* * 0x09 */ class FDC_CMD_WRITE_DELETED_DATA : public FDC_CMD { protected: virtual void execute(void); public: FDC_CMD_WRITE_DELETED_DATA(FDC *fdc); virtual ~FDC_CMD_WRITE_DELETED_DATA(void); }; /* * 0x0a */ class FDC_CMD_READ_ID : public FDC_CMD { protected: virtual void execute(void); public: FDC_CMD_READ_ID(FDC *fdc); virtual ~FDC_CMD_READ_ID(void); }; /* * 0x0c */ class FDC_CMD_READ_DELETED_DATA : public FDC_CMD { protected: virtual void execute(void); public: FDC_CMD_READ_DELETED_DATA(FDC *fdc); virtual ~FDC_CMD_READ_DELETED_DATA(void); }; /* * 0x0d */ class FDC_CMD_FORMAT_A_TRACK : public FDC_CMD { private: int _ridx; int _widx; int _head; int _cylinder; int _sector; int _sector_size; int _bytes_per_sector; int _sectors_per_track; int _cur_sector; int _formatted_sectors; byte_t *_buf; protected: virtual void execute(void); public: FDC_CMD_FORMAT_A_TRACK(FDC *fdc); virtual ~FDC_CMD_FORMAT_A_TRACK(void); virtual byte_t read_byte(void); virtual void write_byte(byte_t val); virtual void format(void); }; /* * 0x0f */ class FDC_CMD_SEEK : public FDC_CMD { protected: virtual void execute(void); public: FDC_CMD_SEEK(FDC *fdc); virtual ~FDC_CMD_SEEK(void); }; /* * 0x11 */ class FDC_CMD_SCAN_EQUAL : public FDC_CMD { private: int _idx; int _sector_size; int _head, _cylinder, _sector; byte_t *_buf; protected: virtual void execute(void); public: FDC_CMD_SCAN_EQUAL(FDC *fdc); virtual ~FDC_CMD_SCAN_EQUAL(void); virtual void write_byte(byte_t val); }; /* * 0x19 */ class FDC_CMD_SCAN_LOW_OR_EQUAL : public FDC_CMD { protected: virtual void execute(void); public: FDC_CMD_SCAN_LOW_OR_EQUAL(FDC *fdc); virtual ~FDC_CMD_SCAN_LOW_OR_EQUAL(void); }; /* * 0x1d */ class FDC_CMD_SCAN_HIGH_OR_EQUAL : public FDC_CMD { protected: virtual void execute(void); public: FDC_CMD_SCAN_HIGH_OR_EQUAL(FDC *fdc); virtual ~FDC_CMD_SCAN_HIGH_OR_EQUAL(void); }; #endif /* __kc_fdc_h */ KCemu-0.5.1/include/kc/mod_128k.h0000644001050700006200000000242211345001576015724 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_128k_h #define __kc_mod_128k_h #include "kc/mod_segm.h" class Module128k : public ModuleSegmentedMemory { protected: virtual word_t get_base_address(word_t addr, byte_t val); virtual int get_segment_index(word_t addr, byte_t val); public: Module128k(Module128k &tmpl); Module128k(const char *name, byte_t id); virtual ~Module128k(void); virtual ModuleInterface * clone(void); }; #endif /* __kc_mod_128k_h */ KCemu-0.5.1/include/kc/sound.h0000644001050700006200000000255311345001576015535 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_sound_h #define __kc_sound_h #include "kc/system.h" class Sound { private: static void sdl_sound_callback(void *userdata, unsigned char *stream, int len); protected: virtual void open_sound(void); virtual void sound_callback(void *userdata, unsigned char *stream, int len) = 0; public: Sound(void); virtual ~Sound(void); virtual void init(void) = 0; virtual void start(void) = 0; virtual void stop(void) = 0; virtual void lock(void); virtual void unlock(void); }; #endif /* __kc_sound_h */ KCemu-0.5.1/include/kc/sound3.h0000644001050700006200000000430511345001576015615 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_sound3_h #define __kc_sound3_h #include #include "kc/system.h" #include "kc/pio.h" #include "kc/sound.h" class sndop { public: long long _counter; double _freq; sndop(long long counter, double freq) { //cout << "new sndop(): counter = " << counter << ", freq = " << freq << endl; _counter = counter; _freq = freq; } }; class Sound3 : public Sound, public PIOCallbackInterface, public CTCCallbackInterface { private: typedef std::listsndop_list_t; typedef sndop_list_t::iterator iterator; private: bool _playing; sndop_list_t _sndop_list; sndop *_last_sndop; sndop *_dummy_sndop; protected: void sound_callback(void *userdata, unsigned char *stream, int len); public: Sound3(void); virtual ~Sound3(void); virtual void init(void); virtual void start(void); virtual void stop(void); /* * PIOCallbackInterface functions */ virtual int callback_A_in(void) { return -1; } virtual int callback_B_in(void) { return -1; } virtual void callback_A_out(byte_t val) {} virtual void callback_B_out(byte_t val); /* * CTCCallbackInterface functions */ virtual void ctc_callback_ZC(int channel) {}; virtual void ctc_callback_TC(int channel, long tc); virtual void ctc_callback_start(int channel); virtual void ctc_callback_stop(int channel); }; #endif /* __kc_sound3_h */ KCemu-0.5.1/include/kc/c80/0000755001050700006200000000000011412404770014617 5ustar glaubitzfbedvKCemu-0.5.1/include/kc/c80/keydef.h0000644001050700006200000002216111345001576016243 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_c80_keydef_h #define __kc_c80_keydef_h /* * 01 (1) 02 (2) 04 (3) 08 (4) 10 (5) 20 (6) 40 (7) 80 (8) * | | | | | | | | * *-[ 1]-* *-[ 2]-* *-[ 3]-* *-[ 4]-+ *-[ 5]-* *-[ 6]-* *-[ 7]-* *-[ 8]-* * | REG | | GO | | D | | A | | 7 | | 4 | | 1 | | FCN | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+------*-- A0 (01) * | | | | | | | | * *-[ 9]-* *-[10]-* *-[11]-* *-[12]-+ *-[13]-* *-[14]-* *-[15]-* *-[16]-* * | + | | - | | E | | B | | 8 | | 5 | | 2 | | 0 | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+------*-- A1 (02) * | | | | | | | | * *-[17]-* *-[18]-* *-[19]-* *-[20]-+ *-[21]-* *-[22]-* *-[23]-* *-[24]-* * | | F | C | 9 | 6 | 3 | MEM | * *--------*--------*--------*--------*--------*--------*--------*-- A2 (04) * */ static unsigned int __keys[] = { /* 0x00 [.] */ 0x00, /* 0x01 [.] */ 0x00, /* 0x02 [.] */ 0x00, /* 0x03 [.] */ 0x00, /* 0x04 [.] */ 0x00, /* 0x05 [.] */ 0x00, /* 0x06 [.] */ 0x00, /* 0x07 [.] */ 0x00, /* 0x08 [.] */ 0x00, /* 0x09 [.] */ 0x00, /* 0x0a [.] */ 0x00, /* 0x0b [.] */ 0x00, /* 0x0c [.] */ 0x00, /* 0x0d [.] */ 0x0180, /* ENTER */ /* 0x0e [.] */ 0x00, /* 0x0f [.] */ 0x00, /* 0x10 [.] */ 0x00, /* 0x11 [.] */ 0x00, /* 0x12 [.] */ 0x00, /* 0x13 [.] */ 0x00, /* 0x14 [.] */ 0x00, /* 0x15 [.] */ 0x00, /* 0x16 [.] */ 0x00, /* 0x17 [.] */ 0x00, /* 0x18 [.] */ 0x00, /* 0x19 [.] */ 0x00, /* 0x1a [.] */ 0x00, /* 0x1b [.] */ 0x00, /* ESC */ /* 0x1c [.] */ 0x00, /* 0x1d [.] */ 0x00, /* 0x1e [.] */ 0x00, /* 0x1f [.] */ 0x00, /* 0x20 [ ] */ 0x00, /* SPACE */ /* 0x21 [!] */ 0x00, /* 0x22 ["] */ 0x00, /* 0x23 [#] */ 0x00, /* 0x24 [$] */ 0x00, /* 0x25 [%] */ 0x00, /* 0x26 [&] */ 0x00, /* 0x27 ['] */ 0x00, /* 0x28 [(] */ 0x00, /* 0x29 [)] */ 0x00, /* 0x2a [*] */ 0x00, /* 0x2b [+] */ 0x0201, /* 0x2c [,] */ 0x00, /* 0x2d [-] */ 0x0202, /* 0x2e [.] */ 0x00, /* 0x2f [/] */ 0x00, /* 0x30 [0] */ 0x0280, /* 0x31 [1] */ 0x0140, /* 0x32 [2] */ 0x0240, /* 0x33 [3] */ 0x0440, /* 0x34 [4] */ 0x0120, /* 0x35 [5] */ 0x0220, /* 0x36 [6] */ 0x0420, /* 0x37 [7] */ 0x0110, /* 0x38 [8] */ 0x0210, /* 0x39 [9] */ 0x0410, /* 0x3a [:] */ 0x00, /* 0x3b [;] */ 0x00, /* 0x3c [<] */ 0x00, /* 0x3d [=] */ 0x00, /* 0x3e [>] */ 0x00, /* 0x3f [?] */ 0x00, /* 0x40 [@] */ 0x00, /* 0x41 [A] */ 0x0108, /* 0x42 [B] */ 0x0208, /* 0x43 [C] */ 0x0408, /* 0x44 [D] */ 0x0104, /* 0x45 [E] */ 0x0204, /* 0x46 [F] */ 0x0404, /* 0x47 [G] */ 0x0102, /* 0x48 [H] */ 0x00, /* 0x49 [I] */ 0x00, /* 0x4a [J] */ 0x00, /* 0x4b [K] */ 0x00, /* 0x4c [L] */ 0x00, /* 0x4d [M] */ 0x0480, /* 0x4e [N] */ 0x00, /* 0x4f [O] */ 0x00, /* 0x50 [P] */ 0x00, /* 0x51 [Q] */ 0x00, /* 0x52 [R] */ 0x0101, /* 0x53 [S] */ 0x00, /* 0x54 [T] */ 0x00, /* 0x55 [U] */ 0x00, /* 0x56 [V] */ 0x00, /* 0x57 [W] */ 0x00, /* 0x58 [X] */ 0x00, /* 0x59 [Y] */ 0x00, /* 0x5a [Z] */ 0x00, /* 0x5b [[] */ 0x00, /* 0x5c [\] */ 0x00, /* 0x5d []] */ 0x00, /* 0x5e [^] */ 0x00, /* 0x5f [_] */ 0x00, /* 0x60 [`] */ 0x00, /* 0x61 [a] */ 0x0108, /* 0x62 [b] */ 0x0208, /* 0x63 [c] */ 0x0408, /* 0x64 [d] */ 0x0104, /* 0x65 [e] */ 0x0204, /* 0x66 [f] */ 0x0404, /* 0x67 [g] */ 0x0102, /* 0x68 [h] */ 0x00, /* 0x69 [i] */ 0x00, /* 0x6a [j] */ 0x00, /* 0x6b [k] */ 0x00, /* 0x6c [l] */ 0x00, /* 0x6d [m] */ 0x0480, /* 0x6e [n] */ 0x00, /* 0x6f [o] */ 0x00, /* 0x70 [p] */ 0x00, /* 0x71 [q] */ 0x00, /* 0x72 [r] */ 0x0101, /* 0x73 [s] */ 0x00, /* 0x74 [t] */ 0x00, /* 0x75 [u] */ 0x00, /* 0x76 [v] */ 0x00, /* 0x77 [w] */ 0x00, /* 0x78 [x] */ 0x00, /* 0x79 [y] */ 0x00, /* 0x7a [z] */ 0x00, /* 0x7b [{] */ 0x00, /* 0x7c [|] */ 0x00, /* 0x7d [}] */ 0x00, /* 0x7e [~] */ 0x00, /* 0x7f [.] */ 0x00, /* 0x80 [.] */ 0x00, /* 0x81 [.] */ 0x00, /* 0x82 [.] */ 0x00, /* 0x83 [.] */ 0x00, /* 0x84 [.] */ 0x00, /* 0x85 [.] */ 0x00, /* 0x86 [.] */ 0x00, /* 0x87 [.] */ 0x00, /* 0x88 [.] */ 0x00, /* 0x89 [.] */ 0x00, /* 0x8a [.] */ 0x00, /* 0x8b [.] */ 0x00, /* 0x8c [.] */ 0x00, /* 0x8d [.] */ 0x00, /* 0x8e [.] */ 0x00, /* 0x8f [.] */ 0x00, /* 0x90 [.] */ 0x00, /* 0x91 [.] */ 0x00, /* 0x92 [.] */ 0x00, /* 0x93 [.] */ 0x00, /* 0x94 [.] */ 0x00, /* 0x95 [.] */ 0x00, /* 0x96 [.] */ 0x00, /* 0x97 [.] */ 0x00, /* 0x98 [.] */ 0x00, /* 0x99 [.] */ 0x00, /* 0x9a [.] */ 0x00, /* 0x9b [.] */ 0x00, /* 0x9c [.] */ 0x00, /* 0x9d [.] */ 0x00, /* 0x9e [.] */ 0x00, /* 0x9f [.] */ 0x00, /* 0xa0 [.] */ 0x00, /* 0xa1 [.] */ 0x00, /* 0xa2 [.] */ 0x00, /* 0xa3 [.] */ 0x00, /* 0xa4 [.] */ 0x00, /* 0xa5 [.] */ 0x00, /* 0xa6 [.] */ 0x00, /* 0xa7 [.] */ 0x00, /* 0xa8 [.] */ 0x00, /* 0xa9 [.] */ 0x00, /* 0xaa [.] */ 0x00, /* 0xab [.] */ 0x00, /* 0xac [.] */ 0x00, /* 0xad [.] */ 0x00, /* 0xae [.] */ 0x00, /* 0xaf [.] */ 0x00, /* 0xb0 [.] */ 0x00, /* 0xb1 [.] */ 0x00, /* 0xb2 [.] */ 0x00, /* 0xb3 [.] */ 0x00, /* 0xb4 [.] */ 0x00, /* 0xb5 [.] */ 0x00, /* 0xb6 [.] */ 0x00, /* 0xb7 [.] */ 0x00, /* 0xb8 [.] */ 0x00, /* 0xb9 [.] */ 0x00, /* 0xba [.] */ 0x00, /* 0xbb [.] */ 0x00, /* 0xbc [.] */ 0x00, /* 0xbd [.] */ 0x00, /* 0xbe [.] */ 0x00, /* 0xbf [.] */ 0x00, /* 0xc0 [.] */ 0x00, /* 0xc1 [.] */ 0x00, /* 0xc2 [.] */ 0x00, /* 0xc3 [.] */ 0x00, /* 0xc4 [.] */ 0x00, /* 0xc5 [.] */ 0x00, /* 0xc6 [.] */ 0x00, /* 0xc7 [.] */ 0x00, /* 0xc8 [.] */ 0x00, /* 0xc9 [.] */ 0x00, /* 0xca [.] */ 0x00, /* 0xcb [.] */ 0x00, /* 0xcc [.] */ 0x00, /* 0xcd [.] */ 0x00, /* 0xce [.] */ 0x00, /* 0xcf [.] */ 0x00, /* 0xd0 [.] */ 0x00, /* 0xd1 [.] */ 0x00, /* 0xd2 [.] */ 0x00, /* 0xd3 [.] */ 0x00, /* 0xd4 [.] */ 0x00, /* 0xd5 [.] */ 0x00, /* 0xd6 [.] */ 0x00, /* 0xd7 [.] */ 0x00, /* 0xd8 [.] */ 0x00, /* 0xd9 [.] */ 0x00, /* 0xda [.] */ 0x00, /* 0xdb [.] */ 0x00, /* 0xdc [.] */ 0x00, /* 0xdd [.] */ 0x00, /* 0xde [.] */ 0x00, /* 0xdf [.] */ 0x00, /* 0xe0 [.] */ 0x00, /* 0xe1 [.] */ 0x00, /* 0xe2 [.] */ 0x00, /* 0xe3 [.] */ 0x00, /* 0xe4 [.] */ 0x00, /* 0xe5 [.] */ 0x00, /* 0xe6 [.] */ 0x00, /* 0xe7 [.] */ 0x00, /* 0xe8 [.] */ 0x00, /* 0xe9 [.] */ 0x00, /* 0xea [.] */ 0x00, /* 0xeb [.] */ 0x00, /* 0xec [.] */ 0x00, /* 0xed [.] */ 0x00, /* 0xee [.] */ 0x00, /* 0xef [.] */ 0x00, /* 0xf0 [.] */ 0x00, /* 0xf1 [.] */ 0x00, /* 0xf2 [.] */ 0x00, /* 0xf3 [.] */ 0x00, /* 0xf4 [.] */ 0x00, /* 0xf5 [.] */ 0x00, /* 0xf6 [.] */ 0x00, /* 0xf7 [.] */ 0x00, /* 0xf8 [.] */ 0x00, /* 0xf9 [.] */ 0x00, /* 0xfa [.] */ 0x00, /* 0xfb [.] */ 0x00, /* 0xfc [.] */ 0x00, /* 0xfd [.] */ 0x00, /* 0xfe [.] */ 0x00, /* 0xff [.] */ 0x00, /* 0x100 */ 0x00, /* 0x101 */ 0x00, /* F1 */ /* 0x102 */ 0x00, /* F2 */ /* 0x103 */ 0x00, /* F3 */ /* 0x104 */ 0x00, /* F4 */ /* 0x105 */ 0x00, /* F5 */ /* 0x106 */ 0x00, /* F6 */ /* 0x107 */ 0x00, /* F7 */ /* 0x108 */ 0x00, /* F8 */ /* 0x109 */ 0x00, /* F9 */ /* 0x10a */ 0x00, /* F10 */ /* 0x10b */ 0x00, /* F11 */ /* 0x10c */ 0x00, /* F12 */ /* 0x10d */ 0x00, /* F13 */ /* 0x10e */ 0x00, /* F14 */ /* 0x10f */ 0x00, /* F15 */ /* 0x110 */ 0x00, /* SHIFT */ /* 0x111 */ 0x00, /* CONTROL */ /* 0x112 */ 0x00, /* ALT */ /* 0x113 */ 0x00, /* ALT_GR */ /* 0x114 */ 0x00, /* LEFT */ /* 0x115 */ 0x00, /* RIGHT */ /* 0x116 */ 0x00, /* DOWN */ /* 0x117 */ 0x00, /* UP */ /* 0x118 */ 0x00, /* HOME */ /* 0x119 */ 0x00, /* END */ /* 0x11a */ 0x00, /* DEL */ /* 0x11b */ 0x00, /* INSERT */ /* 0x11c */ 0x00, /* 0x11d */ 0x00, /* 0x11e */ 0x00, /* PAUSE */ /* 0x11f */ 0x00, /* 0x120 */ 0x00, /* COLOR */ /* 0x121 */ 0x00, /* GRAPHIC */ /* 0x122 */ 0x00, /* LIST */ /* 0x123 */ 0x00, /* RUN */ /* 0x124 */ 0x00, /* STOP */ /* 0x125 */ 0x00, /* SHIFT LOCK */ /* 0x126 */ 0x00, /* 0x127 */ 0x00, /* 0x128 */ 0x00, /* 0x129 */ 0x00, /* 0x12a */ 0x00, /* 0x12b */ 0x00, /* 0x12c */ 0x00, /* 0x12d */ 0x00, /* 0x12e */ 0x00, /* 0x12f */ 0x00, }; #endif /* __kc_c80_keydef_h */ KCemu-0.5.1/include/kc/c80/memory.h0000644001050700006200000000330311345001576016301 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_c80_memory_h #define __kc_c80_memory_h #include "kc/system.h" #include "kc/kc.h" #include "kc/memory.h" class MemoryC80 : public Memory { private: byte_t _rom_monitor[0x0400]; byte_t _rom_user[0x0400]; byte_t _ram[0x0400]; MemAreaGroup *_m_scr; /* scratch memory */ MemAreaGroup *_m_rom_monitor; /* ROM Monitor 0000h - 03ffh */ MemAreaGroup *_m_rom_user; /* ROM Monitor 0400h - 07ffh */ MemAreaGroup *_m_ram_mirror; /* RAM (mirrored) 0800h - 0bffh */ MemAreaGroup *_m_ram; /* RAM 0c00h - 0fffh */ public: MemoryC80(void); virtual ~MemoryC80(void); void dumpCore(void); byte_t memRead8(word_t addr); void memWrite8(word_t addr, byte_t val); byte_t * get_irm(void); byte_t * get_char_rom(void); virtual void reset(bool power_on = false); }; #endif /* __kc_c80_memory_h */ KCemu-0.5.1/include/kc/c80/Makefile.am0000644001050700006200000000020411131675406016653 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ display.h \ memory.h \ keydef.h \ keyboard.h \ pio.h KCemu-0.5.1/include/kc/c80/pio.h0000644001050700006200000000265611345001576015572 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_c80_pio_h #define __kc_c80_pio_h #include "kc/pio.h" #include "kc/ports.h" class PIOC80_1 : public PIO { public: PIOC80_1(void); virtual ~PIOC80_1(void); byte_t in(word_t addr); void out(word_t addr, byte_t val); void change_A(byte_t changed, byte_t val); void change_B(byte_t changed, byte_t val); }; class PIOC80_2 : public PIO { public: PIOC80_2(void); virtual ~PIOC80_2(void); byte_t in(word_t addr); void out(word_t addr, byte_t val); void change_A(byte_t changed, byte_t val); void change_B(byte_t changed, byte_t val); }; #endif /* __kc_c80_pio_h */ KCemu-0.5.1/include/kc/c80/keyboard.h0000644001050700006200000000345411345001576016600 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_c80_keyboard_h #define __kc_c80_keyboard_h #include "kc/kc.h" #include "kc/cb.h" #include "kc/pio.h" #include "kc/keyboard.h" class KeyboardC80 : public Keyboard, public PIOCallbackInterface { private: int _key; protected: void init(void); int decode_key(int keysym, bool press); public: KeyboardC80(void); virtual ~KeyboardC80(void); virtual void keyPressed(int keysym, int keycode); virtual void keyReleased(int keysym, int keycode); virtual void replayString(const char *text); virtual void callback(void *data); /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void) {} virtual word_t irqack() { return IRQ_NOT_ACK; } virtual void reset(bool power_on = false); /* * PIOCallbackInterface */ virtual int callback_A_in(void); virtual int callback_B_in(void); virtual void callback_A_out(byte_t val) {} virtual void callback_B_out(byte_t val) {} }; #endif /* __kc_c80_keyboard_h */ KCemu-0.5.1/include/kc/c80/display.h0000644001050700006200000000302511345001576016437 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_c80_display_h #define __kc_c80_display_h #include "kc/cb.h" #include "kc/pio.h" class DisplayC80 : public Callback, public PIOCallbackInterface { private: enum { C80_NR_OF_LEDS = 8, C80_DISPLAY_CB_OFFSET = 2000 }; int _idx; bool _reset; byte_t _led_value[C80_NR_OF_LEDS]; public: DisplayC80(void); virtual ~DisplayC80(void); virtual byte_t get_led_value(int idx); /* * Callback */ virtual void callback(void *data); /* * PIOCallbackInterface */ virtual int callback_A_in(void); virtual int callback_B_in(void); virtual void callback_A_out(byte_t val); virtual void callback_B_out(byte_t val); }; #endif /* __kc_c80_display_h */ KCemu-0.5.1/include/kc/c80/Makefile.in0000644001050700006200000003105611412404770016671 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/kc/c80 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ display.h \ memory.h \ keydef.h \ keyboard.h \ pio.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/kc/c80/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/kc/c80/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/kc/keyb8k.h0000644001050700006200000002066411345001576015605 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_keyb8k_h #define __kc_keyb8k_h /* * * LC80 keyboard matrix * -------------------- * * B2 B3 B4 B5 B6 B7 * (0) (1) (2) (3) (4) (5) * [01] [02] [04] [08] [10] [20] * * * B4 (6) [01] N/C 3 7 B F - * * * B5 (7) [02] LD 2 + E A 6 * * * B6 (8) [04] ST 1 5 9 D DAT * * * B7 (9) [08] EX 0 4 8 C ADR * */ static unsigned int __keys[] = { /* 0x00 [.] */ 0x00, /* 0x01 [.] */ 0x00, /* 0x02 [.] */ 0x00, /* 0x03 [.] */ 0x00, /* 0x04 [.] */ 0x00, /* 0x05 [.] */ 0x00, /* 0x06 [.] */ 0x00, /* 0x07 [.] */ 0x00, /* 0x08 [.] */ 0x00, /* 0x09 [.] */ 0x00, /* 0x0a [.] */ 0x00, /* 0x0b [.] */ 0x00, /* 0x0c [.] */ 0x00, /* 0x0d [.] */ 0x0801, /* ENTER */ /* 0x0e [.] */ 0x00, /* 0x0f [.] */ 0x00, /* 0x10 [.] */ 0x00, /* 0x11 [.] */ 0x00, /* 0x12 [.] */ 0x00, /* 0x13 [.] */ 0x00, /* 0x14 [.] */ 0x00, /* 0x15 [.] */ 0x00, /* 0x16 [.] */ 0x00, /* 0x17 [.] */ 0x00, /* 0x18 [.] */ 0x00, /* 0x19 [.] */ 0x00, /* 0x1a [.] */ 0x00, /* 0x1b [.] */ 0x00, /* 0x1c [.] */ 0x00, /* 0x1d [.] */ 0x00, /* 0x1e [.] */ 0x00, /* 0x1f [.] */ 0x00, /* 0x20 [ ] */ 0x00, /* 0x21 [!] */ 0x00, /* 0x22 ["] */ 0x00, /* 0x23 [#] */ 0x00, /* 0x24 [$] */ 0x00, /* 0x25 [%] */ 0x00, /* 0x26 [&] */ 0x00, /* 0x27 ['] */ 0x00, /* 0x28 [(] */ 0x00, /* 0x29 [)] */ 0x00, /* 0x2a [*] */ 0x00, /* 0x2b [+] */ 0x0204, /* 0x2c [,] */ 0x00, /* 0x2d [-] */ 0x0120, /* 0x2e [.] */ 0x00, /* 0x2f [/] */ 0x00, /* 0x30 [0] */ 0x0802, /* 0x31 [1] */ 0x0402, /* 0x32 [2] */ 0x0202, /* 0x33 [3] */ 0x0102, /* 0x34 [4] */ 0x0804, /* 0x35 [5] */ 0x0404, /* 0x36 [6] */ 0x0220, /* 0x37 [7] */ 0x0104, /* 0x38 [8] */ 0x0808, /* 0x39 [9] */ 0x0408, /* 0x3a [:] */ 0x00, /* 0x3b [;] */ 0x00, /* 0x3c [<] */ 0x00, /* 0x3d [=] */ 0x00, /* 0x3e [>] */ 0x00, /* 0x3f [?] */ 0x00, /* 0x40 [@] */ 0x00, /* 0x41 [A] */ 0x0210, /* 0x42 [B] */ 0x0108, /* 0x43 [C] */ 0x0810, /* 0x44 [D] */ 0x0410, /* 0x45 [E] */ 0x0208, /* 0x46 [F] */ 0x0110, /* 0x47 [G] */ 0x00, /* 0x48 [H] */ 0x00, /* 0x49 [I] */ 0x00, /* 0x4a [J] */ 0x00, /* 0x4b [K] */ 0x00, /* 0x4c [L] */ 0x00, /* 0x4d [M] */ 0x00, /* 0x4e [N] */ 0x00, /* 0x4f [O] */ 0x00, /* 0x50 [P] */ 0x00, /* 0x51 [Q] */ 0x00, /* 0x52 [R] */ 0x00, /* 0x53 [S] */ 0x00, /* 0x54 [T] */ 0x00, /* 0x55 [U] */ 0x00, /* 0x56 [V] */ 0x00, /* 0x57 [W] */ 0x00, /* 0x58 [X] */ 0x00, /* 0x59 [Y] */ 0x00, /* 0x5a [Z] */ 0x00, /* 0x5b [[] */ 0x00, /* 0x5c [\] */ 0x00, /* 0x5d []] */ 0x00, /* 0x5e [^] */ 0x00, /* 0x5f [_] */ 0x00, /* 0x60 [`] */ 0x00, /* 0x61 [a] */ 0x0210, /* 0x62 [b] */ 0x0108, /* 0x63 [c] */ 0x0810, /* 0x64 [d] */ 0x0410, /* 0x65 [e] */ 0x0208, /* 0x66 [f] */ 0x0110, /* 0x67 [g] */ 0x00, /* 0x68 [h] */ 0x00, /* 0x69 [i] */ 0x00, /* 0x6a [j] */ 0x00, /* 0x6b [k] */ 0x00, /* 0x6c [l] */ 0x00, /* 0x6d [m] */ 0x00, /* 0x6e [n] */ 0x00, /* 0x6f [o] */ 0x00, /* 0x70 [p] */ 0x00, /* 0x71 [q] */ 0x00, /* 0x72 [r] */ 0x00, /* 0x73 [s] */ 0x00, /* 0x74 [t] */ 0x00, /* 0x75 [u] */ 0x00, /* 0x76 [v] */ 0x00, /* 0x77 [w] */ 0x00, /* 0x78 [x] */ 0x00, /* 0x79 [y] */ 0x00, /* 0x7a [z] */ 0x00, /* 0x7b [{] */ 0x00, /* 0x7c [|] */ 0x00, /* 0x7d [}] */ 0x00, /* 0x7e [~] */ 0x00, /* 0x7f [.] */ 0x00, /* 0x80 [.] */ 0x00, /* 0x81 [.] */ 0x00, /* 0x82 [.] */ 0x00, /* 0x83 [.] */ 0x00, /* 0x84 [.] */ 0x00, /* 0x85 [.] */ 0x00, /* 0x86 [.] */ 0x00, /* 0x87 [.] */ 0x00, /* 0x88 [.] */ 0x00, /* 0x89 [.] */ 0x00, /* 0x8a [.] */ 0x00, /* 0x8b [.] */ 0x00, /* 0x8c [.] */ 0x00, /* 0x8d [.] */ 0x00, /* 0x8e [.] */ 0x00, /* 0x8f [.] */ 0x00, /* 0x90 [.] */ 0x00, /* 0x91 [.] */ 0x00, /* 0x92 [.] */ 0x00, /* 0x93 [.] */ 0x00, /* 0x94 [.] */ 0x00, /* 0x95 [.] */ 0x00, /* 0x96 [.] */ 0x00, /* 0x97 [.] */ 0x00, /* 0x98 [.] */ 0x00, /* 0x99 [.] */ 0x00, /* 0x9a [.] */ 0x00, /* 0x9b [.] */ 0x00, /* 0x9c [.] */ 0x00, /* 0x9d [.] */ 0x00, /* 0x9e [.] */ 0x00, /* 0x9f [.] */ 0x00, /* 0xa0 [.] */ 0x00, /* 0xa1 [.] */ 0x00, /* 0xa2 [.] */ 0x00, /* 0xa3 [.] */ 0x00, /* 0xa4 [.] */ 0x00, /* 0xa5 [.] */ 0x00, /* 0xa6 [.] */ 0x00, /* 0xa7 [.] */ 0x00, /* 0xa8 [.] */ 0x00, /* 0xa9 [.] */ 0x00, /* 0xaa [.] */ 0x00, /* 0xab [.] */ 0x00, /* 0xac [.] */ 0x00, /* 0xad [.] */ 0x00, /* 0xae [.] */ 0x00, /* 0xaf [.] */ 0x00, /* 0xb0 [.] */ 0x00, /* 0xb1 [.] */ 0x00, /* 0xb2 [.] */ 0x00, /* 0xb3 [.] */ 0x00, /* 0xb4 [.] */ 0x00, /* 0xb5 [.] */ 0x00, /* 0xb6 [.] */ 0x00, /* 0xb7 [.] */ 0x00, /* 0xb8 [.] */ 0x00, /* 0xb9 [.] */ 0x00, /* 0xba [.] */ 0x00, /* 0xbb [.] */ 0x00, /* 0xbc [.] */ 0x00, /* 0xbd [.] */ 0x00, /* 0xbe [.] */ 0x00, /* 0xbf [.] */ 0x00, /* 0xc0 [.] */ 0x00, /* 0xc1 [.] */ 0x00, /* 0xc2 [.] */ 0x00, /* 0xc3 [.] */ 0x00, /* 0xc4 [.] */ 0x00, /* 0xc5 [.] */ 0x00, /* 0xc6 [.] */ 0x00, /* 0xc7 [.] */ 0x00, /* 0xc8 [.] */ 0x00, /* 0xc9 [.] */ 0x00, /* 0xca [.] */ 0x00, /* 0xcb [.] */ 0x00, /* 0xcc [.] */ 0x00, /* 0xcd [.] */ 0x00, /* 0xce [.] */ 0x00, /* 0xcf [.] */ 0x00, /* 0xd0 [.] */ 0x00, /* 0xd1 [.] */ 0x00, /* 0xd2 [.] */ 0x00, /* 0xd3 [.] */ 0x00, /* 0xd4 [.] */ 0x00, /* 0xd5 [.] */ 0x00, /* 0xd6 [.] */ 0x00, /* 0xd7 [.] */ 0x00, /* 0xd8 [.] */ 0x00, /* 0xd9 [.] */ 0x00, /* 0xda [.] */ 0x00, /* 0xdb [.] */ 0x00, /* 0xdc [.] */ 0x00, /* 0xdd [.] */ 0x00, /* 0xde [.] */ 0x00, /* 0xdf [.] */ 0x00, /* 0xe0 [.] */ 0x00, /* 0xe1 [.] */ 0x00, /* 0xe2 [.] */ 0x00, /* 0xe3 [.] */ 0x00, /* 0xe4 [.] */ 0x00, /* 0xe5 [.] */ 0x00, /* 0xe6 [.] */ 0x00, /* 0xe7 [.] */ 0x00, /* 0xe8 [.] */ 0x00, /* 0xe9 [.] */ 0x00, /* 0xea [.] */ 0x00, /* 0xeb [.] */ 0x00, /* 0xec [.] */ 0x00, /* 0xed [.] */ 0x00, /* 0xee [.] */ 0x00, /* 0xef [.] */ 0x00, /* 0xf0 [.] */ 0x00, /* 0xf1 [.] */ 0x00, /* 0xf2 [.] */ 0x00, /* 0xf3 [.] */ 0x00, /* 0xf4 [.] */ 0x00, /* 0xf5 [.] */ 0x00, /* 0xf6 [.] */ 0x00, /* 0xf7 [.] */ 0x00, /* 0xf8 [.] */ 0x00, /* 0xf9 [.] */ 0x00, /* 0xfa [.] */ 0x00, /* 0xfb [.] */ 0x00, /* 0xfc [.] */ 0x00, /* 0xfd [.] */ 0x00, /* 0xfe [.] */ 0x00, /* 0xff [.] */ 0x00, /* 0x100 */ 0x00, /* 0x101 */ 0x0820, /* F1 */ /* 0x102 */ 0x0420, /* F2 */ /* 0x103 */ 0x0201, /* F3 */ /* 0x104 */ 0x0401, /* F4 */ /* 0x105 */ 0x00, /* 0x106 */ 0x00, /* 0x107 */ 0x00, /* 0x108 */ 0x00, /* 0x109 */ 0x00, /* 0x10a */ 0x00, /* 0x10b */ 0x00, /* 0x10c */ 0x00, /* 0x10d */ 0x00, /* 0x10e */ 0x00, /* 0x10f */ 0x00, /* 0x110 */ 0x00, /* SHIFT */ /* 0x111 */ 0x00, /* CONTROL */ /* 0x112 */ 0x00, /* ALT */ /* 0x113 */ 0x00, /* ALT_GR */ /* 0x114 */ 0x00, /* LEFT */ /* 0x115 */ 0x00, /* RIGHT */ /* 0x116 */ 0x00, /* DOWN */ /* 0x117 */ 0x00, /* UP */ /* 0x118 */ 0x00, /* HOME */ /* 0x119 */ 0x00, /* END */ /* 0x11a */ 0x00, /* DEL */ /* 0x11b */ 0x00, /* INSERT */ /* 0x11c */ 0x00, /* 0x11d */ 0x00, /* 0x11e */ 0x00, /* 0x11f */ 0x00, /* 0x120 */ 0x00, /* 0x121 */ 0x00, /* 0x122 */ 0x00, /* 0x123 */ 0x00, /* 0x124 */ 0x00, /* 0x125 */ 0x00, /* 0x126 */ 0x00, /* 0x127 */ 0x00, /* 0x128 */ 0x00, /* 0x129 */ 0x00, /* 0x12a */ 0x00, /* 0x12b */ 0x00, /* 0x12c */ 0x00, /* 0x12d */ 0x00, /* 0x12e */ 0x00, /* 0x12f */ 0x00, }; #endif /* __kc_keyb8k_h */ KCemu-0.5.1/include/kc/module.h0000644001050700006200000000444511345001576015674 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_module_h #define __kc_module_h #include "kc/system.h" #include "kc/ports.h" typedef enum { KC_MODULE_ALL, KC_MODULE_KC_85_1, KC_MODULE_KC_85_3, KC_MODULE_LC_80, KC_MODULE_Z1013, KC_MODULE_A5105, } mod_type_t; class ModuleInterface { private: bool _valid; byte_t _id; char *_name; char *_error_text; mod_type_t _mod_type; public: ModuleInterface(const char *name, byte_t id, mod_type_t mod_type); virtual ~ModuleInterface(void); virtual byte_t m_in(word_t addr); virtual void m_out(word_t addr, byte_t val) = 0; virtual ModuleInterface * clone(void) = 0; virtual void reset(bool power_on = false) = 0; virtual byte_t get_id(void); virtual const char * get_name(void); virtual mod_type_t get_type(void); virtual void set_valid(bool valid); virtual bool is_valid(void); virtual const char * get_error_text(void); virtual void set_error_text(const char *text); }; class Module : public PortInterface { public: enum { NR_MODULES = 64, }; ModuleInterface *_module[NR_MODULES]; private: int get_slot_by_addr(word_t addr); ModuleInterface * get_module_by_addr(word_t addr); public: Module(); virtual ~Module(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); virtual bool is_empty(byte_t slot); virtual void insert(byte_t slot, ModuleInterface *module); virtual void remove(byte_t slot); virtual void reset(bool power_on = false); }; #endif /* __kc_module_h */ KCemu-0.5.1/include/kc/mod_256k.h0000644001050700006200000000242211345001576015726 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_256k_h #define __kc_mod_256k_h #include "kc/mod_segm.h" class Module256k : public ModuleSegmentedMemory { protected: virtual word_t get_base_address(word_t addr, byte_t val); virtual int get_segment_index(word_t addr, byte_t val); public: Module256k(Module256k &tmpl); Module256k(const char *name, byte_t id); virtual ~Module256k(void); virtual ModuleInterface * clone(void); }; #endif /* __kc_mod_256k_h */ KCemu-0.5.1/include/kc/mod_4131.h0000644001050700006200000000303711345001576015632 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_4131_h #define __kc_mod_4131_h #include "kc/pio.h" #include "kc/module.h" class ModuleXY4131 : public ModuleInterface, public PIOCallbackInterface { private: bool _master; byte_t _val; public: ModuleXY4131(ModuleXY4131 &tmpl); ModuleXY4131(const char *name); virtual ~ModuleXY4131(void); /* * PIOCallbackInterface */ virtual int callback_A_in(void); virtual int callback_B_in(void); virtual void callback_A_out(byte_t val); virtual void callback_B_out(byte_t val); /* * ModuleInterface */ virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); }; #endif /* __kc_mod_4131_h */ KCemu-0.5.1/include/kc/ctc_dio.h0000644001050700006200000000303411345001576016004 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_ctc_dio_h #define __kc_ctc_dio_h #include "kc/system.h" #include "kc/ctc_base.h" class CTC_DIO : public CTC_Base { private: public: CTC_DIO(void); virtual ~CTC_DIO(void); virtual bool irq_0(void); virtual bool irq_1(void); virtual bool irq_2(void); virtual bool irq_3(void); virtual long counter_value_0(void); virtual long counter_value_1(void); virtual long counter_value_2(void); virtual long counter_value_3(void); void info(void); /* PortInterface */ byte_t in(word_t addr); void out(word_t addr, byte_t val); void trigger_irq(int channel); void add_callback(unsigned long long offset, Callback *cb, void *data); }; #endif /* __kc_ctc_dio_h */ KCemu-0.5.1/include/kc/pio2.h0000644001050700006200000000246011345001576015253 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_pio2_h #define __kc_pio2_h #include "kc/pio.h" #include "kc/tape.h" class PIO2 : public PIO, public TapeCallback { protected: virtual void change_A(byte_t changed, byte_t val); virtual void change_B(byte_t changed, byte_t val); public: PIO2(void); virtual ~PIO2(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); /* * TapeCallback */ virtual void tape_callback(byte_t val); }; #endif /* __kc_pio2_h */ KCemu-0.5.1/include/kc/pio_dio.h0000644001050700006200000000234611345001576016027 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_pio_dio_h #define __kc_pio_dio_h #include "kc/pio.h" #include "kc/tape.h" class PIO_DIO : public PIO { protected: virtual void change_A(byte_t changed, byte_t val); virtual void change_B(byte_t changed, byte_t val); public: PIO_DIO(void); virtual ~PIO_DIO(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_pio_dio_h */ KCemu-0.5.1/include/kc/mod_segm.h0000644001050700006200000000351211345001576016173 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_segm_h #define __kc_mod_segm_h #include "kc/module.h" #include "kc/memory.h" class ModuleSegmentedMemory : public ModuleInterface { private: byte_t _val; byte_t *_mem; bool _is_rom; bool _master; int _segments; word_t _segment_size; MemAreaGroup *_group; protected: virtual bool is_rom(void); virtual int get_segment_count(void); virtual int get_segment_size(void); virtual int get_segment_index(word_t addr, byte_t val) = 0; virtual word_t get_base_address(word_t addr, byte_t val) = 0; public: ModuleSegmentedMemory(ModuleSegmentedMemory &tmpl); ModuleSegmentedMemory(const char *name, byte_t id, int segments, int segment_size); ModuleSegmentedMemory(const char *name, byte_t id, int segments, int segment_size, const char *filename); virtual ~ModuleSegmentedMemory(void); virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void) = 0; virtual void reset(bool power_on = false); }; #endif /* __kc_mod_segm_h */ KCemu-0.5.1/include/kc/pio9.h0000644001050700006200000000246211345001576015264 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_pio9_h #define __kc_pio9_h #include "kc/pio.h" #include "kc/tape.h" class PIO9 : public PIO, public TapeCallback { protected: virtual void change_A(byte_t changed, byte_t val); virtual void change_B(byte_t changed, byte_t val); public: PIO9(void); virtual ~PIO9(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); /* * TapeCallback */ virtual void tape_callback(byte_t val); }; #endif /* __kc_pio9_h */ KCemu-0.5.1/include/kc/profile.h0000644001050700006200000000175311345001576016046 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_profile_h #define __kc_profile_h typedef enum { PF_MEM_READ, PF_MEM_WRITE, PF_MEM_EXEC } pf_type; #endif /* __kc_profile_h */ KCemu-0.5.1/include/kc/disk_io.h0000644001050700006200000000232511345001576016023 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_disk_io_h #define __kc_disk_io_h #include "kc/system.h" #include "kc/ports.h" class FloppyIO : public PortInterface { private: byte_t _val; bool _bit[4]; public: FloppyIO(void); virtual ~FloppyIO(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); virtual void activate(int bit_nr); }; #endif /* __kc_disk_io_h */ KCemu-0.5.1/include/kc/mod_disk.h0000644001050700006200000000245111345001576016173 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_disk_h #define __kc_mod_disk_h #include "kc/memory.h" #include "kc/mod_rom.h" class ModuleDisk : public ModuleROM { private: int _slot; public: ModuleDisk(ModuleDisk &tmpl); ModuleDisk(const char *rom_key, const char *name, byte_t id, int slot); virtual ~ModuleDisk(void); virtual word_t get_addr(byte_t val); virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); }; #endif /* __kc_mod_disk_h */ KCemu-0.5.1/include/kc/ports.h0000644001050700006200000000517011345001576015552 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_ports_h #define __kc_ports_h #include #include "kc/system.h" class PortInterface { public: PortInterface(void) {} virtual ~PortInterface() {} virtual byte_t in(word_t addr) = 0; virtual void out(word_t addr, byte_t val) = 0; }; class NullPort : public PortInterface { private: char *_name; public: NullPort(const char *name); virtual ~NullPort(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; class PortGroup { private: PortInterface *_p; int _prio; bool _active; byte_t _start; word_t _len; char *_name; public: PortGroup(const char *name, PortInterface *p, byte_t start, word_t len, int prio); virtual ~PortGroup(void); virtual int get_prio(void) { return _prio; } virtual byte_t get_start(void) { return _start; } virtual word_t get_len(void) { return _len; } virtual void set_active(bool active) { _active = active; } virtual bool is_active(void) { return _active; } virtual const char * get_name(void) { return _name; } virtual PortInterface * get_port_if(void) { return _p; } }; class Ports { public: enum { NR_PORTS = 256, }; private: typedef std::list port_list_t; port_list_t _port_list[NR_PORTS]; PortInterface *_port_ptr[NR_PORTS]; protected: virtual void reload_prt_ptr(void); public: Ports(void); virtual ~Ports(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); virtual void insert(port_list_t *l, PortGroup *group); virtual PortGroup * register_ports(const char *name, byte_t start, word_t len, PortInterface *p, int prio); virtual void unregister_ports(PortGroup *p); virtual void info(void); }; #endif /* __kc_ports_h */ KCemu-0.5.1/include/kc/memory.h0000644001050700006200000001316711345001576015720 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_memory_h #define __kc_memory_h #include #include #include "kc/system.h" #include "kc/ic.h" typedef enum { MEM_DISABLED, MEM_WRITE_PROTECT, MEM_ENABLED } MemState; class MemArea; class MemAreaPtr; class MemAreaGroup; class MemArea { public: enum page_vals { PAGE_SHIFT = 10, PAGES = 64, PAGE_MASK = 0x3ff, PAGE_SIZE = 0x400 }; private: int _prio; word_t _addr; bool _active; bool _readonly; bool _read_through; bool _write_through; byte_t *_mem, *_mem_r, *_mem_w; static byte_t *_scratch_r, *_scratch_w; MemAreaGroup *_group; public: MemArea(MemAreaGroup *group, byte_t *mem, word_t addr, int prio, bool ro); virtual ~MemArea(void); const char * get_name(void); word_t get_addr(void); int get_prio(void); void set_active(bool active); void set_readonly(bool ro); void set_read_through(bool rt); void set_write_through(bool wt); inline bool is_active(void) { return _active; } inline bool is_readonly(void) { return _readonly; } inline bool is_read_through(void) { return _read_through; } inline bool is_write_through(void) { return _write_through; } inline byte_t * get_read_ptr(void) { return _mem_r; } inline byte_t * get_write_ptr(void) { return _mem_w; } static inline int PAGE_INDEX(dword_t addr) { return addr >> PAGE_SHIFT; } static inline word_t PAGE_ADDR(int idx) { return idx << PAGE_SHIFT; } }; class MemAreaGroup { private: typedef std::list mem_area_list_t; private: int _prio; bool _active; bool _readonly; bool _read_through; bool _write_through; word_t _addr; dword_t _size; byte_t *_mem; char *_name; mem_area_list_t _l; public: MemAreaGroup(const char *name, word_t addr, dword_t size, byte_t *mem, int prio, bool ro); virtual ~MemAreaGroup(void); void add(MemAreaPtr *area_ptr[]); void remove(MemAreaPtr *area_ptr[]); void set_active(bool active); void set_readonly(bool ro); void set_read_through(bool rt); void set_write_through(bool wt); inline bool is_active(void) { return _active; } inline bool is_readonly(void) { return _readonly; } inline bool is_read_through(void) { return _read_through; } inline bool is_write_through(void) { return _write_through; } inline const char *get_name(void) { return _name; } }; class MemAreaPtr { private: typedef std::list mem_area_list_t; mem_area_list_t _l; public: MemAreaPtr(void); void add(MemArea *area); void remove(MemArea *area); void info(void); inline int size(void) { return _l.size(); } byte_t * get_read_ptr(void); byte_t * get_write_ptr(void); }; typedef struct { MemAreaGroup **group; const char *name; word_t addr; dword_t size; byte_t *mem; int prio; bool ro; bool active; int model; } memory_group_t; class Memory : public InterfaceCircuit { private: MemAreaPtr *_mem_ptr[MemArea::PAGES]; static unsigned int seed_x; /* the seeds for... */ static unsigned int seed_y; /* ...the pseudo random... */ static unsigned int seed_z; /* ...number generator */ public: byte_t *_memrptr[MemArea::PAGES]; byte_t *_memwptr[MemArea::PAGES]; static bool load_rom(const char *key, void *buf); static bool load_rom(const char *filename, void *buf, long len, bool force); protected: static unsigned int mem_rand(); static void mem_rand_seed(unsigned int seed1, unsigned int seed2, unsigned int seed3); void init_memory_groups(memory_group_t mem[]); virtual void loadRAM(const char *filename, word_t addr); void * get_page_addr_r(word_t addr); void * get_page_addr_w(word_t addr); public: Memory(void); virtual ~Memory(void); static void scratch_mem(byte_t *ptr, int len); virtual void dump(word_t addr); virtual void loadRAM(const char *filename); virtual bool loadRAM(std::istream *is, word_t addr); virtual bool loadRAM_Z1013(std::istream *is, word_t addr); virtual bool loadRAM(std::istream *is, bool with_block_nr = false); virtual void info(void); virtual MemAreaPtr ** get_mem_ptr(void); virtual MemAreaGroup * register_memory(const char *name, word_t addr, dword_t size, byte_t *mem, int prio, bool ro); virtual void unregister_memory(MemAreaGroup *group); virtual void reload_mem_ptr(void); virtual void dumpCore(void) = 0; virtual byte_t memRead8(word_t addr) = 0; virtual void memWrite8(word_t addr, byte_t val) = 0; virtual byte_t * get_irm(void) = 0; virtual byte_t * get_char_rom(void) = 0; /* * InterfaceCircuit */ virtual void reti(void) {} virtual void irqreq(void) {} virtual word_t irqack() { return IRQ_NOT_ACK; } virtual void reset(bool power_on = false) = 0; }; #endif /* __kc_memory_h */ KCemu-0.5.1/include/kc/keyb1.h0000644001050700006200000000366011345001576015420 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_keyb1_h #define __kc_keyb1_h #include "kc/kc.h" #include "kc/cb.h" #include "kc/pio.h" #include "kc/keyboard.h" class Keyboard1 : public Keyboard, public PIOCallbackInterface { public: enum { MAX_KEYS = 8, }; private: struct _keybuf { int sym; int code; } _keybuf[MAX_KEYS]; int _shift; int _control; bool _in_callback; protected: void init(void); int decode_key(int keysym, bool press); public: Keyboard1(void); virtual ~Keyboard1(void); virtual void keyPressed(int keysym, int keycode); virtual void keyReleased(int keysym, int keycode); virtual void replayString(const char *text); virtual void callback(void *data); /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void) {} virtual word_t irqack() { return IRQ_NOT_ACK; } virtual void reset(bool power_on = false); /* * PIOCallbackInterface */ virtual int callback_A_in(void); virtual int callback_B_in(void); virtual void callback_A_out(byte_t val) {} virtual void callback_B_out(byte_t val) {} }; #endif /* __kc_keyb1_h */ KCemu-0.5.1/include/kc/ic.h0000644001050700006200000000441111345001576014773 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_ic_h #define __kc_ic_h #include #include #include #include "kc/system.h" #define IRQ_NOT_ACK (0x100) class InterfaceCircuit { private: /** * input value of the daisy chain. */ int _iei; /** * will be set between reti_ED() and reti_4D() by elements * of the daisy chain that have an interrupt pending but * not acknowledged */ int _ieo_reti; /** * interrupt is requested but not yet aknowledged by the cpu */ int _irqreq; /** * interrupt is aknowledged and the interrupt service routine * is still running */ int _irqactive; char *_name; InterfaceCircuit *_next; InterfaceCircuit *_prev; public: InterfaceCircuit(const char *name); virtual ~InterfaceCircuit(void); virtual void debug(void); virtual const char * const get_ic_name(); virtual void reti(void) = 0; virtual void irqreq(void) = 0; virtual word_t irqack(void) = 0; virtual void irq(void); virtual word_t ack(void); virtual void iei(byte_t val); virtual byte_t ieo(void); virtual void prev(InterfaceCircuit *ic); virtual void next(InterfaceCircuit *ic); virtual InterfaceCircuit * get_prev(); virtual InterfaceCircuit * get_next(); virtual InterfaceCircuit * get_first(); virtual InterfaceCircuit * get_last(); virtual void reti_ED(void); virtual void reti_4D(void); virtual void reset(bool power_on = false); }; #endif /* __kc_ic_h */ KCemu-0.5.1/include/kc/fdc9.h0000644001050700006200000000236611345001576015234 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_fdc9_h #define __kc_fdc9_h #include "kc/system.h" #include "kc/fdc.h" class FDC9 : public FDC { public: FDC9(void); virtual ~FDC9(void); virtual long long get_counter(); virtual void add_callback(unsigned long long offset, Callback *cb, void *data); /* * PortInterface */ virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_fdc9_h */ KCemu-0.5.1/include/kc/mod_raf.h0000644001050700006200000000336711345001576016020 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_raf_h #define __kc_mod_raf_h #include "kc/module.h" class ModuleRAF : public ModuleInterface, public PortInterface { private: byte_t *_ram[2]; byte_t _port; dword_t _size; int _prot[2]; dword_t _addr[2]; PortGroup *_portg; public: ModuleRAF(ModuleRAF &tmpl); ModuleRAF(const char *name, byte_t port, dword_t size); virtual ~ModuleRAF(void); virtual byte_t in_ctrl(int card, word_t addr); virtual byte_t in_data(int card, word_t addr); virtual void out_ctrl(int card, word_t addr, byte_t val); virtual void out_data(int card, word_t addr, byte_t val); /* * ModuleInterface */ virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); virtual void m_out(word_t addr, byte_t val); /* * PortInterface */ virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_mod_raf_h */ KCemu-0.5.1/include/kc/keyb3k.h0000644001050700006200000002241411345001576015573 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_keyb3k_h #define __kc_keyb3k_h /* * the lower 8 bits (0-7) of the value in the following array are * the value specified in the system manual * they should be defined by the hardware of the keyboard that * uses an U807 remote control circuit * * if bit 8 is set the shift state must be applied to the key value * before it is send */ static unsigned int __keys[] = { /* 0x00 [.] */ 0xffff, /* 0x01 [.] */ 0x0018, /* 0x02 [.] */ 0x0029, /* 0x03 [.] */ 0x003c, /* 0x04 [.] */ 0xffff, /* 0x05 [.] */ 0xffff, /* 0x06 [.] */ 0xffff, /* 0x07 [.] */ 0xffff, /* 0x08 [.] */ 0x0018, /* 0x09 [.] */ 0x007a, /* 0x0a [.] */ 0x0076, /* 0x0b [.] */ 0x0078, /* 0x0c [.] */ 0x0009, /* 0x0d [.] */ 0x007e, /* ENTER */ /* 0x0e [.] */ 0xffff, /* 0x0f [.] */ 0x0019, /* 0x10 [.] */ 0x0008, /* 0x11 [.] */ 0x0079, /* 0x12 [.] */ 0x0077, /* 0x13 [.] */ 0x004c, /* 0x14 [.] */ 0x0039, /* 0x15 [.] */ 0xffff, /* 0x16 [.] */ 0x0073, /* 0x17 [.] */ 0xffff, /* 0x18 [.] */ 0x007b, /* 0x19 [.] */ 0x0007, /* 0x1a [.] */ 0x0038, /* 0x1b [.] */ 0x004d, /* ESC */ /* 0x1c [.] */ 0xffff, /* 0x1d [.] */ 0xffff, /* 0x1e [.] */ 0xffff, /* 0x1f [.] */ 0x0028, /* 0x20 [ ] */ 0x0046, /* SPACE */ /* 0x21 [!] */ 0x0075, /* 0x22 ["] */ 0x0005, /* 0x23 [#] */ 0x0015, /* 0x24 [$] */ 0x0065, /* 0x25 [%] */ 0x0025, /* 0x26 [&] */ 0x0055, /* 0x27 ['] */ 0x0035, /* 0x28 [(] */ 0x0045, /* 0x29 [)] */ 0x003b, /* 0x2a [*] */ 0x001b, /* 0x2b [+] */ 0x0068, /* 0x2c [,] */ 0x004a, /* 0x2d [-] */ 0x000a, /* 0x2e [.] */ 0x005a, /* 0x2f [/] */ 0x106a, /* 0x30 [0] */ 0x002a, /* 0x31 [1] */ 0x0074, /* 0x32 [2] */ 0x0004, /* 0x33 [3] */ 0x0014, /* 0x34 [4] */ 0x0064, /* 0x35 [5] */ 0x0024, /* 0x36 [6] */ 0x0054, /* 0x37 [7] */ 0x0034, /* 0x38 [8] */ 0x0044, /* 0x39 [9] */ 0x003a, /* 0x3a [:] */ 0x101a, /* 0x3b [;] */ 0x0069, /* 0x3c [<] */ 0x004b, /* 0x3d [=] */ 0x000b, /* 0x3e [>] */ 0x005b, /* 0x3f [?] */ 0x006b, /* 0x40 [@] */ 0x002b, /* 0x41 [A] */ 0x0003, /* 0x42 [B] */ 0x005f, /* 0x43 [C] */ 0x006f, /* 0x44 [D] */ 0x0063, /* 0x45 [E] */ 0x0011, /* 0x46 [F] */ 0x0023, /* 0x47 [G] */ 0x0053, /* 0x48 [H] */ 0x0033, /* 0x49 [I] */ 0x0041, /* 0x4a [J] */ 0x0043, /* 0x4b [K] */ 0x0049, /* 0x4c [L] */ 0x0059, /* 0x4d [M] */ 0x004f, /* 0x4e [N] */ 0x003f, /* 0x4f [O] */ 0x0037, /* 0x50 [P] */ 0x0027, /* 0x51 [Q] */ 0x0071, /* 0x52 [R] */ 0x0061, /* 0x53 [S] */ 0x0013, /* 0x54 [T] */ 0x0021, /* 0x55 [U] */ 0x0031, /* 0x56 [V] */ 0x002f, /* 0x57 [W] */ 0x0001, /* 0x58 [X] */ 0x001f, /* 0x59 [Y] */ 0x000f, /* 0x5a [Z] */ 0x0051, /* 0x5b [[] */ 0x0047, /* 0x5c [\] */ 0xffff, /* 0x5d []] */ 0xffff, /* 0x5e [^] */ 0x0016, /* 0x5f [_] */ 0x1066, /* 0x60 [`] */ 0x002a, /* 0x61 [a] */ 0x0002, /* 0x62 [b] */ 0x005e, /* 0x63 [c] */ 0x006e, /* 0x64 [d] */ 0x0062, /* 0x65 [e] */ 0x0010, /* 0x66 [f] */ 0x0022, /* 0x67 [g] */ 0x0052, /* 0x68 [h] */ 0x0032, /* 0x69 [i] */ 0x0040, /* 0x6a [j] */ 0x0042, /* 0x6b [k] */ 0x0048, /* 0x6c [l] */ 0x0058, /* 0x6d [m] */ 0x004e, /* 0x6e [n] */ 0x003e, /* 0x6f [o] */ 0x0036, /* 0x70 [p] */ 0x0026, /* 0x71 [q] */ 0x0070, /* 0x72 [r] */ 0x0060, /* 0x73 [s] */ 0x0012, /* 0x74 [t] */ 0x0020, /* 0x75 [u] */ 0x0030, /* 0x76 [v] */ 0x002e, /* 0x77 [w] */ 0x0000, /* 0x78 [x] */ 0x001e, /* 0x79 [y] */ 0x000e, /* 0x7a [z] */ 0x0050, /* 0x7b [{] */ 0xffff, /* 0x7c [|] */ 0x0067, /* 0x7d [}] */ 0xffff, /* 0x7e [~] */ 0x0017, /* 0x7f [.] */ 0x0028, /* 0x80 [.] */ 0xffff, /* 0x81 [.] */ 0xffff, /* 0x82 [.] */ 0xffff, /* 0x83 [.] */ 0xffff, /* 0x84 [.] */ 0xffff, /* 0x85 [.] */ 0xffff, /* 0x86 [.] */ 0xffff, /* 0x87 [.] */ 0xffff, /* 0x88 [.] */ 0xffff, /* 0x89 [.] */ 0xffff, /* 0x8a [.] */ 0xffff, /* 0x8b [.] */ 0xffff, /* 0x8c [.] */ 0xffff, /* 0x8d [.] */ 0xffff, /* 0x8e [.] */ 0xffff, /* 0x8f [.] */ 0xffff, /* 0x90 [.] */ 0xffff, /* 0x91 [.] */ 0xffff, /* 0x92 [.] */ 0xffff, /* 0x93 [.] */ 0xffff, /* 0x94 [.] */ 0xffff, /* 0x95 [.] */ 0xffff, /* 0x96 [.] */ 0xffff, /* 0x97 [.] */ 0xffff, /* 0x98 [.] */ 0xffff, /* 0x99 [.] */ 0xffff, /* 0x9a [.] */ 0xffff, /* 0x9b [.] */ 0xffff, /* 0x9c [.] */ 0xffff, /* 0x9d [.] */ 0xffff, /* 0x9e [.] */ 0xffff, /* 0x9f [.] */ 0xffff, /* 0xa0 [.] */ 0xffff, /* 0xa1 [.] */ 0xffff, /* 0xa2 [.] */ 0xffff, /* 0xa3 [.] */ 0xffff, /* 0xa4 [.] */ 0xffff, /* 0xa5 [.] */ 0xffff, /* 0xa6 [.] */ 0xffff, /* 0xa7 [.] */ 0xffff, /* 0xa8 [.] */ 0xffff, /* 0xa9 [.] */ 0xffff, /* 0xaa [.] */ 0xffff, /* 0xab [.] */ 0xffff, /* 0xac [.] */ 0xffff, /* 0xad [.] */ 0xffff, /* 0xae [.] */ 0xffff, /* 0xaf [.] */ 0xffff, /* 0xb0 [�] */ 0x0017, /* 0xb1 [.] */ 0xffff, /* 0xb2 [.] */ 0xffff, /* 0xb3 [.] */ 0xffff, /* 0xb4 [.] */ 0xffff, /* 0xb5 [.] */ 0xffff, /* 0xb6 [.] */ 0xffff, /* 0xb7 [.] */ 0xffff, /* 0xb8 [.] */ 0xffff, /* 0xb9 [.] */ 0xffff, /* 0xba [.] */ 0xffff, /* 0xbb [.] */ 0xffff, /* 0xbc [.] */ 0xffff, /* 0xbd [.] */ 0xffff, /* 0xbe [.] */ 0xffff, /* 0xbf [.] */ 0xffff, /* 0xc0 [.] */ 0xffff, /* 0xc1 [.] */ 0xffff, /* 0xc2 [.] */ 0xffff, /* 0xc3 [.] */ 0xffff, /* 0xc4 [.] */ 0xffff, /* 0xc5 [.] */ 0xffff, /* 0xc6 [.] */ 0xffff, /* 0xc7 [.] */ 0xffff, /* 0xc8 [.] */ 0xffff, /* 0xc9 [.] */ 0xffff, /* 0xca [.] */ 0xffff, /* 0xcb [.] */ 0xffff, /* 0xcc [.] */ 0xffff, /* 0xcd [.] */ 0xffff, /* 0xce [.] */ 0xffff, /* 0xcf [.] */ 0xffff, /* 0xd0 [.] */ 0xffff, /* 0xd1 [.] */ 0xffff, /* 0xd2 [.] */ 0xffff, /* 0xd3 [.] */ 0xffff, /* 0xd4 [.] */ 0xffff, /* 0xd5 [.] */ 0xffff, /* 0xd6 [.] */ 0xffff, /* 0xd7 [.] */ 0xffff, /* 0xd8 [.] */ 0xffff, /* 0xd9 [.] */ 0xffff, /* 0xda [.] */ 0xffff, /* 0xdb [.] */ 0xffff, /* 0xdc [.] */ 0xffff, /* 0xdd [.] */ 0xffff, /* 0xde [.] */ 0xffff, /* 0xdf [.] */ 0xffff, /* 0xe0 [.] */ 0xffff, /* 0xe1 [.] */ 0xffff, /* 0xe2 [.] */ 0xffff, /* 0xe3 [.] */ 0xffff, /* 0xe4 [.] */ 0xffff, /* 0xe5 [.] */ 0xffff, /* 0xe6 [.] */ 0xffff, /* 0xe7 [.] */ 0xffff, /* 0xe8 [.] */ 0xffff, /* 0xe9 [.] */ 0xffff, /* 0xea [.] */ 0xffff, /* 0xeb [.] */ 0xffff, /* 0xec [.] */ 0xffff, /* 0xed [.] */ 0xffff, /* 0xee [.] */ 0xffff, /* 0xef [.] */ 0xffff, /* 0xf0 [.] */ 0xffff, /* 0xf1 [.] */ 0xffff, /* 0xf2 [.] */ 0xffff, /* 0xf3 [.] */ 0xffff, /* 0xf4 [.] */ 0xffff, /* 0xf5 [.] */ 0xffff, /* 0xf6 [.] */ 0xffff, /* 0xf7 [.] */ 0xffff, /* 0xf8 [.] */ 0xffff, /* 0xf9 [.] */ 0xffff, /* 0xfa [.] */ 0xffff, /* 0xfb [.] */ 0xffff, /* 0xfc [.] */ 0xffff, /* 0xfd [.] */ 0xffff, /* 0xfe [.] */ 0xffff, /* 0xff [.] */ 0xffff, /* 0x100 */ 0xffff, /* 0x101 */ 0x007c, /* F1 */ /* 0x102 */ 0x000c, /* F2 */ /* 0x103 */ 0x001c, /* F3 */ /* 0x104 */ 0x006c, /* F4 */ /* 0x105 */ 0x002c, /* F5 */ /* 0x106 */ 0x005c, /* F6 */ /* 0x107 */ 0x007d, /* F7 */ /* 0x108 */ 0x000d, /* F8 */ /* 0x109 */ 0x001d, /* F9 */ /* 0x10a */ 0x006d, /* F10 */ /* 0x10b */ 0x002d, /* F11 */ /* 0x10c */ 0x005d, /* F12 */ /* 0x10d */ 0xffff, /* F13 */ /* 0x10e */ 0xffff, /* F14 */ /* 0x10f */ 0xffff, /* F15 */ /* 0x110 */ 0xffff, /* SHIFT */ /* 0x111 */ 0xffff, /* CONTROL */ /* 0x112 */ 0xffff, /* ALT */ /* 0x113 */ 0xffff, /* ALT_GR */ /* 0x114 */ 0x0006, /* LEFT */ /* 0x115 */ 0x007a, /* RIGHT */ /* 0x116 */ 0x0076, /* DOWN */ /* 0x117 */ 0x0078, /* UP */ /* 0x118 */ 0x0008, /* HOME */ /* 0x119 */ 0x007b, /* END */ /* 0x11a */ 0x0028, /* DEL */ /* 0x11b */ 0x0038, /* INSERT */ /* 0x11c */ 0x007b, /* PAGE_UP */ /* 0x11d */ 0x0007, /* PAGE_DOWN */ /* 0x11e */ 0x004c, /* PAUSE */ /* 0x11f */ 0x003c, /* PRINT */ /* 0x120 */ 0xffff, /* COLOR */ /* 0x121 */ 0xffff, /* GRAPHIC */ /* 0x122 */ 0xffff, /* LIST */ /* 0x123 */ 0xffff, /* RUN */ /* 0x124 */ 0x004c, /* STOP */ /* 0x125 */ 0x0072, /* SHIFT_LOCK */ /* 0x126 */ 0xffff, /* RESET */ /* 0x127 */ 0xffff, /* NMI */ /* 0x128 */ 0x003c, /* BREAK */ /* 0x129 */ 0x0018, /* CLEAR */ /* 0x12a */ 0xffff, /* 0x12b */ 0xffff, /* 0x12c */ 0xffff, /* 0x12d */ 0xffff, /* 0x12e */ 0xffff, /* 0x12f */ 0xffff, }; #endif /* __kc_keyb3k_h */ KCemu-0.5.1/include/kc/ctc3.h0000644001050700006200000000271611345001576015242 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_ctc3_h #define __kc_ctc3_h #include "kc/system.h" #include "kc/ctc_base.h" class CTC3 : public CTC_Base { private: enum { CHANNEL_2_CLK = 70000 // 25 Hz }; public: CTC3(void); virtual ~CTC3(void); virtual bool irq_0(void); virtual bool irq_1(void); virtual bool irq_2(void); virtual bool irq_3(void); virtual long counter_value_0(void); virtual long counter_value_1(void); virtual long counter_value_2(void); virtual long counter_value_3(void); void info(void); /* PortInterface */ byte_t in(word_t addr); void out(word_t addr, byte_t val); }; #endif /* __kc_ctc3_h */ KCemu-0.5.1/include/kc/fdc7.h0000644001050700006200000000236611345001576015232 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_fdc7_h #define __kc_fdc7_h #include "kc/system.h" #include "kc/fdc.h" class FDC7 : public FDC { public: FDC7(void); virtual ~FDC7(void); virtual long long get_counter(); virtual void add_callback(unsigned long long offset, Callback *cb, void *data); /* * PortInterface */ virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_fdc7_h */ KCemu-0.5.1/include/kc/pio3.h0000644001050700006200000000252211345001576015253 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_pio3_h #define __kc_pio3_h #include "kc/pio.h" #include "kc/tape.h" class PIO3 : public PIO, public TapeCallback { protected: virtual byte_t in_A_DATA(void); virtual void change_A(byte_t changed, byte_t val); virtual void change_B(byte_t changed, byte_t val); public: PIO3(void); virtual ~PIO3(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); /* * TapeCallback */ virtual void tape_callback(byte_t val); }; #endif /* __kc_pio3_h */ KCemu-0.5.1/include/kc/Makefile.am0000644001050700006200000000315011345001576016262 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in SUBDIRS = prefs kcnet kramermc muglerpc vcs80 c80 EXTRA_DIST = \ cb.h \ ic.h \ kc.h \ ctc.h \ ctc1.h \ ctc3.h \ ctc6.h \ ctc8.h \ ctc9.h \ ctc_fdc.h \ pio_dio.h \ pio_vdip.h \ ctc_dio.h \ ctc_base.h \ cb_list.h \ daisy.h \ keyboard.h \ keyb0.h \ keyb0k.h \ keyb1.h \ keyb1k.h \ keyb3.h \ keyb3k.h \ keyb6.h \ keyb8.h \ keyb8k.h \ keyb9.h \ keyb9k.h \ keys.h \ memory.h \ memoryif.h \ memory0.h \ memory1.h \ memory2.h \ memory3.h \ memory4.h \ memory5.h \ memory6.h \ memory7.h \ memory8.h \ memory9.h \ pio.h \ pio0.h \ pio1.h \ pio2.h \ pio3.h \ pio4.h \ pio6.h \ pio8.h \ pio9.h \ ports.h \ ports0.h \ ports4.h \ ports6.h \ plotter.h \ sh_mem.h \ disk_io.h \ gdc.h \ vis.h \ svg.h \ gide.h \ vdip.h \ fdc.h \ fdc0s.h \ fdc4.h \ fdc7.h \ fdc9.h \ fdc_cmd.h \ floppy.h \ module.h \ mod_dio.h \ mod_vdip.h \ mod_ram.h \ mod_ram1.h \ mod_r16.h \ mod_r64.h \ mod_cpm.h \ mod_ram8.h \ mod_64k.h \ mod_128k.h \ mod_256k.h \ mod_512k.h \ mod_1m.h \ mod_4m.h \ mod_rom.h \ mod_urom.h \ mod_auto.h \ mod_rom1.h \ mod_romb.h \ mod_raf.h \ mod_192k.h \ mod_320k.h \ mod_ramf.h \ mod_fdc.h \ mod_gdc.h \ mod_rtc.h \ mod_disk.h \ mod_v24.h \ mod_js.h \ mod_4131.h \ mod_m052.h \ mod_segm.h \ mod_boot.h \ mod_list.h \ profile.h \ tape.h \ disk.h \ timer.h \ timer1.h \ timer3.h \ wav.h \ sound.h \ sound3.h \ sound8.h \ poly880.h \ z80.h \ z80_fdc.h \ romdi.h \ system.h \ memstream.h \ disass.h \ basicrun.h \ basicrun.asm KCemu-0.5.1/include/kc/timer1.h0000644001050700006200000000223111345001576015577 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_timer1_h #define __kc_timer1_h #include "kc/kc.h" #include "kc/timer.h" class Timer1 : public Timer { private: byte_t _flash; public: Timer1(void); virtual ~Timer1(void); virtual byte_t get_flash(); virtual void start(void); virtual void callback(void *data); }; #endif /* __kc_timer1_h */ KCemu-0.5.1/include/kc/keyb3.h0000644001050700006200000000571711345001576015427 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_keyb3_h #define __kc_keyb3_h #include "kc/kc.h" #include "kc/cb.h" #include "kc/keyboard.h" /* * serial keyboard protocol (U807/ SAB 3011) * * bit 0 = 5.120 ms = 5 * 64 * 16�s * bit 1 = 7.168 ms = 7 * 64 * 16�s * * Tw = 14.336 ms = 14 * 64 * 16�s (time between repeated words) * Tdw = 19.456 ms = 19 * 64 * 16�s (time between double words) * * Every keypress is encoded by sending a double word (2 x 7 bits) * with a delay (Tw) between both words. * If the key remains pressed the the double word is repeated * immedately after the first double word (delay = Tdw) * * The delay before the user visible key repeat is done by the * KC ROM-software! * * Key release is determined by CTC interrupt. The timer is * loaded with a value of 143 (and clock divider = 256) which * gives a timeout (Tto) of about 21 ms. * * KC85/4 runs with 1.75 MHz which gives the following cycle * counts for the delays above: * * 1 cycle is 1/1750000 seconds = 0.0005714 ms = 0.5714 �s * * bit 0 = 5.120 ms => 8960 cycles * bit 1 = 7.168 ms => 12544 cycles * Tw = 14.336 ms => 25088 cycles * Tdw = 19.456 ms => 34048 cycles * Tto = 20.918 ms => 36608 cycles */ class Keyboard3 : public Keyboard { private: int _key; int _lock; int _keysym; int _release; bool _shift; bool _control; int _replay_idx; int _replay_offset; //GString *_replay_text; enum { KEY_CYCLES_BIT_0 = 8960, KEY_CYCLES_BIT_1 = 12544, KEY_CYCLES_T_W = 25088, KEY_CYCLES_T_DW = 34048, KEY_CYCLES_T_TO = 36608, }; CMD *_cmd; protected: void init(void); void sendKey(void); int checkReplay(void); public: Keyboard3(void); virtual ~Keyboard3(void); virtual void keyPressed(int keysym, int keycode); virtual void keyReleased(int keysym, int keycode); virtual void replayString(const char *text); virtual void callback(void *data); /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void) {} virtual word_t irqack() { return IRQ_NOT_ACK; } virtual void reset(bool power_on = false); }; #endif /* __kc_keyb3_h */ KCemu-0.5.1/include/kc/ctc9.h0000644001050700006200000000257311345001576015251 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_ctc9_h #define __kc_ctc9_h #include "kc/system.h" #include "kc/ctc_base.h" class CTC9 : public CTC_Base { public: CTC9(void); virtual ~CTC9(void); virtual bool irq_0(void); virtual bool irq_1(void); virtual bool irq_2(void); virtual bool irq_3(void); virtual long counter_value_0(void); virtual long counter_value_1(void); virtual long counter_value_2(void); virtual long counter_value_3(void); /* PortInterface */ byte_t in(word_t addr); void out(word_t addr, byte_t val); }; #endif /* __kc_ctc9_h */ KCemu-0.5.1/include/kc/pio.h0000644001050700006200000001072611345001576015175 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_pio_h #define __kc_pio_h #include "kc/system.h" #include "kc/ic.h" #include "kc/ports.h" class PIOCallbackInterface { public: PIOCallbackInterface(void) {} virtual ~PIOCallbackInterface(void) {} virtual int callback_A_in(void) = 0; virtual int callback_B_in(void) = 0; virtual void callback_A_out(byte_t val) = 0; virtual void callback_B_out(byte_t val) = 0; }; class PIO : public InterfaceCircuit, public PortInterface { protected: enum { A = 0, B = 1, }; enum { MODE_OUTPUT = 0, MODE_INPUT = 1, MODE_BIDIRECTIONAL = 2, MODE_CONTROL = 3, }; /* * track first out instruction to allow complete * initialisation */ bool _first_out[2]; /* * external value */ byte_t _ext[2]; /* * value of the logical function that triggers the irq in bit-mode * */ byte_t _ext_fn[2]; /* * pio mode: 0 - byte output * 1 - byte input * 2 - byte input/output * 3 - bit input/output */ byte_t _mode[2]; byte_t _bit_mode[2]; bool _bit_mode_follows[2]; /* * interrupt vector: */ byte_t _irq_vector[2]; /* * interrupt control: 0 - irq disabled * 1 - irq enabled */ byte_t _irq[2]; /* * interrupt logic: */ byte_t _irq_mask[2]; byte_t _irq_h_l[2]; byte_t _irq_and_or[2]; bool _irq_mask_follows[2]; /* * interrupt enable input/ output */ byte_t _irq_enable[2]; byte_t _irq_active[2]; byte_t _strobe[2]; byte_t _ready[2]; byte_t _value[2]; /* * interrupt mask for daisy chain handling */ dword_t _z80_irq_mask; /* * callbacks */ PIOCallbackInterface *_cb_a_in; PIOCallbackInterface *_cb_a_out; PIOCallbackInterface *_cb_b_in; PIOCallbackInterface *_cb_b_out; void out_CTRL(int port, byte_t val); void set_EXT(int port, byte_t mask, byte_t val); void trigger_irq(int port); virtual void change_A(byte_t changed, byte_t val) = 0; virtual void change_B(byte_t changed, byte_t val) = 0; public: PIO(void); virtual ~PIO(void); virtual void info(void); virtual byte_t in_A_DATA(void); virtual byte_t in_B_DATA(void); virtual byte_t in_A_CTRL(void); virtual byte_t in_B_CTRL(void); virtual void out_A_DATA(byte_t val); virtual void out_B_DATA(byte_t val); virtual void out_A_CTRL(byte_t val); virtual void out_B_CTRL(byte_t val); virtual void set_A_EXT(byte_t mask, byte_t val); virtual void set_B_EXT(byte_t mask, byte_t val); virtual void strobe_A(void); virtual void strobe_B(void); virtual int ready_A(void); virtual int ready_B(void); virtual byte_t getModeA(void) { return _mode[A]; } virtual byte_t getModeB(void) { return _mode[B]; } virtual byte_t getIRQA(void) { return _irq[A]; } virtual byte_t getIRQB(void) { return _irq[B]; } virtual byte_t getIRQVectorA(void) { return _irq_vector[A]; } virtual byte_t getIRQVectorB(void) { return _irq_vector[B]; } /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void); virtual word_t irqack(void); virtual void reset(bool power_on = false); /* * callback registering functions */ virtual void register_callback_A_in(PIOCallbackInterface *cbi); virtual void register_callback_A_out(PIOCallbackInterface *cbi); virtual void register_callback_B_in(PIOCallbackInterface *cbi); virtual void register_callback_B_out(PIOCallbackInterface *cbi); }; #endif /* __kc_pio_h */ KCemu-0.5.1/include/kc/mod_dio.h0000644001050700006200000000253011345001576016012 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_dio_h #define __kc_mod_dio_h #include "kc/module.h" class ModuleDIO : public ModuleInterface { private: CTC *_ctc; PIO *_pio; PortGroup *_portg_ctc; PortGroup *_portg_pio; public: ModuleDIO(ModuleDIO &tmpl); ModuleDIO(const char *name, byte_t id); virtual ~ModuleDIO(void); //virtual byte_t m_in(word_t addr); virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); }; #endif /* __kc_mod_dio_h */ KCemu-0.5.1/include/kc/timer3.h0000644001050700006200000000213611345001576015605 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_timer3_h #define __kc_timer3_h #include "kc/kc.h" #include "kc/timer.h" class Timer3 : public Timer { public: Timer3(void); virtual ~Timer3(void); virtual void start(void); virtual void callback(void *data); }; #endif /* __kc_timer3_h */ KCemu-0.5.1/include/kc/poly880.h0000644001050700006200000000217211345001576015625 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_poly880_h #define __kc_poly880_h #include "kc/system.h" class Poly880 { private: bool _scon; bool _nmi_flip_flop; public: Poly880(void); virtual ~Poly880(void); virtual void set_scon(bool value); virtual void trigger_send(void); }; #endif /* __kc_poly880_h */ KCemu-0.5.1/include/kc/mod_ram.h0000644001050700006200000000253411345001576016022 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_ram_h #define __kc_mod_ram_h #include "kc/module.h" #include "kc/memory.h" class ModuleRAM : public ModuleInterface { private: enum { RAM_SIZE = 0x4000, }; byte_t _val; byte_t *_ram; MemAreaGroup *_group; public: ModuleRAM(ModuleRAM &tmpl); ModuleRAM(const char *name, byte_t id); virtual ~ModuleRAM(void); virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); }; #endif /* __kc_mod_ram_h */ KCemu-0.5.1/include/kc/ctc_base.h0000644001050700006200000000243511345001576016147 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_ctc_base_h #define __kc_ctc_base_h #include "kc/ctc.h" class CTC_Base : public CTC { private: dword_t _z80_irq_mask; protected: virtual long long get_counter(); virtual void trigger_irq(int channel); virtual void add_callback(unsigned long long offset, Callback *cb, void *data); virtual void irqreq(void); virtual word_t irqack(void); public: CTC_Base(void); virtual ~CTC_Base(void); }; #endif /* __kc_ctc_base_h */ KCemu-0.5.1/include/kc/disass.h0000644001050700006200000000250011345001576015663 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __disass_h #define __disass_h typedef enum { _none, _r_A, _r_B, _r_C, _r_D, _r_E, _r_H, _r_L, _r_BC, _r_DE, _r_HL, _r_SP, _r_AF, _p_BC, _p_DE, _p_HL, _p_SP, _p_IXd, _p_IYd, _p_nn, _i_n, _i_nn, _i_e, _x_0, _x_1, _x_2, _x_3, _x_4, _x_5, _x_6, _x_7, _x_00h, _x_08h,_x_10h, _x_18h, _x_20h, _x_28h, _x_30h, _x_38h } arg_t; typedef struct { char *op; arg_t dest; arg_t src; } opcodes_t; typedef int (*opcode_func_t)(char *, int, int); #endif /* __disass_h */ KCemu-0.5.1/include/kc/memstream.h0000644001050700006200000000647311345001576016404 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_memstream_h #define __kc_memstream_h #include #include #include "kc/config.h" using namespace std; class membuf : public std::streambuf { private: int _idx; int _size; int _bufsize; unsigned char *_data; protected: virtual int overflow(int c = EOF) { unsigned char *tmp; //std::cout << "overflow()" << std::endl; if (_size >= _bufsize) { _bufsize *= 2; tmp = new unsigned char[_bufsize]; memcpy(tmp, _data, _size); delete _data; _data = tmp; } _data[_size++] = c; return c; } /* * read character and advance input pointer */ virtual int uflow(void) { int c; if (_idx >= _size) c = EOF; else c = _data[_idx++]; //std::cout << "uflow(): " << c << std::endl; return c; } /* * read character but don't advance input pointer */ virtual int underflow(void) { //std::cout << "underflow()" << std::endl; if (_idx >= _size) return EOF; return _data[_idx]; } /* * put character back onto the input stream */ virtual int pbackfail(int c = EOF) { //std::cout << "pbackfail()" << std::endl; if (c != EOF) { _data[_idx] = c; if (_idx > 0) _idx--; } return c; } public: membuf(void) { _idx = 0; _size = 0; _bufsize = 1024; _data = new unsigned char[_bufsize]; } membuf(unsigned char *data, int size) { _idx = 0; _size = size; _bufsize = size; _data = new unsigned char[size]; memcpy(_data, data, size); } virtual int tellg(void) { return _idx; } virtual int peek() { return underflow(); } virtual int size(void) { return _size; } virtual const char * data(void) { return (const char *)_data; } }; class memstream : public std::iostream { private: membuf _buf; public: memstream(void) : std::iostream(&_buf) { } memstream(unsigned char *data, int size) : std::iostream(&_buf), _buf(data, size) { } /* * not correctly overwritten, will not be called via a * reference of type istream */ virtual int tellg(void) { return _buf.tellg(); } /* * not correctly overwritten, will not be called via a * reference of type istream */ virtual int peek() { //std::cout << "peek()" << std::endl; return _buf.peek(); } virtual int size(void) { return _buf.size(); } virtual const char * str(void) { return _buf.data(); } }; #endif /* __kc_memstream_h */ KCemu-0.5.1/include/kc/ctc_fdc.h0000644001050700006200000000312111345001576015762 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_ctc_fdc_h #define __kc_ctc_fdc_h #include "kc/system.h" #include "kc/ctc.h" class CTC_FDC : public CTC { private: protected: virtual long long get_counter(); virtual void trigger_irq(int channel); virtual void add_callback(unsigned long long offset, Callback *cb, void *data); public: CTC_FDC(void); virtual ~CTC_FDC(void); virtual bool irq_0(void); virtual bool irq_1(void); virtual bool irq_2(void); virtual bool irq_3(void); virtual long counter_value_0(void); virtual long counter_value_1(void); virtual long counter_value_2(void); virtual long counter_value_3(void); void info(void); /* PortInterface */ byte_t in(word_t addr); void out(word_t addr, byte_t val); }; #endif /* __kc_ctc_fdc_h */ KCemu-0.5.1/include/kc/mod_vdip.h0000644001050700006200000000247211345001576016206 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_vdip_h #define __kc_mod_vdip_h #include "kc/module.h" class ModuleVDIP : public ModuleInterface { private: PIO *_pio; PortGroup *_portg_pio; public: ModuleVDIP(ModuleVDIP &tmpl); ModuleVDIP(const char *name, byte_t id); virtual ~ModuleVDIP(void); //virtual byte_t m_in(word_t addr); virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); }; #endif /* __kc_mod_vdip_h */ KCemu-0.5.1/include/kc/cb.h0000644001050700006200000000251011345001576014762 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_cb_h #define __kc_cb_h #include #include #include #include "kc/kc.h" class Callback { private: char *_name; public: Callback(const char *name = 0) { if (name != 0) _name = strdup(name); else _name = strdup("unknown"); } virtual ~Callback(void) { free(_name); } virtual void callback(void *data) = 0; virtual const char * get_name(void) { return _name; } }; #endif /* __kc_cb_h */ KCemu-0.5.1/include/kc/vis.h0000644001050700006200000000357011345001576015206 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_vis_h #define __kc_vis_h #include "kc/system.h" #include "kc/ic.h" #include "kc/ports.h" class VIS : public PortInterface, public InterfaceCircuit { private: int _idx; int _mode; int _border; int _color[4]; byte_t _char[0x0800]; byte_t _changed[0x100]; int _color_palette_changed; public: VIS(void); virtual ~VIS(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); virtual int get_mode(void); virtual void set_mode(int mode); virtual int get_border(void); virtual void set_border(int border); virtual int get_color(int idx); virtual void set_color(int idx, int color); virtual int get_changed(byte_t idx); virtual void reset_changed(void); virtual int is_color_palette_changed(void); virtual void reset_color_palette_changed(void); virtual byte_t * get_memory(void); /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void); virtual word_t irqack(void); virtual void reset(bool power_on = false); }; #endif /* __kc_vis_h */ KCemu-0.5.1/include/kc/mod_boot.h0000644001050700006200000000303011345001576016176 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_boot_h #define __kc_mod_boot_h #include "kc/mod_rom1.h" #include "kc/memoryif.h" class ModuleBOOT : public ModuleROM1, public MemoryInterface { private: bool _romdi_handling; protected: virtual void set_active(bool active); public: ModuleBOOT(ModuleBOOT &tmpl); ModuleBOOT(const char *filename, const char *name, word_t addr, dword_t size = 0x4000, bool set_romdi = false); virtual ~ModuleBOOT(void); virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); /* * MemoryInterface */ byte_t memory_read_byte(word_t addr); void memory_write_byte(word_t addr, byte_t val); }; #endif /* __kc_mod_boot_h */ KCemu-0.5.1/include/kc/mod_4m.h0000644001050700006200000000255211345001576015563 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_4m_h #define __kc_mod_4m_h #include "kc/mod_1m.h" class Module4M : public ModuleInterface { private: Module1M *_master[4]; ModuleInterface *_module[4]; protected: Module1M * get_master(int idx); public: Module4M(Module4M &tmpl); Module4M(const char *name, byte_t id); virtual ~Module4M(void); virtual byte_t m_in(word_t addr); virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); }; #endif /* __kc_mod_4m_h */ KCemu-0.5.1/include/kc/mod_urom.h0000644001050700006200000000233411345001576016223 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_urom_h #define __kc_mod_urom_h #include "kc/mod_rom.h" class ModuleUserROM : public ModuleROM { public: ModuleUserROM(ModuleUserROM &tmpl); ModuleUserROM(const char *filename, const char *name, dword_t size, byte_t id); virtual ~ModuleUserROM(void); virtual word_t get_addr(byte_t val); virtual ModuleInterface * clone(void); }; #endif /* __kc_mod_urom_h */ KCemu-0.5.1/include/kc/ctc1.h0000644001050700006200000000265211345001576015237 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_ctc1_h #define __kc_ctc1_h #include "kc/system.h" #include "kc/ctc_base.h" class CTC1 : public CTC_Base { private: unsigned long long _last_irq_0; public: CTC1(void); virtual ~CTC1(void); virtual bool irq_0(void); virtual bool irq_1(void); virtual bool irq_2(void); virtual bool irq_3(void); virtual long counter_value_0(void); virtual long counter_value_1(void); virtual long counter_value_2(void); virtual long counter_value_3(void); /* PortInterface */ byte_t in(word_t addr); void out(word_t addr, byte_t val); }; #endif /* __kc_ctc1_h */ KCemu-0.5.1/include/kc/sh_mem.h0000644001050700006200000000233511345001576015653 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_sh_mem_h #define __kc_sh_mem_h #include "kc/system.h" #include "kc/ports.h" class FloppySharedMem : public PortInterface { private: byte_t *_mem; public: FloppySharedMem(void); virtual ~FloppySharedMem(void); virtual void set_memory(byte_t *mem); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_sh_mem_h */ KCemu-0.5.1/include/kc/memory8.h0000644001050700006200000000364711345001576016012 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_memory8_h #define __kc_memory8_h #include "kc/system.h" #include "kc/kc.h" #include "kc/memory.h" class Memory8 : public Memory { private: byte_t _ram[0x1000]; /* 0x400 for 1k & 2k, 0x1000 for lc80e */ byte_t _rom[0x0800]; byte_t _rom1[0x0400]; byte_t _rom2[0x0400]; byte_t _rome[0x3000]; MemAreaGroup *_m_scr; /* scratch memory */ MemAreaGroup *_m_ram; /* RAM 2000h - 23ffh */ MemAreaGroup *_m_rom; /* ROM 0000h - 07ffh (2k variant) */ MemAreaGroup *_m_rom1; /* ROM 0000h - 03ffh (1k variant) */ MemAreaGroup *_m_rom2; /* ROM 0800h - 0bffh (1k variant) */ MemAreaGroup *_m_rome1; /* ROM 0000h - 0fffh (LC80e) */ MemAreaGroup *_m_rome2; /* ROM 1000h - 1fffh (LC80e) */ MemAreaGroup *_m_rome5; /* ROM c000h - cfffh (LC80e) */ public: Memory8(void); virtual ~Memory8(void); void dumpCore(void); byte_t memRead8(word_t addr); void memWrite8(word_t addr, byte_t val); byte_t * get_irm(void); byte_t * get_char_rom(void); virtual void reset(bool power_on = false); }; #endif /* __kc_memory8_h */ KCemu-0.5.1/include/kc/mod_auto.h0000644001050700006200000000254311345001576016213 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_auto_h #define __kc_mod_auto_h #include "kc/mod_rom.h" class ModuleAutoStart : public ModuleROM { private: enum { PAGE_SIZE = 0x4000, }; public: ModuleAutoStart(ModuleAutoStart &tmpl); ModuleAutoStart(byte_t *rom, const char *name, dword_t size, byte_t id); virtual ~ModuleAutoStart(void); virtual word_t get_addr(byte_t val); virtual dword_t get_size(byte_t val); virtual byte_t * get_rom_ptr(byte_t val); virtual ModuleInterface * clone(void); }; #endif /* __kc_mod_auto_h */ KCemu-0.5.1/include/kc/disk.h0000644001050700006200000000306411345001576015335 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_disk_h #define __kc_disk_h #include "kc/system.h" typedef enum { DISK_OK, DISK_NOENT, DISK_ERROR, } disk_error_t; typedef enum { DISK_TYPE_UNKNOWN, DISK_TYPE_22DSK, DISK_TYPE_CDM, DISK_TYPE_KCD, } disk_type_t; class Disk { private: CMD *_cmd; protected: bool create_disk_file(FILE *f); bool write_sector(FILE *f, int c, int h, int s); public: Disk(void); virtual ~Disk(void); virtual disk_error_t attach(int disk_no, const char *filename, bool create = false); virtual disk_error_t detach(int disk_no); bool seek(int head, int cylinder, int sector); int read_sector(byte_t *buf, int len); int write_sector(byte_t *buf, int len); }; #endif /* __kc_disk_h */ KCemu-0.5.1/include/kc/mod_192k.h0000644001050700006200000000404611345001576015731 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_192k_h #define __kc_mod_192k_h #include "kc/module.h" #include "kc/memory.h" class Module192k : public ModuleInterface, public PortInterface { private: byte_t _val; bool _master; byte_t *_ram_D1; /* 32k SRAM 62256 */ byte_t *_rom_D2; /* 64k EPROM 27512 */ byte_t *_rom_D3; /* 32k EPROM 27256 */ byte_t *_ram_D4; /* 32k SRAM 62256 */ byte_t *_rom_D5; /* 8k EPROM 2764 */ byte_t *_ram_D6; /* 8k SRAM 5164 */ PortGroup *_portg; MemAreaGroup *_m_4000; /* 4k RAM (D1) switchable by S1 */ MemAreaGroup *_m_6000; /* 4k RAM (D1) switchable by S2 */ MemAreaGroup *_m_8000; /* 4k RAM (D1) switchable by S3 */ MemAreaGroup *_m_a000; /* 4k RAM (D1) switchable by S4 */ MemAreaGroup *_m_c000[16]; MemAreaGroup *_m_e000[16]; protected: void init(void); public: Module192k(Module192k &tmpl); Module192k(const char *d2, const char *d3, const char *d5, const char *name); virtual ~Module192k(void); virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); /* * PortInterface */ virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_mod_192k_h */ KCemu-0.5.1/include/kc/keyb8.h0000644001050700006200000000336111345001576015425 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_keyb8_h #define __kc_keyb8_h #include "kc/kc.h" #include "kc/cb.h" #include "kc/pio.h" #include "kc/keyboard.h" class Keyboard8 : public Keyboard, public PIOCallbackInterface { private: unsigned int _key; protected: void init(void); public: Keyboard8(void); virtual ~Keyboard8(void); virtual void keyPressed(int keysym, int keycode); virtual void keyReleased(int keysym, int keycode); virtual void replayString(const char *text); virtual void callback(void *data); /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void) {} virtual word_t irqack() { return IRQ_NOT_ACK; } virtual void reset(bool power_on = false); /* * PIOCallbackInterface */ virtual int callback_A_in(void); virtual int callback_B_in(void); virtual void callback_A_out(byte_t val) {} virtual void callback_B_out(byte_t val) {} }; #endif /* __kc_keyb8_h */ KCemu-0.5.1/include/kc/fdc0s.h0000644001050700006200000000237411345001576015405 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_fdc0s_h #define __kc_fdc0s_h #include "kc/system.h" #include "kc/fdc.h" class FDC0S : public FDC { public: FDC0S(void); virtual ~FDC0S(void); virtual long long get_counter(); virtual void add_callback(unsigned long long offset, Callback *cb, void *data); /* * PortInterface */ virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_fdc0s_h */ KCemu-0.5.1/include/kc/system.h0000644001050700006200000000247611345001576015735 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_system_h #define __kc_system_h #include "kc/config.h" #ifdef ENABLE_NLS # ifdef USE_INCLUDED_LIBINTL # include "../../intl/libintl.h" # else # include # endif # define _(x) (gettext(x)) # ifdef gettext_noop # define N_(x) gettext_noop(x) # else # define N_(x) (x) # endif #else # define _(x) (x) # define N_(x) x #endif /* ENABLE_NLS */ typedef unsigned char byte_t; typedef unsigned short word_t; typedef unsigned long dword_t; #endif /* __kc_system_h */ KCemu-0.5.1/include/kc/mod_list.h0000644001050700006200000000516311345001576016217 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_list_h #define __kc_mod_list_h #include #include #include #include "kc/system.h" #include "kc/prefs/types.h" #include "kc/kc.h" #include "kc/module.h" using namespace std; class ModuleListEntry { private: char *_name; kc_type_t _type; ModuleInterface *_mod; public: ModuleListEntry(const char *name, ModuleInterface *mod, kc_type_t type) { _mod = mod; _type = type; _name = strdup(name); } virtual ~ModuleListEntry(void) { free(_name); } virtual ModuleInterface * get_mod(void) { return _mod; } virtual const char * get_name(void) { return _name; } virtual kc_type_t get_kc_type() { return _type; } }; class ModuleList { private: enum { MAX_BD = 4, }; int _nr_of_bd; char *_init_mod[4 * MAX_BD + 2]; ModuleListEntry *_color_expansion; ModuleListEntry *_init_floppy_basis_f8; ModuleListEntry *_init_floppy_basis_fc; ModuleListEntry *_init_color_expansion; public: typedef list mod_list_t; typedef mod_list_t::iterator iterator; private: mod_list_t _mod_list; protected: virtual void add_custom_modules(void); virtual void init_modules(int max_modules); virtual int init_modules_autostart(int idx); virtual int init_modules_configfile(int idx, int max_modules); virtual int init_modules_commandline(int idx, int max_modules, const char *param); public: ModuleList(void); virtual ~ModuleList(void); virtual void init(void); virtual int get_nr_of_busdrivers(void) { return _nr_of_bd; } ModuleListEntry * get_color_expansion(); virtual void insert(int slot, ModuleListEntry *entry); virtual iterator begin(void) { return _mod_list.begin(); } virtual iterator end(void) { return _mod_list.end(); } }; #endif /* __kc_mod_list_h */ KCemu-0.5.1/include/kc/keyb9k.h0000644001050700006200000002103611345001576015600 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_keyb9k_h #define __kc_keyb9k_h /* * (1) (2) (3) (4) (5) (6) (7) (8) (low) * * (1) 0 1 2 3 4 5 6 7 * (2) 8 9 < + � � � # * (3) ' ? , . - a b * (4) c d e f g h i j * (5) k l m n o p q r * (6) s t u v w x y z * (7) SHIFT ESC CTRL SHLCK ALT F5 F4 F3 * (8) F2 F1 STOP ENTER * (9) SPACE HOME INS DEL LEFT UP DOWN RIGHT */ static unsigned int __keys[] = { /* 0x00 [.] */ 0x00, /* 0x01 [.] */ 0x00, /* 0x02 [.] */ 0x00, /* 0x03 [.] */ 0x00, /* 0x04 [.] */ 0x00, /* 0x05 [.] */ 0x00, /* 0x06 [.] */ 0x00, /* 0x07 [.] */ 0x00, /* 0x08 [.] */ 0x00, /* 0x09 [.] */ 0x00, /* 0x0a [.] */ 0x00, /* 0x0b [.] */ 0x00, /* 0x0c [.] */ 0x00, /* 0x0d [.] */ 0x88, /* ENTER */ /* 0x0e [.] */ 0x00, /* 0x0f [.] */ 0x00, /* 0x10 [.] */ 0x00, /* 0x11 [.] */ 0x00, /* 0x12 [.] */ 0x00, /* 0x13 [.] */ 0x00, /* 0x14 [.] */ 0x00, /* 0x15 [.] */ 0x00, /* 0x16 [.] */ 0x00, /* 0x17 [.] */ 0x00, /* 0x18 [.] */ 0x00, /* 0x19 [.] */ 0x00, /* 0x1a [.] */ 0x00, /* 0x1b [.] */ 0x72, /* ESC | CL LN */ /* 0x1c [.] */ 0x00, /* 0x1d [.] */ 0x00, /* 0x1e [.] */ 0x00, /* 0x1f [.] */ 0x00, /* 0x20 [ ] */ 0x91, /* SPACE */ /* 0x21 [!] */ 0x12, /* 0x22 ["] */ 0x13, /* 0x23 [#] */ 0x28, /* 0x24 [$] */ 0x15, /* 0x25 [%] */ 0x16, /* 0x26 [&] */ 0x17, /* 0x27 ['] */ 0x31, /* 0x28 [(] */ 0x21, /* 0x29 [)] */ 0x22, /* 0x2a [*] */ 0x24, /* 0x2b [+] */ 0x24, /* 0x2c [,] */ 0x33, /* 0x2d [-] */ 0x35, /* 0x2e [.] */ 0x34, /* 0x2f [/] */ 0x18, /* 0x30 [0] */ 0x11, /* 0x31 [1] */ 0x12, /* 0x32 [2] */ 0x13, /* 0x33 [3] */ 0x14, /* 0x34 [4] */ 0x15, /* 0x35 [5] */ 0x16, /* 0x36 [6] */ 0x17, /* 0x37 [7] */ 0x18, /* 0x38 [8] */ 0x21, /* 0x39 [9] */ 0x22, /* 0x3a [:] */ 0x34, /* 0x3b [;] */ 0x33, /* 0x3c [<] */ 0x23, /* 0x3d [=] */ 0x11, /* 0x3e [>] */ 0x00, /* 0x3f [?] */ 0x23, /* 0x40 [@] */ 0x00, /* 0x41 [A] */ 0x37, /* 0x42 [B] */ 0x38, /* 0x43 [C] */ 0x41, /* 0x44 [D] */ 0x42, /* 0x45 [E] */ 0x43, /* 0x46 [F] */ 0x44, /* 0x47 [G] */ 0x45, /* 0x48 [H] */ 0x46, /* 0x49 [I] */ 0x47, /* 0x4a [J] */ 0x48, /* 0x4b [K] */ 0x51, /* 0x4c [L] */ 0x52, /* 0x4d [M] */ 0x53, /* 0x4e [N] */ 0x54, /* 0x4f [O] */ 0x55, /* 0x50 [P] */ 0x56, /* 0x51 [Q] */ 0x57, /* 0x52 [R] */ 0x58, /* 0x53 [S] */ 0x61, /* 0x54 [T] */ 0x62, /* 0x55 [U] */ 0x63, /* 0x56 [V] */ 0x64, /* 0x57 [W] */ 0x65, /* 0x58 [X] */ 0x66, /* 0x59 [Y] */ 0x67, /* 0x5a [Z] */ 0x68, /* 0x5b [[] */ 0x00, /* 0x5c [\] */ 0x14, /* 0x5d []] */ 0x00, /* 0x5e [^] */ 0x00, /* 0x5f [_] */ 0x35, /* 0x60 [`] */ 0x00, /* 0x61 [a] */ 0x37, /* 0x62 [b] */ 0x38, /* 0x63 [c] */ 0x41, /* 0x64 [d] */ 0x42, /* 0x65 [e] */ 0x43, /* 0x66 [f] */ 0x44, /* 0x67 [g] */ 0x45, /* 0x68 [h] */ 0x46, /* 0x69 [i] */ 0x47, /* 0x6a [j] */ 0x48, /* 0x6b [k] */ 0x51, /* 0x6c [l] */ 0x52, /* 0x6d [m] */ 0x53, /* 0x6e [n] */ 0x54, /* 0x6f [o] */ 0x55, /* 0x70 [p] */ 0x56, /* 0x71 [q] */ 0x57, /* 0x72 [r] */ 0x58, /* 0x73 [s] */ 0x61, /* 0x74 [t] */ 0x62, /* 0x75 [u] */ 0x63, /* 0x76 [v] */ 0x64, /* 0x77 [w] */ 0x65, /* 0x78 [x] */ 0x66, /* 0x79 [y] */ 0x67, /* 0x7a [z] */ 0x68, /* 0x7b [{] */ 0x00, /* 0x7c [|] */ 0x00, /* 0x7d [}] */ 0x00, /* 0x7e [~] */ 0x00, /* 0x7f [.] */ 0x00, /* 0x80 [.] */ 0x00, /* 0x81 [.] */ 0x00, /* 0x82 [.] */ 0x00, /* 0x83 [.] */ 0x00, /* 0x84 [.] */ 0x00, /* 0x85 [.] */ 0x00, /* 0x86 [.] */ 0x00, /* 0x87 [.] */ 0x00, /* 0x88 [.] */ 0x00, /* 0x89 [.] */ 0x00, /* 0x8a [.] */ 0x00, /* 0x8b [.] */ 0x00, /* 0x8c [.] */ 0x00, /* 0x8d [.] */ 0x00, /* 0x8e [.] */ 0x00, /* 0x8f [.] */ 0x00, /* 0x90 [.] */ 0x00, /* 0x91 [.] */ 0x00, /* 0x92 [.] */ 0x00, /* 0x93 [.] */ 0x00, /* 0x94 [.] */ 0x00, /* 0x95 [.] */ 0x00, /* 0x96 [.] */ 0x00, /* 0x97 [.] */ 0x00, /* 0x98 [.] */ 0x00, /* 0x99 [.] */ 0x00, /* 0x9a [.] */ 0x00, /* 0x9b [.] */ 0x00, /* 0x9c [.] */ 0x00, /* 0x9d [.] */ 0x00, /* 0x9e [.] */ 0x00, /* 0x9f [.] */ 0x00, /* 0xa0 [.] */ 0x00, /* 0xa1 [.] */ 0x00, /* 0xa2 [.] */ 0x00, /* 0xa3 [.] */ 0x00, /* 0xa4 [.] */ 0x00, /* 0xa5 [.] */ 0x00, /* 0xa6 [.] */ 0x00, /* 0xa7 [.] */ 0x00, /* 0xa8 [.] */ 0x00, /* 0xa9 [.] */ 0x00, /* 0xaa [.] */ 0x00, /* 0xab [.] */ 0x00, /* 0xac [.] */ 0x00, /* 0xad [.] */ 0x00, /* 0xae [.] */ 0x00, /* 0xaf [.] */ 0x00, /* 0xb0 [.] */ 0x00, /* 0xb1 [.] */ 0x00, /* 0xb2 [.] */ 0x00, /* 0xb3 [.] */ 0x00, /* 0xb4 [.] */ 0x00, /* 0xb5 [.] */ 0x00, /* 0xb6 [.] */ 0x00, /* 0xb7 [.] */ 0x00, /* 0xb8 [.] */ 0x00, /* 0xb9 [.] */ 0x00, /* 0xba [.] */ 0x00, /* 0xbb [.] */ 0x00, /* 0xbc [.] */ 0x00, /* 0xbd [.] */ 0x00, /* 0xbe [.] */ 0x00, /* 0xbf [.] */ 0x00, /* 0xc0 [.] */ 0x00, /* 0xc1 [.] */ 0x00, /* 0xc2 [.] */ 0x00, /* 0xc3 [.] */ 0x00, /* 0xc4 [.] */ 0x00, /* 0xc5 [.] */ 0x00, /* 0xc6 [.] */ 0x00, /* 0xc7 [.] */ 0x00, /* 0xc8 [.] */ 0x00, /* 0xc9 [.] */ 0x00, /* 0xca [.] */ 0x00, /* 0xcb [.] */ 0x00, /* 0xcc [.] */ 0x00, /* 0xcd [.] */ 0x00, /* 0xce [.] */ 0x00, /* 0xcf [.] */ 0x00, /* 0xd0 [.] */ 0x00, /* 0xd1 [.] */ 0x00, /* 0xd2 [.] */ 0x00, /* 0xd3 [.] */ 0x00, /* 0xd4 [.] */ 0x00, /* 0xd5 [.] */ 0x00, /* 0xd6 [.] */ 0x00, /* 0xd7 [.] */ 0x00, /* 0xd8 [.] */ 0x00, /* 0xd9 [.] */ 0x00, /* 0xda [.] */ 0x00, /* 0xdb [.] */ 0x00, /* 0xdc [.] */ 0x00, /* 0xdd [.] */ 0x00, /* 0xde [.] */ 0x00, /* 0xdf [.] */ 0x00, /* 0xe0 [.] */ 0x00, /* 0xe1 [.] */ 0x00, /* 0xe2 [.] */ 0x00, /* 0xe3 [.] */ 0x00, /* 0xe4 [.] */ 0x00, /* 0xe5 [.] */ 0x00, /* 0xe6 [.] */ 0x00, /* 0xe7 [.] */ 0x00, /* 0xe8 [.] */ 0x00, /* 0xe9 [.] */ 0x00, /* 0xea [.] */ 0x00, /* 0xeb [.] */ 0x00, /* 0xec [.] */ 0x00, /* 0xed [.] */ 0x00, /* 0xee [.] */ 0x00, /* 0xef [.] */ 0x00, /* 0xf0 [.] */ 0x00, /* 0xf1 [.] */ 0x00, /* 0xf2 [.] */ 0x00, /* 0xf3 [.] */ 0x00, /* 0xf4 [.] */ 0x00, /* 0xf5 [.] */ 0x00, /* 0xf6 [.] */ 0x00, /* 0xf7 [.] */ 0x00, /* 0xf8 [.] */ 0x00, /* 0xf9 [.] */ 0x00, /* 0xfa [.] */ 0x00, /* 0xfb [.] */ 0x00, /* 0xfc [.] */ 0x00, /* 0xfd [.] */ 0x00, /* 0xfe [.] */ 0x00, /* 0xff [.] */ 0x00, /* 0x100 */ 0x00, /* 0x101 */ 0x82, /* F1 */ /* 0x102 */ 0x81, /* F2 */ /* 0x103 */ 0x78, /* F3 */ /* 0x104 */ 0x77, /* F4 */ /* 0x105 */ 0x76, /* F5 */ /* 0x106 */ 0x00, /* 0x107 */ 0x83, /* 0x108 */ 0x84, /* 0x109 */ 0x85, /* 0x10a */ 0x86, /* 0x10b */ 0x87, /* 0x10c */ 0x36, /* 0x10d */ 0x00, /* 0x10e */ 0x00, /* 0x10f */ 0x00, /* 0x110 */ 0x71, /* SHIFT */ /* 0x111 */ 0x73, /* CONTROL */ /* 0x112 */ 0x75, /* ALT */ /* 0x113 */ 0x00, /* ALT_GR */ /* 0x114 */ 0x95, /* LEFT */ /* 0x115 */ 0x98, /* RIGHT */ /* 0x116 */ 0x97, /* DOWN */ /* 0x117 */ 0x96, /* UP */ /* 0x118 */ 0x92, /* HOME */ /* 0x119 */ 0x00, /* END */ /* 0x11a */ 0x94, /* DEL */ /* 0x11b */ 0x93, /* INSERT */ /* 0x11c */ 0x00, /* 0x11d */ 0x00, /* 0x11e */ 0x85, /* PAUSE */ /* 0x11f */ 0x00, /* 0x120 */ 0x00, /* COLOR */ /* 0x121 */ 0x00, /* GRAPHIC */ /* 0x122 */ 0x00, /* LIST */ /* 0x123 */ 0x00, /* RUN */ /* 0x124 */ 0x00, /* STOP */ /* 0x125 */ 0x74, /* SHIFT LOCK */ /* 0x126 */ 0x00, /* 0x127 */ 0x00, /* 0x128 */ 0x00, /* 0x129 */ 0x00, /* 0x12a */ 0x00, /* 0x12b */ 0x00, /* 0x12c */ 0x00, /* 0x12d */ 0x00, /* 0x12e */ 0x00, /* 0x12f */ 0x00, }; #endif /* __kc_keyb9k_h */ KCemu-0.5.1/include/kc/memory6.h0000644001050700006200000000400511345001576015775 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_memory6_h #define __kc_memory6_h #include "kc/system.h" #include "kc/kc.h" #include "kc/memory.h" class Memory6 : public Memory { private: byte_t _rom0[0x1000]; // holds the first poly880 rom or the sc1 chess rom byte_t _rom1[0x0400]; byte_t _rom2[0x0400]; byte_t _rom3[0x0400]; byte_t _ram[0x0400]; MemAreaGroup *_m_scr; /* scratch memory */ MemAreaGroup *_m_rom0; /* ROM 0000h - 03ffh */ MemAreaGroup *_m_rom1; /* ROM 1000h - 13ffh */ MemAreaGroup *_m_rom2; /* ROM 2000h - 23ffh */ MemAreaGroup *_m_rom3; /* ROM 3000h - 33ffh */ MemAreaGroup *_m_rom_sc1; /* ROM 0000h - 0fffh (SC1 chess rom) */ MemAreaGroup *_m_ram; /* RAM 4000h - 43ffh */ public: Memory6(void); virtual ~Memory6(void); void dumpCore(void); inline byte_t memRead8(word_t addr) { return _memrptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK]; } inline void memWrite8(word_t addr, byte_t val) { _memwptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK] = val; } byte_t * get_irm(void); byte_t * get_char_rom(void); virtual void reset(bool power_on = false); }; #endif /* __kc_memory6_h */ KCemu-0.5.1/include/kc/keyb1k.h0000644001050700006200000002564611345001576015603 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_keyb1k_h #define __kc_keyb1k_h /* * 01 (1) 02 (2) 04 (3) 08 (4) 10 (5) 20 (6) 40 (7) 80 (8) (low nibble) * | | | | | | | | * *-[0_]-* *-[1!]-* *-[2"]-* *-[3#]-+ *-[4$]-* *-[5%]-* *-[6&]-* *-[7']-* * | | | | | | | | | | | | | | | | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+------*--01 (1) * | | | | | | | | * *-[8(]-* *-[9)]-* *-[:*]-* *-[;+]-+ *-[,<]-* *-[=-]-* *-[.>]-* *-[?/]-* * | | | | | | | | | | | | | | | | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+------*--02 (2) * | | | | | | | | * *-[@ ]-* *-[Aa]-* *-[Bb]-* *-[Cc]-+ *-[Dd]-* *-[Ee]-* *-[Ff]-* *-[Gg]-* * | | | | | | | | | | | | | | | | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+------*--04 (3) * | | | | | | | | * *-[Hh]-* *-[Ii]-* *-[Jj]-* *-[Kk]-+ *-[Ll]-* *-[Mm]-* *-[Nn]-* *-[Oo]-* * | | | | | | | | | | | | | | | | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+------*--08 (4) * | | | | | | | | * *-[Pp]-* *-[Qq]-* *-[Rr]-* *-[Ss]-+ *-[Tt]-* *-[Uu]-* *-[Vv]-* *-[Ww]-* * | | | | | | | | | | | | | | | | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+------*--10 (5) * | | | | | | | | * *-[Xx]-* *-[Yy]-* *-[Zz]-* *-[*a]-+ *-[*b]-* *-[*c]-* *-[^ ]-* | * | | | | | | | | | | | | | | | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+---------20 (6) * | | | | | | | | * *-[*d]-* *-[*e]-* *-[*f]-* *-[*g]-+ *-[*h]-* *-[*i]-* *-[*j]-* *-[*k]-* * | | | | | | | | | | | | | | | | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+------*--40 (7) * | | | | | | | * *-[*l]-* *-[*m]-* *-[*n]-* *-[*o]-+ *-[*p]-* *-[*q]-* *-[*r]-* * | | | | | | | * *--------*--------*--------*--------*--------*--------*-----------80 (8) * * *a = |<- ->| *j = STOP * *b = PAUSE CONT *k = SPACE * *c = INS DEL *l = SHIFT * *d = <- *m = COLOR * *e = -> *n = CONTR * *f = DOWN *o = GRAPHIC * *g = UP *p = LIST * *h = ESC CL LN *q = RUN * *i = ENTER *r = SHIFT LOCK * */ static unsigned int __keys[] = { /* 0x00 [.] */ 0x00, /* 0x01 [.] */ 0x00, /* 0x02 [.] */ 0x00, /* 0x03 [.] */ 0x00, /* 0x04 [.] */ 0x00, /* 0x05 [.] */ 0x00, /* 0x06 [.] */ 0x00, /* 0x07 [.] */ 0x00, /* 0x08 [.] */ 0x00, /* 0x09 [.] */ 0x00, /* 0x0a [.] */ 0x00, /* 0x0b [.] */ 0x00, /* 0x0c [.] */ 0x00, /* 0x0d [.] */ 0x76, /* ENTER */ /* 0x0e [.] */ 0x00, /* 0x0f [.] */ 0x00, /* 0x10 [.] */ 0x00, /* 0x11 [.] */ 0x00, /* 0x12 [.] */ 0x00, /* 0x13 [.] */ 0x00, /* 0x14 [.] */ 0x00, /* 0x15 [.] */ 0x00, /* 0x16 [.] */ 0x00, /* 0x17 [.] */ 0x00, /* 0x18 [.] */ 0x00, /* 0x19 [.] */ 0x00, /* 0x1a [.] */ 0x00, /* 0x1b [.] */ 0x75, /* ESC | CL LN */ /* 0x1c [.] */ 0x00, /* 0x1d [.] */ 0x00, /* 0x1e [.] */ 0x00, /* 0x1f [.] */ 0x00, /* 0x20 [ ] */ 0x78, /* SPACE */ /* 0x21 [!] */ 0x8112, /* 0x22 ["] */ 0x8113, /* 0x23 [#] */ 0x8114, /* 0x24 [$] */ 0x8115, /* 0x25 [%] */ 0x8116, /* 0x26 [&] */ 0x8117, /* 0x27 ['] */ 0x8118, /* 0x28 [(] */ 0x8121, /* 0x29 [)] */ 0x8122, /* 0x2a [*] */ 0x8123, /* 0x2b [+] */ 0x8124, /* 0x2c [,] */ 0x25, /* 0x2d [-] */ 0x8126, /* 0x2e [.] */ 0x27, /* 0x2f [/] */ 0x8128, /* 0x30 [0] */ 0x11, /* 0x31 [1] */ 0x12, /* 0x32 [2] */ 0x13, /* 0x33 [3] */ 0x14, /* 0x34 [4] */ 0x15, /* 0x35 [5] */ 0x16, /* 0x36 [6] */ 0x17, /* 0x37 [7] */ 0x18, /* 0x38 [8] */ 0x21, /* 0x39 [9] */ 0x22, /* 0x3a [:] */ 0x23, /* 0x3b [;] */ 0x24, /* 0x3c [<] */ 0x25, /* 0x3d [=] */ 0x26, /* 0x3e [>] */ 0x8127, /* 0x3f [?] */ 0x28, /* 0x40 [@] */ 0x31, /* 0x41 [A] */ 0x8132, /* 0x42 [B] */ 0x8133, /* 0x43 [C] */ 0x8134, /* 0x44 [D] */ 0x8135, /* 0x45 [E] */ 0x8136, /* 0x46 [F] */ 0x8137, /* 0x47 [G] */ 0x8138, /* 0x48 [H] */ 0x8141, /* 0x49 [I] */ 0x8142, /* 0x4a [J] */ 0x8143, /* 0x4b [K] */ 0x8144, /* 0x4c [L] */ 0x8145, /* 0x4d [M] */ 0x8146, /* 0x4e [N] */ 0x8147, /* 0x4f [O] */ 0x8148, /* 0x50 [P] */ 0x8151, /* 0x51 [Q] */ 0x8152, /* 0x52 [R] */ 0x8153, /* 0x53 [S] */ 0x8154, /* 0x54 [T] */ 0x8155, /* 0x55 [U] */ 0x8156, /* 0x56 [V] */ 0x8157, /* 0x57 [W] */ 0x8158, /* 0x58 [X] */ 0x8161, /* 0x59 [Y] */ 0x8162, /* 0x5a [Z] */ 0x8163, /* 0x5b [[] */ 0x00, /* 0x5c [\] */ 0x00, /* 0x5d []] */ 0x00, /* 0x5e [^] */ 0x67, /* 0x5f [_] */ 0x8111, /* 0x60 [`] */ 0x00, /* 0x61 [a] */ 0x32, /* 0x62 [b] */ 0x33, /* 0x63 [c] */ 0x34, /* 0x64 [d] */ 0x35, /* 0x65 [e] */ 0x36, /* 0x66 [f] */ 0x37, /* 0x67 [g] */ 0x38, /* 0x68 [h] */ 0x41, /* 0x69 [i] */ 0x42, /* 0x6a [j] */ 0x43, /* 0x6b [k] */ 0x44, /* 0x6c [l] */ 0x45, /* 0x6d [m] */ 0x46, /* 0x6e [n] */ 0x47, /* 0x6f [o] */ 0x48, /* 0x70 [p] */ 0x51, /* 0x71 [q] */ 0x52, /* 0x72 [r] */ 0x53, /* 0x73 [s] */ 0x54, /* 0x74 [t] */ 0x55, /* 0x75 [u] */ 0x56, /* 0x76 [v] */ 0x57, /* 0x77 [w] */ 0x58, /* 0x78 [x] */ 0x61, /* 0x79 [y] */ 0x62, /* 0x7a [z] */ 0x63, /* 0x7b [{] */ 0x00, /* 0x7c [|] */ 0x00, /* 0x7d [}] */ 0x00, /* 0x7e [~] */ 0x00, /* 0x7f [.] */ 0x00, /* 0x80 [.] */ 0x00, /* 0x81 [.] */ 0x00, /* 0x82 [.] */ 0x00, /* 0x83 [.] */ 0x00, /* 0x84 [.] */ 0x00, /* 0x85 [.] */ 0x00, /* 0x86 [.] */ 0x00, /* 0x87 [.] */ 0x00, /* 0x88 [.] */ 0x00, /* 0x89 [.] */ 0x00, /* 0x8a [.] */ 0x00, /* 0x8b [.] */ 0x00, /* 0x8c [.] */ 0x00, /* 0x8d [.] */ 0x00, /* 0x8e [.] */ 0x00, /* 0x8f [.] */ 0x00, /* 0x90 [.] */ 0x00, /* 0x91 [.] */ 0x00, /* 0x92 [.] */ 0x00, /* 0x93 [.] */ 0x00, /* 0x94 [.] */ 0x00, /* 0x95 [.] */ 0x00, /* 0x96 [.] */ 0x00, /* 0x97 [.] */ 0x00, /* 0x98 [.] */ 0x00, /* 0x99 [.] */ 0x00, /* 0x9a [.] */ 0x00, /* 0x9b [.] */ 0x00, /* 0x9c [.] */ 0x00, /* 0x9d [.] */ 0x00, /* 0x9e [.] */ 0x00, /* 0x9f [.] */ 0x00, /* 0xa0 [.] */ 0x00, /* 0xa1 [.] */ 0x00, /* 0xa2 [.] */ 0x00, /* 0xa3 [.] */ 0x00, /* 0xa4 [.] */ 0x00, /* 0xa5 [.] */ 0x00, /* 0xa6 [.] */ 0x00, /* 0xa7 [.] */ 0x00, /* 0xa8 [.] */ 0x00, /* 0xa9 [.] */ 0x00, /* 0xaa [.] */ 0x00, /* 0xab [.] */ 0x00, /* 0xac [.] */ 0x00, /* 0xad [.] */ 0x00, /* 0xae [.] */ 0x00, /* 0xaf [.] */ 0x00, /* 0xb0 [.] */ 0x00, /* 0xb1 [.] */ 0x00, /* 0xb2 [.] */ 0x00, /* 0xb3 [.] */ 0x00, /* 0xb4 [.] */ 0x00, /* 0xb5 [.] */ 0x00, /* 0xb6 [.] */ 0x00, /* 0xb7 [.] */ 0x00, /* 0xb8 [.] */ 0x00, /* 0xb9 [.] */ 0x00, /* 0xba [.] */ 0x00, /* 0xbb [.] */ 0x00, /* 0xbc [.] */ 0x00, /* 0xbd [.] */ 0x00, /* 0xbe [.] */ 0x00, /* 0xbf [.] */ 0x00, /* 0xc0 [.] */ 0x00, /* 0xc1 [.] */ 0x00, /* 0xc2 [.] */ 0x00, /* 0xc3 [.] */ 0x00, /* 0xc4 [.] */ 0x00, /* 0xc5 [.] */ 0x00, /* 0xc6 [.] */ 0x00, /* 0xc7 [.] */ 0x00, /* 0xc8 [.] */ 0x00, /* 0xc9 [.] */ 0x00, /* 0xca [.] */ 0x00, /* 0xcb [.] */ 0x00, /* 0xcc [.] */ 0x00, /* 0xcd [.] */ 0x00, /* 0xce [.] */ 0x00, /* 0xcf [.] */ 0x00, /* 0xd0 [.] */ 0x00, /* 0xd1 [.] */ 0x00, /* 0xd2 [.] */ 0x00, /* 0xd3 [.] */ 0x00, /* 0xd4 [.] */ 0x00, /* 0xd5 [.] */ 0x00, /* 0xd6 [.] */ 0x00, /* 0xd7 [.] */ 0x00, /* 0xd8 [.] */ 0x00, /* 0xd9 [.] */ 0x00, /* 0xda [.] */ 0x00, /* 0xdb [.] */ 0x00, /* 0xdc [.] */ 0x00, /* 0xdd [.] */ 0x00, /* 0xde [.] */ 0x00, /* 0xdf [.] */ 0x00, /* 0xe0 [.] */ 0x00, /* 0xe1 [.] */ 0x00, /* 0xe2 [.] */ 0x00, /* 0xe3 [.] */ 0x00, /* 0xe4 [.] */ 0x00, /* 0xe5 [.] */ 0x00, /* 0xe6 [.] */ 0x00, /* 0xe7 [.] */ 0x00, /* 0xe8 [.] */ 0x00, /* 0xe9 [.] */ 0x00, /* 0xea [.] */ 0x00, /* 0xeb [.] */ 0x00, /* 0xec [.] */ 0x00, /* 0xed [.] */ 0x00, /* 0xee [.] */ 0x00, /* 0xef [.] */ 0x00, /* 0xf0 [.] */ 0x00, /* 0xf1 [.] */ 0x00, /* 0xf2 [.] */ 0x00, /* 0xf3 [.] */ 0x00, /* 0xf4 [.] */ 0x00, /* 0xf5 [.] */ 0x00, /* 0xf6 [.] */ 0x00, /* 0xf7 [.] */ 0x00, /* 0xf8 [.] */ 0x00, /* 0xf9 [.] */ 0x00, /* 0xfa [.] */ 0x00, /* 0xfb [.] */ 0x00, /* 0xfc [.] */ 0x00, /* 0xfd [.] */ 0x00, /* 0xfe [.] */ 0x00, /* 0xff [.] */ 0x00, /* 0x100 */ 0x00, /* 0x101 */ 0x00, /* 0x102 */ 0x00, /* 0x103 */ 0x00, /* 0x104 */ 0x00, /* 0x105 */ 0x00, /* 0x106 */ 0x00, /* 0x107 */ 0x00, /* 0x108 */ 0x00, /* 0x109 */ 0x00, /* 0x10a */ 0x00, /* 0x10b */ 0x00, /* 0x10c */ 0x00, /* 0x10d */ 0x00, /* 0x10e */ 0x00, /* 0x10f */ 0x00, /* 0x110 */ 0x81, /* SHIFT */ /* 0x111 */ 0x83, /* CONTROL */ /* 0x112 */ 0x00, /* ALT */ /* 0x113 */ 0x84, /* ALT_GR */ /* 0x114 */ 0x71, /* LEFT */ /* 0x115 */ 0x72, /* RIGHT */ /* 0x116 */ 0x73, /* DOWN */ /* 0x117 */ 0x74, /* UP */ /* 0x118 */ 0x64, /* HOME */ /* 0x119 */ 0x8164, /* END */ /* 0x11a */ 0x8166, /* DEL */ /* 0x11b */ 0x66, /* INSERT */ /* 0x11c */ 0x00, /* 0x11d */ 0x00, /* 0x11e */ 0x65, /* PAUSE */ /* 0x11f */ 0x00, /* 0x120 */ 0x82, /* COLOR */ /* 0x121 */ 0x84, /* GRAPHIC */ /* 0x122 */ 0x85, /* LIST */ /* 0x123 */ 0x86, /* RUN */ /* 0x124 */ 0x77, /* STOP */ /* 0x125 */ 0x87, /* SHIFT LOCK */ /* 0x126 */ 0x00, /* 0x127 */ 0x00, /* 0x128 */ 0x00, /* 0x129 */ 0x00, /* 0x12a */ 0x00, /* 0x12b */ 0x00, /* 0x12c */ 0x00, /* 0x12d */ 0x00, /* 0x12e */ 0x00, /* 0x12f */ 0x00, }; #endif /* __kc_keyb1k_h */ KCemu-0.5.1/include/kc/mod_rtc.h0000644001050700006200000000310511345001576016026 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_rtc_h #define __kc_mod_rtc_h #include "kc/ports.h" #include "kc/module.h" class ModuleRTC : public ModuleInterface, public PortInterface { private: int _count; int _base_port; PortGroup *_portg; ModuleRTC *_master; protected: void init(void); int get_count(void); void set_count(int count); public: ModuleRTC(ModuleRTC &tmpl); ModuleRTC(const char *name, int base_port); virtual ~ModuleRTC(void); /* * ModuleInterface */ virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); virtual void m_out(word_t addr, byte_t val); /* * PortInterface */ virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_mod_rtc_h */ KCemu-0.5.1/include/kc/vcs80/0000755001050700006200000000000011412404771015171 5ustar glaubitzfbedvKCemu-0.5.1/include/kc/vcs80/keydef.h0000644001050700006200000002260711345001576016621 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_vcs80_keydef_h #define __kc_vcs80_keydef_h /* * 10 (1) 20 (2) 40 (3) * | | | * *-[ 7]-* *-[ F]-* *-[PE]-* * | | | | | | * � *-+------*-+------*-------*--07 (1) * | | | * *-[ 6]-* *-[ E]-* *-[ST]-* * | | | | | | * � *-+------*-+------*-------*--06 (2) * | | | * *-[ 5]-* *-[ D]-* *-[TR]-* * | | | | | | * � *-+------*-+------*-------*--05 (3) * | | | * *-[ 4]-* *-[ C]-* *-[GO]-* * | | | | | | * � *-+------*-+------*-------*--04 (4) * | | | * *-[ 3]-* *-[ B]-* *-[RE]-* * | | | | | | * � *-+------*-+------*-------*--03 (5) * | | | * *-[ 2]-* *-[ A]-* *-[MA]-* * | | | | | | * � *-+------*-+------*-------*--02 (6) * | | | * *-[ 1]-* *-[ 9]-* *-[A-]-* * | | | | | | * � *-+------*-+------*-------*--01 (7) * | | | * *-[ 0]-* *-[ 8]-* *-[A+]-* * | | | * *--------*--------*-------*--00 (8) * * A+ : next address * A- : previous address * MA : memory address * RE : show register * GO : * TR : trap address * ST : step * PE : no function * */ static unsigned int __keys[] = { /* 0x00 [.] */ 0x00, /* 0x01 [.] */ 0x00, /* 0x02 [.] */ 0x00, /* 0x03 [.] */ 0x00, /* 0x04 [.] */ 0x00, /* 0x05 [.] */ 0x00, /* 0x06 [.] */ 0x00, /* 0x07 [.] */ 0x00, /* 0x08 [.] */ 0x00, /* 0x09 [.] */ 0x00, /* 0x0a [.] */ 0x00, /* 0x0b [.] */ 0x00, /* 0x0c [.] */ 0x00, /* 0x0d [.] */ 0x44, /* ENTER */ /* 0x0e [.] */ 0x00, /* 0x0f [.] */ 0x00, /* 0x10 [.] */ 0x00, /* 0x11 [.] */ 0x00, /* 0x12 [.] */ 0x00, /* 0x13 [.] */ 0x00, /* 0x14 [.] */ 0x00, /* 0x15 [.] */ 0x00, /* 0x16 [.] */ 0x00, /* 0x17 [.] */ 0x00, /* 0x18 [.] */ 0x00, /* 0x19 [.] */ 0x00, /* 0x1a [.] */ 0x00, /* 0x1b [.] */ 0x00, /* ESC */ /* 0x1c [.] */ 0x00, /* 0x1d [.] */ 0x00, /* 0x1e [.] */ 0x00, /* 0x1f [.] */ 0x00, /* 0x20 [ ] */ 0x00, /* SPACE */ /* 0x21 [!] */ 0x00, /* 0x22 ["] */ 0x00, /* 0x23 [#] */ 0x00, /* 0x24 [$] */ 0x00, /* 0x25 [%] */ 0x00, /* 0x26 [&] */ 0x00, /* 0x27 ['] */ 0x00, /* 0x28 [(] */ 0x00, /* 0x29 [)] */ 0x00, /* 0x2a [*] */ 0x00, /* 0x2b [+] */ 0x40, /* 0x2c [,] */ 0x00, /* 0x2d [-] */ 0x41, /* 0x2e [.] */ 0x00, /* 0x2f [/] */ 0x00, /* 0x30 [0] */ 0x10, /* 0x31 [1] */ 0x11, /* 0x32 [2] */ 0x12, /* 0x33 [3] */ 0x13, /* 0x34 [4] */ 0x14, /* 0x35 [5] */ 0x15, /* 0x36 [6] */ 0x16, /* 0x37 [7] */ 0x17, /* 0x38 [8] */ 0x20, /* 0x39 [9] */ 0x21, /* 0x3a [:] */ 0x00, /* 0x3b [;] */ 0x00, /* 0x3c [<] */ 0x00, /* 0x3d [=] */ 0x00, /* 0x3e [>] */ 0x00, /* 0x3f [?] */ 0x00, /* 0x40 [@] */ 0x00, /* 0x41 [A] */ 0x22, /* 0x42 [B] */ 0x23, /* 0x43 [C] */ 0x24, /* 0x44 [D] */ 0x25, /* 0x45 [E] */ 0x26, /* 0x46 [F] */ 0x27, /* 0x47 [G] */ 0x00, /* 0x48 [H] */ 0x00, /* 0x49 [I] */ 0x00, /* 0x4a [J] */ 0x00, /* 0x4b [K] */ 0x00, /* 0x4c [L] */ 0x00, /* 0x4d [M] */ 0x00, /* 0x4e [N] */ 0x00, /* 0x4f [O] */ 0x00, /* 0x50 [P] */ 0x00, /* 0x51 [Q] */ 0x00, /* 0x52 [R] */ 0x00, /* 0x53 [S] */ 0x00, /* 0x54 [T] */ 0x00, /* 0x55 [U] */ 0x00, /* 0x56 [V] */ 0x00, /* 0x57 [W] */ 0x00, /* 0x58 [X] */ 0x00, /* 0x59 [Y] */ 0x00, /* 0x5a [Z] */ 0x00, /* 0x5b [[] */ 0x00, /* 0x5c [\] */ 0x00, /* 0x5d []] */ 0x00, /* 0x5e [^] */ 0x00, /* 0x5f [_] */ 0x00, /* 0x60 [`] */ 0x00, /* 0x61 [a] */ 0x22, /* 0x62 [b] */ 0x23, /* 0x63 [c] */ 0x24, /* 0x64 [d] */ 0x25, /* 0x65 [e] */ 0x26, /* 0x66 [f] */ 0x27, /* 0x67 [g] */ 0x00, /* 0x68 [h] */ 0x00, /* 0x69 [i] */ 0x00, /* 0x6a [j] */ 0x00, /* 0x6b [k] */ 0x00, /* 0x6c [l] */ 0x00, /* 0x6d [m] */ 0x00, /* 0x6e [n] */ 0x00, /* 0x6f [o] */ 0x00, /* 0x70 [p] */ 0x00, /* 0x71 [q] */ 0x00, /* 0x72 [r] */ 0x00, /* 0x73 [s] */ 0x00, /* 0x74 [t] */ 0x00, /* 0x75 [u] */ 0x00, /* 0x76 [v] */ 0x00, /* 0x77 [w] */ 0x00, /* 0x78 [x] */ 0x00, /* 0x79 [y] */ 0x00, /* 0x7a [z] */ 0x00, /* 0x7b [{] */ 0x00, /* 0x7c [|] */ 0x00, /* 0x7d [}] */ 0x00, /* 0x7e [~] */ 0x00, /* 0x7f [.] */ 0x00, /* 0x80 [.] */ 0x00, /* 0x81 [.] */ 0x00, /* 0x82 [.] */ 0x00, /* 0x83 [.] */ 0x00, /* 0x84 [.] */ 0x00, /* 0x85 [.] */ 0x00, /* 0x86 [.] */ 0x00, /* 0x87 [.] */ 0x00, /* 0x88 [.] */ 0x00, /* 0x89 [.] */ 0x00, /* 0x8a [.] */ 0x00, /* 0x8b [.] */ 0x00, /* 0x8c [.] */ 0x00, /* 0x8d [.] */ 0x00, /* 0x8e [.] */ 0x00, /* 0x8f [.] */ 0x00, /* 0x90 [.] */ 0x00, /* 0x91 [.] */ 0x00, /* 0x92 [.] */ 0x00, /* 0x93 [.] */ 0x00, /* 0x94 [.] */ 0x00, /* 0x95 [.] */ 0x00, /* 0x96 [.] */ 0x00, /* 0x97 [.] */ 0x00, /* 0x98 [.] */ 0x00, /* 0x99 [.] */ 0x00, /* 0x9a [.] */ 0x00, /* 0x9b [.] */ 0x00, /* 0x9c [.] */ 0x00, /* 0x9d [.] */ 0x00, /* 0x9e [.] */ 0x00, /* 0x9f [.] */ 0x00, /* 0xa0 [.] */ 0x00, /* 0xa1 [.] */ 0x00, /* 0xa2 [.] */ 0x00, /* 0xa3 [.] */ 0x00, /* 0xa4 [.] */ 0x00, /* 0xa5 [.] */ 0x00, /* 0xa6 [.] */ 0x00, /* 0xa7 [.] */ 0x00, /* 0xa8 [.] */ 0x00, /* 0xa9 [.] */ 0x00, /* 0xaa [.] */ 0x00, /* 0xab [.] */ 0x00, /* 0xac [.] */ 0x00, /* 0xad [.] */ 0x00, /* 0xae [.] */ 0x00, /* 0xaf [.] */ 0x00, /* 0xb0 [.] */ 0x00, /* 0xb1 [.] */ 0x00, /* 0xb2 [.] */ 0x00, /* 0xb3 [.] */ 0x00, /* 0xb4 [.] */ 0x00, /* 0xb5 [.] */ 0x00, /* 0xb6 [.] */ 0x00, /* 0xb7 [.] */ 0x00, /* 0xb8 [.] */ 0x00, /* 0xb9 [.] */ 0x00, /* 0xba [.] */ 0x00, /* 0xbb [.] */ 0x00, /* 0xbc [.] */ 0x00, /* 0xbd [.] */ 0x00, /* 0xbe [.] */ 0x00, /* 0xbf [.] */ 0x00, /* 0xc0 [.] */ 0x00, /* 0xc1 [.] */ 0x00, /* 0xc2 [.] */ 0x00, /* 0xc3 [.] */ 0x00, /* 0xc4 [.] */ 0x00, /* 0xc5 [.] */ 0x00, /* 0xc6 [.] */ 0x00, /* 0xc7 [.] */ 0x00, /* 0xc8 [.] */ 0x00, /* 0xc9 [.] */ 0x00, /* 0xca [.] */ 0x00, /* 0xcb [.] */ 0x00, /* 0xcc [.] */ 0x00, /* 0xcd [.] */ 0x00, /* 0xce [.] */ 0x00, /* 0xcf [.] */ 0x00, /* 0xd0 [.] */ 0x00, /* 0xd1 [.] */ 0x00, /* 0xd2 [.] */ 0x00, /* 0xd3 [.] */ 0x00, /* 0xd4 [.] */ 0x00, /* 0xd5 [.] */ 0x00, /* 0xd6 [.] */ 0x00, /* 0xd7 [.] */ 0x00, /* 0xd8 [.] */ 0x00, /* 0xd9 [.] */ 0x00, /* 0xda [.] */ 0x00, /* 0xdb [.] */ 0x00, /* 0xdc [.] */ 0x00, /* 0xdd [.] */ 0x00, /* 0xde [.] */ 0x00, /* 0xdf [.] */ 0x00, /* 0xe0 [.] */ 0x00, /* 0xe1 [.] */ 0x00, /* 0xe2 [.] */ 0x00, /* 0xe3 [.] */ 0x00, /* 0xe4 [.] */ 0x00, /* 0xe5 [.] */ 0x00, /* 0xe6 [.] */ 0x00, /* 0xe7 [.] */ 0x00, /* 0xe8 [.] */ 0x00, /* 0xe9 [.] */ 0x00, /* 0xea [.] */ 0x00, /* 0xeb [.] */ 0x00, /* 0xec [.] */ 0x00, /* 0xed [.] */ 0x00, /* 0xee [.] */ 0x00, /* 0xef [.] */ 0x00, /* 0xf0 [.] */ 0x00, /* 0xf1 [.] */ 0x00, /* 0xf2 [.] */ 0x00, /* 0xf3 [.] */ 0x00, /* 0xf4 [.] */ 0x00, /* 0xf5 [.] */ 0x00, /* 0xf6 [.] */ 0x00, /* 0xf7 [.] */ 0x00, /* 0xf8 [.] */ 0x00, /* 0xf9 [.] */ 0x00, /* 0xfa [.] */ 0x00, /* 0xfb [.] */ 0x00, /* 0xfc [.] */ 0x00, /* 0xfd [.] */ 0x00, /* 0xfe [.] */ 0x00, /* 0xff [.] */ 0x00, /* 0x100 */ 0x00, /* 0x101 */ 0x47, /* F1 -> PE */ /* 0x102 */ 0x46, /* F2 -> ST */ /* 0x103 */ 0x45, /* F3 -> TR */ /* 0x104 */ 0x44, /* F4 -> GO */ /* 0x105 */ 0x43, /* F5 -> RE */ /* 0x106 */ 0x42, /* F6 -> MA */ /* 0x107 */ 0x41, /* F7 -> A- */ /* 0x108 */ 0x40, /* F8 -> A+ */ /* 0x109 */ 0x00, /* F9 */ /* 0x10a */ 0x00, /* F10 */ /* 0x10b */ 0x00, /* F11 */ /* 0x10c */ 0x00, /* F12 */ /* 0x10d */ 0x00, /* F13 */ /* 0x10e */ 0x00, /* F14 */ /* 0x10f */ 0x00, /* F15 */ /* 0x110 */ 0x00, /* SHIFT */ /* 0x111 */ 0x00, /* CONTROL */ /* 0x112 */ 0x00, /* ALT */ /* 0x113 */ 0x00, /* ALT_GR */ /* 0x114 */ 0x00, /* LEFT */ /* 0x115 */ 0x00, /* RIGHT */ /* 0x116 */ 0x00, /* DOWN */ /* 0x117 */ 0x00, /* UP */ /* 0x118 */ 0x00, /* HOME */ /* 0x119 */ 0x00, /* END */ /* 0x11a */ 0x00, /* DEL */ /* 0x11b */ 0x00, /* INSERT */ /* 0x11c */ 0x00, /* 0x11d */ 0x00, /* 0x11e */ 0x00, /* PAUSE */ /* 0x11f */ 0x00, /* 0x120 */ 0x00, /* COLOR */ /* 0x121 */ 0x00, /* GRAPHIC */ /* 0x122 */ 0x00, /* LIST */ /* 0x123 */ 0x00, /* RUN */ /* 0x124 */ 0x00, /* STOP */ /* 0x125 */ 0x00, /* SHIFT LOCK */ /* 0x126 */ 0x00, /* 0x127 */ 0x00, /* 0x128 */ 0x00, /* 0x129 */ 0x00, /* 0x12a */ 0x00, /* 0x12b */ 0x00, /* 0x12c */ 0x00, /* 0x12d */ 0x00, /* 0x12e */ 0x00, /* 0x12f */ 0x00, }; #endif /* __kc_vcs80_keydef_h */ KCemu-0.5.1/include/kc/vcs80/memory.h0000644001050700006200000000277311345001576016664 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_vcs80_memory_h #define __kc_vcs80_memory_h #include "kc/system.h" #include "kc/kc.h" #include "kc/memory.h" class MemoryVCS80 : public Memory { private: byte_t _rom[0x0200]; byte_t _ram[0x0400]; MemAreaGroup *_m_scr; /* scratch memory */ MemAreaGroup *_m_rom; /* ROM Monitor 0000h - 01ffh */ MemAreaGroup *_m_ram; /* RAM 0400h - 07ffh */ public: MemoryVCS80(void); virtual ~MemoryVCS80(void); void dumpCore(void); byte_t memRead8(word_t addr); void memWrite8(word_t addr, byte_t val); byte_t * get_irm(void); byte_t * get_char_rom(void); virtual void reset(bool power_on = false); }; #endif /* __kc_vcs80_memory_h */ KCemu-0.5.1/include/kc/vcs80/Makefile.am0000644001050700006200000000016710551020422017217 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ memory.h \ keydef.h \ keyboard.h \ pio.h KCemu-0.5.1/include/kc/vcs80/pio.h0000644001050700006200000000230311345001576016130 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_vcs80_pio_h #define __kc_vcs80_pio_h #include "kc/pio.h" #include "kc/ports.h" class PIOVCS80 : public PIO { public: PIOVCS80(void); virtual ~PIOVCS80(void); byte_t in(word_t addr); void out(word_t addr, byte_t val); void change_A(byte_t changed, byte_t val); void change_B(byte_t changed, byte_t val); }; #endif /* __kc_vcs80_pio_h */ KCemu-0.5.1/include/kc/vcs80/keyboard.h0000644001050700006200000000347011345001576017147 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_vcs80_keyboard_h #define __kc_vcs80_keyboard_h #include "kc/kc.h" #include "kc/cb.h" #include "kc/pio.h" #include "kc/keyboard.h" class KeyboardVCS80 : public Keyboard, public PIOCallbackInterface { private: int _key; protected: void init(void); int decode_key(int keysym, bool press); public: KeyboardVCS80(void); virtual ~KeyboardVCS80(void); virtual void keyPressed(int keysym, int keycode); virtual void keyReleased(int keysym, int keycode); virtual void replayString(const char *text); virtual void callback(void *data); /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void) {} virtual word_t irqack() { return IRQ_NOT_ACK; } virtual void reset(bool power_on = false); /* * PIOCallbackInterface */ virtual int callback_A_in(void); virtual int callback_B_in(void); virtual void callback_A_out(byte_t val) {} virtual void callback_B_out(byte_t val) {} }; #endif /* __kc_vcs80_keyboard_h */ KCemu-0.5.1/include/kc/vcs80/Makefile.in0000644001050700006200000003104711412404771017243 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/kc/vcs80 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ memory.h \ keydef.h \ keyboard.h \ pio.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/kc/vcs80/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/kc/vcs80/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/kc/z80.h0000644001050700006200000001106311345001576015022 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_z80_h #define __kc_z80_h #include #include #include "kc/system.h" #include "kc/ic.h" #include "kc/cb.h" #include "kc/cb_list.h" class Z80 { public: Z80EX_CONTEXT *_context; bool _debug; bool _trace; bool _singlestep; bool _executestep; bool _enable_floppy_cpu; long _tracedelay; byte_t _next_irq; dword_t _irq_line; dword_t _irq_mask; typedef std::list ic_list_t; static const int I_PERIOD; bool _do_quit; unsigned long long _counter; ic_list_t _ic_list; CallbackList _cb_list; private: void reset(word_t pc, bool power_on); /*callback that returns byte for a given adress*/ static Z80EX_BYTE z80ex_dasm_readbyte_cb(Z80EX_WORD addr, void *user_data); /*read byte from memory -- called when RD & MREQ goes active. m1_state will be 1 if M1 signal is active*/ static Z80EX_BYTE z80ex_mread_cb(Z80EX_CONTEXT *cpu, Z80EX_WORD addr, int m1_state, void *user_data); /*write to memory -- called when WR & MREQ goes active*/ static void z80ex_mwrite_cb(Z80EX_CONTEXT *cpu, Z80EX_WORD addr, Z80EX_BYTE value, void *user_data); /*read byte from -- called when RD & IORQ goes active*/ static Z80EX_BYTE z80ex_pread_cb(Z80EX_CONTEXT *cpu, Z80EX_WORD port, void *user_data); /*write to -- called when WR & IORQ goes active*/ static void z80ex_pwrite_cb(Z80EX_CONTEXT *cpu, Z80EX_WORD port, Z80EX_BYTE value, void *user_data); /*read byte of interrupt vector -- called when M1 and IORQ goes active*/ static Z80EX_BYTE z80ex_intread_cb(Z80EX_CONTEXT *cpu, void *user_data); /*called when the reti instruction is executed*/ static void z80ex_reti_cb(Z80EX_CONTEXT *cpu, void *user_data); public: Z80(void); ~Z80(void) {} bool run(void); void executestep(void); bool debug(void); void debug(bool value); bool trace(void); void trace(bool value); void tracedelay(long delay); bool singlestep(); void singlestep(bool value); void nmi(void); void reset(void); void power_on(void); void jump(word_t pc); void reti(void); void register_ic(InterfaceCircuit *h); void unregister_ic(InterfaceCircuit *h); void addCallback(unsigned long long offset, Callback *cb, void *data); void remove_callback_listener(Callback *cb); inline unsigned long long getCounter(void) { return _counter; } dword_t get_irq_mask(void); void set_irq_line(dword_t mask); void reset_irq_line(dword_t mask); void printPC(void); void quit(void); word_t getAF(void) { return z80ex_get_reg(_context, regAF); } word_t getBC(void) { return z80ex_get_reg(_context, regBC); } word_t getDE(void) { return z80ex_get_reg(_context, regDE); } word_t getHL(void) { return z80ex_get_reg(_context, regHL); } word_t getIX(void) { return z80ex_get_reg(_context, regIX); } word_t getIY(void) { return z80ex_get_reg(_context, regIY); } word_t getPC(void) { return z80ex_get_reg(_context, regPC); } word_t getSP(void) { return z80ex_get_reg(_context, regSP); } word_t getAFs(void) { return z80ex_get_reg(_context, regAF_); } word_t getBCs(void) { return z80ex_get_reg(_context, regBC_); } word_t getDEs(void) { return z80ex_get_reg(_context, regDE_); } word_t getHLs(void) { return z80ex_get_reg(_context, regHL_); } byte_t getIFF(void) { return z80ex_get_reg(_context, regIFF1); } byte_t getI(void) { return z80ex_get_reg(_context, regI); } bool get_halt(void) { return z80ex_doing_halt(_context); } void start_floppy_cpu(void); void halt_floppy_cpu(bool power_on); }; #endif /* __kc_z80_h */ KCemu-0.5.1/include/kc/pio6.h0000644001050700006200000000274011345001576015260 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_pio6_h #define __kc_pio6_h #include "kc/pio.h" #include "kc/ports.h" class PIO6_1 : public PIO { private: byte_t _led_value; public: PIO6_1(void); virtual ~PIO6_1(void); byte_t in(word_t addr); void out(word_t addr, byte_t val); void change_A(byte_t changed, byte_t val); void change_B(byte_t changed, byte_t val); virtual byte_t get_led_value(void); }; class PIO6_2 : public PIO { public: PIO6_2(void); virtual ~PIO6_2(void); byte_t in(word_t addr); void out(word_t addr, byte_t val); void change_A(byte_t changed, byte_t val); void change_B(byte_t changed, byte_t val); }; #endif /* __kc_pio6_h */ KCemu-0.5.1/include/kc/pio1.h0000644001050700006200000000315711345001576015256 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_pio1_h #define __kc_pio1_h #include "kc/pio.h" #include "kc/tape.h" #include "kc/ports.h" class PIO1_1 : public PIO, public TapeCallback { public: PIO1_1(void); virtual ~PIO1_1(void); byte_t in(word_t addr); void out(word_t addr, byte_t val); void change_A(byte_t changed, byte_t val); void change_B(byte_t changed, byte_t val); byte_t get_border_color(void); byte_t get_line_mode(void); // returns true if in 20 line mode /* * TapeCallback */ virtual void tape_callback(byte_t val); }; class PIO1_2 : public PIO { public: PIO1_2(void); virtual ~PIO1_2(void); byte_t in(word_t addr); void out(word_t addr, byte_t val); void change_A(byte_t changed, byte_t val); void change_B(byte_t changed, byte_t val); }; #endif /* __kc_pio1_h */ KCemu-0.5.1/include/kc/memory4.h0000644001050700006200000000647411345001576016007 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_memory4_h #define __kc_memory4_h #include "kc/kc.h" #include "kc/memory.h" class Memory4 : public Memory { protected: byte_t *_ram; int _ram_size; byte_t *_rom_caosc; byte_t *_rom_caose; byte_t *_rom_basic; byte_t _irm0[0x8000]; byte_t _irm1[0x8000]; byte_t _block_ram_8; byte_t _block_rom_c; bool _caos_c; bool _caos_e; bool _enable_irm; bool _access_color; bool _access_screen1; bool _display_screen1; MemAreaGroup *_m_scr; /* scratch memory */ MemAreaGroup *_m_caos_c; /* CAOS c000h - dfffh */ MemAreaGroup *_m_caos_e; /* CAOS e000h - ffffh */ MemAreaGroup *_m_basic; /* BASIC c000h - dfffh (for KC85/4) */ MemAreaGroup *_m_user[4]; /* BASIC c000h - dfffh (and USER0-2 for KC85/5) */ MemAreaGroup *_m_ram_0; /* RAM 0000h - 3fffh */ MemAreaGroup *_m_ram_4; /* RAM 4000h - 7fffh */ MemAreaGroup *_m_ram_8[16]; /* RAM 8000h - bfffh (pages 0-15) */ MemAreaGroup *_m_irm_0p; /* IRM 8000h - a7ffh (screen 0/ pixel) */ MemAreaGroup *_m_irm_0c; /* IRM 8000h - a7ffh (screen 0/ color) */ MemAreaGroup *_m_irm_1p; /* IRM 8000h - a7ffh (screen 1/ pixel) */ MemAreaGroup *_m_irm_1c; /* IRM 8000h - a7ffh (screen 1/ color) */ MemAreaGroup *_m_irm_0px; /* IRM a800h - bfffh (screen 0 / pixel - shared) */ MemAreaGroup *_m_irm_0cx; /* IRM a800h - bfffh (screen 0 / color - when CAOS-C on, CAOS-E off) */ MemAreaGroup *_m_irm_1px; /* IRM a800h - bfffh (screen 1 / pixel - when CAOS-C on, CAOS-E off) */ MemAreaGroup *_m_irm_1cx; /* IRM a800h - bfffh (screen 1 / color - when CAOS-C on, CAOS-E off) */ protected: virtual void init_4(void); virtual void init_5(void); virtual void configureRAM_8(void); virtual void configureROM_C(void); virtual void configureIRM(void); public: Memory4(void); ~Memory4(void); void dumpCore(void); byte_t memRead8(word_t addr); void memWrite8(word_t addr, byte_t val); byte_t * get_irm(void); byte_t * get_char_rom(void); void enableRAM_0(int v); void enableRAM_4(int v); void enableRAM_8(int v); void enableCAOS_C(int v); void enableCAOS_E(int v); void enableBASIC_C(int v); void enableIRM(int v); void enableCOLOR(int v); void enableSCREEN_1(int v); void selectRAM_8(int segment); void selectROM_C(int segment); void displaySCREEN_1(int v); void protectRAM_0(int v); void protectRAM_4(int v); void protectRAM_8(int v); virtual void reset(bool power_on = false); }; #endif /* __kc_memory4_h */ KCemu-0.5.1/include/kc/pio0.h0000644001050700006200000000240511345001576015250 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_pio0_h #define __kc_pio0_h #include "kc/pio.h" #include "kc/tape.h" class PIO0 : public PIO, public TapeCallback { public: PIO0(void); virtual ~PIO0(void); byte_t in(word_t addr); void out(word_t addr, byte_t val); void change_A(byte_t changed, byte_t val); void change_B(byte_t changed, byte_t val); /* * TapeCallback */ virtual void tape_callback(byte_t val); }; #endif /* __kc_pio0_h */ KCemu-0.5.1/include/kc/ports4.h0000644001050700006200000000245511345001576015641 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_ports4_h #define __kc_ports4_h #include "kc/ports.h" class Ports4 : public PortInterface { public: enum { NR_PORTS = 256, }; protected: int inout[NR_PORTS]; protected: virtual void change_0x84(byte_t changed, byte_t val); virtual void change_0x86(byte_t changed, byte_t val); public: Ports4(void); virtual ~Ports4(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_ports4_h */ KCemu-0.5.1/include/kc/pio4.h0000644001050700006200000000246211345001576015257 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_pio4_h #define __kc_pio4_h #include "kc/pio.h" #include "kc/tape.h" class PIO4 : public PIO, public TapeCallback { protected: virtual void change_A(byte_t changed, byte_t val); virtual void change_B(byte_t changed, byte_t val); public: PIO4(void); virtual ~PIO4(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); /* * TapeCallback */ virtual void tape_callback(byte_t val); }; #endif /* __kc_pio4_h */ KCemu-0.5.1/include/kc/keyb9.h0000644001050700006200000000332411345001576015425 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_keyb9_h #define __kc_keyb9_h #include "kc/kc.h" #include "kc/keyboard.h" class Keyboard9 : public Keyboard { public: enum { MAX_KEYS = 8, }; private: byte_t _line; unsigned int _key; struct _keybuf { int sym; int code; } _keybuf[MAX_KEYS]; protected: void init(void); int decode_key(int keysym, bool press); public: Keyboard9(void); virtual ~Keyboard9(void); virtual void keyPressed(int keysym, int keycode); virtual void keyReleased(int keysym, int keycode); virtual void replayString(const char *text); virtual void callback(void *data); /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void) {} virtual word_t irqack() { return IRQ_NOT_ACK; } virtual void reset(bool power_on = false); virtual void set_val(byte_t val); virtual byte_t get_val(); }; #endif /* __kc_keyb9_h */ KCemu-0.5.1/include/kc/memory9.h0000644001050700006200000000377611345001576016016 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_memory9_h #define __kc_memory9_h #include "kc/system.h" #include "kc/kc.h" #include "kc/memory.h" class Memory9 : public Memory { private: byte_t _rom_slot0[0x0a000]; byte_t _rom_slot1[0x04000]; byte_t _ram_slot2[0x10000]; MemAreaGroup *_m_scr; /* scratch memory */ MemAreaGroup *_m_rom_slot0_page0; /* ROM Slot 1 0000h - 9fffh */ MemAreaGroup *_m_rom_slot0_page1; /* ROM Slot 1 0000h - 9fffh */ MemAreaGroup *_m_rom_slot0_page2; /* ROM Slot 1 0000h - 9fffh */ MemAreaGroup *_m_rom_slot1_page1; /* ROM Slot 1 4000h - 7fffh */ MemAreaGroup *_m_ram_slot2_page0; /* RAM Slot 2 0000h - 3fffh */ MemAreaGroup *_m_ram_slot2_page1; /* RAM Slot 2 4000h - 7fffh */ MemAreaGroup *_m_ram_slot2_page2; /* RAM Slot 2 8000h - bfffh */ MemAreaGroup *_m_ram_slot2_page3; /* RAM Slot 2 c000h - ffffh */ public: Memory9(void); virtual ~Memory9(void); void dumpCore(void); byte_t memRead8(word_t addr); void memWrite8(word_t addr, byte_t val); byte_t * get_irm(void); byte_t * get_char_rom(void); virtual void reset(bool power_on = false); void set_page(int page, int slot); }; #endif /* __kc_memory9_h */ KCemu-0.5.1/include/kc/kcnet/0000755001050700006200000000000011412404770015331 5ustar glaubitzfbedvKCemu-0.5.1/include/kc/kcnet/pio_net.h0000644001050700006200000000236611345001576017150 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_kcnet_pio_net_h #define __kc_kcnet_pio_net_h #include "kc/pio.h" #include "kc/tape.h" class PIO_NET : public PIO { protected: virtual void change_A(byte_t changed, byte_t val); virtual void change_B(byte_t changed, byte_t val); public: PIO_NET(void); virtual ~PIO_NET(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_kcnet_pio_net_h */ KCemu-0.5.1/include/kc/kcnet/udp.h0000644001050700006200000000272011345001576016275 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_kcnet_udp_h #define __kc_kcnet_udp_h #include "kc/kc.h" #include "kc/kcnet/socket.h" using namespace std; class UDP : public Socket { private: word_t _port; byte_t _ip0, _ip1, _ip2, _ip3; int _socket; SocketData *_send_data; public: UDP(void); virtual ~UDP(void); virtual void set_ip_address(byte_t a0, byte_t a1, byte_t a2, byte_t a3); virtual void set_port(word_t port); virtual bool open(void); virtual void close(void); virtual bool is_open(void); virtual void poll(void); virtual void send(SocketData *data); virtual SocketData * receive(void); }; #endif /* __kc_kcnet_udp_h */ KCemu-0.5.1/include/kc/kcnet/ipraw.h0000644001050700006200000000311311345001576016624 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_kcnet_ipraw_h #define __kc_kcnet_ipraw_h #include "kc/kc.h" #include "kc/kcnet/socket.h" using namespace std; class IPRAW : public Socket { private: word_t _port; byte_t _ip0, _ip1, _ip2, _ip3; int _socket; SocketData *_data; SocketData *_send_data; protected: void close_socket(void); word_t checksum(SocketData *data, int offset); public: IPRAW(void); virtual ~IPRAW(void); virtual void set_ip_address(byte_t a0, byte_t a1, byte_t a2, byte_t a3); virtual void set_port(word_t port); virtual bool open(void); virtual void close(void); virtual bool is_open(void); virtual void poll(void); virtual void send(SocketData *data); virtual SocketData * receive(void); }; #endif /* __kc_kcnet_ipraw_h */ KCemu-0.5.1/include/kc/kcnet/tcp.h0000644001050700006200000000274111345001576016276 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_kcnet_tcp_h #define __kc_kcnet_tcp_h #include "kc/kc.h" #include "kc/kcnet/socket.h" using namespace std; class TCP : public Socket { private: word_t _port; byte_t _ip0, _ip1, _ip2, _ip3; int _socket; bool _is_open; SocketData *_send_data; public: TCP(void); virtual ~TCP(void); virtual void set_ip_address(byte_t a0, byte_t a1, byte_t a2, byte_t a3); virtual void set_port(word_t port); virtual bool open(void); virtual void close(void); virtual bool is_open(void); virtual void poll(void); virtual void send(SocketData *data); virtual SocketData * receive(void); }; #endif /* __kc_kcnet_tcp_h */ KCemu-0.5.1/include/kc/kcnet/Makefile.am0000644001050700006200000000024011340261610017353 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ kcnet.h \ kcnetm.h \ pio_net.h \ socket.h \ ipraw.h \ udp.h \ tcp.h \ tftp.h KCemu-0.5.1/include/kc/kcnet/kcnetm.h0000644001050700006200000000174411345001576016773 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_kcnetm_h #define __kc_kcnetm_h #include "kc/kc.h" using namespace std; class KCNET_Memory { }; #endif /* __kc_kcnetm_h */ KCemu-0.5.1/include/kc/kcnet/kcnet.h0000644001050700006200000001743411345001576016621 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_kcnet_kcnet_h #define __kc_kcnet_kcnet_h #include #include "kc/kc.h" #include "kc/cb.h" #include "kc/pio.h" #include "kc/kcnet/socket.h" using namespace std; typedef enum { SOCK_CLOSED = 0x00, SOCK_INIT = 0x13, SOCK_LISTEN = 0x14, SOCK_ESTABLISHED = 0x17, SOCK_CLOSE_WAIT = 0x1c, SOCK_UDP = 0x22, SOCK_IPRAW = 0x32, SOCK_MACRAW = 0x42, SOCK_PPPOE = 0x5f, SOCK_SYNSENT = 0x15, SOCK_SYNRECV = 0x16, SOCK_FIN_WAIT = 0x18, SOCK_CLOSING = 0x1a, SOCK_TIME_WAIT = 0x1b, SOCK_LAST_ACK = 0x1d, SOCK_ARP1 = 0x11, SOCK_ARP2 = 0x21, SOCK_ARP3 = 0x31, } socket_status_t; typedef enum { CMD_WRITE_BYTES = 0, CMD_READ_BYTES = 1, CMD_SET_POINTER = 2, CMD_READ_TIMER = 3, CMD_WRITE_BYTE = 4, CMD_READ_BYTE = 5, CMD_WRITE_IPADDR = 6, CMD_READ_IPADDR = 7, CMD_READ_PORTNO = 8, CMD_READ_SW_VERSION = 9, CMD_READ_HW_VERSION = 10, CMD_READ_LINK = 11, CMD_READ_ID = 12, CMD_READ_ERROR = 13, } kcnet_command_t; typedef enum { IR_SEND_OK = 0x10, IR_TIMEOUT = 0x08, IR_RECV = 0x04, IR_DISCON = 0x02, IR_CON = 0x01, } ir_reg_t; class KCNET; class KCNET_CMD { public: typedef enum { KCNET_CMD_PHASE_ARGS = 1, KCNET_CMD_PHASE_EXECUTE = 2, KCNET_CMD_PHASE_WRITE_DATA = 3, KCNET_CMD_PHASE_READ_DATA = 4, KCNET_CMD_PHASE_FINISHED = 5, } kcnet_cmd_phase_t; private: int _idx; int _args; char *_name; byte_t *_buf; int _result_len; int _result_idx; byte_t *_result_buf; kcnet_cmd_phase_t _phase; protected: KCNET *_kcnet; virtual void execute(void) = 0; const char * get_name(void); kcnet_cmd_phase_t get_phase(void); void set_phase(kcnet_cmd_phase_t phase); public: KCNET_CMD(KCNET *kcnet, const char *name, int args); virtual ~KCNET_CMD(void); virtual void init(void); virtual bool is_active(void); virtual byte_t read(void); virtual void write(byte_t val); virtual byte_t get_data(int idx); virtual byte_t data_read(void); virtual void data_write(byte_t val); virtual void set_result(byte_t val); virtual void set_result(byte_t val1, byte_t val2); virtual void set_result(byte_t *buf, int len); static KCNET_CMD * get_command(KCNET *kcnet, kcnet_command_t command); }; class KCNET_CMD_WRITE_BYTES : public KCNET_CMD { private: int _idx; word_t _counter; protected: void execute(void); public: KCNET_CMD_WRITE_BYTES(KCNET *kcnet); void data_write(byte_t val); }; class KCNET_CMD_READ_BYTES : public KCNET_CMD { private: int _idx; word_t _counter; protected: void execute(void); public: KCNET_CMD_READ_BYTES(KCNET *kcnet); byte_t data_read(void); }; class KCNET_CMD_SET_POINTER : public KCNET_CMD { protected: void execute(void); public: KCNET_CMD_SET_POINTER(KCNET *kcnet); }; class KCNET_CMD_READ_TIMER : public KCNET_CMD { protected: void execute(void); public: KCNET_CMD_READ_TIMER(KCNET *kcnet); }; class KCNET_CMD_WRITE_BYTE : public KCNET_CMD { protected: void execute(void); public: KCNET_CMD_WRITE_BYTE(KCNET *kcnet); }; class KCNET_CMD_READ_BYTE : public KCNET_CMD { protected: void execute(void); public: KCNET_CMD_READ_BYTE(KCNET *kcnet); }; class KCNET_CMD_WRITE_IPADDR : public KCNET_CMD { protected: void execute(void); public: KCNET_CMD_WRITE_IPADDR(KCNET *kcnet); }; class KCNET_CMD_READ_IPADDR : public KCNET_CMD { protected: void execute(void); public: KCNET_CMD_READ_IPADDR(KCNET *kcnet); }; class KCNET_CMD_READ_PORTNO : public KCNET_CMD { protected: void execute(void); public: KCNET_CMD_READ_PORTNO(KCNET *kcnet); }; class KCNET_CMD_READ_SW_VERSION : public KCNET_CMD { protected: void execute(void); public: KCNET_CMD_READ_SW_VERSION(KCNET *kcnet); }; class KCNET_CMD_READ_HW_VERSION : public KCNET_CMD { protected: void execute(void); public: KCNET_CMD_READ_HW_VERSION(KCNET *kcnet); }; class KCNET_CMD_READ_LINK : public KCNET_CMD { protected: void execute(void); public: KCNET_CMD_READ_LINK(KCNET *kcnet); }; class KCNET_CMD_READ_ID : public KCNET_CMD { protected: void execute(void); public: KCNET_CMD_READ_ID(KCNET *kcnet); }; class KCNET_CMD_READ_ERROR : public KCNET_CMD { protected: void execute(void); public: KCNET_CMD_READ_ERROR(KCNET *kcnet); }; class KCNET : public InterfaceCircuit, public Callback, public PIOCallbackInterface { public: enum { KCNET_SW_VERSION_MAJOR = 1, KCNET_SW_VERSION_MINOR = 2, KCNET_HW_VERSION_MAJOR = 1, KCNET_HW_VERSION_MINOR = 2, NR_OF_SOCKETS = 4, }; enum { ADDR_MR = 0x0000, ADDR_GAR0 = 0x0001, ADDR_GAR1 = 0x0002, ADDR_GAR2 = 0x0003, ADDR_GAR3 = 0x0004, ADDR_SUBR0 = 0x0005, ADDR_SUBR1 = 0x0006, ADDR_SUBR2 = 0x0007, ADDR_SUBR3 = 0x0008, ADDR_SHAR0 = 0x0009, ADDR_SHAR1 = 0x000a, ADDR_SHAR2 = 0x000b, ADDR_SHAR3 = 0x000c, ADDR_SHAR4 = 0x000d, ADDR_SHAR5 = 0x000e, ADDR_SIPR0 = 0x000f, ADDR_SIPR1 = 0x0010, ADDR_SIPR2 = 0x0011, ADDR_SIPR3 = 0x0012, ADDR_IR = 0x0015, ADDR_IMR = 0x0016, ADDR_RTR0 = 0x0017, ADDR_RTR1 = 0x0018, ADDR_RCR = 0x0019, ADDR_RMSR = 0x001a, ADDR_TMSR = 0x001b, ADDR_PATR0 = 0x001c, ADDR_PATR1 = 0x001d, ADDR_PTIMER = 0x0028, ADDR_PMAGIC = 0x0029, ADDR_UIPR0 = 0x002a, ADDR_UIPR1 = 0x002b, ADDR_UIPR2 = 0x002c, ADDR_UIPR3 = 0x002d, ADDR_UPORT0 = 0x002e, ADDR_UPORT1 = 0x002f, }; private: PIO *_pio; byte_t _mem[0x8000]; word_t _mem_ptr; byte_t _status; int _portno; KCNET_CMD *_command; dword_t _ip_addr[8]; Socket *_socket[4]; word_t _recv_ptr[4]; word_t _old_read_ptr[4]; word_t _old_write_ptr[4]; protected: const bool get_ip_address_from_prefs(const char *key, byte_t &ip0, byte_t &ip1, byte_t &ip2, byte_t &ip3) const; public: KCNET(void); virtual ~KCNET(void); virtual void init(bool power_on, bool set_config); virtual byte_t get_status(void); virtual void set_status(byte_t status); virtual byte_t read(void); virtual void write(byte_t byte); virtual word_t get_pointer(void); virtual void set_pointer(word_t ptr); virtual dword_t get_ip_address(unsigned int idx); virtual void set_ip_address(unsigned int idx, dword_t ip_addr); virtual byte_t mem_read(void); virtual byte_t mem_read(word_t addr); virtual void mem_write(byte_t val); virtual void mem_write(word_t addr, byte_t val); virtual const char * mem_info(void); virtual const char * mem_info(word_t addr); virtual void callback(void *data); virtual void register_pio(PIO *pio); /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void); virtual word_t irqack(void); virtual void reset(bool power_on = false); /* * PIOCallbackInterface */ virtual int callback_A_in(void); virtual int callback_B_in(void); virtual void callback_A_out(byte_t val); virtual void callback_B_out(byte_t val); }; #endif /* __kc_kcnet_kcnet_h */ KCemu-0.5.1/include/kc/kcnet/socket.h0000644001050700006200000000325311345001576016777 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_kcnet_socket_h #define __kc_kcnet_socket_h #include "kc/kc.h" using namespace std; class SocketData { private: int _len; int _idx; byte_t *_buf; public: SocketData(int len); virtual ~SocketData(void); int length(void); void put_byte(byte_t val); void put_word(word_t val); void put_long(dword_t val); void put_text(const char *text); byte_t * get(void); byte_t get(int idx); void put(int idx, byte_t val); }; class Socket { public: virtual void set_ip_address(byte_t a0, byte_t a1, byte_t a2, byte_t a3) = 0; virtual void set_port(word_t port) = 0; virtual bool open(void) = 0; virtual void close(void) = 0; virtual bool is_open(void) = 0; virtual void poll(void) = 0; virtual void send(SocketData *data) = 0; virtual SocketData * receive(void) = 0; }; #endif /* __kc_kcnet_socket_h */ KCemu-0.5.1/include/kc/kcnet/tftp.h0000644001050700006200000000403611345001576016464 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_kcnet_tftp_h #define __kc_kcnet_tftp_h #include #include "kc/kc.h" #include "kc/kcnet/socket.h" using namespace std; class TFTP : public Socket { private: // opcodes, see RFC 1350 typedef enum { TFTP_RRQ = 1, TFTP_WRQ = 2, TFTP_DATA = 3, TFTP_ACK = 4, TFTP_ERROR = 5, } tftp_opcode_t; // error codes, see RFC 1350 typedef enum { TFTP_ERR_UNDEFINED = 0, TFTP_ERR_FILE_NOT_FOUND = 1, TFTP_ERR_ACCESS_VIOLATION = 2, TFTP_ERR_DISK_FULL = 3, TFTP_ERR_ILLEGAL_OPERATION = 4, TFTP_ERR_UNKNOWN_TRANSFER_ID = 5, TFTP_ERR_FILE_ALREADY_EXISTS = 6, TFTP_ERR_NO_SUCH_USER = 7, } tftp_error_t; private: int _block; string _path; SocketData *_send_data; protected: virtual void init_read(SocketData *data); public: TFTP(void); virtual ~TFTP(void); virtual void set_ip_address(byte_t a0, byte_t a1, byte_t a2, byte_t a3); virtual void set_port(word_t port); virtual bool open(void); virtual void close(void); virtual bool is_open(void); virtual void poll(void); virtual void send(SocketData *data); virtual SocketData * receive(void); }; #endif /* __kc_kcnet_tftp_h */ KCemu-0.5.1/include/kc/kcnet/Makefile.in0000644001050700006200000003111711412404770017401 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/kc/kcnet DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ kcnet.h \ kcnetm.h \ pio_net.h \ socket.h \ ipraw.h \ udp.h \ tcp.h \ tftp.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/kc/kcnet/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/kc/kcnet/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/kc/floppy.h0000644001050700006200000000257511345001576015722 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_floppy_h #define __kc_floppy_h #include "kc/system.h" #include "libdisk/libdisk.h" class Floppy { private: libdisk_prop_t *_disk_prop; public: Floppy(const char *cmdname); virtual ~Floppy(void); int get_head_count(void); int get_cylinder_count(void); int get_sector_size(void); int get_sectors_per_cylinder(void); bool attach(const char *filename); bool seek(int head, int cylinder, int sector); int read_sector(byte_t *buf, int len); int write_sector(byte_t *buf, int len); }; #endif /* __kc_floppy_h */ KCemu-0.5.1/include/kc/romdi.h0000644001050700006200000000207111345001576015512 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_romdi_h #define __kc_romdi_h #include "kc/system.h" class ROMDIInterface { public: ROMDIInterface(void) {} virtual ~ROMDIInterface(void) {} virtual void romdi(bool val) = 0; }; #endif /* __kc_romdi_h */ KCemu-0.5.1/include/kc/memoryif.h0000644001050700006200000000222411345001576016227 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_memoryif_h #define __kc_memoryif_h #include "kc/system.h" class MemoryInterface { public: MemoryInterface(void) {} virtual ~MemoryInterface(void) {} virtual byte_t memory_read_byte(word_t addr) = 0; virtual void memory_write_byte(word_t addr, byte_t val) = 0; }; #endif /* __kc_memoryif_h */ KCemu-0.5.1/include/kc/gide.h0000644001050700006200000000562711345001576015322 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_gide_h #define __kc_gide_h #include "kc/system.h" #include "kc/ports.h" typedef struct hard_disk_config { int nr_of_cylinders; int nr_of_heads; int nr_of_sectors; const char *name; const char *filename; } hard_disk_config_t; class GIDE : public PortInterface { private: enum { GIDE_STATUS_ERROR = (1 << 0), GIDE_STATUS_INDEX = (1 << 1), GIDE_STATUS_CORRECTED_DATA = (1 << 2), GIDE_STATUS_DATA_REQUEST = (1 << 3), GIDE_STATUS_SEEK_COMPLETE = (1 << 4), GIDE_STATUS_WRITE_FAULT = (1 << 5), GIDE_STATUS_READY = (1 << 6), GIDE_STATUS_BUSY = (1 << 7), GIDE_STATUS_ALL = 0xff, }; enum { GIDE_RTC_REG_F_TEST = (1 << 3), GIDE_RTC_REG_F_12_24 = (1 << 2), GIDE_RTC_REG_F_STOP = (1 << 1), GIDE_RTC_REG_F_RESET = (1 << 0), }; private: int _cylinder; int _sector; int _sector_count; int _head; int _drive; int _error; byte_t _status; word_t _rtc_register; byte_t _sector_buffer[512]; hard_disk_config_t _hard_disk_config[2]; private: void set_drive_id(void); void set_drive_id_word(byte_t *buf, int val); void set_drive_id_string(byte_t *buf, int maxlen, const char *str); bool seek(FILE *file, int cylinder, int head, int sector); protected: byte_t in_rtc(word_t addr); byte_t in_data(void); byte_t in_error(void); byte_t in_sector_count(); byte_t in_sector_number(); byte_t in_cylinder_low(); byte_t in_cylinder_high(); byte_t in_drive_head(); byte_t in_status(void); void out_rtc(word_t addr, byte_t val); void out_data(byte_t val); void out_command(byte_t val); void out_digital_output(byte_t val); void out_sector_count(byte_t val); void out_sector_number(byte_t val); void out_cylinder_low(byte_t val); void out_cylinder_high(byte_t val); void out_drive_head(byte_t val); void set_status(byte_t mask, byte_t val); public: GIDE(void); virtual ~GIDE(void); /* PortInterface */ byte_t in(word_t addr); void out(word_t addr, byte_t val); }; #endif /* __kc_gide_h */ KCemu-0.5.1/include/kc/mod_512k.h0000644001050700006200000000242211345001576015721 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_512k_h #define __kc_mod_512k_h #include "kc/mod_segm.h" class Module512k : public ModuleSegmentedMemory { protected: virtual word_t get_base_address(word_t addr, byte_t val); virtual int get_segment_index(word_t addr, byte_t val); public: Module512k(Module512k &tmpl); Module512k(const char *name, byte_t id); virtual ~Module512k(void); virtual ModuleInterface * clone(void); }; #endif /* __kc_mod_512k_h */ KCemu-0.5.1/include/kc/keys.h0000644001050700006200000000537311345001576015363 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_keys_h #define __kc_keys_h #define KC_KEY_ENTER (0x0d) #define KC_KEY_ESC (0x1b) #define KC_KEY_SPACE (0x20) #define KC_KEY_F1 (0x101) #define KC_KEY_F2 (0x102) #define KC_KEY_F3 (0x103) #define KC_KEY_F4 (0x104) #define KC_KEY_F5 (0x105) #define KC_KEY_F6 (0x106) #define KC_KEY_F7 (0x107) #define KC_KEY_F8 (0x108) #define KC_KEY_F9 (0x109) #define KC_KEY_F10 (0x10a) #define KC_KEY_F11 (0x10b) #define KC_KEY_F12 (0x10c) #define KC_KEY_F13 (0x10d) #define KC_KEY_F14 (0x10e) #define KC_KEY_F15 (0x10f) #define KC_KEY_SHIFT (0x110) #define KC_KEY_CONTROL (0x111) #define KC_KEY_ALT (0x112) #define KC_KEY_ALT_GR (0x113) #define KC_KEY_LEFT (0x114) #define KC_KEY_RIGHT (0x115) #define KC_KEY_DOWN (0x116) #define KC_KEY_UP (0x117) #define KC_KEY_HOME (0x118) #define KC_KEY_END (0x119) #define KC_KEY_DEL (0x11a) #define KC_KEY_INSERT (0x11b) #define KC_KEY_PAGE_UP (0x11c) #define KC_KEY_PAGE_DOWN (0x11d) #define KC_KEY_PAUSE (0x11e) #define KC_KEY_PRINT (0x11f) #define KC_KEY_COLOR (0x120) #define KC_KEY_GRAPHIC (0x121) #define KC_KEY_LIST (0x122) #define KC_KEY_RUN (0x123) #define KC_KEY_STOP (0x124) #define KC_KEY_SHIFT_LOCK (0x125) #define KC_KEY_RESET (0x126) #define KC_KEY_NMI (0x127) #define KC_KEY_BREAK (0x128) #define KC_KEY_CLEAR (0x129) #endif /* __kc_keys_h */ KCemu-0.5.1/include/kc/kramermc/0000755001050700006200000000000011412404770016026 5ustar glaubitzfbedvKCemu-0.5.1/include/kc/kramermc/keydef.h0000644001050700006200000002530411345001576017454 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_kramermc_keydef_h #define __kc_kramermc_keydef_h /* * 01 (1) 02 (2) 04 (3) 08 (4) 10 (5) 20 (6) 40 (7) 80 (8) (low nibble) * | | | | | | | | * *-[^ ]-* *-[*b]-* *-[;+]-* *-[<,]-+ *-[*f]-* *-[*h]-* *-[*i]-* *-[:*]-* * | | | | | | | | | | | | | | | | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+------*--01 (1) * | | | | | | | | * *-[P ]-* *-[O ]-* *-[*d]-* *-[K ]-+ *-[*g]-* *-[L ]-* *-[0 ]-* *-[9)]-* * | | | | | | | | | | | | | | | | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+------*--02 (2) * | | | | | | | | * *-[I ]-* *-[U ]-* *-[N ]-* *-[H ]-+ *-[M ]-* *-[J ]-* *-[8(]-* *-[7']-* * | | | | | | | | | | | | | | | | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+------*--04 (3) * | | | | | | | | * *-[Z ]-* *-[T ]-* *-[V ]-* *-[F ]-+ *-[B ]-* *-[G ]-* *-[6 ]-* *-[5 ]-* * | | | | | | | | | | | | | | | | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+------*--08 (4) * | | | | | | | | * *-[R ]-* *-[E ]-* *-[X ]-* *-[S ]-+ *-[C ]-* *-[D ]-* *-[4 ]-* *-[3 ]-* * | | | | | | | | | | | | | | | | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+------*--10 (5) * | | | | | | | | * *-[W ]-* *-[Q ]-* *-[ ]-* *-[ ]-+ *-[Y ]-* *-[A ]-* *-[2 ]-* *-[1 ]-* * | | | | | | | | | | | | | | | | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+------*--20 (6) * | | | | | | | | * *-[*a]-* *-[*c]-* *-[ ]-* *-[*e]-+ *-[ ]-* *-[>.]-* *-[?/]-* *-[=-]-* * | | | | | | | | | | | | | | | | * � *-+------*-+------*-+------*-+------*-+------*-+------*-+------*--40 (7) * | | | | | | | | * *-[ ]-* *-[ ]-* *-[ ]-* *-[ ]-+ *-[ ]-* *-[ ]-* *-[ ]-* *-[ ]-* * | | | | | | | | * *--------*--------*--------*--------*--------*--------*--------*--80 (8) * * *a = -> *d = DEL *g = CR * *b = <- *e = CTRL *h = SHIFT * *c = SPACE *f = ETX *i = DOWN * */ static unsigned int __keys[] = { /* 0x00 [.] */ 0x00, /* 0x01 [.] */ 0x00, /* 0x02 [.] */ 0x00, /* 0x03 [.] */ 0x00, /* 0x04 [.] */ 0x00, /* 0x05 [.] */ 0x00, /* 0x06 [.] */ 0x00, /* 0x07 [.] */ 0x00, /* 0x08 [.] */ 0x00, /* 0x09 [.] */ 0x00, /* 0x0a [.] */ 0x00, /* 0x0b [.] */ 0x00, /* 0x0c [.] */ 0x00, /* 0x0d [.] */ 0x52, /* ENTER */ /* 0x0e [.] */ 0x00, /* 0x0f [.] */ 0x00, /* 0x10 [.] */ 0x00, /* 0x11 [.] */ 0x00, /* 0x12 [.] */ 0x00, /* 0x13 [.] */ 0x00, /* 0x14 [.] */ 0x00, /* 0x15 [.] */ 0x00, /* 0x16 [.] */ 0x00, /* 0x17 [.] */ 0x00, /* 0x18 [.] */ 0x00, /* 0x19 [.] */ 0x00, /* 0x1a [.] */ 0x00, /* 0x1b [.] */ 0x51, /* ESC | CL LN */ /* 0x1c [.] */ 0x00, /* 0x1d [.] */ 0x00, /* 0x1e [.] */ 0x00, /* 0x1f [.] */ 0x00, /* 0x20 [ ] */ 0x27, /* SPACE */ /* 0x21 [!] */ 0x00, /* 0x22 ["] */ 0x00, /* 0x23 [#] */ 0x00, /* 0x24 [$] */ 0x00, /* 0x25 [%] */ 0x00, /* 0x26 [&] */ 0x00, /* 0x27 ['] */ 0x6183, /* 0x28 [(] */ 0x6173, /* 0x29 [)] */ 0x6182, /* 0x2a [*] */ 0x6181, /* 0x2b [+] */ 0x6131, /* 0x2c [,] */ 0x6141, /* 0x2d [-] */ 0x6187, /* 0x2e [.] */ 0x6167, /* 0x2f [/] */ 0x6177, /* 0x30 [0] */ 0x72, /* 0x31 [1] */ 0x86, /* 0x32 [2] */ 0x76, /* 0x33 [3] */ 0x85, /* 0x34 [4] */ 0x75, /* 0x35 [5] */ 0x84, /* 0x36 [6] */ 0x74, /* 0x37 [7] */ 0x83, /* 0x38 [8] */ 0x73, /* 0x39 [9] */ 0x82, /* 0x3a [:] */ 0x81, /* 0x3b [;] */ 0x31, /* 0x3c [<] */ 0x41, /* 0x3d [=] */ 0x87, /* 0x3e [>] */ 0x67, /* 0x3f [?] */ 0x77, /* 0x40 [@] */ 0x00, /* 0x41 [A] */ 0x6166, /* 0x42 [B] */ 0x6154, /* 0x43 [C] */ 0x6155, /* 0x44 [D] */ 0x6165, /* 0x45 [E] */ 0x6125, /* 0x46 [F] */ 0x6144, /* 0x47 [G] */ 0x6164, /* 0x48 [H] */ 0x6143, /* 0x49 [I] */ 0x6113, /* 0x4a [J] */ 0x6163, /* 0x4b [K] */ 0x6142, /* 0x4c [L] */ 0x6162, /* 0x4d [M] */ 0x6153, /* 0x4e [N] */ 0x6133, /* 0x4f [O] */ 0x6122, /* 0x50 [P] */ 0x6112, /* 0x51 [Q] */ 0x6126, /* 0x52 [R] */ 0x6115, /* 0x53 [S] */ 0x6145, /* 0x54 [T] */ 0x6124, /* 0x55 [U] */ 0x6123, /* 0x56 [V] */ 0x6134, /* 0x57 [W] */ 0x6116, /* 0x58 [X] */ 0x6135, /* 0x59 [Y] */ 0x6156, /* 0x5a [Z] */ 0x6114, /* 0x5b [[] */ 0x00, /* 0x5c [\] */ 0x00, /* 0x5d []] */ 0x00, /* 0x5e [^] */ 0x00, /* 0x5f [_] */ 0x00, /* 0x60 [`] */ 0x00, /* 0x61 [a] */ 0x66, /* 0x62 [b] */ 0x54, /* 0x63 [c] */ 0x55, /* 0x64 [d] */ 0x65, /* 0x65 [e] */ 0x25, /* 0x66 [f] */ 0x44, /* 0x67 [g] */ 0x64, /* 0x68 [h] */ 0x43, /* 0x69 [i] */ 0x13, /* 0x6a [j] */ 0x63, /* 0x6b [k] */ 0x42, /* 0x6c [l] */ 0x62, /* 0x6d [m] */ 0x53, /* 0x6e [n] */ 0x33, /* 0x6f [o] */ 0x22, /* 0x70 [p] */ 0x12, /* 0x71 [q] */ 0x26, /* 0x72 [r] */ 0x15, /* 0x73 [s] */ 0x45, /* 0x74 [t] */ 0x24, /* 0x75 [u] */ 0x23, /* 0x76 [v] */ 0x34, /* 0x77 [w] */ 0x16, /* 0x78 [x] */ 0x35, /* 0x79 [y] */ 0x56, /* 0x7a [z] */ 0x14, /* 0x7b [{] */ 0x00, /* 0x7c [|] */ 0x00, /* 0x7d [}] */ 0x00, /* 0x7e [~] */ 0x00, /* 0x7f [.] */ 0x00, /* 0x80 [.] */ 0x00, /* 0x81 [.] */ 0x00, /* 0x82 [.] */ 0x00, /* 0x83 [.] */ 0x00, /* 0x84 [.] */ 0x00, /* 0x85 [.] */ 0x00, /* 0x86 [.] */ 0x00, /* 0x87 [.] */ 0x00, /* 0x88 [.] */ 0x00, /* 0x89 [.] */ 0x00, /* 0x8a [.] */ 0x00, /* 0x8b [.] */ 0x00, /* 0x8c [.] */ 0x00, /* 0x8d [.] */ 0x00, /* 0x8e [.] */ 0x00, /* 0x8f [.] */ 0x00, /* 0x90 [.] */ 0x00, /* 0x91 [.] */ 0x00, /* 0x92 [.] */ 0x00, /* 0x93 [.] */ 0x00, /* 0x94 [.] */ 0x00, /* 0x95 [.] */ 0x00, /* 0x96 [.] */ 0x00, /* 0x97 [.] */ 0x00, /* 0x98 [.] */ 0x00, /* 0x99 [.] */ 0x00, /* 0x9a [.] */ 0x00, /* 0x9b [.] */ 0x00, /* 0x9c [.] */ 0x00, /* 0x9d [.] */ 0x00, /* 0x9e [.] */ 0x00, /* 0x9f [.] */ 0x00, /* 0xa0 [.] */ 0x00, /* 0xa1 [.] */ 0x00, /* 0xa2 [.] */ 0x00, /* 0xa3 [.] */ 0x00, /* 0xa4 [.] */ 0x00, /* 0xa5 [.] */ 0x00, /* 0xa6 [.] */ 0x00, /* 0xa7 [.] */ 0x00, /* 0xa8 [.] */ 0x00, /* 0xa9 [.] */ 0x00, /* 0xaa [.] */ 0x00, /* 0xab [.] */ 0x00, /* 0xac [.] */ 0x00, /* 0xad [.] */ 0x00, /* 0xae [.] */ 0x00, /* 0xaf [.] */ 0x00, /* 0xb0 [.] */ 0x00, /* 0xb1 [.] */ 0x00, /* 0xb2 [.] */ 0x00, /* 0xb3 [.] */ 0x00, /* 0xb4 [.] */ 0x00, /* 0xb5 [.] */ 0x00, /* 0xb6 [.] */ 0x00, /* 0xb7 [.] */ 0x00, /* 0xb8 [.] */ 0x00, /* 0xb9 [.] */ 0x00, /* 0xba [.] */ 0x00, /* 0xbb [.] */ 0x00, /* 0xbc [.] */ 0x00, /* 0xbd [.] */ 0x00, /* 0xbe [.] */ 0x00, /* 0xbf [.] */ 0x00, /* 0xc0 [.] */ 0x00, /* 0xc1 [.] */ 0x00, /* 0xc2 [.] */ 0x00, /* 0xc3 [.] */ 0x00, /* 0xc4 [.] */ 0x00, /* 0xc5 [.] */ 0x00, /* 0xc6 [.] */ 0x00, /* 0xc7 [.] */ 0x00, /* 0xc8 [.] */ 0x00, /* 0xc9 [.] */ 0x00, /* 0xca [.] */ 0x00, /* 0xcb [.] */ 0x00, /* 0xcc [.] */ 0x00, /* 0xcd [.] */ 0x00, /* 0xce [.] */ 0x00, /* 0xcf [.] */ 0x00, /* 0xd0 [.] */ 0x00, /* 0xd1 [.] */ 0x00, /* 0xd2 [.] */ 0x00, /* 0xd3 [.] */ 0x00, /* 0xd4 [.] */ 0x00, /* 0xd5 [.] */ 0x00, /* 0xd6 [.] */ 0x00, /* 0xd7 [.] */ 0x00, /* 0xd8 [.] */ 0x00, /* 0xd9 [.] */ 0x00, /* 0xda [.] */ 0x00, /* 0xdb [.] */ 0x00, /* 0xdc [.] */ 0x00, /* 0xdd [.] */ 0x00, /* 0xde [.] */ 0x00, /* 0xdf [.] */ 0x00, /* 0xe0 [.] */ 0x00, /* 0xe1 [.] */ 0x00, /* 0xe2 [.] */ 0x00, /* 0xe3 [.] */ 0x00, /* 0xe4 [.] */ 0x00, /* 0xe5 [.] */ 0x00, /* 0xe6 [.] */ 0x00, /* 0xe7 [.] */ 0x00, /* 0xe8 [.] */ 0x00, /* 0xe9 [.] */ 0x00, /* 0xea [.] */ 0x00, /* 0xeb [.] */ 0x00, /* 0xec [.] */ 0x00, /* 0xed [.] */ 0x00, /* 0xee [.] */ 0x00, /* 0xef [.] */ 0x00, /* 0xf0 [.] */ 0x00, /* 0xf1 [.] */ 0x00, /* 0xf2 [.] */ 0x00, /* 0xf3 [.] */ 0x00, /* 0xf4 [.] */ 0x00, /* 0xf5 [.] */ 0x00, /* 0xf6 [.] */ 0x00, /* 0xf7 [.] */ 0x00, /* 0xf8 [.] */ 0x00, /* 0xf9 [.] */ 0x00, /* 0xfa [.] */ 0x00, /* 0xfb [.] */ 0x00, /* 0xfc [.] */ 0x00, /* 0xfd [.] */ 0x00, /* 0xfe [.] */ 0x00, /* 0xff [.] */ 0x00, /* 0x100 */ 0x00, /* 0x101 */ 0x00, /* 0x102 */ 0x00, /* 0x103 */ 0x00, /* 0x104 */ 0x00, /* 0x105 */ 0x00, /* 0x106 */ 0x00, /* 0x107 */ 0x00, /* 0x108 */ 0x00, /* 0x109 */ 0x00, /* 0x10a */ 0x00, /* 0x10b */ 0x00, /* 0x10c */ 0x00, /* 0x10d */ 0x00, /* 0x10e */ 0x00, /* 0x10f */ 0x00, /* 0x110 */ 0x61, /* SHIFT */ /* 0x111 */ 0x47, /* CONTROL */ /* 0x112 */ 0x00, /* ALT */ /* 0x113 */ 0x00, /* ALT_GR */ /* 0x114 */ 0x21, /* LEFT */ /* 0x115 */ 0x17, /* RIGHT */ /* 0x116 */ 0x71, /* DOWN */ /* 0x117 */ 0x6171, /* UP */ /* 0x118 */ 0x00, /* HOME */ /* 0x119 */ 0x00, /* END */ /* 0x11a */ 0x32, /* DEL */ /* 0x11b */ 0x00, /* INSERT */ /* 0x11c */ 0x00, /* 0x11d */ 0x00, /* 0x11e */ 0x00, /* PAUSE */ /* 0x11f */ 0x00, /* 0x120 */ 0x00, /* COLOR */ /* 0x121 */ 0x00, /* GRAPHIC */ /* 0x122 */ 0x00, /* LIST */ /* 0x123 */ 0x00, /* RUN */ /* 0x124 */ 0x00, /* STOP */ /* 0x125 */ 0x00, /* SHIFT LOCK */ /* 0x126 */ 0x00, /* 0x127 */ 0x00, /* 0x128 */ 0x00, /* 0x129 */ 0x00, /* 0x12a */ 0x00, /* 0x12b */ 0x00, /* 0x12c */ 0x00, /* 0x12d */ 0x00, /* 0x12e */ 0x00, /* 0x12f */ 0x00, }; #endif /* __kc_kramermc_keydef_h */ KCemu-0.5.1/include/kc/kramermc/memory.h0000644001050700006200000000465511345001576017523 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_kramermc_memory_h #define __kc_kramermc_memory_h #include "kc/system.h" #include "kc/kc.h" #include "kc/memory.h" class MemoryKramerMC : public Memory { private: byte_t _irm[0x0400]; byte_t _ram_0c00h[0x0400]; byte_t _ram_1000h[0x3000]; byte_t _ram_4000h[0x4000]; byte_t _rom_io_monitor[0x0400]; byte_t _rom_debugger[0x0400]; byte_t _rom_reassembler[0x0400]; byte_t _rom_basic[0x3000]; byte_t _rom_editor[0x0400]; byte_t _rom_assembler[0x1c00]; byte_t _rom_chargen[0x0800]; MemAreaGroup *_m_scr; /* scratch memory */ MemAreaGroup *_m_rom_io_monitor; /* ROM IO-Monitor 0000h - 03ffh */ MemAreaGroup *_m_rom_debugger; /* ROM Debugger 0400h - 07ffh */ MemAreaGroup *_m_rom_reassembler; /* ROM Reassembler 0800h - 0bffh */ MemAreaGroup *_m_ram_0c00h; /* RAM system 0c00h - 0fffh */ MemAreaGroup *_m_ram_1000h; /* RAM statisch 1000h - 3fffh */ MemAreaGroup *_m_ram_4000h; /* RAM dynamisch 4000h - 7fffh */ MemAreaGroup *_m_rom_basic; /* ROM BASIC 8000h - afffh */ MemAreaGroup *_m_rom_editor; /* ROM Editor c000h - c3ffh */ MemAreaGroup *_m_rom_assembler; /* ROM Assembler c400h - dfffh */ MemAreaGroup *_m_irm; /* IRM fc00h - ffffh */ public: MemoryKramerMC(void); virtual ~MemoryKramerMC(void); void dumpCore(void); byte_t memRead8(word_t addr); void memWrite8(word_t addr, byte_t val); byte_t * get_irm(void); byte_t * get_char_rom(void); virtual void reset(bool power_on = false); }; #endif /* __kc_kramermc_memory_h */ KCemu-0.5.1/include/kc/kramermc/Makefile.am0000644001050700006200000000016710527416074020074 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ memory.h \ keyboard.h \ keydef.h \ pio.h KCemu-0.5.1/include/kc/kramermc/pio.h0000644001050700006200000000232511345001576016772 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_kramermc_pio_h #define __kc_kramermc_pio_h #include "kc/pio.h" #include "kc/ports.h" class PIOKramerMC : public PIO { public: PIOKramerMC(void); virtual ~PIOKramerMC(void); byte_t in(word_t addr); void out(word_t addr, byte_t val); void change_A(byte_t changed, byte_t val); void change_B(byte_t changed, byte_t val); }; #endif /* __kc_kramermc_pio_h */ KCemu-0.5.1/include/kc/kramermc/keyboard.h0000644001050700006200000000377411345001576020014 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_kramermc_keyboard_h #define __kc_kramermc_keyboard_h #include "kc/kc.h" #include "kc/cb.h" #include "kc/pio.h" #include "kc/keyboard.h" class KeyboardKramerMC : public Keyboard, public PIOCallbackInterface { public: enum { MODIFIER_PRESS_DELAY = 150000, MODIFIER_RELEASE_DELAY = 150000, }; private: int _row; struct _keybuf { int code; byte_t sym1; byte_t sym2; } _keybuf; protected: void init(void); int decode_key(int keysym, bool press); public: KeyboardKramerMC(void); virtual ~KeyboardKramerMC(void); virtual void keyPressed(int keysym, int keycode); virtual void keyReleased(int keysym, int keycode); virtual void replayString(const char *text); virtual void callback(void *data); /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void) {} virtual word_t irqack() { return IRQ_NOT_ACK; } virtual void reset(bool power_on = false); /* * PIOCallbackInterface */ virtual int callback_A_in(void); virtual int callback_B_in(void); virtual void callback_A_out(byte_t val); virtual void callback_B_out(byte_t val); }; #endif /* __kc_kramermc_keyboard_h */ KCemu-0.5.1/include/kc/kramermc/Makefile.in0000644001050700006200000003106011412404770020073 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/kc/kramermc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ memory.h \ keyboard.h \ keydef.h \ pio.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/kc/kramermc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/kc/kramermc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/kc/mod_rom1.h0000644001050700006200000000326611345001576016124 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_rom1_h #define __kc_mod_rom1_h #include "kc/romdi.h" #include "kc/module.h" #include "kc/memory.h" class ModuleROM1 : public ModuleInterface, public ROMDIInterface { private: byte_t *_rom; word_t _addr; dword_t _size; MemAreaGroup *_group; bool _set_romdi; protected: void set_romdi(bool val); public: ModuleROM1(ModuleROM1 &tmpl); ModuleROM1(const char *filename, const char *name, word_t addr, dword_t size = 0x4000, bool set_romdi = false); virtual ~ModuleROM1(void); virtual bool is_active(void); virtual void set_active(bool active); virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); /* * ROMDIInterface */ void romdi(bool val); }; #endif /* __kc_mod_rom1_h */ KCemu-0.5.1/include/kc/ctc.h0000644001050700006200000001020311345001576015145 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_ctc_h #define __kc_ctc_h #include #include "kc/system.h" #include "kc/ic.h" #include "kc/cb.h" #include "kc/ports.h" class CTCCallbackInterface { public: CTCCallbackInterface(void) {} virtual ~CTCCallbackInterface(void) {} virtual void ctc_callback_ZC(int channel) = 0; virtual void ctc_callback_TC(int channel, long tc) = 0; virtual void ctc_callback_start(int channel) = 0; virtual void ctc_callback_stop(int channel) = 0; }; class CTC : public InterfaceCircuit, public PortInterface, public Callback { protected: typedef std::listcb_list_t; typedef cb_list_t::iterator iterator; enum { IRQ = 0x80, IRQ_DISABLED = 0x00, IRQ_ENABLED = 0x80, MODE = 0x40, MODE_TIMER = 0x00, MODE_COUNTER = 0x40, PRESCALER = 0x20, PRESCALER_16 = 0x00, PRESCALER_256 = 0x20, EDGE = 0x10, EDGE_FALLING = 0x00, EDGE_RISING = 0x10, TRIGGER = 0x08, TRIGGER_AUTO = 0x00, TRIGGER_CLOCK = 0x08, CONSTANT = 0x04, CONSTANT_NONE = 0x00, CONSTANT_LOAD = 0x04, RESET = 0x02, RESET_NONE = 0x00, RESET_ACTIVE = 0x02, CONTROL = 0x01, CONTROL_VECTOR = 0x00, CONTROL_WORD = 0x01, }; byte_t _irq_vector; byte_t _control[4]; word_t _value[4]; word_t _timer_value[4]; byte_t _restart[4]; long long _counter[4]; byte_t _irq_pending[4]; byte_t _irq_active[4]; long _irq_valid[4]; cb_list_t *_cb_list[4]; private: void handle_counter_mode(int channel); protected: virtual long long get_counter() = 0; virtual void trigger_irq(int channel) = 0; virtual void add_callback(unsigned long long offset, Callback *cb, void *data) = 0; virtual void try_trigger_irq(int channel); public: CTC(const char *name); virtual ~CTC(void); virtual bool irq_0(void) = 0; virtual bool irq_1(void) = 0; virtual bool irq_2(void) = 0; virtual bool irq_3(void) = 0; virtual long counter_value_0(void) = 0; virtual long counter_value_1(void) = 0; virtual long counter_value_2(void) = 0; virtual long counter_value_3(void) = 0; void info(void); byte_t c_in(byte_t channel); void c_out(byte_t channel, byte_t val); void trigger(byte_t channel); void callback(void *data); byte_t getIRQVector(byte_t channel) { return _irq_vector + 2 * channel; } byte_t getIRQ(byte_t channel) { return (_control[channel] & IRQ) == IRQ_ENABLED; } word_t getTimerValue(byte_t channel) { return _timer_value[channel]; } bool isCounter(byte_t channel) { return ((_control[channel] & MODE) == MODE_COUNTER); } bool isReset(byte_t channel) { return ((_control[channel] & RESET) == RESET_ACTIVE); } /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void); virtual word_t irqack(void); virtual void reset(bool power_on = false); virtual void register_callback(int channel, CTCCallbackInterface *cbi); virtual void run_cb_start(int channel); virtual void run_cb_stop(int channel); virtual void run_cb_tc(int channel, long tc); }; #endif /* __kc_ctc_h */ KCemu-0.5.1/include/kc/mod_gdc.h0000644001050700006200000000263711345001576016004 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_gdc_h #define __kc_mod_gdc_h #include "kc/ports.h" #include "kc/module.h" class ModuleGDC : public ModuleInterface { private: int _count; PortGroup *_portg; ModuleGDC *_master; protected: void init(void); int get_count(void); void set_count(int count); public: ModuleGDC(ModuleGDC &tmpl); ModuleGDC(const char *name); virtual ~ModuleGDC(void); /* * ModuleInterface */ virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); virtual void m_out(word_t addr, byte_t val); }; #endif /* __kc_mod_gdc_h */ KCemu-0.5.1/include/kc/mod_fdc.h0000644001050700006200000000312711345001576015776 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_fdc_h #define __kc_mod_fdc_h #include "kc/ports.h" #include "kc/module.h" class ModuleFDC : public ModuleInterface { public: typedef enum { FDC_INTERFACE_SCHNEIDER = 0, FDC_INTERFACE_KRAMER = 1, } fdc_interface_type_t; private: int _count; PortGroup *_portg; ModuleFDC *_master; fdc_interface_type_t _fdc_type; protected: void init(void); int get_count(void); void set_count(int count); public: ModuleFDC(ModuleFDC &tmpl); ModuleFDC(const char *name, fdc_interface_type_t fdc_type); virtual ~ModuleFDC(void); /* * ModuleInterface */ virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); virtual void m_out(word_t addr, byte_t val); }; #endif /* __kc_mod_fdc_h */ KCemu-0.5.1/include/kc/mod_1m.h0000644001050700006200000000240411345001576015554 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_1m_h #define __kc_mod_1m_h #include "kc/mod_segm.h" class Module1M : public ModuleSegmentedMemory { protected: virtual word_t get_base_address(word_t addr, byte_t val); virtual int get_segment_index(word_t addr, byte_t val); public: Module1M(Module1M &tmpl); Module1M(const char *name, byte_t id); virtual ~Module1M(void); virtual ModuleInterface * clone(void); }; #endif /* __kc_mod_1m_h */ KCemu-0.5.1/include/kc/mod_ram8.h0000644001050700006200000000257211345001576016114 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_ram8_h #define __kc_mod_ram8_h #include "kc/module.h" #include "kc/memory.h" class ModuleRAM8 : public ModuleInterface { private: byte_t *_ram; word_t _addr; dword_t _size; MemAreaGroup *_group; public: ModuleRAM8(ModuleRAM8 &tmpl); ModuleRAM8(const char *name, word_t addr, dword_t size = 0x4000); virtual ~ModuleRAM8(void); virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); }; #endif /* __kc_mod_ram8_h */ KCemu-0.5.1/include/kc/mod_ramf.h0000644001050700006200000000337711345001576016176 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_ramf_h #define __kc_mod_ramf_h #include "kc/ports.h" #include "kc/module.h" class ModuleRAMFloppy : public ModuleInterface, public PortInterface { private: byte_t *_ram; PortGroup *_portg; ModuleRAMFloppy *_master; int _addr; int _port; int _disk_a; int _disk_b; protected: void init(void); int allocate_port(void); void release_port(int port); void read_file(const char *filename, long size); public: ModuleRAMFloppy(ModuleRAMFloppy &tmpl); ModuleRAMFloppy(const char *name); virtual ~ModuleRAMFloppy(void); /* * ModuleInterface */ virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); virtual void m_out(word_t addr, byte_t val); /* * PortInterface */ virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_mod_ramf_h */ KCemu-0.5.1/include/kc/keyb0k.h0000644001050700006200000011022211345001576015563 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_keyb0k_h #define __kc_keyb0k_h /* * =============================================================================== * multiplexer * value: 0 1 2 3 4 5 6 7 - (high nibble) * =============================================================================== * shift level 0 * * @ A B C D E F G - 0x1e (1) * H I J K L M N O - 0x1d (2) * P Q R S T U V W - 0x1b (4) * SHIFT1 SHIFT2 SHIFT3 SHIFT4 <-- SPACE --> ENTER - 0x17 (8) * * ------------------------------------------------------------------------------- * shift level 1 * * X Y Z [ \ ] ^ _ - 0x1e (1) * 0 1 2 3 4 5 6 7 - 0x1d (2) * 8 9 : ; < = > ? - 0x1b (4) * SHIFT1 SHIFT2 SHIFT3 SHIFT4 <-- SPACE --> ENTER - 0x17 (8) * * ------------------------------------------------------------------------------- * shift level 2 * * x y z { | } ~ DEL? - 0x1e (1) * SPACE? ! " # $ % & ' - 0x1d (2) * ( ) * + , - . / - 0x1b (4) * SHIFT1 SHIFT2 SHIFT3 SHIFT4 <-- SPACE --> ENTER - 0x17 (8) * * ------------------------------------------------------------------------------- * shift level 3 * * ` a b c d e f g - 0x1e (1) * h i j k l m n o - 0x1d (2) * p q r s t u v w - 0x1b (4) * SHIFT1 SHIFT2 SHIFT3 SHIFT4 <-- SPACE --> ENTER - 0x17 (8) * =============================================================================== */ static unsigned int __keys[] = { /* 0x00 [.] */ 0x0000, /* 0x01 [.] */ 0x0000, /* 0x02 [.] */ 0x0000, /* 0x03 [.] */ 0x0000, /* 0x04 [.] */ 0x0000, /* 0x05 [.] */ 0x0000, /* 0x06 [.] */ 0x0000, /* 0x07 [.] */ 0x0000, /* 0x08 [.] */ 0x0000, /* 0x09 [.] */ 0x0000, /* 0x0a [.] */ 0x0000, /* 0x0b [.] */ 0x0000, /* 0x0c [.] */ 0x0000, /* 0x0d [.] */ 0x0078, /* ENTER */ /* 0x0e [.] */ 0x0000, /* 0x0f [.] */ 0x0000, /* 0x10 [.] */ 0x0000, /* 0x11 [.] */ 0x0000, /* 0x12 [.] */ 0x0000, /* 0x13 [.] */ 0x0000, /* 0x14 [.] */ 0x0000, /* 0x15 [.] */ 0x0000, /* 0x16 [.] */ 0x0000, /* 0x17 [.] */ 0x0000, /* 0x18 [.] */ 0x0000, /* 0x19 [.] */ 0x0000, /* 0x1a [.] */ 0x0000, /* 0x1b [.] */ 0x0000, /* 0x1c [.] */ 0x0000, /* 0x1d [.] */ 0x0000, /* 0x1e [.] */ 0x0000, /* 0x1f [.] */ 0x0000, /* 0x20 [ ] */ 0x0058, /* SPACE */ /* 0x21 [!] */ 0x0212, /* 0x22 ["] */ 0x0222, /* 0x23 [#] */ 0x0232, /* 0x24 [$] */ 0x0242, /* 0x25 [%] */ 0x0252, /* 0x26 [&] */ 0x0262, /* 0x27 ['] */ 0x0272, /* 0x28 [(] */ 0x0204, /* 0x29 [)] */ 0x0214, /* 0x2a [*] */ 0x0224, /* 0x2b [+] */ 0x0234, /* 0x2c [,] */ 0x0244, /* 0x2d [-] */ 0x0254, /* 0x2e [.] */ 0x0264, /* 0x2f [/] */ 0x0274, /* 0x30 [0] */ 0x0102, /* 0x31 [1] */ 0x0112, /* 0x32 [2] */ 0x0122, /* 0x33 [3] */ 0x0132, /* 0x34 [4] */ 0x0142, /* 0x35 [5] */ 0x0152, /* 0x36 [6] */ 0x0162, /* 0x37 [7] */ 0x0172, /* 0x38 [8] */ 0x0104, /* 0x39 [9] */ 0x0114, /* 0x3a [:] */ 0x0124, /* 0x3b [;] */ 0x0134, /* 0x3c [<] */ 0x0144, /* 0x3d [=] */ 0x0154, /* 0x3e [>] */ 0x0164, /* 0x3f [?] */ 0x0174, /* 0x40 [@] */ 0x0001, /* 0x41 [A] */ 0x0311, /* 0x42 [B] */ 0x0321, /* 0x43 [C] */ 0x0331, /* 0x44 [D] */ 0x0341, /* 0x45 [E] */ 0x0351, /* 0x46 [F] */ 0x0361, /* 0x47 [G] */ 0x0371, /* 0x48 [H] */ 0x0302, /* 0x49 [I] */ 0x0312, /* 0x4a [J] */ 0x0322, /* 0x4b [K] */ 0x0332, /* 0x4c [L] */ 0x0342, /* 0x4d [M] */ 0x0352, /* 0x4e [N] */ 0x0362, /* 0x4f [O] */ 0x0372, /* 0x50 [P] */ 0x0304, /* 0x51 [Q] */ 0x0314, /* 0x52 [R] */ 0x0324, /* 0x53 [S] */ 0x0334, /* 0x54 [T] */ 0x0344, /* 0x55 [U] */ 0x0354, /* 0x56 [V] */ 0x0364, /* 0x57 [W] */ 0x0374, /* 0x58 [X] */ 0x0201, /* 0x59 [Y] */ 0x0211, /* 0x5a [Z] */ 0x0221, /* 0x5b [[] */ 0x0131, /* 0x5c [\] */ 0x0141, /* 0x5d []] */ 0x0151, /* 0x5e [^] */ 0x0161, /* 0x5f [_] */ 0x0171, /* 0x60 [`] */ 0x0301, /* 0x61 [a] */ 0x0011, /* 0x62 [b] */ 0x0021, /* 0x63 [c] */ 0x0031, /* 0x64 [d] */ 0x0041, /* 0x65 [e] */ 0x0051, /* 0x66 [f] */ 0x0061, /* 0x67 [g] */ 0x0071, /* 0x68 [h] */ 0x0002, /* 0x69 [i] */ 0x0012, /* 0x6a [j] */ 0x0022, /* 0x6b [k] */ 0x0032, /* 0x6c [l] */ 0x0042, /* 0x6d [m] */ 0x0052, /* 0x6e [n] */ 0x0062, /* 0x6f [o] */ 0x0072, /* 0x70 [p] */ 0x0004, /* 0x71 [q] */ 0x0014, /* 0x72 [r] */ 0x0024, /* 0x73 [s] */ 0x0034, /* 0x74 [t] */ 0x0044, /* 0x75 [u] */ 0x0054, /* 0x76 [v] */ 0x0064, /* 0x77 [w] */ 0x0074, /* 0x78 [x] */ 0x0101, /* 0x79 [y] */ 0x0111, /* 0x7a [z] */ 0x0121, /* 0x7b [{] */ 0x0231, /* 0x7c [|] */ 0x0241, /* 0x7d [}] */ 0x0251, /* 0x7e [~] */ 0x0261, /* 0x7f [.] */ 0x0271, /* 0x80 [.] */ 0x0000, /* 0x81 [.] */ 0x0000, /* 0x82 [.] */ 0x0000, /* 0x83 [.] */ 0x0000, /* 0x84 [.] */ 0x0000, /* 0x85 [.] */ 0x0000, /* 0x86 [.] */ 0x0000, /* 0x87 [.] */ 0x0000, /* 0x88 [.] */ 0x0000, /* 0x89 [.] */ 0x0000, /* 0x8a [.] */ 0x0000, /* 0x8b [.] */ 0x0000, /* 0x8c [.] */ 0x0000, /* 0x8d [.] */ 0x0000, /* 0x8e [.] */ 0x0000, /* 0x8f [.] */ 0x0000, /* 0x90 [.] */ 0x0000, /* 0x91 [.] */ 0x0000, /* 0x92 [.] */ 0x0000, /* 0x93 [.] */ 0x0000, /* 0x94 [.] */ 0x0000, /* 0x95 [.] */ 0x0000, /* 0x96 [.] */ 0x0000, /* 0x97 [.] */ 0x0000, /* 0x98 [.] */ 0x0000, /* 0x99 [.] */ 0x0000, /* 0x9a [.] */ 0x0000, /* 0x9b [.] */ 0x0000, /* 0x9c [.] */ 0x0000, /* 0x9d [.] */ 0x0000, /* 0x9e [.] */ 0x0000, /* 0x9f [.] */ 0x0000, /* 0xa0 [.] */ 0x0000, /* 0xa1 [.] */ 0x0000, /* 0xa2 [.] */ 0x0000, /* 0xa3 [.] */ 0x0000, /* 0xa4 [.] */ 0x0000, /* 0xa5 [.] */ 0x0000, /* 0xa6 [.] */ 0x0000, /* 0xa7 [.] */ 0x0000, /* 0xa8 [.] */ 0x0000, /* 0xa9 [.] */ 0x0000, /* 0xaa [.] */ 0x0000, /* 0xab [.] */ 0x0000, /* 0xac [.] */ 0x0000, /* 0xad [.] */ 0x0000, /* 0xae [.] */ 0x0000, /* 0xaf [.] */ 0x0000, /* 0xb0 [.] */ 0x0000, /* 0xb1 [.] */ 0x0000, /* 0xb2 [.] */ 0x0000, /* 0xb3 [.] */ 0x0000, /* 0xb4 [.] */ 0x0000, /* 0xb5 [.] */ 0x0000, /* 0xb6 [.] */ 0x0000, /* 0xb7 [.] */ 0x0000, /* 0xb8 [.] */ 0x0000, /* 0xb9 [.] */ 0x0000, /* 0xba [.] */ 0x0000, /* 0xbb [.] */ 0x0000, /* 0xbc [.] */ 0x0000, /* 0xbd [.] */ 0x0000, /* 0xbe [.] */ 0x0000, /* 0xbf [.] */ 0x0000, /* 0xc0 [.] */ 0x0000, /* 0xc1 [.] */ 0x0000, /* 0xc2 [.] */ 0x0000, /* 0xc3 [.] */ 0x0000, /* 0xc4 [.] */ 0x0000, /* 0xc5 [.] */ 0x0000, /* 0xc6 [.] */ 0x0000, /* 0xc7 [.] */ 0x0000, /* 0xc8 [.] */ 0x0000, /* 0xc9 [.] */ 0x0000, /* 0xca [.] */ 0x0000, /* 0xcb [.] */ 0x0000, /* 0xcc [.] */ 0x0000, /* 0xcd [.] */ 0x0000, /* 0xce [.] */ 0x0000, /* 0xcf [.] */ 0x0000, /* 0xd0 [.] */ 0x0000, /* 0xd1 [.] */ 0x0000, /* 0xd2 [.] */ 0x0000, /* 0xd3 [.] */ 0x0000, /* 0xd4 [.] */ 0x0000, /* 0xd5 [.] */ 0x0000, /* 0xd6 [.] */ 0x0000, /* 0xd7 [.] */ 0x0000, /* 0xd8 [.] */ 0x0000, /* 0xd9 [.] */ 0x0000, /* 0xda [.] */ 0x0000, /* 0xdb [.] */ 0x0000, /* 0xdc [.] */ 0x0000, /* 0xdd [.] */ 0x0000, /* 0xde [.] */ 0x0000, /* 0xdf [.] */ 0x0000, /* 0xe0 [.] */ 0x0000, /* 0xe1 [.] */ 0x0000, /* 0xe2 [.] */ 0x0000, /* 0xe3 [.] */ 0x0000, /* 0xe4 [.] */ 0x0000, /* 0xe5 [.] */ 0x0000, /* 0xe6 [.] */ 0x0000, /* 0xe7 [.] */ 0x0000, /* 0xe8 [.] */ 0x0000, /* 0xe9 [.] */ 0x0000, /* 0xea [.] */ 0x0000, /* 0xeb [.] */ 0x0000, /* 0xec [.] */ 0x0000, /* 0xed [.] */ 0x0000, /* 0xee [.] */ 0x0000, /* 0xef [.] */ 0x0000, /* 0xf0 [.] */ 0x0000, /* 0xf1 [.] */ 0x0000, /* 0xf2 [.] */ 0x0000, /* 0xf3 [.] */ 0x0000, /* 0xf4 [.] */ 0x0000, /* 0xf5 [.] */ 0x0000, /* 0xf6 [.] */ 0x0000, /* 0xf7 [.] */ 0x0000, /* 0xf8 [.] */ 0x0000, /* 0xf9 [.] */ 0x0000, /* 0xfa [.] */ 0x0000, /* 0xfb [.] */ 0x0000, /* 0xfc [.] */ 0x0000, /* 0xfd [.] */ 0x0000, /* 0xfe [.] */ 0x0000, /* 0xff [.] */ 0x0000, /* 0x100 */ 0x0000, /* 0x101 */ 0x0000, /* 0x102 */ 0x0000, /* 0x103 */ 0x0000, /* 0x104 */ 0x0000, /* 0x105 */ 0x0000, /* 0x106 */ 0x0000, /* 0x107 */ 0x0000, /* 0x108 */ 0x0000, /* 0x109 */ 0x0000, /* 0x10a */ 0x0000, /* 0x10b */ 0x0000, /* 0x10c */ 0x0000, /* 0x10d */ 0x0000, /* 0x10e */ 0x0000, /* 0x10f */ 0x0000, /* 0x110 */ 0x0000, /* SHIFT */ /* 0x111 */ 0x0000, /* CONTROL */ /* 0x112 */ 0x0000, /* ALT */ /* 0x113 */ 0x0000, /* ALT_GR */ /* 0x114 */ 0x0048, /* LEFT */ /* 0x115 */ 0x0068, /* RIGHT */ /* 0x116 */ 0x0000, /* DOWN */ /* 0x117 */ 0x0000, /* UP */ /* 0x118 */ 0x0000, /* HOME */ /* 0x119 */ 0x0000, /* END */ /* 0x11a */ 0x0000, /* DEL */ /* 0x11b */ 0x0000, /* INSERT */ /* 0x11c */ 0x0000, /* 0x11d */ 0x0000, /* 0x11e */ 0x0000, /* PAUSE */ /* 0x11f */ 0x0000, /* 0x120 */ 0x0000, /* COLOR */ /* 0x121 */ 0x0000, /* GRAPHIC */ /* 0x122 */ 0x0000, /* LIST */ /* 0x123 */ 0x0000, /* RUN */ /* 0x124 */ 0x0000, /* STOP */ /* 0x125 */ 0x0000, /* SHIFT LOCK */ /* 0x126 */ 0x0000, /* 0x127 */ 0x0000, /* 0x128 */ 0x0000, /* 0x129 */ 0x0000, /* 0x12a */ 0x0000, /* 0x12b */ 0x0000, /* 0x12c */ 0x0000, /* 0x12d */ 0x0000, /* 0x12e */ 0x0000, /* 0x12f */ 0x0000, }; /* * */ static unsigned int __keys_a2[] = { /* 0x00 [.] */ 0x0000, /* 0x01 [.] */ 0x0000, /* 0x02 [.] */ 0x0000, /* 0x03 [.] */ 0x0000, /* 0x04 [.] */ 0x0000, /* 0x05 [.] */ 0x0000, /* 0x06 [.] */ 0x0000, /* 0x07 [.] */ 0x0000, /* 0x08 [.] */ 0x0000, /* 0x09 [.] */ 0x0000, /* 0x0a [.] */ 0x0000, /* 0x0b [.] */ 0x0000, /* 0x0c [.] */ 0x0000, /* 0x0d [.] */ 0x0017, /* ENTER */ /* 0x0e [.] */ 0x0000, /* 0x0f [.] */ 0x0000, /* 0x10 [.] */ 0x0000, /* 0x11 [.] */ 0x0000, /* 0x12 [.] */ 0x0000, /* 0x13 [.] */ 0x0000, /* 0x14 [.] */ 0x0000, /* 0x15 [.] */ 0x0000, /* 0x16 [.] */ 0x0000, /* 0x17 [.] */ 0x0000, /* 0x18 [.] */ 0x0000, /* 0x19 [.] */ 0x0000, /* 0x1a [.] */ 0x0000, /* 0x1b [.] */ 0x0000, /* 0x1c [.] */ 0x0000, /* 0x1d [.] */ 0x0000, /* 0x1e [.] */ 0x0000, /* 0x1f [.] */ 0x0000, /* 0x20 [ ] */ 0x0047, /* SPACE */ /* 0x21 [!] */ 0x6801, /* 0x22 ["] */ 0x6841, /* 0x23 [#] */ 0x6802, /* 0x24 [$] */ 0x6842, /* 0x25 [%] */ 0x6803, /* 0x26 [&] */ 0x6843, /* 0x27 ['] */ 0x6804, /* 0x28 [(] */ 0x6844, /* 0x29 [)] */ 0x6805, /* 0x2a [*] */ 0x0026, /* 0x2b [+] */ 0x0065, /* 0x2c [,] */ 0x0074, /* 0x2d [-] */ 0x0006, /* 0x2e [.] */ 0x0035, /* 0x2f [/] */ 0x0075, /* 0x30 [0] */ 0x0045, /* 0x31 [1] */ 0x0001, /* 0x32 [2] */ 0x0041, /* 0x33 [3] */ 0x0002, /* 0x34 [4] */ 0x0042, /* 0x35 [5] */ 0x0003, /* 0x36 [6] */ 0x0043, /* 0x37 [7] */ 0x0004, /* 0x38 [8] */ 0x0044, /* 0x39 [9] */ 0x0005, /* 0x3a [:] */ 0x6826, /* 0x3b [;] */ 0x6865, /* 0x3c [<] */ 0x6874, /* 0x3d [=] */ 0x6806, /* 0x3e [>] */ 0x6835, /* 0x3f [?] */ 0x6875, /* 0x40 [@] */ 0x0016, /* 0x41 [A] */ 0x6821, /* 0x42 [B] */ 0x6833, /* 0x43 [C] */ 0x6832, /* 0x44 [D] */ 0x6822, /* 0x45 [E] */ 0x6812, /* 0x46 [F] */ 0x6862, /* 0x47 [G] */ 0x6823, /* 0x48 [H] */ 0x6863, /* 0x49 [I] */ 0x6854, /* 0x4a [J] */ 0x6824, /* 0x4b [K] */ 0x6864, /* 0x4c [L] */ 0x6825, /* 0x4d [M] */ 0x6834, /* 0x4e [N] */ 0x6873, /* 0x4f [O] */ 0x6815, /* 0x50 [P] */ 0x6855, /* 0x51 [Q] */ 0x6811, /* 0x52 [R] */ 0x6852, /* 0x53 [S] */ 0x6861, /* 0x54 [T] */ 0x6813, /* 0x55 [U] */ 0x6814, /* 0x56 [V] */ 0x6872, /* 0x57 [W] */ 0x6851, /* 0x58 [X] */ 0x6871, /* 0x59 [Y] */ 0x6831, /* 0x5a [Z] */ 0x6853, /* 0x5b [[] */ 0x0046, /* 0x5c [\] */ 0x0066, /* 0x5d []] */ 0x0056, /* 0x5e [^] */ 0x0036, /* 0x5f [_] */ 0x0076, /* 0x60 [`] */ 0x6816, /* 0x61 [a] */ 0x0021, /* 0x62 [b] */ 0x0033, /* 0x63 [c] */ 0x0032, /* 0x64 [d] */ 0x0022, /* 0x65 [e] */ 0x0012, /* 0x66 [f] */ 0x0062, /* 0x67 [g] */ 0x0023, /* 0x68 [h] */ 0x0063, /* 0x69 [i] */ 0x0054, /* 0x6a [j] */ 0x0024, /* 0x6b [k] */ 0x0064, /* 0x6c [l] */ 0x0025, /* 0x6d [m] */ 0x0034, /* 0x6e [n] */ 0x0073, /* 0x6f [o] */ 0x0015, /* 0x70 [p] */ 0x0055, /* 0x71 [q] */ 0x0011, /* 0x72 [r] */ 0x0052, /* 0x73 [s] */ 0x0061, /* 0x74 [t] */ 0x0013, /* 0x75 [u] */ 0x0014, /* 0x76 [v] */ 0x0072, /* 0x77 [w] */ 0x0051, /* 0x78 [x] */ 0x0071, /* 0x79 [y] */ 0x0031, /* 0x7a [z] */ 0x0053, /* 0x7b [{] */ 0x6846, /* 0x7c [|] */ 0x6866, /* 0x7d [}] */ 0x6856, /* 0x7e [~] */ 0x6836, /* 0x7f [.] */ 0x0000, /* 0x80 [.] */ 0x0000, /* 0x81 [.] */ 0x0000, /* 0x82 [.] */ 0x0000, /* 0x83 [.] */ 0x0000, /* 0x84 [.] */ 0x0000, /* 0x85 [.] */ 0x0000, /* 0x86 [.] */ 0x0000, /* 0x87 [.] */ 0x0000, /* 0x88 [.] */ 0x0000, /* 0x89 [.] */ 0x0000, /* 0x8a [.] */ 0x0000, /* 0x8b [.] */ 0x0000, /* 0x8c [.] */ 0x0000, /* 0x8d [.] */ 0x0000, /* 0x8e [.] */ 0x0000, /* 0x8f [.] */ 0x0000, /* 0x90 [.] */ 0x0000, /* 0x91 [.] */ 0x0000, /* 0x92 [.] */ 0x0000, /* 0x93 [.] */ 0x0000, /* 0x94 [.] */ 0x0000, /* 0x95 [.] */ 0x0000, /* 0x96 [.] */ 0x0000, /* 0x97 [.] */ 0x0000, /* 0x98 [.] */ 0x0000, /* 0x99 [.] */ 0x0000, /* 0x9a [.] */ 0x0000, /* 0x9b [.] */ 0x0000, /* 0x9c [.] */ 0x0000, /* 0x9d [.] */ 0x0000, /* 0x9e [.] */ 0x0000, /* 0x9f [.] */ 0x0000, /* 0xa0 [.] */ 0x0000, /* 0xa1 [.] */ 0x0000, /* 0xa2 [.] */ 0x0000, /* 0xa3 [.] */ 0x0000, /* 0xa4 [.] */ 0x0000, /* 0xa5 [.] */ 0x0000, /* 0xa6 [.] */ 0x0000, /* 0xa7 [.] */ 0x0000, /* 0xa8 [.] */ 0x0000, /* 0xa9 [.] */ 0x0000, /* 0xaa [.] */ 0x0000, /* 0xab [.] */ 0x0000, /* 0xac [.] */ 0x0000, /* 0xad [.] */ 0x0000, /* 0xae [.] */ 0x0000, /* 0xaf [.] */ 0x0000, /* 0xb0 [.] */ 0x0000, /* 0xb1 [.] */ 0x0000, /* 0xb2 [.] */ 0x0000, /* 0xb3 [.] */ 0x0000, /* 0xb4 [.] */ 0x0000, /* 0xb5 [.] */ 0x0000, /* 0xb6 [.] */ 0x0000, /* 0xb7 [.] */ 0x0000, /* 0xb8 [.] */ 0x0000, /* 0xb9 [.] */ 0x0000, /* 0xba [.] */ 0x0000, /* 0xbb [.] */ 0x0000, /* 0xbc [.] */ 0x0000, /* 0xbd [.] */ 0x0000, /* 0xbe [.] */ 0x0000, /* 0xbf [.] */ 0x0000, /* 0xc0 [.] */ 0x0000, /* 0xc1 [.] */ 0x0000, /* 0xc2 [.] */ 0x0000, /* 0xc3 [.] */ 0x0000, /* 0xc4 [.] */ 0x0000, /* 0xc5 [.] */ 0x0000, /* 0xc6 [.] */ 0x0000, /* 0xc7 [.] */ 0x0000, /* 0xc8 [.] */ 0x0000, /* 0xc9 [.] */ 0x0000, /* 0xca [.] */ 0x0000, /* 0xcb [.] */ 0x0000, /* 0xcc [.] */ 0x0000, /* 0xcd [.] */ 0x0000, /* 0xce [.] */ 0x0000, /* 0xcf [.] */ 0x0000, /* 0xd0 [.] */ 0x0000, /* 0xd1 [.] */ 0x0000, /* 0xd2 [.] */ 0x0000, /* 0xd3 [.] */ 0x0000, /* 0xd4 [.] */ 0x0000, /* 0xd5 [.] */ 0x0000, /* 0xd6 [.] */ 0x0000, /* 0xd7 [.] */ 0x0000, /* 0xd8 [.] */ 0x0000, /* 0xd9 [.] */ 0x0000, /* 0xda [.] */ 0x0000, /* 0xdb [.] */ 0x0000, /* 0xdc [.] */ 0x0000, /* 0xdd [.] */ 0x0000, /* 0xde [.] */ 0x0000, /* 0xdf [.] */ 0x0000, /* 0xe0 [.] */ 0x0000, /* 0xe1 [.] */ 0x0000, /* 0xe2 [.] */ 0x0000, /* 0xe3 [.] */ 0x0000, /* 0xe4 [.] */ 0x0000, /* 0xe5 [.] */ 0x0000, /* 0xe6 [.] */ 0x0000, /* 0xe7 [.] */ 0x0000, /* 0xe8 [.] */ 0x0000, /* 0xe9 [.] */ 0x0000, /* 0xea [.] */ 0x0000, /* 0xeb [.] */ 0x0000, /* 0xec [.] */ 0x0000, /* 0xed [.] */ 0x0000, /* 0xee [.] */ 0x0000, /* 0xef [.] */ 0x0000, /* 0xf0 [.] */ 0x0000, /* 0xf1 [.] */ 0x0000, /* 0xf2 [.] */ 0x0000, /* 0xf3 [.] */ 0x0000, /* 0xf4 [.] */ 0x0000, /* 0xf5 [.] */ 0x0000, /* 0xf6 [.] */ 0x0000, /* 0xf7 [.] */ 0x0000, /* 0xf8 [.] */ 0x0000, /* 0xf9 [.] */ 0x0000, /* 0xfa [.] */ 0x0000, /* 0xfb [.] */ 0x0000, /* 0xfc [.] */ 0x0000, /* 0xfd [.] */ 0x0000, /* 0xfe [.] */ 0x0000, /* 0xff [.] */ 0x0000, /* 0x100 */ 0x0000, /* 0x101 */ 0x000c, /* 0x102 */ 0x001c, /* 0x103 */ 0x002c, /* 0x104 */ 0x003c, /* 0x105 */ 0x004c, /* 0x106 */ 0x005c, /* 0x107 */ 0x006c, /* 0x108 */ 0x007c, /* 0x109 */ 0x008c, /* 0x10a */ 0x009c, /* 0x10b */ 0x00ac, /* 0x10c */ 0x0032, /* */ /* 0x10d */ 0x0000, /* 0x10e */ 0x0000, /* 0x10f */ 0x0000, /* 0x110 */ 0x0068, /* SHIFT */ /* 0x111 */ 0x0057, /* CONTROL */ /* 0x112 */ 0x0000, /* ALT */ /* 0x113 */ 0x0000, /* ALT_GR */ /* 0x114 */ 0x0027, /* LEFT */ /* 0x115 */ 0x0037, /* RIGHT */ /* 0x116 */ 0x0077, /* DOWN */ /* 0x117 */ 0x0067, /* UP */ /* 0x118 */ 0x0000, /* HOME */ /* 0x119 */ 0x0000, /* END */ /* 0x11a */ 0x0000, /* DEL */ /* 0x11b */ 0x0000, /* INSERT */ /* 0x11c */ 0x0000, /* 0x11d */ 0x0000, /* 0x11e */ 0x0000, /* PAUSE */ /* 0x11f */ 0x0000, /* 0x120 */ 0x0000, /* COLOR */ /* 0x121 */ 0x0000, /* GRAPHIC */ /* 0x122 */ 0x0000, /* LIST */ /* 0x123 */ 0x0000, /* RUN */ /* 0x124 */ 0x0000, /* STOP */ /* 0x125 */ 0x0078, /* SHIFT LOCK */ /* 0x126 */ 0x0000, /* 0x127 */ 0x0000, /* 0x128 */ 0x0000, /* 0x129 */ 0x0000, /* 0x12a */ 0x0000, /* 0x12b */ 0x0000, /* 0x12c */ 0x0000, /* 0x12d */ 0x0000, /* 0x12e */ 0x0000, /* 0x12f */ 0x0000, }; /* * Brosig monitor 'Z1013+K7659/2.028 RB' * * ohne Shift: * * 0 1 2 3 4 5 6 7 * +-----------------------------------------------------------------------+ * 0: 1 Q A Y 2 W S X | 1 * 1: 3 E D C 4 R F V | 2 * 2: 5 T G B 6 Z H N | 3 * 3: 7 U J M 8 I K , | 4 * 4: 9 O L . 0 P \(�) - | 5 * 5: ~(�) ](�) [(�) < + # ^ @ | 6 * 6: > ENTER UP LEFT SPACE SHLOCK DOWN RIGHT | 7 * 7: SHIFT CTRL | 8 * 8: DEL TAB MONITOR ESC { } 2MHz | 9 * 9: 4MHz 32/64 ZG-SW CTRL-U CTRL-Y CTRL-R CTRL-P CTRL-C | a * 10: CTRL-F GRAFIK BEEP CTRL-S | b * 11: CTRL-] WIPPE+ WIPPE- | c * * * * mit Shift: * * 0 1 2 3 4 5 6 7 * +-----------------------------------------------------------------------+ * 0: ! q a y " w s x | 1 * 1: @ e d c $ r f v | 2 * 2: % t g b & z h n | 3 * 3: / u j m ( i k ; | 4 * 4: ) o l : = p � _ | 5 * 5: ? } { [ * ' | \ | 6 * 6: ] ENTER UP LEFT SPACE SM-TAST DOWN RIGHT | 7 * 7: SHIFT CTRL | 8 * 8: CTRL-G CTRL-S MONITOR ESC ` JP 100 | 9 * 9: CTRL-O CTRL-X CTRL-Q CTRL-C | a * 10: NEWLINE GRAFIK BEEP | b * 11: CTRL-Y CTRL-X | c */ static unsigned int __keys_rb_k7659[] = { /* 0x00 [.] */ 0x0000, /* 0x01 [.] */ 0x0000, /* CTRL-A */ /* 0x02 [.] */ 0x0000, /* CTRL-B */ /* 0x03 [.] */ 0x007a, /* CTRL-C */ /* 0x04 [.] */ 0x0000, /* CTRL-D */ /* 0x05 [.] */ 0x0000, /* CTRL-E */ /* 0x06 [.] */ 0x000b, /* CTRL-F */ /* 0x07 [.] */ 0x6819, /* CTRL-G */ /* 0x08 [.] */ 0x0000, /* CTRL-H */ /* 0x09 [.] */ 0x0000, /* CTRL-I */ /* 0x0a [.] */ 0x680b, /* CTRL-J, NEWLINE */ /* 0x0b [.] */ 0x0000, /* CTRL-K */ /* 0x0c [.] */ 0x0000, /* CTRL-L */ /* 0x0d [.] */ 0x0017, /* CTRL-M, ENTER */ /* 0x0e [.] */ 0x0000, /* CTRL-N */ /* 0x0f [.] */ 0x683a, /* CTRL-O */ /* 0x10 [.] */ 0x006a, /* CTRL-P */ /* 0x11 [.] */ 0x0000, /* CTRL-Q */ /* 0x12 [.] */ 0x0000, /* CTRL-R */ /* 0x13 [.] */ 0x007b, /* CTRL-S */ /* 0x14 [.] */ 0x0000, /* CTRL-T */ /* 0x15 [.] */ 0x003a, /* CTRL-U */ /* 0x16 [.] */ 0x005a, /* CTRL-V */ /* 0x17 [.] */ 0x0000, /* CTRL-W */ /* 0x18 [.] */ 0x684a, /* CTRL-X */ /* 0x19 [.] */ 0x004a, /* CTRL-Y */ /* 0x1a [.] */ 0x0000, /* CTRL-Z */ /* 0x1b [.] */ 0x0049, /* ESC */ /* 0x1c [.] */ 0x0000, /* 0x1d [.] */ 0x0000, /* 0x1e [.] */ 0x0000, /* 0x1f [.] */ 0x0000, /* 0x20 [ ] */ 0x0047, /* SPACE */ /* 0x21 [!] */ 0x6801, /* 0x22 ["] */ 0x6841, /* 0x23 [#] */ 0x0056, /* 0x24 [$] */ 0x6842, /* 0x25 [%] */ 0x6803, /* 0x26 [&] */ 0x6843, /* 0x27 ['] */ 0x6856, /* 0x28 [(] */ 0x6844, /* 0x29 [)] */ 0x6805, /* 0x2a [*] */ 0x6846, /* 0x2b [+] */ 0x0046, /* 0x2c [,] */ 0x0074, /* 0x2d [-] */ 0x0075, /* 0x2e [.] */ 0x0035, /* 0x2f [/] */ 0x6804, /* 0x30 [0] */ 0x0045, /* 0x31 [1] */ 0x0001, /* 0x32 [2] */ 0x0041, /* 0x33 [3] */ 0x0002, /* 0x34 [4] */ 0x0042, /* 0x35 [5] */ 0x0003, /* 0x36 [6] */ 0x0043, /* 0x37 [7] */ 0x0004, /* 0x38 [8] */ 0x0044, /* 0x39 [9] */ 0x0005, /* 0x3a [:] */ 0x6835, /* 0x3b [;] */ 0x6874, /* 0x3c [<] */ 0x0036, /* 0x3d [=] */ 0x6845, /* 0x3e [>] */ 0x0007, /* 0x3f [?] */ 0x6806, /* 0x40 [@] */ 0x6802, /* 0x41 [A] */ 0x6821, /* 0x42 [B] */ 0x6833, /* 0x43 [C] */ 0x6832, /* 0x44 [D] */ 0x6822, /* 0x45 [E] */ 0x6812, /* 0x46 [F] */ 0x6862, /* 0x47 [G] */ 0x6823, /* 0x48 [H] */ 0x6863, /* 0x49 [I] */ 0x6854, /* 0x4a [J] */ 0x6824, /* 0x4b [K] */ 0x6864, /* 0x4c [L] */ 0x6825, /* 0x4d [M] */ 0x6834, /* 0x4e [N] */ 0x6873, /* 0x4f [O] */ 0x6815, /* 0x50 [P] */ 0x6855, /* 0x51 [Q] */ 0x6811, /* 0x52 [R] */ 0x6852, /* 0x53 [S] */ 0x6861, /* 0x54 [T] */ 0x6813, /* 0x55 [U] */ 0x6814, /* 0x56 [V] */ 0x6872, /* 0x57 [W] */ 0x6851, /* 0x58 [X] */ 0x6871, /* 0x59 [Y] */ 0x6831, /* 0x5a [Z] */ 0x6853, /* 0x5b [[] */ 0x6836, /* 0x5c [\] */ 0x6876, /* 0x5d []] */ 0x6807, /* 0x5e [^] */ 0x0066, /* 0x5f [_] */ 0x6875, /* 0x60 [`] */ 0x6859, /* 0x61 [a] */ 0x0021, /* 0x62 [b] */ 0x0033, /* 0x63 [c] */ 0x0032, /* 0x64 [d] */ 0x0022, /* 0x65 [e] */ 0x0012, /* 0x66 [f] */ 0x0062, /* 0x67 [g] */ 0x0023, /* 0x68 [h] */ 0x0063, /* 0x69 [i] */ 0x0054, /* 0x6a [j] */ 0x0024, /* 0x6b [k] */ 0x0064, /* 0x6c [l] */ 0x0025, /* 0x6d [m] */ 0x0034, /* 0x6e [n] */ 0x0073, /* 0x6f [o] */ 0x0015, /* 0x70 [p] */ 0x0055, /* 0x71 [q] */ 0x0011, /* 0x72 [r] */ 0x0052, /* 0x73 [s] */ 0x0061, /* 0x74 [t] */ 0x0013, /* 0x75 [u] */ 0x0014, /* 0x76 [v] */ 0x0072, /* 0x77 [w] */ 0x0051, /* 0x78 [x] */ 0x0071, /* 0x79 [y] */ 0x0031, /* 0x7a [z] */ 0x0053, /* 0x7b [{] */ 0x6826, /* 0x7c [|] */ 0x6866, /* 0x7d [}] */ 0x6816, /* 0x7e [~] */ 0x0006, /* 0x7f [.] */ 0x0000, /* 0x80 [.] */ 0x0000, /* 0x81 [.] */ 0x0000, /* 0x82 [.] */ 0x0000, /* 0x83 [.] */ 0x0000, /* 0x84 [.] */ 0x0000, /* 0x85 [.] */ 0x0000, /* 0x86 [.] */ 0x0000, /* 0x87 [.] */ 0x0000, /* 0x88 [.] */ 0x0000, /* 0x89 [.] */ 0x0000, /* 0x8a [.] */ 0x0000, /* 0x8b [.] */ 0x0000, /* 0x8c [.] */ 0x0000, /* 0x8d [.] */ 0x0000, /* 0x8e [.] */ 0x0000, /* 0x8f [.] */ 0x0000, /* 0x90 [.] */ 0x0000, /* 0x91 [.] */ 0x0000, /* 0x92 [.] */ 0x0000, /* 0x93 [.] */ 0x0000, /* 0x94 [.] */ 0x0000, /* 0x95 [.] */ 0x0000, /* 0x96 [.] */ 0x0000, /* 0x97 [.] */ 0x0000, /* 0x98 [.] */ 0x0000, /* 0x99 [.] */ 0x0000, /* 0x9a [.] */ 0x0000, /* 0x9b [.] */ 0x0000, /* 0x9c [.] */ 0x0000, /* 0x9d [.] */ 0x0000, /* 0x9e [.] */ 0x0000, /* 0x9f [.] */ 0x0000, /* 0xa0 [.] */ 0x0000, /* 0xa1 [.] */ 0x0000, /* 0xa2 [.] */ 0x0000, /* 0xa3 [.] */ 0x0000, /* 0xa4 [.] */ 0x0000, /* 0xa5 [.] */ 0x0000, /* 0xa6 [.] */ 0x0000, /* 0xa7 [.] */ 0x0000, /* 0xa8 [.] */ 0x0000, /* 0xa9 [.] */ 0x0000, /* 0xaa [.] */ 0x0000, /* 0xab [.] */ 0x0000, /* 0xac [.] */ 0x0000, /* 0xad [.] */ 0x0000, /* 0xae [.] */ 0x0000, /* 0xaf [.] */ 0x0000, /* 0xb0 [.] */ 0x0000, /* 0xb1 [.] */ 0x0000, /* 0xb2 [.] */ 0x0000, /* 0xb3 [.] */ 0x0000, /* 0xb4 [.] */ 0x0000, /* 0xb5 [.] */ 0x0000, /* 0xb6 [.] */ 0x0000, /* 0xb7 [.] */ 0x0000, /* 0xb8 [.] */ 0x0000, /* 0xb9 [.] */ 0x0000, /* 0xba [.] */ 0x0000, /* 0xbb [.] */ 0x0000, /* 0xbc [.] */ 0x0000, /* 0xbd [.] */ 0x0000, /* 0xbe [.] */ 0x0000, /* 0xbf [.] */ 0x0000, /* 0xc0 [.] */ 0x0000, /* 0xc1 [.] */ 0x0000, /* 0xc2 [.] */ 0x0000, /* 0xc3 [.] */ 0x0000, /* 0xc4 [.] */ 0x0000, /* 0xc5 [.] */ 0x0000, /* 0xc6 [.] */ 0x0000, /* 0xc7 [.] */ 0x0000, /* 0xc8 [.] */ 0x0000, /* 0xc9 [.] */ 0x0000, /* 0xca [.] */ 0x0000, /* 0xcb [.] */ 0x0000, /* 0xcc [.] */ 0x0000, /* 0xcd [.] */ 0x0000, /* 0xce [.] */ 0x0000, /* 0xcf [.] */ 0x0000, /* 0xd0 [.] */ 0x0000, /* 0xd1 [.] */ 0x0000, /* 0xd2 [.] */ 0x0000, /* 0xd3 [.] */ 0x0000, /* 0xd4 [.] */ 0x0000, /* 0xd5 [.] */ 0x0000, /* 0xd6 [.] */ 0x0000, /* 0xd7 [.] */ 0x0000, /* 0xd8 [.] */ 0x0000, /* 0xd9 [.] */ 0x0000, /* 0xda [.] */ 0x0000, /* 0xdb [.] */ 0x0000, /* 0xdc [.] */ 0x0000, /* 0xdd [.] */ 0x0000, /* 0xde [.] */ 0x0000, /* 0xdf [.] */ 0x0000, /* 0xe0 [.] */ 0x0000, /* 0xe1 [.] */ 0x0000, /* 0xe2 [.] */ 0x0000, /* 0xe3 [.] */ 0x0000, /* 0xe4 [.] */ 0x0000, /* 0xe5 [.] */ 0x0000, /* 0xe6 [.] */ 0x0000, /* 0xe7 [.] */ 0x0000, /* 0xe8 [.] */ 0x0000, /* 0xe9 [.] */ 0x0000, /* 0xea [.] */ 0x0000, /* 0xeb [.] */ 0x0000, /* 0xec [.] */ 0x0000, /* 0xed [.] */ 0x0000, /* 0xee [.] */ 0x0000, /* 0xef [.] */ 0x0000, /* 0xf0 [.] */ 0x0000, /* 0xf1 [.] */ 0x0000, /* 0xf2 [.] */ 0x0000, /* 0xf3 [.] */ 0x0000, /* 0xf4 [.] */ 0x0000, /* 0xf5 [.] */ 0x0000, /* 0xf6 [.] */ 0x0000, /* 0xf7 [.] */ 0x0000, /* 0xf8 [.] */ 0x0000, /* 0xf9 [.] */ 0x0000, /* 0xfa [.] */ 0x0000, /* 0xfb [.] */ 0x0000, /* 0xfc [.] */ 0x0000, /* 0xfd [.] */ 0x0000, /* 0xfe [.] */ 0x0000, /* 0xff [.] */ 0x0000, /* 0x100 */ 0x0000, /* 0x101 */ 0x0000, /* 0x102 */ 0x0000, /* 0x103 */ 0x0000, /* 0x104 */ 0x0000, /* 0x105 */ 0x0000, /* 0x106 */ 0x0000, /* 0x107 */ 0x0000, /* 0x108 */ 0x0000, /* 0x109 */ 0x0000, /* 0x10a */ 0x0000, /* 0x10b */ 0x0000, /* 0x10c */ 0x007a, /* 0x10d */ 0x0000, /* 0x10e */ 0x0000, /* 0x10f */ 0x0000, /* 0x110 */ 0x0081, /* SHIFT */ /* 0x111 */ 0x0000, /* CONTROL */ /* 0x112 */ 0x0000, /* ALT */ /* 0x113 */ 0x0000, /* ALT_GR */ /* 0x114 */ 0x0037, /* LEFT */ /* 0x115 */ 0x0077, /* RIGHT */ /* 0x116 */ 0x0067, /* DOWN */ /* 0x117 */ 0x0027, /* UP */ /* 0x118 */ 0x0000, /* HOME */ /* 0x119 */ 0x0000, /* END */ /* 0x11a */ 0x0000, /* DEL */ /* 0x11b */ 0x0000, /* INSERT */ /* 0x11c */ 0x0000, /* 0x11d */ 0x0000, /* 0x11e */ 0x0000, /* PAUSE */ /* 0x11f */ 0x0000, /* 0x120 */ 0x0000, /* COLOR */ /* 0x121 */ 0x0000, /* GRAPHIC */ /* 0x122 */ 0x0000, /* LIST */ /* 0x123 */ 0x0000, /* RUN */ /* 0x124 */ 0x0000, /* STOP */ /* 0x125 */ 0x0057, /* SHIFT LOCK */ /* 0x126 */ 0x0000, /* 0x127 */ 0x0000, /* 0x128 */ 0x0000, /* 0x129 */ 0x0000, /* 0x12a */ 0x0000, /* 0x12b */ 0x0000, /* 0x12c */ 0x0000, /* 0x12d */ 0x0000, /* 0x12e */ 0x0000, /* 0x12f */ 0x0000, }; #if 0 static unsigned int __keys_rb_k7669[] = { /* 0x00 [.] */ 0x0000, /* 0x01 [.] */ 0x0000, /* 0x02 [.] */ 0x0000, /* 0x03 [.] */ 0x0000, /* 0x04 [.] */ 0x0000, /* 0x05 [.] */ 0x0000, /* 0x06 [.] */ 0x0000, /* 0x07 [.] */ 0x0000, /* 0x08 [.] */ 0x0000, /* 0x09 [.] */ 0x0000, /* 0x0a [.] */ 0x0000, /* 0x0b [.] */ 0x0000, /* 0x0c [.] */ 0x0000, /* 0x0d [.] */ 0x0017, /* ENTER */ /* 0x0e [.] */ 0x0000, /* 0x0f [.] */ 0x0000, /* 0x10 [.] */ 0x0000, /* 0x11 [.] */ 0x0000, /* 0x12 [.] */ 0x0000, /* 0x13 [.] */ 0x0000, /* 0x14 [.] */ 0x0000, /* 0x15 [.] */ 0x0000, /* 0x16 [.] */ 0x0000, /* 0x17 [.] */ 0x0000, /* 0x18 [.] */ 0x0000, /* 0x19 [.] */ 0x0000, /* 0x1a [.] */ 0x0000, /* 0x1b [.] */ 0x0000, /* 0x1c [.] */ 0x0000, /* 0x1d [.] */ 0x0000, /* 0x1e [.] */ 0x0000, /* 0x1f [.] */ 0x0000, /* 0x20 [ ] */ 0x0047, /* SPACE */ /* 0x21 [!] */ 0x0000, /* 0x22 ["] */ 0x0000, /* 0x23 [#] */ 0x0000, /* 0x24 [$] */ 0x0000, /* 0x25 [%] */ 0x0000, /* 0x26 [&] */ 0x0000, /* 0x27 ['] */ 0x0000, /* 0x28 [(] */ 0x0000, /* 0x29 [)] */ 0x0000, /* 0x2a [*] */ 0x0000, /* 0x2b [+] */ 0x0000, /* 0x2c [,] */ 0x0000, /* 0x2d [-] */ 0x0000, /* 0x2e [.] */ 0x0000, /* 0x2f [/] */ 0x0000, /* 0x30 [0] */ 0x0045, /* 0x31 [1] */ 0x0001, /* 0x32 [2] */ 0x0041, /* 0x33 [3] */ 0x0002, /* 0x34 [4] */ 0x0042, /* 0x35 [5] */ 0x0003, /* 0x36 [6] */ 0x0043, /* 0x37 [7] */ 0x0004, /* 0x38 [8] */ 0x0044, /* 0x39 [9] */ 0x0005, /* 0x3a [:] */ 0x0065, /* 0x3b [;] */ 0x0075, /* 0x3c [<] */ 0x0000, /* 0x3d [=] */ 0x0000, /* 0x3e [>] */ 0x0000, /* 0x3f [?] */ 0x0000, /* 0x40 [@] */ 0x0000, /* 0x41 [A] */ 0x0000, /* 0x42 [B] */ 0x0000, /* 0x43 [C] */ 0x0000, /* 0x44 [D] */ 0x0000, /* 0x45 [E] */ 0x0000, /* 0x46 [F] */ 0x0000, /* 0x47 [G] */ 0x0000, /* 0x48 [H] */ 0x0000, /* 0x49 [I] */ 0x0000, /* 0x4a [J] */ 0x0000, /* 0x4b [K] */ 0x0000, /* 0x4c [L] */ 0x0000, /* 0x4d [M] */ 0x0000, /* 0x4e [N] */ 0x0000, /* 0x4f [O] */ 0x0000, /* 0x50 [P] */ 0x0000, /* 0x51 [Q] */ 0x0000, /* 0x52 [R] */ 0x0000, /* 0x53 [S] */ 0x0000, /* 0x54 [T] */ 0x0000, /* 0x55 [U] */ 0x0000, /* 0x56 [V] */ 0x0000, /* 0x57 [W] */ 0x0000, /* 0x58 [X] */ 0x0000, /* 0x59 [Y] */ 0x0000, /* 0x5a [Z] */ 0x0000, /* 0x5b [[] */ 0x0000, /* 0x5c [\] */ 0x0000, /* 0x5d []] */ 0x0000, /* 0x5e [^] */ 0x0000, /* 0x5f [_] */ 0x0000, /* 0x60 [`] */ 0x0000, /* 0x61 [a] */ 0x0021, /* 0x62 [b] */ 0x0033, /* 0x63 [c] */ 0x0032, /* 0x64 [d] */ 0x0022, /* 0x65 [e] */ 0x0012, /* 0x66 [f] */ 0x0062, /* 0x67 [g] */ 0x0023, /* 0x68 [h] */ 0x0063, /* 0x69 [i] */ 0x0054, /* 0x6a [j] */ 0x0024, /* 0x6b [k] */ 0x0064, /* 0x6c [l] */ 0x0025, /* 0x6d [m] */ 0x0034, /* 0x6e [n] */ 0x0073, /* 0x6f [o] */ 0x0015, /* 0x70 [p] */ 0x0055, /* 0x71 [q] */ 0x0011, /* 0x72 [r] */ 0x0052, /* 0x73 [s] */ 0x0061, /* 0x74 [t] */ 0x0013, /* 0x75 [u] */ 0x0014, /* 0x76 [v] */ 0x0072, /* 0x77 [w] */ 0x0051, /* 0x78 [x] */ 0x0071, /* 0x79 [y] */ 0x0031, /* 0x7a [z] */ 0x0053, /* 0x7b [{] */ 0x0000, /* 0x7c [|] */ 0x0000, /* 0x7d [}] */ 0x0000, /* 0x7e [~] */ 0x0000, /* 0x7f [.] */ 0x0000, /* 0x80 [.] */ 0x0000, /* 0x81 [.] */ 0x0000, /* 0x82 [.] */ 0x0000, /* 0x83 [.] */ 0x0000, /* 0x84 [.] */ 0x0000, /* 0x85 [.] */ 0x0000, /* 0x86 [.] */ 0x0000, /* 0x87 [.] */ 0x0000, /* 0x88 [.] */ 0x0000, /* 0x89 [.] */ 0x0000, /* 0x8a [.] */ 0x0000, /* 0x8b [.] */ 0x0000, /* 0x8c [.] */ 0x0000, /* 0x8d [.] */ 0x0000, /* 0x8e [.] */ 0x0000, /* 0x8f [.] */ 0x0000, /* 0x90 [.] */ 0x0000, /* 0x91 [.] */ 0x0000, /* 0x92 [.] */ 0x0000, /* 0x93 [.] */ 0x0000, /* 0x94 [.] */ 0x0000, /* 0x95 [.] */ 0x0000, /* 0x96 [.] */ 0x0000, /* 0x97 [.] */ 0x0000, /* 0x98 [.] */ 0x0000, /* 0x99 [.] */ 0x0000, /* 0x9a [.] */ 0x0000, /* 0x9b [.] */ 0x0000, /* 0x9c [.] */ 0x0000, /* 0x9d [.] */ 0x0000, /* 0x9e [.] */ 0x0000, /* 0x9f [.] */ 0x0000, /* 0xa0 [.] */ 0x0000, /* 0xa1 [.] */ 0x0000, /* 0xa2 [.] */ 0x0000, /* 0xa3 [.] */ 0x0000, /* 0xa4 [.] */ 0x0000, /* 0xa5 [.] */ 0x0000, /* 0xa6 [.] */ 0x0000, /* 0xa7 [.] */ 0x0000, /* 0xa8 [.] */ 0x0000, /* 0xa9 [.] */ 0x0000, /* 0xaa [.] */ 0x0000, /* 0xab [.] */ 0x0000, /* 0xac [.] */ 0x0000, /* 0xad [.] */ 0x0000, /* 0xae [.] */ 0x0000, /* 0xaf [.] */ 0x0000, /* 0xb0 [.] */ 0x0000, /* 0xb1 [.] */ 0x0000, /* 0xb2 [.] */ 0x0000, /* 0xb3 [.] */ 0x0000, /* 0xb4 [.] */ 0x0000, /* 0xb5 [.] */ 0x0000, /* 0xb6 [.] */ 0x0000, /* 0xb7 [.] */ 0x0000, /* 0xb8 [.] */ 0x0000, /* 0xb9 [.] */ 0x0000, /* 0xba [.] */ 0x0000, /* 0xbb [.] */ 0x0000, /* 0xbc [.] */ 0x0000, /* 0xbd [.] */ 0x0000, /* 0xbe [.] */ 0x0000, /* 0xbf [.] */ 0x0000, /* 0xc0 [.] */ 0x0000, /* 0xc1 [.] */ 0x0000, /* 0xc2 [.] */ 0x0000, /* 0xc3 [.] */ 0x0000, /* 0xc4 [.] */ 0x0000, /* 0xc5 [.] */ 0x0000, /* 0xc6 [.] */ 0x0000, /* 0xc7 [.] */ 0x0000, /* 0xc8 [.] */ 0x0000, /* 0xc9 [.] */ 0x0000, /* 0xca [.] */ 0x0000, /* 0xcb [.] */ 0x0000, /* 0xcc [.] */ 0x0000, /* 0xcd [.] */ 0x0000, /* 0xce [.] */ 0x0000, /* 0xcf [.] */ 0x0000, /* 0xd0 [.] */ 0x0000, /* 0xd1 [.] */ 0x0000, /* 0xd2 [.] */ 0x0000, /* 0xd3 [.] */ 0x0000, /* 0xd4 [.] */ 0x0000, /* 0xd5 [.] */ 0x0000, /* 0xd6 [.] */ 0x0000, /* 0xd7 [.] */ 0x0000, /* 0xd8 [.] */ 0x0000, /* 0xd9 [.] */ 0x0000, /* 0xda [.] */ 0x0000, /* 0xdb [.] */ 0x0000, /* 0xdc [.] */ 0x0000, /* 0xdd [.] */ 0x0000, /* 0xde [.] */ 0x0000, /* 0xdf [.] */ 0x0000, /* 0xe0 [.] */ 0x0000, /* 0xe1 [.] */ 0x0000, /* 0xe2 [.] */ 0x0000, /* 0xe3 [.] */ 0x0000, /* 0xe4 [.] */ 0x0000, /* 0xe5 [.] */ 0x0000, /* 0xe6 [.] */ 0x0000, /* 0xe7 [.] */ 0x0000, /* 0xe8 [.] */ 0x0000, /* 0xe9 [.] */ 0x0000, /* 0xea [.] */ 0x0000, /* 0xeb [.] */ 0x0000, /* 0xec [.] */ 0x0000, /* 0xed [.] */ 0x0000, /* 0xee [.] */ 0x0000, /* 0xef [.] */ 0x0000, /* 0xf0 [.] */ 0x0000, /* 0xf1 [.] */ 0x0000, /* 0xf2 [.] */ 0x0000, /* 0xf3 [.] */ 0x0000, /* 0xf4 [.] */ 0x0000, /* 0xf5 [.] */ 0x0000, /* 0xf6 [.] */ 0x0000, /* 0xf7 [.] */ 0x0000, /* 0xf8 [.] */ 0x0000, /* 0xf9 [.] */ 0x0000, /* 0xfa [.] */ 0x0000, /* 0xfb [.] */ 0x0000, /* 0xfc [.] */ 0x0000, /* 0xfd [.] */ 0x0000, /* 0xfe [.] */ 0x0000, /* 0xff [.] */ 0x0000, /* 0x100 */ 0x0000, /* 0x101 */ 0x0079, /* 0x102 */ 0x000a, /* 0x103 */ 0x001a, /* 0x104 */ 0x0000, /* 0x105 */ 0x0000, /* 0x106 */ 0x0000, /* 0x107 */ 0x0000, /* 0x108 */ 0x0000, /* 0x109 */ 0x0000, /* 0x10a */ 0x0000, /* 0x10b */ 0x0000, /* 0x10c */ 0x0000, /* 0x10d */ 0x0000, /* 0x10e */ 0x0000, /* 0x10f */ 0x0000, /* 0x110 */ 0x0081, /* SHIFT */ /* 0x111 */ 0x0000, /* CONTROL */ /* 0x112 */ 0x0000, /* ALT */ /* 0x113 */ 0x0000, /* ALT_GR */ /* 0x114 */ 0x0037, /* LEFT */ /* 0x115 */ 0x0077, /* RIGHT */ /* 0x116 */ 0x0067, /* DOWN */ /* 0x117 */ 0x0027, /* UP */ /* 0x118 */ 0x0000, /* HOME */ /* 0x119 */ 0x0000, /* END */ /* 0x11a */ 0x0000, /* DEL */ /* 0x11b */ 0x0000, /* INSERT */ /* 0x11c */ 0x0000, /* 0x11d */ 0x0000, /* 0x11e */ 0x0000, /* PAUSE */ /* 0x11f */ 0x0000, /* 0x120 */ 0x0000, /* COLOR */ /* 0x121 */ 0x0000, /* GRAPHIC */ /* 0x122 */ 0x0000, /* LIST */ /* 0x123 */ 0x0000, /* RUN */ /* 0x124 */ 0x0000, /* STOP */ /* 0x125 */ 0x0057, /* SHIFT LOCK */ /* 0x126 */ 0x0000, /* 0x127 */ 0x0000, /* 0x128 */ 0x0000, /* 0x129 */ 0x0000, /* 0x12a */ 0x0000, /* 0x12b */ 0x0000, /* 0x12c */ 0x0000, /* 0x12d */ 0x0000, /* 0x12e */ 0x0000, /* 0x12f */ 0x0000, }; #endif #endif /* __kc_keyb0k_h */ KCemu-0.5.1/include/kc/mod_cpm.h0000644001050700006200000000270411345001576016021 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_cpm_h #define __kc_mod_cpm_h #include "kc/system.h" #include "kc/module.h" class ModuleCPMZ9 : public ModuleInterface, public PortInterface { private: PortGroup *_portg1; PortGroup *_portg2; PortGroup *_portgX; public: ModuleCPMZ9(ModuleCPMZ9 &tmpl); ModuleCPMZ9(const char *name); virtual ~ModuleCPMZ9(void); virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); /* * PortInterface */ virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_mod_cpm_h */ KCemu-0.5.1/include/kc/tape.h0000644001050700006200000001025211345001576015331 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_tape_h #define __kc_tape_h #include #include "kc/system.h" #include "kc/cb.h" #include "cmd/cmd.h" #include "libtape/kct.h" #include "fileio/load.h" typedef enum { TAPE_OK, TAPE_OK_READONLY, TAPE_NOENT, TAPE_ERROR, } tape_error_t; /* * * system clock 1.75 Mhz (KC 85/3, KC 85/4) * * const int BIT_0 = 364; - 2400 Hz * const int BIT_1 = 729; - 1200 Hz * const int BIT_S = 1458; - 600 Hz * * system clock 2.5 Mhz (Z9001, KC 85/1, KC87) * * const int BIT_0 = 520; - 2400 Hz * const int BIT_1 = 1041; - 1200 Hz * const int BIT_S = 2083; - 600 Hz */ class TapeCallback { public: TapeCallback(void) {} virtual ~TapeCallback(void) {} virtual void tape_callback(byte_t val) = 0; }; class Tape : public Callback { public: enum { BLOCK_SIZE = 131, }; private: int BIT_0; int BIT_1; int BIT_S; int _start_block; bool _power; bool _play; bool _record; int _flip_flop; int _sync; int _sync_count; int _bits; int _state; int _block; int _byte_counter; int _init; byte_t _byte; byte_t _crc; byte_t _crc_calculated; byte_t _buf[129]; byte_t _last_val; byte_t _last_block; long _file_size; long _bytes_read; kct_file_type_t _file_type; std::ostream *_os; std::istream *_is; KCTFile _kct_file; TapeCallback *_tape_cb; CMD *_cmd_tape_load; CMD *_cmd_tape_play; CMD *_cmd_tape_attach; CMD *_cmd_tape_export; CMD *_cmd_tape_add_file; protected: void update_tape_list(void); bool check_addr(byte_t *data, long size); bool check_com(byte_t *data, long size); const char *get_filename(byte_t *data); public: Tape(int bit_0, int bit_1, int bit_s, int start_block); virtual ~Tape(void); void power(bool val); void record(void); void play(const char *name, int delay); void stop(void); void seek(int percent); void do_play(int edge); void do_play_bic(int edge); void do_play_z1013(int edge); void do_play_basicode(int edge); void do_stop(void); void tape_signal(void); void tape_signal_bic(long diff); void tape_signal_z1013(long diff); long get_delay(int seconds); virtual void set_tape_callback(TapeCallback *tape_cb); virtual void callback(void *data); virtual tape_error_t attach(const char *filename, bool create = false); virtual tape_error_t detach(void); virtual tape_error_t add(const char *name); virtual tape_error_t add_raw(const char *filename, const char *tape_filename, const char *kc_filename, unsigned short load, unsigned short start, bool autostart); virtual tape_error_t add_file(const char *name, fileio_prop_t *prop, kct_file_type_t type, kct_machine_type_t machine); virtual tape_error_t rename(const char *from, const char *to); virtual tape_error_t remove(const char *name); virtual tape_error_t export_tap(const char *name, const char *filename); virtual tape_error_t export_wav(const char *name, const char *filename); virtual std::istream * read(const char *name, kct_file_props_t *props = NULL); }; #endif /* __kc_tape_h */ KCemu-0.5.1/include/kc/cb_list.h0000644001050700006200000000401411345001576016016 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_cb_list_h #define __kc_cb_list_h #include "kc/cb.h" class CallbackListEntry { private: enum { CALLBACK_LIST_ALLOC_SIZE = 1000 }; protected: /** * time value of the callback entry */ unsigned long long _value; /** * the Callback that will be run */ Callback *_cb; /** * arbitrary data that can be set by the * routine registering a callback */ void *_data; /** * single linked list */ CallbackListEntry *_next; static CallbackListEntry *_free_list; static void alloc_entries(void); static void free_entries(void); public: CallbackListEntry(unsigned long long value, Callback *cb, void *data, CallbackListEntry *next); virtual ~CallbackListEntry(void); void * operator new(size_t size); void operator delete(void *p); friend class CallbackList; }; class CallbackList { private: CallbackListEntry *_list; public: CallbackList(void); virtual ~CallbackList(void); void clear(); void add_callback(unsigned long long offset, Callback *cb, void *data); void run_callbacks(unsigned long long value); void remove_callback_listener(Callback *cb); }; #endif /* __kc_cb_list_h */ KCemu-0.5.1/include/kc/config.h.in0000644001050700006200000003445611345001724016261 0ustar glaubitzfbedv/* include/kc/config.h.in. Generated from configure.in by autoheader. */ /* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP systems. This function is required for `alloca.c' support on those systems. */ #undef CRAY_STACKSEG_END /* Define to 1 if using `alloca.c'. */ #undef C_ALLOCA /* "debug level" */ #undef DBG_LEVEL /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* "enable sound" */ #undef ENABLE_SOUND /* Define to 1 if you have `alloca', as a function or macro. */ #undef HAVE_ALLOCA /* Define to 1 if you have and it should be used (not on Ultrix). */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the `argz_count' function. */ #undef HAVE_ARGZ_COUNT /* Define to 1 if you have the header file. */ #undef HAVE_ARGZ_H /* Define to 1 if you have the `argz_next' function. */ #undef HAVE_ARGZ_NEXT /* Define to 1 if you have the `argz_stringify' function. */ #undef HAVE_ARGZ_STRINGIFY /* Define to 1 if you have the `asprintf' function. */ #undef HAVE_ASPRINTF /* Define to 1 if the compiler understands __builtin_expect. */ #undef HAVE_BUILTIN_EXPECT /* Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FEOF_UNLOCKED /* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FGETS_UNLOCKED /* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_GETC_UNLOCKED /* Define to 1 if you have the declaration of `_snprintf', and to 0 if you don't. */ #undef HAVE_DECL__SNPRINTF /* Define to 1 if you have the declaration of `_snwprintf', and to 0 if you don't. */ #undef HAVE_DECL__SNWPRINTF /* Define to 1 if you have the `fwprintf' function. */ #undef HAVE_FWPRINTF /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if you have the `getegid' function. */ #undef HAVE_GETEGID /* Define to 1 if you have the `geteuid' function. */ #undef HAVE_GETEUID /* Define to 1 if you have the `getgid' function. */ #undef HAVE_GETGID /* "getopt() available" */ #undef HAVE_GETOPT /* "getopt_long() available" */ #undef HAVE_GETOPT_LONG /* Define to 1 if you have the `getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the `getuid' function. */ #undef HAVE_GETUID /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define if you have the 'intmax_t' type in or . */ #undef HAVE_INTMAX_T /* Define to 1 if you have the header file. */ #undef HAVE_INTTYPES_H /* Define if exists, doesn't clash with , and declares uintmax_t. */ #undef HAVE_INTTYPES_H_WITH_UINTMAX /* Define if you have and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET /* Define if your file defines LC_MESSAGES. */ #undef HAVE_LC_MESSAGES /* "have libaudiofile" */ #undef HAVE_LIBAUDIOFILE /* "have libavformat" */ #undef HAVE_LIBAVFORMAT /* "have libdirac" */ #undef HAVE_LIBDIRAC /* "have libFLAC" */ #undef HAVE_LIBFLAC /* "have libgif" */ #undef HAVE_LIBGIF /* Define to 1 if you have the `m' library (-lm). */ #undef HAVE_LIBM /* "have libmp3lame" */ #undef HAVE_LIBMP3LAME /* "have libschroedinger" */ #undef HAVE_LIBSCHROEDINGER /* "have libSDL" */ #undef HAVE_LIBSDL /* "have libsndfile" */ #undef HAVE_LIBSNDFILE /* "have libsndfile version 0.0.x" */ #undef HAVE_LIBSNDFILE_V0 /* "have libnsndfile version 1.0.x" */ #undef HAVE_LIBSNDFILE_V1 /* "have libtheora" */ #undef HAVE_LIBTHEORA /* "have libtheora version 1.0" */ #undef HAVE_LIBTHEORA10 /* "have libtheora version 1.1" */ #undef HAVE_LIBTHEORA11 /* "have libvncserver" */ #undef HAVE_LIBVNCSERVER /* "have libvorbis" */ #undef HAVE_LIBVORBIS /* "have libxvidcore" */ #undef HAVE_LIBXVIDCORE /* Define to 1 if you have the header file. */ #undef HAVE_LIMITS_H /* "localtime" */ #undef HAVE_LOCALTIME /* "localtime_r" */ #undef HAVE_LOCALTIME_R /* Define to 1 if the system has the type `long long int'. */ #undef HAVE_LONG_LONG_INT /* Define to 1 if you have the header file. */ #undef HAVE_MACHINE_SOUNDCARD_H /* Define to 1 if you have the header file. */ #undef HAVE_MCHECK_H /* Define to 1 if you have the header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `mempcpy' function. */ #undef HAVE_MEMPCPY /* Define to 1 if you have a working `mmap' system call. */ #undef HAVE_MMAP /* Define to 1 if you have the `mtrace' function. */ #undef HAVE_MTRACE /* Define to 1 if you have the `munmap' function. */ #undef HAVE_MUNMAP /* Define if you have and it defines the NL_LOCALE_NAME macro if _GNU_SOURCE is defined. */ #undef HAVE_NL_LOCALE_NAME /* "have oss" */ #undef HAVE_OSS /* Define if your printf() function supports format strings with positions. */ #undef HAVE_POSIX_PRINTF /* Define if the defines PTHREAD_MUTEX_RECURSIVE. */ #undef HAVE_PTHREAD_MUTEX_RECURSIVE /* Define if the POSIX multithreading library has read/write locks. */ #undef HAVE_PTHREAD_RWLOCK /* Define to 1 if you have the `putenv' function. */ #undef HAVE_PUTENV /* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV /* Define to 1 if you have the `setlocale' function. */ #undef HAVE_SETLOCALE /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define to 1 if you have the header file. */ #undef HAVE_STDDEF_H /* Define to 1 if you have the header file. */ #undef HAVE_STDINT_H /* Define if exists, doesn't clash with , and declares uintmax_t. */ #undef HAVE_STDINT_H_WITH_UINTMAX /* Define to 1 if you have the header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `stpcpy' function. */ #undef HAVE_STPCPY /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strchr' function. */ #undef HAVE_STRCHR /* Define to 1 if you have the `strdup' function. */ #undef HAVE_STRDUP /* Define to 1 if you have the header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strncasecmp' function. */ #undef HAVE_STRNCASECMP /* Define to 1 if you have the `strrchr' function. */ #undef HAVE_STRRCHR /* Define to 1 if you have the `strstr' function. */ #undef HAVE_STRSTR /* Define to 1 if you have the `strtol' function. */ #undef HAVE_STRTOL /* Define to 1 if you have the `strtoul' function. */ #undef HAVE_STRTOUL /* Define to 1 if you have the header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_SOUNDCARD_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the `tsearch' function. */ #undef HAVE_TSEARCH /* Define if you have the 'uintmax_t' type in or . */ #undef HAVE_UINTMAX_T /* Define to 1 if you have the header file. */ #undef HAVE_UNISTD_H /* Define to 1 if the system has the type `unsigned long long int'. */ #undef HAVE_UNSIGNED_LONG_LONG_INT /* Define to 1 or 0, depending whether the compiler supports simple visibility declarations. */ #undef HAVE_VISIBILITY /* Define if you have the 'wchar_t' type. */ #undef HAVE_WCHAR_T /* Define to 1 if you have the `wcslen' function. */ #undef HAVE_WCSLEN /* Define if you have the 'wint_t' type. */ #undef HAVE_WINT_T /* Define to 1 if you have the `__fsetlocking' function. */ #undef HAVE___FSETLOCKING /* "host os" */ #undef HOST_OS /* "host os is FreeBSD" */ #undef HOST_OS_FREEBSD /* "host os is Linux" */ #undef HOST_OS_LINUX /* "host os is MinGW" */ #undef HOST_OS_MINGW /* Define as const if the declaration of iconv() needs const. */ #undef ICONV_CONST /* Define if integer division by zero raises signal SIGFPE. */ #undef INTDIV0_RAISES_SIGFPE /* "KCemu extra version" */ #undef KCEMU_EXTRA_VERSION /* "KCemu extra version text" */ #undef KCEMU_EXTRA_VERSION_TEXT /* "KCemu major version" */ #undef KCEMU_MAJOR_VERSION /* "KCemu micro version" */ #undef KCEMU_MICRO_VERSION /* "KCemu minor version" */ #undef KCEMU_MINOR_VERSION /* "KCemu version" */ #undef KCEMU_VERSION /* "package name" */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* "KCemu Homepage" */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define if exists and defines unusable PRI* macros. */ #undef PRI_MACROS_BROKEN /* Define if the pthread_in_use() detection is hard. */ #undef PTHREAD_IN_USE_DETECTION_HARD /* Define as the return type of signal handlers (`int' or `void'). */ #undef RETSIGTYPE /* Define as the maximum value of type 'size_t', if the system doesn't define it. */ #undef SIZE_MAX /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if you can safely include both and . */ #undef TIME_WITH_SYS_TIME /* "use included getopt" */ #undef USE_INCLUDED_GETOPT /* "use included libintl" */ #undef USE_INCLUDED_LIBINTL /* Define if the POSIX multithreading library can be used. */ #undef USE_POSIX_THREADS /* Define if references to the POSIX multithreading library should be made weak. */ #undef USE_POSIX_THREADS_WEAK /* Define if the GNU Pth multithreading library can be used. */ #undef USE_PTH_THREADS /* Define if references to the GNU Pth multithreading library should be made weak. */ #undef USE_PTH_THREADS_WEAK /* Define if the old Solaris multithreading library can be used. */ #undef USE_SOLARIS_THREADS /* Define if references to the old Solaris multithreading library should be made weak. */ #undef USE_SOLARIS_THREADS_WEAK /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable threading extensions on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Define if the Win32 multithreading API can be used. */ #undef USE_WIN32_THREADS /* "package version" */ #undef VERSION /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 2 if the system does not provide POSIX.1 features except with this defined. */ #undef _POSIX_1_SOURCE /* Define to 1 if you need to in order for `stat' and other things to work. */ #undef _POSIX_SOURCE /* Define to empty if `const' does not conform to ANSI C. */ #undef const /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define as the type of the result of subtracting two pointers, if the system doesn't define it. */ #undef ptrdiff_t /* Define to `unsigned int' if does not define. */ #undef size_t /* Define to unsigned long or unsigned long long if and don't define. */ #undef uintmax_t #define __libc_lock_t gl_lock_t #define __libc_lock_define gl_lock_define #define __libc_lock_define_initialized gl_lock_define_initialized #define __libc_lock_init gl_lock_init #define __libc_lock_lock gl_lock_lock #define __libc_lock_unlock gl_lock_unlock #define __libc_lock_recursive_t gl_recursive_lock_t #define __libc_lock_define_recursive gl_recursive_lock_define #define __libc_lock_define_initialized_recursive gl_recursive_lock_define_initialized #define __libc_lock_init_recursive gl_recursive_lock_init #define __libc_lock_lock_recursive gl_recursive_lock_lock #define __libc_lock_unlock_recursive gl_recursive_lock_unlock #define glthread_in_use libintl_thread_in_use #define glthread_lock_init libintl_lock_init #define glthread_lock_lock libintl_lock_lock #define glthread_lock_unlock libintl_lock_unlock #define glthread_lock_destroy libintl_lock_destroy #define glthread_rwlock_init libintl_rwlock_init #define glthread_rwlock_rdlock libintl_rwlock_rdlock #define glthread_rwlock_wrlock libintl_rwlock_wrlock #define glthread_rwlock_unlock libintl_rwlock_unlock #define glthread_rwlock_destroy libintl_rwlock_destroy #define glthread_recursive_lock_init libintl_recursive_lock_init #define glthread_recursive_lock_lock libintl_recursive_lock_lock #define glthread_recursive_lock_unlock libintl_recursive_lock_unlock #define glthread_recursive_lock_destroy libintl_recursive_lock_destroy #define glthread_once libintl_once #define glthread_once_call libintl_once_call #define glthread_once_singlethreaded libintl_once_singlethreaded KCemu-0.5.1/include/kc/ports6.h0000644001050700006200000000277111345001576015644 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_ports6_h #define __kc_ports6_h #include "kc/pio.h" #include "kc/ports.h" class Ports6 : public PortInterface, public PIOCallbackInterface { private: byte_t _val; byte_t _led[8]; protected: virtual void update_led_value(byte_t port_val, byte_t pio_val); public: Ports6(void); virtual ~Ports6(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); virtual byte_t get_led_value(int idx); /* * PIOCallbackInterface */ virtual int callback_A_in(void); virtual int callback_B_in(void); virtual void callback_A_out(byte_t val); virtual void callback_B_out(byte_t val); }; #endif /* __kc_ports6_h */ KCemu-0.5.1/include/kc/ctc6.h0000644001050700006200000000257311345001576015246 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_ctc6_h #define __kc_ctc6_h #include "kc/system.h" #include "kc/ctc_base.h" class CTC6 : public CTC_Base { public: CTC6(void); virtual ~CTC6(void); virtual bool irq_0(void); virtual bool irq_1(void); virtual bool irq_2(void); virtual bool irq_3(void); virtual long counter_value_0(void); virtual long counter_value_1(void); virtual long counter_value_2(void); virtual long counter_value_3(void); /* PortInterface */ byte_t in(word_t addr); void out(word_t addr, byte_t val); }; #endif /* __kc_ctc6_h */ KCemu-0.5.1/include/kc/timer.h0000644001050700006200000000215411345001576015522 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_timer_h #define __kc_timer_h #include "kc/kc.h" #include "kc/cb.h" class Timer : public Callback { public: Timer(const char *name); virtual ~Timer(void); virtual void start(void) = 0; virtual void callback(void *data) = 0; }; #endif /* __kc_timer_h */ KCemu-0.5.1/include/kc/prefs/0000755001050700006200000000000011412404771015345 5ustar glaubitzfbedvKCemu-0.5.1/include/kc/prefs/dirlist.h0000644001050700006200000000272111345001576017173 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_prefs_dirlist_h #define __kc_prefs_dirlist_h #include #include using namespace std; class DirectoryListEntry { private: string _dir; string _filename; string _path; public: DirectoryListEntry(string dir, string filename); virtual ~DirectoryListEntry(void); const char *get_dir(void) const; const char *get_path(void) const; const char *get_filename(void) const; }; class DirectoryList : public list { string _basedir; public: DirectoryList(string basedir); virtual ~DirectoryList(void); }; #endif /* __kc_prefs_dirlist_h */ KCemu-0.5.1/include/kc/prefs/profile.h0000644001050700006200000000677311345001576017174 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_prefs_profile_h #define __kc_prefs_profile_h #include #include #include using namespace std; typedef enum { PROFILE_LEVEL_ROOT = 0, PROFILE_LEVEL_DEFAULT = 1, PROFILE_LEVEL_SYSTEM = 2, PROFILE_LEVEL_SYSTEM_USER = 3, PROFILE_LEVEL_USER = 4, } profile_level_t; class ProfileValue { private: typedef enum { PROFILE_VALUE_TYPE_NULL = 0, PROFILE_VALUE_TYPE_INT = 1, PROFILE_VALUE_TYPE_STRING = 2, } profile_value_type_t; profile_level_t _level; profile_value_type_t _type; int _int_value; string _string_value; public: ProfileValue(ProfileValue *value); ProfileValue(profile_level_t level); ProfileValue(profile_level_t level, int value); ProfileValue(profile_level_t level, string value); virtual ~ProfileValue(void); virtual profile_level_t get_level(void) const; bool equals(ProfileValue *value) const; virtual int get_int_value(void) const; virtual const char * get_string_value(void) const; virtual char * get_encoded_value(void) const; }; class Profile { private: typedef map pref_map_t; bool _changed; bool _deleted; profile_level_t _level; string _name; string _config_name; string _path; Profile * _parent; pref_map_t _pref_map; pref_map_t _pref_map_old; protected: void set_value_with_backup(string key, ProfileValue *value, ProfileValue *old_value); public: Profile(profile_level_t level, string path, string config_name, string name); virtual ~Profile(void); const char * get_name(void) const; void set_name(string name); const char * get_config_name(void) const; profile_level_t get_level(void) const; const char *get_path(void) const; bool is_changed(void) const; void set_changed(bool changed); bool is_deleted(void) const; void set_deleted(bool deleted); Profile *get_parent(void) const; void set_parent(Profile *parent); const char * get_comment(void) const; ProfileValue * get_value(string key) const; char * get_encoded_value(string key) const; void set_value(string key, ProfileValue *value); void reject_changes(void); int get_int_value(string key, int default_value) const; void set_int_value(string key, int value); const char * get_string_value(string key, const char *default_value) const; void set_string_value(string key, string value); void set_null_value(string key); void remove_value(string key); bool contains_key(string key) const; list * get_keys(void); }; #endif /* __kc_prefs_profile_h */ KCemu-0.5.1/include/kc/prefs/strlist.h0000644001050700006200000000227711345001576017233 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_prefs_strlist_h #define __kc_prefs_strlist_h #include #include using namespace std; class StringList : public list { public: StringList(); StringList(string str, const char split_char = ','); virtual ~StringList(void); virtual string join(const char join_char); }; #endif /* __kc_prefs_strlist_h */ KCemu-0.5.1/include/kc/prefs/Makefile.am0000644001050700006200000000022111131675406017377 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ parser.h \ prefs.h \ profile.h \ types.h \ strlist.h \ dirlist.h KCemu-0.5.1/include/kc/prefs/parser.h0000644001050700006200000000417711345001576017024 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_prefs_parser_h #define __kc_prefs_parser_h #include #include #include #include "kc/prefs/profile.h" using namespace std; typedef list profile_list_t; class ProfileParser { public: static const char *signature; private: Profile *_current_profile; protected: profile_level_t _level; string _filename; profile_list_t _profile_list; protected: virtual bool is_newline(GScanner *scanner, GTokenType token_type); virtual GTokenType handle_line(GScanner *scanner, const char *key, GTokenType token_type); public: ProfileParser(string filename, profile_level_t level); virtual ~ProfileParser(void); virtual void parse(void); virtual profile_list_t * get_profiles(void); virtual Profile * get_profile(void) = 0; }; class SingleProfileParser : public ProfileParser { private: string _name; Profile *_profile; public: SingleProfileParser(string filename, profile_level_t level, string config_name, string name); virtual ~SingleProfileParser(void); virtual Profile * get_profile(void); }; class MultiProfileParser : public ProfileParser { public: MultiProfileParser(string filename, profile_level_t level); virtual ~MultiProfileParser(void); virtual Profile * get_profile(void); }; #endif /* __kc_prefs_parser_h */ KCemu-0.5.1/include/kc/prefs/prefs.h0000644001050700006200000000677211345001576016652 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_prefs_prefs_h #define __kc_prefs_prefs_h #include #include #include "kc/prefs/types.h" #include "kc/prefs/profile.h" using namespace std; struct ProfileVisitor { virtual void handle_profile(Profile *profile) = 0; }; class Preferences { private: typedef map profile_map_t; static Preferences *_instance; static const char * PROFILE_NAME_ROOT; static const char * PROFILE_NAME_DEFAULT; static const char * PROFILE_KEY_NAME; static const char * PROFILE_KEY_SYSTEM; static const char * PROFILE_KEY_VARIANT; static const char * CONFIG_FILE_EXTENSION; static const char * USER_CONFIG_PREFIX; string _sys_dir; string _usr_dir; string _add_dir; Profile *_root_profile; Profile *_default_profile; profile_map_t _sys_profiles; profile_map_t _usr_profiles; profile_map_t _add_profiles; map _usr_profiles_by_type; Profile *_current_profile; SystemType *_current_system_type; void load_default_profiles(void); void load_system_profiles(void); void load_user_profiles(void); protected: Preferences(const char *sys_dir, const char *usr_dir, const char *add_dir); virtual ~Preferences(void); void visit_changed(ProfileVisitor &visitor); string get_profile_path(string dir, string config_name); Profile * get_profile(string path, profile_level_t level, string config_name, string name); public: static void init(const char *system_dir, const char *user_dir, const char *add_dir); static Preferences * instance(void); Profile * find_profile(const char *key); Profile * find_profile_by_name(const char *name); list find_child_profiles(const char *key); Profile * copy_user_profile(Profile *profile); Profile * create_user_profile(Profile *parent); void save(void); void reject(void); bool mkdirs(string dir); bool has_changed_profiles(void); bool save_profile(Profile *profile); void reject_changes(Profile *profile); void dump_profile(Profile *profile); virtual void set_current_profile(const char *name, int type); virtual SystemType * find_system_type(kc_type_t kc_type, kc_variant_t kc_variant); virtual SystemType * get_system_type(void); virtual kc_type_t get_kc_type(void); virtual kc_variant_t get_kc_variant(void); virtual const char * get_kc_type_name(void); virtual const char * get_kc_variant_name(void); virtual int get_int_value(string key, int default_value); virtual const char * get_string_value(string key, const char *default_value); }; #endif /* __kc_prefs_prefs_h */ KCemu-0.5.1/include/kc/prefs/types.h0000644001050700006200000002315211345001576016666 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_prefs_types_h #define __kc_prefs_types_h #include #include #include #include "kc/system.h" #include "kc/prefs/profile.h" using namespace std; typedef enum { KC_TYPE_NONE = 0, KC_TYPE_85_1 = (1 << 0), KC_TYPE_85_2 = (1 << 1), KC_TYPE_85_3 = (1 << 2), KC_TYPE_85_4 = (1 << 3), KC_TYPE_85_5 = (1 << 4), KC_TYPE_87 = (1 << 5), KC_TYPE_LC80 = (1 << 6), KC_TYPE_Z1013 = (1 << 7), KC_TYPE_A5105 = (1 << 8), KC_TYPE_POLY880 = (1 << 9), KC_TYPE_KRAMERMC = (1 << 10), KC_TYPE_MUGLERPC = (1 << 11), KC_TYPE_VCS80 = (1 << 12), KC_TYPE_C80 = (1 << 13), KC_TYPE_85_1_CLASS = KC_TYPE_85_1 | KC_TYPE_87, KC_TYPE_85_2_CLASS = KC_TYPE_85_2 | KC_TYPE_85_3 | KC_TYPE_85_4 | KC_TYPE_85_5, KC_TYPE_ALL = (KC_TYPE_85_1_CLASS | KC_TYPE_85_2_CLASS | KC_TYPE_LC80 | KC_TYPE_Z1013 | KC_TYPE_A5105 | KC_TYPE_POLY880 | KC_TYPE_KRAMERMC | KC_TYPE_MUGLERPC | KC_TYPE_VCS80 | KC_TYPE_C80) } kc_type_t; typedef enum { KC_VARIANT_NONE = 0, KC_VARIANT_85_1_10 = 0, KC_VARIANT_85_1_11 = 1, KC_VARIANT_87_10 = 0, KC_VARIANT_87_11 = 1, KC_VARIANT_87_20 = 2, KC_VARIANT_87_21 = 3, KC_VARIANT_87_30 = 4, KC_VARIANT_87_31 = 5, KC_VARIANT_Z1013_01 = 0, KC_VARIANT_Z1013_12 = 1, KC_VARIANT_Z1013_16 = 3, KC_VARIANT_Z1013_64 = 4, KC_VARIANT_Z1013_A2 = 5, KC_VARIANT_Z1013_RB = 6, KC_VARIANT_Z1013_SURL = 7, KC_VARIANT_Z1013_BL4 = 8, KC_VARIANT_LC80_1k = 0, KC_VARIANT_LC80_2k = 1, KC_VARIANT_LC80e = 2, KC_VARIANT_A5105_K1505 = 0, KC_VARIANT_A5105_A5105 = 1, KC_VARIANT_POLY880 = 0, KC_VARIANT_POLY880_SC1 = 1, } kc_variant_t; class EmulationType; typedef list emulation_type_list_t; class EmulationType { private: string _name; string _short_name; string _config_name; string _icon_name; string _image_name; string _keyboard_filename; string _help_topic; string _help_topic_module; int _module_slots; word_t _power_on_addr; word_t _reset_addr; /** emulation type as given on the commandline, or -1 if no commandline parameter exists */ int _type; kc_type_t _kc_type; static emulation_type_list_t _emulation_type_list; public: static EmulationType _emulation_type_kc85_1; static EmulationType _emulation_type_kc85_2; static EmulationType _emulation_type_kc85_3; static EmulationType _emulation_type_kc85_4; static EmulationType _emulation_type_kc85_5; static EmulationType _emulation_type_kc87; static EmulationType _emulation_type_lc80; static EmulationType _emulation_type_z1013; static EmulationType _emulation_type_a5105; static EmulationType _emulation_type_poly880; static EmulationType _emulation_type_kramermc; static EmulationType _emulation_type_muglerpc; static EmulationType _emulation_type_vcs80; static EmulationType _emulation_type_c80; EmulationType(kc_type_t kc_type, int type, string name, string short_name, string config_name, string icon_name, string image_name, string keyboard_filename, string help_topic, string help_topic_module, int module_slots, word_t power_on_addr, word_t reset_addr); virtual ~EmulationType(void); virtual const char * get_name(void) const; virtual const char * get_short_name(void) const; virtual const char * get_config_name(void) const; virtual const char * get_icon_name(void) const; virtual const char * get_image_name(void) const; virtual const char * get_keyboard_filename(void) const; virtual const char * get_help_topic(void) const; virtual const char * get_help_topic_module(void) const; virtual const int get_module_slots(void) const; virtual const word_t get_power_on_addr(void) const; virtual const word_t get_reset_addr(void) const; virtual int get_type(void) const; virtual kc_type_t get_kc_type(void) const; static emulation_type_list_t & get_emulation_types(void); }; class ROMEntry { private: string _filename; string _description; bool _is_default; public: ROMEntry(const char *filename, const char *description, bool is_default = false); virtual ~ROMEntry(void); const string get_filename(void) const; const string get_description(void) const; const bool is_default(void) const; }; typedef list rom_entry_list_t; class SystemROM { private: int _size; string _name; bool _mandatory; rom_entry_list_t _roms; public: static const char * ROM_KEY_CAOSC; static const char * ROM_KEY_CAOSE; static const char * ROM_KEY_SYSTEM; static const char * ROM_KEY_SYSTEM1; static const char * ROM_KEY_SYSTEM2; static const char * ROM_KEY_SYSTEM3; static const char * ROM_KEY_SYSTEM4; static const char * ROM_KEY_USER; static const char * ROM_KEY_BASIC; static const char * ROM_KEY_DEBUGGER; static const char * ROM_KEY_REASSEMBLER; static const char * ROM_KEY_EDITOR; static const char * ROM_KEY_ASSEMBLER; static const char * ROM_KEY_CHARGEN; static const char * ROM_KEY_D004_FC; static const char * ROM_KEY_D004_F8; public: SystemROM(const char *name, bool mandatory, int size); virtual ~SystemROM(void); int get_size(void) const; bool is_mandatory(void) const; const string get_name(void) const; const rom_entry_list_t & get_roms(void) const; const ROMEntry * get_default_rom(void) const; void add_rom(const char *name, const char *filename, bool is_default); }; typedef list system_rom_list_t; class SystemType { int _sort; int _type; string _name; string _display_name; bool _is_default; kc_variant_t _kc_variant; string _description; EmulationType& _emulation_type; unsigned long long _ui_callback_value; unsigned long long _ui_callback_retrace_value; string _rom_dir; system_rom_list_t _rom_list; virtual void add_rom(const char *name, bool mandatory, int size, int default_idx, const char *filename, const char *description, va_list ap); public: SystemType(int sort, string name, int type, EmulationType &emulation_type, kc_variant_t kc_variant, string description); virtual ~SystemType(void); virtual const char * get_name(void) const; virtual const char * get_display_name(void) const; virtual SystemType & set_display_name(const char *display_name); virtual const string get_rom_directory(void) const; virtual SystemType & set_rom_directory(const char *romdir); virtual const unsigned long long get_ui_callback_value(void) const; virtual SystemType & set_ui_callback_value(unsigned long long value); virtual const unsigned long long get_ui_callback_retrace_value(void) const; virtual SystemType & set_ui_callback_retrace_value(unsigned long long value); virtual const system_rom_list_t & get_rom_list(void) const; virtual const SystemROM * get_rom(const char *key) const; virtual SystemType & add_rom(const char *name, int size, const char *filename, const char *description, ...); virtual SystemType & add_rom(const char *name, int size, int default_idx, const char *filename, const char *description, ...); virtual SystemType & add_optional_rom(const char *name, int size, const char *filename, const char *description, ...); virtual int get_sort(void) const; virtual int get_type(void) const; virtual bool is_default(int type) const; virtual kc_type_t get_kc_type(void) const; virtual kc_variant_t get_kc_variant(void) const; virtual const char * get_kc_variant_name(void) const; virtual const char * get_description(void) const; virtual const EmulationType & get_emulation_type(void) const; }; typedef list system_type_list_t; class SystemInformation { private: static SystemInformation *_instance; system_type_list_t _system_type_list; protected: SystemType & add_system_type(int sort, string name, int type, EmulationType& emulation_type, kc_variant_t kc_variant, string description); public: SystemInformation(); virtual ~SystemInformation(void); static SystemInformation * instance(void); virtual void show_types(void); virtual void show_types_with_description(void); virtual system_type_list_t & get_system_types(void); virtual const SystemType * get_system_type(kc_type_t kc_type, kc_variant_t kc_variant) const; }; #endif /* __kc_prefs_types_h */ KCemu-0.5.1/include/kc/prefs/Makefile.in0000644001050700006200000003110111412404771017406 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/kc/prefs DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ parser.h \ prefs.h \ profile.h \ types.h \ strlist.h \ dirlist.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/kc/prefs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/kc/prefs/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/kc/memory7.h0000644001050700006200000000444311345001576016004 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_memory7_h #define __kc_memory7_h #include "kc/system.h" #include "kc/kc.h" #include "kc/romdi.h" #include "kc/memory.h" #include "kc/memoryif.h" class Memory7 : public Memory, public ROMDIInterface { private: byte_t _ram[0x4000]; byte_t _irm[0x0800]; byte_t _rom_os[0x1000]; byte_t _rom_basic[0x2800]; byte_t _rom_chargen[0x0800]; MemAreaGroup *_m_scr; /* scratch memory */ MemAreaGroup *_m_ram; /* RAM 0000h - 3fffh */ MemAreaGroup *_m_basic; /* BASIC c000h - e7ffh */ MemAreaGroup *_m_irm_e8; /* IRM e800h - bfffh (color, readonly) */ MemAreaGroup *_m_irm_ec; /* IRM ec00h - efffh (text) */ MemAreaGroup *_m_os; /* OS f000h - ffffh */ typedef std::list romdi_list_t; romdi_list_t _romdi_list; bool _romdi; typedef std::list memory_list_t; memory_list_t _memory_list; public: Memory7(void); virtual ~Memory7(void); void dumpCore(void); byte_t memRead8(word_t addr); void memWrite8(word_t addr, byte_t val); byte_t * get_irm(void); byte_t * get_char_rom(void); void set_romdi(bool val); void register_romdi_handler(ROMDIInterface *handler); void unregister_romdi_handler(ROMDIInterface *handler); void register_memory_handler(MemoryInterface *handler); void unregister_memory_handler(MemoryInterface *handler); virtual void reset(bool power_on = false); /* * ROMDIInterface */ void romdi(bool val); }; #endif /* __kc_memory7_h */ KCemu-0.5.1/include/kc/mod_rom.h0000644001050700006200000000317111345001576016036 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_rom_h #define __kc_mod_rom_h #include "kc/module.h" #include "kc/memory.h" class ModuleROM : public ModuleInterface { protected: byte_t _id; byte_t _val; dword_t _size; byte_t *_rom; MemAreaGroup *_group; public: ModuleROM(ModuleROM &tmpl); ModuleROM(byte_t *rom, const char *name, dword_t size, byte_t id); ModuleROM(const char *rom_key, const char *name, byte_t id); ModuleROM(const char *filename, const char *name, dword_t size, byte_t id); virtual ~ModuleROM(void); virtual word_t get_addr(byte_t val); virtual dword_t get_size(byte_t val); virtual byte_t * get_rom_ptr(byte_t val); virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); }; #endif /* __kc_mod_rom_h */ KCemu-0.5.1/include/kc/mod_ram1.h0000644001050700006200000000257211345001576016105 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_ram1_h #define __kc_mod_ram1_h #include "kc/module.h" #include "kc/memory.h" class ModuleRAM1 : public ModuleInterface { private: byte_t *_ram; word_t _addr; dword_t _size; MemAreaGroup *_group; public: ModuleRAM1(ModuleRAM1 &tmpl); ModuleRAM1(const char *name, word_t addr, dword_t size = 0x4000); virtual ~ModuleRAM1(void); virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); }; #endif /* __kc_mod_ram1_h */ KCemu-0.5.1/include/kc/mod_js.h0000644001050700006200000000517211345001576015660 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_js_h #define __kc_mod_js_h #include "kc/cb.h" #include "kc/pio.h" #include "kc/ports.h" #include "kc/module.h" class PIOJoystick : public PIO, public PIOCallbackInterface, public Callback { private: enum { IDLE_COUNTER_INIT = 500 }; private: int _fd; int _up; int _down; int _left; int _right; int _button0; int _button1; bool _is_open; int _idle_counter; char _number_of_axes; char _number_of_buttons; byte_t _val; char *_device; protected: virtual bool js_open(void); virtual void js_close(void); virtual void change_A(byte_t changed, byte_t val); virtual void change_B(byte_t changed, byte_t val); public: PIOJoystick(void); virtual ~PIOJoystick(void); virtual bool is_open(void); virtual const char * check_joystick_device(void); virtual const char * get_joystick_device(void); virtual void set_joystick_device(const char *device); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); /* * Callback */ virtual void callback(void *data); /* * PIOCallbackInterface */ virtual int callback_A_in(void); virtual int callback_B_in(void); virtual void callback_A_out(byte_t val); virtual void callback_B_out(byte_t val); }; class ModuleJoystick : public ModuleInterface, public PortInterface { private: PIOJoystick *_pio; PortGroup *_portg; public: ModuleJoystick(ModuleJoystick &tmpl); ModuleJoystick(const char *name, byte_t id); virtual ~ModuleJoystick(void); /* * ModuleInterface */ virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); /* * PortInterface */ virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_mod_js_h */ KCemu-0.5.1/include/kc/memory0.h0000644001050700006200000000371611345001576015777 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_memory0_h #define __kc_memory0_h #include "kc/system.h" #include "kc/kc.h" #include "kc/ports.h" #include "kc/memory.h" class Memory0 : public Memory, public PortInterface { private: byte_t _val; byte_t _irm[0x00400]; byte_t _ram[0x10000]; byte_t _rom[0x01000]; byte_t _chr[0x01000]; MemAreaGroup *_m_scr; /* scratch memory */ MemAreaGroup *_m_ram; /* RAM 0000h - efffh */ MemAreaGroup *_m_ram_f0; /* RAM f000h - f7ffh */ MemAreaGroup *_m_ram_f8; /* RAM f800h - ffffh */ MemAreaGroup *_m_irm; /* IRM ec00h - efffh */ MemAreaGroup *_m_rom; /* ROM f000h - f7ffh */ MemAreaGroup *_m_rom_f8; /* ROM f800h - ffffh */ PortGroup *_portg; public: Memory0(void); virtual ~Memory0(void); void dumpCore(void); byte_t memRead8(word_t addr); void memWrite8(word_t addr, byte_t val); byte_t * get_irm(void); byte_t * get_char_rom(void); void port_04(byte_t changed, byte_t val); virtual void reset(bool power_on = false); /* * PortInterface */ virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_memory0_h */ KCemu-0.5.1/include/kc/keyboard.h0000644001050700006200000000326611345001576016207 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_keyboard_h #define __kc_keyboard_h #include "kc/kc.h" #include "kc/cb.h" #include "kc/ic.h" class Keyboard : public InterfaceCircuit, public Callback { public: Keyboard(void) : InterfaceCircuit("Keyboard"), Callback("Keyboard") {} virtual ~Keyboard(void) {} /** * keysym: translated key (e.g. shift already included) * keycode: raw key number (this should be exactly one number for * every key on the keyboard so we can track key presses * and releases even with changing modifiers between * keypress and keyrelease) */ virtual void keyPressed(int keysym, int keycode) = 0; virtual void keyReleased(int keysym, int keycode) = 0; virtual void replayString(const char *text) = 0; virtual void callback(void *data) = 0; }; #endif /* __kc_keyboard_h */ KCemu-0.5.1/include/kc/mod_64k.h0000644001050700006200000000267111345001576015651 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_64k_h #define __kc_mod_64k_h #include #include "kc/module.h" #include "kc/memory.h" class Module64k : public ModuleInterface { private: enum { SEGMENTS = 4, SEGMENT_SIZE = 0x4000, RAM_SIZE = SEGMENTS * SEGMENT_SIZE, }; byte_t _val; byte_t *_ram; MemAreaGroup *_group[4]; public: Module64k(Module64k &tmpl); Module64k(const char *name, byte_t id); virtual ~Module64k(void); virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); }; #endif /* __kc_mod_64k_h */ KCemu-0.5.1/include/kc/basicrun.h0000644001050700006200000000304411345001576016207 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_basicrun_h #define __kc_basicrun_h static unsigned char basicrun[] = { 0xcd,0xd0,0xdd,0x21,0xbd,0xc0,0x11,0x00,0x03,0x01, 0x67,0x00,0xed,0xb0,0xeb,0xf9,0x21,0xc0,0x01,0x22, 0x56,0x03,0xcd,0x69,0xc6,0x32,0xab,0x03,0x32,0x00, 0x04,0x21,0x00,0x03,0x2b,0x11,0xff,0xbf,0x23,0xcd, 0x89,0xc6,0x28,0x09,0x7e,0x47,0x2f,0x77,0xbe,0x70, 0x28,0xf2,0x2b,0x11,0x00,0xff,0x22,0xb0,0x03,0x19, 0x22,0x56,0x03,0xaf,0x32,0x5e,0x03,0xcd,0x4f,0xc6, 0x2a,0x56,0x03,0x11,0xef,0xfb,0x19,0x2a,0x04,0xe0, 0x7e,0xfe,0x78,0x20,0x01,0x3e,0xaf,0x32,0xfc,0x03, 0x31,0x67,0x03,0xcd,0x69,0xc6,0xcd,0x4f,0xc6,0xc3, 0x54,0xc8 }; static int basicrun_len = 102; #endif /* __kc_basicrun_h */ KCemu-0.5.1/include/kc/gdc.h0000644001050700006200000000374511345001576015146 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_gdc_h #define __kc_gdc_h #include "kc/system.h" #include "kc/ic.h" #include "kc/ports.h" class GDC : public PortInterface, public InterfaceCircuit { private: int _idx; int _ptr; int _pptr; int _ridx; int _mask; int _mask_c; int _control; int _figs_dc; int _screen_on; int _nr_of_lines; int _cursor_top; int _cursor_bottom; byte_t _cmd; byte_t _arg[4096]; byte_t _mem[65536]; byte_t _col[65536]; byte_t _pram[16]; protected: void info(void); public: GDC(void); virtual ~GDC(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); virtual long get_pram_SAD(int idx); virtual long get_pram_LEN(int idx); virtual byte_t get_mem(int addr); virtual byte_t get_col(int addr); virtual bool get_cursor(int addr); virtual bool get_cursor(int addr, int line); virtual int get_screen_on(void); virtual int get_nr_of_lines(void); virtual void v_retrace(bool value); /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void); virtual word_t irqack(void); virtual void reset(bool power_on = false); }; #endif /* __kc_gdc_h */ KCemu-0.5.1/include/kc/sound8.h0000644001050700006200000000374511345001576015631 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_sound8_h #define __kc_sound8_h #include #include "kc/system.h" #include "kc/cb.h" #include "kc/pio.h" #include "kc/sound.h" class sndop8 { public: int _val; long long _counter; sndop8(long long counter, int val) { _val = val; _counter = counter; } }; class Sound8 : public Sound, public PIOCallbackInterface, public Callback { private: typedef std::listsndop_list_t; public: enum { SND_BUF_SIZE = 0x8000, SND_BUF_MASK = 0x7FFF }; private: byte_t _val; long long _cnt; long long _snd_cnt; long long *_buf; int _idx_r, _idx_w; sndop_list_t _sndop_list; protected: virtual void sound_callback(void *userdata, unsigned char *stream, int len); public: Sound8(void); virtual ~Sound8(void); virtual void init(void); virtual void start(void); virtual void stop(void); /* * PIOCallbackInterface functions */ virtual int callback_A_in(void); virtual int callback_B_in(void); virtual void callback_A_out(byte_t val); virtual void callback_B_out(byte_t val); /* * Callback */ void callback(void *data); }; #endif /* __kc_sound8_h */ KCemu-0.5.1/include/kc/pio8.h0000644001050700006200000000346311345001576015265 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_pio8_h #define __kc_pio8_h #include "kc/pio.h" #include "kc/tape.h" #include "kc/ports.h" class PIO8_1 : public PIO, public TapeCallback { private: int _led_value[7]; int _led_value_latch; protected: void draw_leds(void); void tape_bit(int freq); void tape_byte(int byte); void tape_signal(int val); public: PIO8_1(void); virtual ~PIO8_1(void); byte_t in(word_t addr); void out(word_t addr, byte_t val); void change_A(byte_t changed, byte_t val); void change_B(byte_t changed, byte_t val); byte_t get_led_value(int index); /* * InterfaceCircuit */ virtual void reset(bool power_on = false); /* * TapeCallback */ virtual void tape_callback(byte_t val); }; class PIO8_2 : public PIO { public: PIO8_2(void); virtual ~PIO8_2(void); byte_t in(word_t addr); void out(word_t addr, byte_t val); void change_A(byte_t changed, byte_t val); void change_B(byte_t changed, byte_t val); }; #endif /* __kc_pio8_h */ KCemu-0.5.1/include/kc/mod_m052.h0000644001050700006200000000276311345001576015732 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_m052_h #define __kc_mod_m052_h #include "kc/mod_segm.h" class ModuleNetworkUSB : public ModuleSegmentedMemory { private: PIO *_pio_net; PIO *_pio_vdip; PortGroup *_portg_pio_net; PortGroup *_portg_pio_vdip; protected: virtual word_t get_base_address(word_t addr, byte_t val); virtual int get_segment_index(word_t addr, byte_t val); public: ModuleNetworkUSB(ModuleNetworkUSB &tmpl); ModuleNetworkUSB(const char *filename, const char *name, byte_t id); virtual ~ModuleNetworkUSB(void); byte_t m_in(word_t addr); void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); }; #endif /* __kc_mod_m052_h */ KCemu-0.5.1/include/kc/keyb6.h0000644001050700006200000000347111345001576015425 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_keyb6_h #define __kc_keyb6_h #include "kc/kc.h" #include "kc/keyboard.h" class Keyboard6 : public Keyboard, public PIOCallbackInterface { private: int _key; int _line_val; protected: void init(void); int decode_key(int keysym, bool press); public: Keyboard6(void); virtual ~Keyboard6(void); virtual void keyPressed(int keysym, int keycode); virtual void keyReleased(int keysym, int keycode); virtual void replayString(const char *text); virtual void set_line(byte_t val); /* * Callback */ virtual void callback(void *data); /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void) {} virtual word_t irqack() { return IRQ_NOT_ACK; } virtual void reset(bool power_on = false); /* * PIOCallbackInterface */ virtual int callback_A_in(void); virtual int callback_B_in(void); virtual void callback_A_out(byte_t val) {} virtual void callback_B_out(byte_t val) {} }; #endif /* __kc_keyb6_h */ KCemu-0.5.1/include/kc/memory1.h0000644001050700006200000000432111345001576015771 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_memory1_h #define __kc_memory1_h #include "kc/system.h" #include "kc/kc.h" #include "kc/romdi.h" #include "kc/memory.h" #include "kc/memoryif.h" class Memory1 : public Memory, public ROMDIInterface { private: byte_t _ram[0x4000]; byte_t _irm[0x0800]; byte_t _rom_os[0x1000]; byte_t _rom_chargen[0x0800]; MemAreaGroup *_m_scr; /* scratch memory */ MemAreaGroup *_m_ram; /* RAM 0000h - 3fffh */ MemAreaGroup *_m_irm_e8; /* IRM e800h - bfffh (color, readonly) */ MemAreaGroup *_m_irm_ec; /* IRM ec00h - efffh (text) */ MemAreaGroup *_m_os; /* OS f000h - ffffh */ typedef std::list romdi_list_t; romdi_list_t _romdi_list; bool _romdi; typedef std::list memory_list_t; memory_list_t _memory_list; public: Memory1(void); virtual ~Memory1(void); void dumpCore(void); byte_t memRead8(word_t addr); void memWrite8(word_t addr, byte_t val); byte_t * get_irm(void); byte_t * get_char_rom(void); void set_romdi(bool val); void register_romdi_handler(ROMDIInterface *handler); void unregister_romdi_handler(ROMDIInterface *handler); void register_memory_handler(MemoryInterface *handler); void unregister_memory_handler(MemoryInterface *handler); virtual void reset(bool power_on = false); /* * ROMDIInterface */ void romdi(bool val); }; #endif /* __kc_memory1_h */ KCemu-0.5.1/include/kc/muglerpc/0000755001050700006200000000000011412404770016043 5ustar glaubitzfbedvKCemu-0.5.1/include/kc/muglerpc/ports.h0000644001050700006200000000237511345001576017374 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_muglerpc_ports_h #define __kc_muglerpc_ports_h #include "kc/ports.h" class PortsMuglerPC : public PortInterface { public: protected: byte_t _val_0x94; protected: virtual void change_0x94(byte_t changed, byte_t val); public: PortsMuglerPC(void); virtual ~PortsMuglerPC(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_muglerpc_ports_h */ KCemu-0.5.1/include/kc/muglerpc/memory.h0000644001050700006200000000403011345001576017523 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_muglerpc_memory_h #define __kc_muglerpc_memory_h #include "kc/system.h" #include "kc/kc.h" #include "kc/memory.h" class MemoryMuglerPC : public Memory { private: byte_t _irm[0x0800]; byte_t _rom[0x2000]; byte_t _rom_chargen[0x0800]; byte_t _ram_block0[0x10000]; byte_t _ram_block1[0x10000]; byte_t _ram_block2[0x10000]; MemAreaGroup *_m_scr; /* scratch memory */ MemAreaGroup *_m_rom; /* ROM 0000h - 1fffh */ MemAreaGroup *_m_ram0_lo; /* RAM Block 0 0000h - ffffh */ MemAreaGroup *_m_ram0_hi; /* RAM Block 0 0000h - ffffh */ MemAreaGroup *_m_ram1; /* RAM Block 1 0000h - ffffh */ MemAreaGroup *_m_ram2; /* RAM Block 2 0000h - ffffh */ MemAreaGroup *_m_irm; /* IRM f800h - ffffh */ public: MemoryMuglerPC(void); virtual ~MemoryMuglerPC(void); void dumpCore(void); byte_t memRead8(word_t addr); void memWrite8(word_t addr, byte_t val); byte_t * get_irm(void); byte_t * get_char_rom(void); void select_eprom(bool active); void select_ram_block(int block, bool force_ram0_at_c000h); virtual void reset(bool power_on = false); }; #endif /* __kc_muglerpc_memory_h */ KCemu-0.5.1/include/kc/muglerpc/Makefile.am0000644001050700006200000000017710527416074020112 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ ctc.h \ pio.h \ ports.h \ memory.h \ keyboard.h KCemu-0.5.1/include/kc/muglerpc/pio.h0000644001050700006200000000275511345001576017016 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_muglerpc_pio_h #define __kc_muglerpc_pio_h #include "kc/pio.h" #include "kc/ports.h" class PIOMuglerPCSystem : public PIO { public: PIOMuglerPCSystem(void); virtual ~PIOMuglerPCSystem(void); byte_t in(word_t addr); void out(word_t addr, byte_t val); void change_A(byte_t changed, byte_t val); void change_B(byte_t changed, byte_t val); }; class PIOMuglerPCUser : public PIO { public: PIOMuglerPCUser(void); virtual ~PIOMuglerPCUser(void); byte_t in(word_t addr); void out(word_t addr, byte_t val); void change_A(byte_t changed, byte_t val); void change_B(byte_t changed, byte_t val); }; #endif /* __kc_muglerpc_pio_h */ KCemu-0.5.1/include/kc/muglerpc/ctc.h0000644001050700006200000000361411345001576016773 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_muglerpc_ctc_h #define __kc_muglerpc_ctc_h #include "kc/system.h" #include "kc/ctc_base.h" class CTCMuglerPCSystem : public CTC_Base { public: CTCMuglerPCSystem(void); virtual ~CTCMuglerPCSystem(void); virtual bool irq_0(void); virtual bool irq_1(void); virtual bool irq_2(void); virtual bool irq_3(void); virtual long counter_value_0(void); virtual long counter_value_1(void); virtual long counter_value_2(void); virtual long counter_value_3(void); /* PortInterface */ byte_t in(word_t addr); void out(word_t addr, byte_t val); }; class CTCMuglerPCUser : public CTC_Base { public: CTCMuglerPCUser(void); virtual ~CTCMuglerPCUser(void); virtual bool irq_0(void); virtual bool irq_1(void); virtual bool irq_2(void); virtual bool irq_3(void); virtual long counter_value_0(void); virtual long counter_value_1(void); virtual long counter_value_2(void); virtual long counter_value_3(void); /* PortInterface */ byte_t in(word_t addr); void out(word_t addr, byte_t val); }; #endif /* __kc_muglerpc_ctc_h */ KCemu-0.5.1/include/kc/muglerpc/keyboard.h0000644001050700006200000000365711345001576020031 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_muglerpc_keyboard_h #define __kc_muglerpc_keyboard_h #include "kc/kc.h" #include "kc/cb.h" #include "kc/pio.h" #include "kc/keyboard.h" class KeyboardMuglerPC : public Keyboard, public PIOCallbackInterface { public: enum { MAX_KEYS = 8, }; private: struct _keybuf { int sym; int code; } _keybuf[MAX_KEYS]; protected: void init(void); int decode_key(int keysym, bool press); public: KeyboardMuglerPC(void); virtual ~KeyboardMuglerPC(void); virtual void keyPressed(int keysym, int keycode); virtual void keyReleased(int keysym, int keycode); virtual void replayString(const char *text); virtual void callback(void *data); /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void) {} virtual word_t irqack() { return IRQ_NOT_ACK; } virtual void reset(bool power_on = false); /* * PIOCallbackInterface */ virtual int callback_A_in(void); virtual int callback_B_in(void); virtual void callback_A_out(byte_t val); virtual void callback_B_out(byte_t val); }; #endif /* __kc_muglerpc_keyboard_h */ KCemu-0.5.1/include/kc/muglerpc/Makefile.in0000644001050700006200000003107011412404770020111 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/kc/muglerpc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ ctc.h \ pio.h \ ports.h \ memory.h \ keyboard.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/kc/muglerpc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/kc/muglerpc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/kc/ctc8.h0000644001050700006200000000265211345001576015246 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_ctc8_h #define __kc_ctc8_h #include "kc/system.h" #include "kc/ctc_base.h" class CTC8 : public CTC_Base { private: unsigned long long _last_irq_0; public: CTC8(void); virtual ~CTC8(void); virtual bool irq_0(void); virtual bool irq_1(void); virtual bool irq_2(void); virtual bool irq_3(void); virtual long counter_value_0(void); virtual long counter_value_1(void); virtual long counter_value_2(void); virtual long counter_value_3(void); /* PortInterface */ byte_t in(word_t addr); void out(word_t addr, byte_t val); }; #endif /* __kc_ctc8_h */ KCemu-0.5.1/include/kc/svg.h0000644001050700006200000000263411345001576015204 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_svg_h #define __kc_svg_h #include "kc/system.h" #include "kc/ports.h" class SVG : public PortInterface { private: enum { A = 0, B = 1, C = 2, }; private: byte_t _val_a0; byte_t _val_a1; byte_t _val_a8; byte_t _val_aa; byte_t _val_ab; int _page_info[4]; int _sound_reg[14]; int _sound_val[3]; int _sound_freq[3]; protected: void set_page(int page, int slot); public: SVG(void); virtual ~SVG(void); virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_svg_h */ KCemu-0.5.1/include/kc/z80_fdc.h0000644001050700006200000000546511345001576015647 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_z80_fdc_h #define __kc_z80_fdc_h #include #include "kc/system.h" #include "kc/ic.h" #include "kc/cb.h" #include "kc/cb_list.h" class Z80_FDC { private: typedef std::list ic_list_t; byte_t _next_irq; Z80EX_CONTEXT *_context; ic_list_t _ic_list; public: bool _debug; unsigned long long _counter; CallbackList _cb_list; private: void do_execute(void); /*callback that returns byte for a given adress*/ static Z80EX_BYTE z80ex_dasm_readbyte_cb(Z80EX_WORD addr, void *user_data); /*read byte from memory -- called when RD & MREQ goes active. m1_state will be 1 if M1 signal is active*/ static Z80EX_BYTE z80ex_mread_cb (Z80EX_CONTEXT *cpu, Z80EX_WORD addr, int m1_state, void *user_data); /*write to memory -- called when WR & MREQ goes active*/ static void z80ex_mwrite_cb (Z80EX_CONTEXT *cpu, Z80EX_WORD addr, Z80EX_BYTE value, void *user_data); /*read byte from -- called when RD & IORQ goes active*/ static Z80EX_BYTE z80ex_pread_cb (Z80EX_CONTEXT *cpu, Z80EX_WORD port, void *user_data); /*write to -- called when WR & IORQ goes active*/ static void z80ex_pwrite_cb (Z80EX_CONTEXT *cpu, Z80EX_WORD port, Z80EX_BYTE value, void *user_data); /*read byte of interrupt vector -- called when M1 and IORQ goes active*/ static Z80EX_BYTE z80ex_intread_cb (Z80EX_CONTEXT *cpu, void *user_data); public: Z80_FDC(void); virtual ~Z80_FDC(void); bool trace(void); void trace(bool value); void execute(void); long long get_counter(); byte_t trigger_irq(byte_t irq_vector); void add_callback(unsigned long long offset, Callback *cb, void *data); void register_ic(InterfaceCircuit *h); void unregister_ic(InterfaceCircuit *h); void reset(bool power_on = false); void power_on(); word_t getPC(void) { return z80ex_get_reg(_context, regPC); } byte_t getI(void) { return z80ex_get_reg(_context, regI); } }; #endif /* __kc_z80_fdc_h */ KCemu-0.5.1/include/kc/mod_r16.h0000644001050700006200000000253411345001576015653 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_r16_h #define __kc_mod_r16_h #include "kc/mod_segm.h" class ModuleSegmentedROM16k : public ModuleSegmentedMemory { protected: virtual word_t get_base_address(word_t addr, byte_t val); virtual int get_segment_index(word_t addr, byte_t val); public: ModuleSegmentedROM16k(ModuleSegmentedROM16k &tmpl); ModuleSegmentedROM16k(const char *filename, const char *name, byte_t id); virtual ~ModuleSegmentedROM16k(void); virtual ModuleInterface * clone(void); }; #endif /* __kc_mod_r16_h */ KCemu-0.5.1/include/kc/kc.h0000644001050700006200000000534411345001576015003 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_kc_h #define __kc_kc_h #include "kc/system.h" class Z80; class Z80_FDC; class DaisyChain; class UI; class Ports; class Module; class Memory; class CTC; class PIO; class Tape; class Disk; class Timer; class Keyboard; class ModuleList; class CMD; class FloppySharedMem; class FloppyIO; class FDC; class Sound; class PortInterface; class GDC; class VIS; class VDIP; class KCNET; class Poly880; class DisplayC80; class Plotter; extern Z80 *z80; extern DaisyChain *daisy; extern UI *ui; extern Ports *ports; extern PortInterface *porti; extern Module *module; extern Memory *memory; extern CTC *ctc; extern CTC *ctc2; extern PIO *pio; extern PIO *pio2; extern Tape *tape; extern Disk *disk; extern Timer *timer; extern Keyboard *keyboard; extern ModuleList *module_list; extern CMD *cmd; extern GDC *gdc; extern VIS *vis; extern Poly880 *poly880; extern DisplayC80 *display_c80; extern Plotter *plotter; extern Z80_FDC *fdc_z80; extern FloppyIO *fdc_io; extern FloppySharedMem *fdc_shmem; extern Ports *fdc_ports; extern FDC *fdc_fdc; extern Sound *sound; extern VDIP *vdip; extern KCNET *kcnet; extern byte_t fdc_mem[]; extern int kcemu_ui_scale; extern int kcemu_ui_debug; extern int kcemu_ui_fullscreen; extern int kcemu_ui_display_effect; extern char *kcemu_modules; extern char *kcemu_homedir; extern char *kcemu_datadir; extern char *kcemu_localedir; extern char *kcemu_debug_output; extern char *kcemu_autostart_file; extern char *kcemu_autostart_addr; extern char *kcemu_vdip_root; const char * kc_get_license(void); const char * kc_get_warranty(void); const char * kc_get_license_trailer(void); #endif /* __kc_kc_h */ KCemu-0.5.1/include/kc/vdip.h0000644001050700006200000001134611345001576015347 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_vdip_h #define __kc_vdip_h #include #include "kc/kc.h" #include "kc/cb.h" #include "kc/pio.h" #include "kc/prefs/strlist.h" using namespace std; class VDIP; typedef enum { CMD_DIR = 0x01, CMD_CD = 0x02, CMD_RD = 0x04, CMD_DLD = 0x05, CMD_MKD = 0x06, CMD_DLF = 0x07, CMD_WRF = 0x08, CMD_OPW = 0x09, CMD_CLF = 0x0a, CMD_RDF = 0x0b, CMD_REN = 0x0c, CMD_OPR = 0x0e, CMD_IDD = 0x0f, CMD_SCS = 0x10, CMD_ECS = 0x11, CMD_FS = 0x12, CMD_FWV = 0x13, CMD_SEK = 0x28, CMD_DSN = 0x2d, CMD_DVL = 0x2e, CMD_DIRT = 0x2f, CMD_E = 0x45, CMD_e = 0x65, CMD_IPA = 0x90, CMD_IPH = 0x91, CMD_FSE = 0x93, CMD_IDDE = 0x94, CMD_EMPTY = 0xfffe, CMD_UNKNOWN = 0xffff, } vdip_command_t; typedef enum { ERR_BAD_COMMAND, ERR_COMMAND_FAILED, ERR_DISK_FULL, ERR_INVALID, ERR_READ_ONLY, ERR_FILE_OPEN, ERR_DIR_NOT_EMPTY, ERR_FILENAME_INVALID, ERR_NO_UPGRADE, ERR_NO_DISK, } vdip_error_t; class VDIP_CMD { private: VDIP *_vdip; string _response; StringList *_args; bool _check_disk; protected: virtual void execute(void) = 0; static vdip_command_t map_extended_command(string cmd); public: VDIP_CMD(VDIP *vdip, bool check_disk = false); virtual ~VDIP_CMD(void); virtual VDIP *get_vdip(void); virtual void add_prompt(void); virtual void add_error(vdip_error_t error); virtual void add_char(int c); virtual void add_hex(int digits, dword_t val); virtual void add_word(word_t val); virtual void add_dword(dword_t val); virtual void add_string(const char *text); virtual bool has_args(void) const; virtual int get_arg_count(void) const; virtual string get_arg(unsigned int arg) const; virtual dword_t get_dword_arg(unsigned int arg) const; virtual void set_args(StringList *args); virtual string get_response(string input); virtual void exec(void); virtual void handle_input(byte_t input); static VDIP_CMD * create_command(VDIP *vdip, string cmd); static VDIP_CMD * create_command(VDIP *vdip, vdip_command_t code); }; class VDIP : public Callback, public PIOCallbackInterface { private: PIO *_pio; VDIP_CMD *_cmd; bool _input; dword_t _wrf_len; bool _reset; int _output; int _input_data; string _input_buffer; string _output_buffer; byte_t _pio_ext; bool _short_command_set; bool _binary_mode; FILE *_file; string _root; StringList *_cwd; CMD *_attach_cmd; private: void set_pio_ext_b(byte_t val); VDIP_CMD * decode_command(string buf); public: VDIP(void); virtual ~VDIP(void); virtual string get_firmware_version(void) const; virtual bool is_binary_mode(void) const; virtual void set_binary_mode(bool val); virtual bool is_short_command_set(void) const; virtual void set_short_command_set(bool val); virtual FILE * get_file(void) const; virtual void set_file(FILE *file); virtual string get_root(void) const; virtual void set_root(string root); virtual bool is_root(void); virtual bool has_disk(void); virtual string get_cwd(void) const; virtual string get_path(string dir) const; virtual void chdir_up(void); virtual void chdir_root(void); virtual void chdir(string dir); virtual void register_pio(PIO *pio); virtual void callback(void *data); virtual void reset(void); /** latch byte to read, called when RD# goes H->L */ virtual void latch_byte(void); /** return the byte latched on latch_byte() */ virtual byte_t read_byte(void); /** byte was read, called when RD# goes L->H */ virtual void read_end(void); /** write byte, called when WR# goes L->H */ virtual void write_byte(byte_t val); /** byte was written, called when WR# goes H->L */ virtual void write_end(void); /* * PIOCallbackInterface */ virtual int callback_A_in(void); virtual int callback_B_in(void); virtual void callback_A_out(byte_t val); virtual void callback_B_out(byte_t val); }; #endif /* __kc_vdip_h */ KCemu-0.5.1/include/kc/keyb0.h0000644001050700006200000000425711345001576015422 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_keyb0_h #define __kc_keyb0_h #include "kc/prefs/types.h" #include "kc/cb.h" #include "kc/pio.h" #include "kc/keyboard.h" class Keyboard0 : public Keyboard, public PIOCallbackInterface { private: enum { SHIFT_DELAY = 5 }; kc_variant_t _variant; private: byte_t _ext; byte_t _value; byte_t _pio_value; bool _control; unsigned int _key; unsigned int _keysym; protected: void init(void); void keyboard_handler(void); void keyboard_handler_rb(void); void keyboard_handler_a2(void); void keyboard_handler_default(void); public: Keyboard0(void); virtual ~Keyboard0(void); virtual void keyPressed(int keysym, int keycode); virtual void keyReleased(int keysym, int keycode); virtual void replayString(const char *text); virtual void callback(void *data); /* * set value for keyboard output lines (coming from * the B/D decoder chip */ virtual void set_value(byte_t value); /* * InterfaceCircuit */ virtual void reti(void); virtual void irqreq(void) {} virtual word_t irqack() { return IRQ_NOT_ACK; } virtual void reset(bool power_on = false); /* * PIOCallbackInterface */ virtual int callback_A_in(void); virtual int callback_B_in(void); virtual void callback_A_out(byte_t val); virtual void callback_B_out(byte_t val); }; #endif /* __kc_keyb0_h */ KCemu-0.5.1/include/kc/mod_320k.h0000644001050700006200000000361611345001576015724 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * Copyright (C) 2005 Alexander Schön * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_320k_h #define __kc_mod_320k_h #include "kc/romdi.h" #include "kc/module.h" #include "kc/memory.h" class Module320k : public ModuleInterface, public PortInterface, public InterfaceCircuit, public ROMDIInterface { private: bool _master; byte_t _bank; byte_t *_rom; PortGroup *_portg; MemAreaGroup *_group[5]; protected: void register_memory_bank(byte_t val); void unregister_memory_bank(void); public: Module320k(Module320k &tmpl); Module320k(const char *filename, const char *name); virtual ~Module320k(void); virtual void m_out(word_t addr, byte_t val); virtual ModuleInterface * clone(void); /* * PortInterface */ virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); /* * InterfaceCircuit */ virtual void reti(void) {} virtual void irqreq(void) {} virtual word_t irqack() { return IRQ_NOT_ACK; } virtual void reset(bool power_on = false); /* * ROMDIInterface */ void romdi(bool val); }; #endif /* __kc_mod_320k_h */ KCemu-0.5.1/include/kc/basicrun.asm0000644001050700006200000001207310527416074016546 0ustar glaubitzfbedv; ; based on the kc basic source code ; ; assemble with the asl macro assembler ; (tested with version 1.41r8) ; CPU z80 ;************************************************ ;EXTERNE SPRUNGZIELE RAMST equ 0c0bdh NEW1 equ 0c641h NEW2 equ 0c64fh INITR equ 0c669h CPREG equ 0c689h RUNMOD equ 0c854h CLS equ 0ddd0h ;************************************************ ;VARIABLENVEREINBARUNG CICH: EQU 00 COCH: EQU 01 ICH_: EQU 02 OCH_: EQU 03 ;************************************************ ROMBEG: EQU 0C000H ;INTERPRETERANFANGSADR. RAMBEG: EQU 300H ;RAMANFANGSADR. WSP: EQU RAMBEG PRAM: EQU WSP+257 ;PROGRAMMSPEICHERANFADR. ZFT: EQU 0 ;WSP RAMSH1: INC HL CALL CPREG JR Z,RAMTST LD A,(HL) LD B,A CPL LD (HL),A CP A, (HL) LD (HL),B JR Z,RAMSH1 DEC HL RAMTST: LD DE,-256 LD (MEMSIZ),HL ADD HL,DE LD (STDPTR),HL ; ; Verhindern, da der Anfang des ; BASIC-Speichers durch NEW1 ; gelscht wird. Der Pointer SVARPT ; fr das Ende des Basic Programmes ; wird durch die Lade-Routine geschrieben. ; XOR A LD (DATFLG),A CALL NEW2 LD HL,(STDPTR) LD DE,65536-PRAM-16 ADD HL,DE LD HL,(EXTGO1+1) LD A,(HL) CP A, 78H JR NZ,RAMSH0 DEFB 3EH RAMSH0: XOR A LD (EXTFLG),A LD SP,INPBUF+6 ;************************************************ ; BASIC Warmstart CALL INITR CALL NEW2 ;LD A,1DH ; keycode fr RUN in... ;LD (25H),A ; ...Tastaturpuffer JP RUNMOD KCemu-0.5.1/include/kc/fdc4.h0000644001050700006200000000236611345001576015227 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_fdc4_h #define __kc_fdc4_h #include "kc/system.h" #include "kc/fdc.h" class FDC4 : public FDC { public: FDC4(void); virtual ~FDC4(void); virtual long long get_counter(); virtual void add_callback(unsigned long long offset, Callback *cb, void *data); /* * PortInterface */ virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_fdc4_h */ KCemu-0.5.1/include/kc/mod_r64.h0000644001050700006200000000302411345001576015651 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __kc_mod_r64_h #define __kc_mod_r64_h #include "kc/module.h" #include "kc/memory.h" class ModuleRAM64 : public ModuleInterface, public PortInterface { private: byte_t *_ram[4]; MemAreaGroup *_group[4]; PortGroup *_portg; public: ModuleRAM64(ModuleRAM64 &tmpl); ModuleRAM64(const char *name); virtual ~ModuleRAM64(void); /* * ModuleInterface */ virtual ModuleInterface * clone(void); virtual void reset(bool power_on = false); virtual void m_out(word_t addr, byte_t val); virtual void in_out(word_t addr); /* * PortInterface */ virtual byte_t in(word_t addr); virtual void out(word_t addr, byte_t val); }; #endif /* __kc_mod_r64_h */ KCemu-0.5.1/include/kc/Makefile.in0000644001050700006200000005316111412404770016300 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/kc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/config.h.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = prefs kcnet kramermc muglerpc vcs80 c80 EXTRA_DIST = \ cb.h \ ic.h \ kc.h \ ctc.h \ ctc1.h \ ctc3.h \ ctc6.h \ ctc8.h \ ctc9.h \ ctc_fdc.h \ pio_dio.h \ pio_vdip.h \ ctc_dio.h \ ctc_base.h \ cb_list.h \ daisy.h \ keyboard.h \ keyb0.h \ keyb0k.h \ keyb1.h \ keyb1k.h \ keyb3.h \ keyb3k.h \ keyb6.h \ keyb8.h \ keyb8k.h \ keyb9.h \ keyb9k.h \ keys.h \ memory.h \ memoryif.h \ memory0.h \ memory1.h \ memory2.h \ memory3.h \ memory4.h \ memory5.h \ memory6.h \ memory7.h \ memory8.h \ memory9.h \ pio.h \ pio0.h \ pio1.h \ pio2.h \ pio3.h \ pio4.h \ pio6.h \ pio8.h \ pio9.h \ ports.h \ ports0.h \ ports4.h \ ports6.h \ plotter.h \ sh_mem.h \ disk_io.h \ gdc.h \ vis.h \ svg.h \ gide.h \ vdip.h \ fdc.h \ fdc0s.h \ fdc4.h \ fdc7.h \ fdc9.h \ fdc_cmd.h \ floppy.h \ module.h \ mod_dio.h \ mod_vdip.h \ mod_ram.h \ mod_ram1.h \ mod_r16.h \ mod_r64.h \ mod_cpm.h \ mod_ram8.h \ mod_64k.h \ mod_128k.h \ mod_256k.h \ mod_512k.h \ mod_1m.h \ mod_4m.h \ mod_rom.h \ mod_urom.h \ mod_auto.h \ mod_rom1.h \ mod_romb.h \ mod_raf.h \ mod_192k.h \ mod_320k.h \ mod_ramf.h \ mod_fdc.h \ mod_gdc.h \ mod_rtc.h \ mod_disk.h \ mod_v24.h \ mod_js.h \ mod_4131.h \ mod_m052.h \ mod_segm.h \ mod_boot.h \ mod_list.h \ profile.h \ tape.h \ disk.h \ timer.h \ timer1.h \ timer3.h \ wav.h \ sound.h \ sound3.h \ sound8.h \ poly880.h \ z80.h \ z80_fdc.h \ romdi.h \ system.h \ memstream.h \ disass.h \ basicrun.h \ basicrun.asm all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/kc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/kc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): config.h: stamp-h1 @if test ! -f $@; then \ rm -f stamp-h1; \ $(MAKE) $(AM_MAKEFLAGS) stamp-h1; \ else :; fi stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status include/kc/config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) config.h.in $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) config.h.in $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile config.h installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-hdr distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) all \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-hdr \ distclean-tags distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/libaudio/0000755001050700006200000000000011412404771015421 5ustar glaubitzfbedvKCemu-0.5.1/include/libaudio/libaudioP.h0000644001050700006200000000357111345001576017511 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __libaudio_libaudiop_h #define __libaudio_libaudiop_h #include "kc/config.h" #include "libaudio/libaudio.h" #define MAX_LIBAUDIO_LOADERS (10) typedef struct libaudio_loader { int (*check)(const char *filename, unsigned char *data, long size); libaudio_prop_t * (*open)(const char *filename); libaudio_prop_t * (*rewind)(libaudio_prop_t *prop); void (*close)(libaudio_prop_t *prop); int (*read_sample)(libaudio_prop_t *prop); const char * (*get_type)(void); const char * (*get_name)(void); } libaudio_loader_t; struct libaudio_prop { libaudio_type_t type; char *filename; int sample_freq; int sample_size; int channels; libaudio_loader_t *loader; void *loader_data; }; int libaudio_register_loader(libaudio_loader_t *loader); void loader_oss_init(void); void loader_als_init(void); void loader_snd_init(void); void loader_aud_init(void); void loader_mp3_init(void); void loader_ogg_init(void); void loader_flc_init(void); void loader_wav_init(void); void loader_raw_init(void); #endif /* __libaudio_libaudiop_h */ KCemu-0.5.1/include/libaudio/libaudio.h0000644001050700006200000000621611345001576017370 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __libaudio_libaudio_h #define __libaudio_libaudio_h #ifdef __cplusplus extern "C" { #endif typedef enum { LIBAUDIO_TYPE_ALL = 0xffffffff, LIBAUDIO_TYPE_UNKNOWN = (1 << 0), LIBAUDIO_TYPE_OSS = (1 << 1), LIBAUDIO_TYPE_ALS = (1 << 2), LIBAUDIO_TYPE_SND = (1 << 3), LIBAUDIO_TYPE_AUD = (1 << 4), LIBAUDIO_TYPE_MP3 = (1 << 5), LIBAUDIO_TYPE_OGG = (1 << 6), LIBAUDIO_TYPE_FLC = (1 << 7), LIBAUDIO_TYPE_WAV = (1 << 8), } libaudio_type_t; typedef struct libaudio_prop libaudio_prop_t; /* * initialize loader modules. the loaders parameter * may specify which loaders will be enabled. if the * parameter is LIBAUDIO_TYPE_ALL all loaders will * be enabled. */ void libaudio_init(int loaders); /* * open the specified file by trying the available * loaders -- the first loader that thinks it's able * to read the file will be choosen */ libaudio_prop_t * libaudio_open(const char *filename); /* * rewind to beginning of file (if possible) */ void libaudio_rewind(libaudio_prop_t *prop); /* * close file */ void libaudio_close(libaudio_prop_t *prop); /* * returns an unsigned sample in the range 0..65535 * when the audio source is stereo the samples will * come interleaved */ int libaudio_read_sample(libaudio_prop_t *prop); /* * returns a short string with the type of the * audio source (e.g. WAV or MP3) */ const char * libaudio_get_type(libaudio_prop_t *prop); /* * returns the name of the loader which reads the * data from the audio source */ const char * libaudio_get_name(libaudio_prop_t *prop); /* * returns the name of the opened audio source as * given in the libaudio_open() function */ const char * libaudio_get_filename(libaudio_prop_t *prop); /* * returns the sample frequency of data that is * delivered by libaudio_read_sample() -- this can * be different from the actual file as the loader * may change the format */ int libaudio_get_sample_freq(libaudio_prop_t *prop); /* * returns the size of the samples (8 or 16 for now) */ int libaudio_get_sample_size(libaudio_prop_t *prop); /* * returns the number of channels */ int libaudio_get_channels(libaudio_prop_t *prop); /* * dump configuration to stdout */ void libaudio_show_config(void); #ifdef __cplusplus } #endif #endif /* __libaudio_libaudio_h */ KCemu-0.5.1/include/libaudio/Makefile.am0000644001050700006200000000014510527416074017462 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ libaudio.h \ libaudioP.h KCemu-0.5.1/include/libaudio/Makefile.in0000644001050700006200000003102511412404771017467 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/libaudio DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ libaudio.h \ libaudioP.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/libaudio/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/libaudio/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/getopt/0000755001050700006200000000000011412404770015132 5ustar glaubitzfbedvKCemu-0.5.1/include/getopt/Makefile.am0000644001050700006200000000012410527416074017171 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ getopt.h KCemu-0.5.1/include/getopt/getopt.h0000644001050700006200000001075611345001576016620 0ustar glaubitzfbedv/* Declarations for getopt. Copyright (C) 1989,90,91,92,93,94,96,97 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef _GETOPT_H #define _GETOPT_H 1 #ifdef __cplusplus extern "C" { #endif /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message `getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of `struct option' terminated by an element containing a name which is zero. The field `has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field `flag' is not NULL, it points to a variable that is set to the value given in the field `val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an `int' to a compiled-in constant, such as set a value from `optarg', set the option's `flag' field to zero and its `val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero `flag' field, `getopt' returns the contents of the `val' field. */ struct option { #if defined (__STDC__) && __STDC__ const char *name; #else char *name; #endif /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the `has_arg' field of `struct option'. */ #define no_argument 0 #define required_argument 1 #define optional_argument 2 #if defined (__STDC__) && __STDC__ #ifdef __GNU_LIBRARY__ /* Many other libraries have conflicting prototypes for getopt, with differences in the consts, in stdlib.h. To avoid compilation errors, only prototype getopt for the GNU C library. */ extern int getopt (int argc, char *const *argv, const char *shortopts); #else /* not __GNU_LIBRARY__ */ extern int getopt (); #endif /* __GNU_LIBRARY__ */ extern int getopt_long (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind); extern int getopt_long_only (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind); /* Internal only. Users should not call this directly. */ extern int _getopt_internal (int argc, char *const *argv, const char *shortopts, const struct option *longopts, int *longind, int long_only); #else /* not __STDC__ */ extern int getopt (); extern int getopt_long (); extern int getopt_long_only (); extern int _getopt_internal (); #endif /* __STDC__ */ #ifdef __cplusplus } #endif #endif /* _GETOPT_H */ KCemu-0.5.1/include/getopt/Makefile.in0000644001050700006200000003077611412404770017214 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/getopt DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ getopt.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/getopt/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/getopt/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/libtape/0000755001050700006200000000000011412404771015251 5ustar glaubitzfbedvKCemu-0.5.1/include/libtape/Makefile.am0000644001050700006200000000012110527416074017304 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ kct.h KCemu-0.5.1/include/libtape/kct.h0000644001050700006200000001615411345001576016213 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* * File Version Log: * * 1.00: first release * 1.01: reduced length of the name field to free some room for * the file type flag in the directory entry * 6 bytes are now unused and should be set to 0 * 1.02: argh, I thought the block number of tape blocks doesn't * need to be stored in the file - this is wrong as I found * one application that writes two blocks with a block * number 01 (WordPro) again this proves that Murphy's Law is * right every time ;-) * also I added a new field in the file header that holds the * machine type which the file is for (using 2 bytes may be * a bit excessive but we still have some unused space in the * file header so...) */ #ifndef __libtape_format_h #define __libtape_format_h #include #include #define __KCT_VERSION__ (0x0102) #define KCT_VERSION_MINOR(x) (x & 0xff) #define KCT_VERSION_MAJOR(x) ((x >> 8) & 0xff) #define KCT_DIR_BLOCKS (57) #define KCT_NAME_LENGTH (32) /* * only 1 byte values are allowed here because * the filetype is stored in the directory entry * as a single byte! * * FIXME: I don't know if this is safe on machines * with big endian byte order, I suspect it * is not :-( */ typedef enum { KCT_TYPE_COM = 0x00, KCT_TYPE_BASICODE = 0x31, KCT_TYPE_BAS = 0xd3, KCT_TYPE_DATA = 0xd4, KCT_TYPE_LIST = 0xd5, KCT_TYPE_BAS_P = 0xd7, KCT_TYPE_BIN = 0xff, } kct_file_type_t; /* * only 2 byte values allowed! */ typedef enum { KCT_MACHINE_UNKNOWN = 0x0000, /* should not be used in new files! */ KCT_MACHINE_KC_85_1 = 0x0001, KCT_MACHINE_KC_85_2 = 0x0002, KCT_MACHINE_KC_85_3 = 0x0004, KCT_MACHINE_KC_85_4 = 0x0008, KCT_MACHINE_KC_87 = 0x0010, KCT_MACHINE_ALL = 0xffff, } kct_machine_type_t; /* * the actual values are the same as defined in * linux: asm/errno.h */ typedef enum { KCT_OK_READONLY = -1, KCT_OK = 0, KCT_ERROR_NOENT = 2, KCT_ERROR_IO = 5, KCT_ERROR_NOMEM = 12, KCT_ERROR_ACCESS = 13, KCT_ERROR_EXIST = 17, KCT_ERROR_INVAL = 23, KCT_ERROR_NAMETOOLONG = 36, } kct_error_t; typedef struct { char id[18]; unsigned short version; unsigned int unused; unsigned int offset[KCT_DIR_BLOCKS]; unsigned int chain_offset; } kct_header_t; typedef unsigned char kct_bam_t[256]; typedef struct { unsigned int magic; unsigned int file_crc; unsigned short load_addr; unsigned short start_addr; unsigned int uncompressed_size; unsigned int compressed_size; unsigned int offset; unsigned short machine; unsigned char type; unsigned char unused[4]; char name[KCT_NAME_LENGTH + 1]; } kct_dirent_t; typedef struct { bool auto_start; unsigned short load_addr; unsigned short start_addr; unsigned int size; kct_file_type_t type; kct_machine_type_t machine; } kct_file_props_t; typedef kct_dirent_t kct_dirblock_t[4]; typedef struct { unsigned int link; unsigned char data[252]; } kct_data_t; class KCTDir : public std::list { public: KCTDir(void); virtual ~KCTDir(void); void clear(void); void add(kct_dirent_t *dirent); }; class KCTFile { public: static const unsigned short KCT_VERSION; static const unsigned long BLOCK_SIZE; static const unsigned long HEADER_OFFSET; static const unsigned long BAM_OFFSET; static const unsigned long DIR_BLOCKS; static const unsigned long DIR_BLOCK1_OFFSET; static const unsigned long DIRBLOCK_OFFSET_MASK; static const unsigned long DIRBLOCK_INDEX_MASK; static const unsigned long DIRBLOCK_MAGIC; private: bool _readonly; std::fstream *_f; kct_header_t _header; kct_bam_t _bam; kct_dirblock_t _dirblock; KCTDir _dir; protected: bool header_read(kct_header_t &header, unsigned long offset); void header_write(kct_header_t &header, unsigned long offset); void bam_clear(kct_bam_t &bam); bool bam_block_available(kct_bam_t &bam, long block); void bam_block_free(kct_bam_t &bam, long block); void bam_block_allocate(kct_bam_t &bam, long block); void bam_read(kct_bam_t &bam, unsigned long offset); void bam_write(kct_bam_t &bam, unsigned long offset); unsigned long bam_block_find_free(kct_bam_t &bam); kct_error_t dirblock_clear(kct_dirblock_t &dirblock); kct_error_t dirblock_read(kct_dirblock_t &dirblock, unsigned long offset); kct_error_t dirblock_write(kct_dirblock_t &dirblock, unsigned long offset); kct_error_t dirent_allocate(const char *filename, unsigned short load, unsigned short start, unsigned long len, unsigned long clen, unsigned long crc, unsigned long *offset, kct_file_type_t type, kct_machine_type_t machine); int translate_index(int idx); int find_entry(const char *name); public: KCTFile(void); virtual ~KCTFile(void); const char * type_name(kct_file_type_t type); void list(void); bool is_readonly(void); kct_error_t create(const char *filename); kct_error_t open(const char *filename); kct_error_t close(void); kct_error_t remove(int idx); kct_error_t remove(const char *name); kct_error_t rename(int idx, const char *to); kct_error_t rename(const char *name, const char *to); kct_error_t find(const char *name); kct_error_t write(const char *filename, const unsigned char *buf, unsigned long len, unsigned short load_addr, unsigned short start_addr, kct_file_type_t type, kct_machine_type_t machine = KCT_MACHINE_ALL); std::istream * read(int idx, kct_file_props_t *props = NULL); std::istream * read(const char *name, kct_file_props_t *props = NULL); KCTDir * readdir(void); const char * get_error_string(kct_error_t error); #ifdef DEBUG void test(void); void print_bam(void); void print_block_list(void); #endif /* DEBUG */ }; #endif /* __libtape_format_h */ KCemu-0.5.1/include/libtape/Makefile.in0000644001050700006200000003077611412404771017333 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/libtape DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ kct.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/libtape/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/libtape/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/libdbg/0000755001050700006200000000000011412404771015054 5ustar glaubitzfbedvKCemu-0.5.1/include/libdbg/Makefile.am0000644001050700006200000000012110527416074017107 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ dbg.h KCemu-0.5.1/include/libdbg/dbg.h0000644001050700006200000000667311345001576015776 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __libdbg_dbg_h #define __libdbg_dbg_h #include #include #include #include #include #include struct str_cmp_func : public std::binary_function{ bool operator()(const char *x, const char *y) const { return strcmp(x, y) < 0; } }; class p_map : public std::map { private: char *_name; bool _allow_subkeys; public: p_map(const char *name, bool allow_subkeys); virtual ~p_map(void); const char * get_name(void); void set_allow_subkeys(bool allow_subkeys); bool get_allow_subkeys(void); }; class p_tree { private: p_map *_map; protected: void clear(p_map *map); void dump(std::ostream& os, p_map *map, int level) const; friend std::ostream& operator<< (std::ostream& os, const p_tree& t); public: p_tree(void); virtual ~p_tree(void); void clear(); bool check_path(const char *data); void add(const char *data, bool allow_subkeys); }; class DBG_class { private: static DBG_class *_singleton; p_tree _tree; std::ostream *_o; protected: DBG_class(void); void load_file(const char *filename); public: virtual ~DBG_class(void); static DBG_class * instance(void); void clear(); void load_config(void); void set_output_stream(std::ostream *os); void add_path(const char *path, bool allow_subkeys = false); void print(const char *path, const char *msg); void println(const char *path, const char *msg); void form(const char *path, const char *format ...); bool check(const char *path); friend std::ostream& operator<< (std::ostream& os, const DBG_class &dbg); }; #define DBGI() DBG_class::instance() #define DBG_X(x,f,l) \ do { \ DBGI()->x; \ } while (0) #define DBG_0(x) DBG_X(x,__FILE__,__LINE__) #if DBG_LEVEL > 0 #define DBG_1(x) DBG_X(x,__FILE__,__LINE__) #else #define DBG_1(x) #endif #if DBG_LEVEL > 1 #define DBG_2(x) DBG_X(x,__FILE__,__LINE__) #else #define DBG_2(x) #endif #if DBG_LEVEL > 2 #define DBG_3(x) DBG_X(x,__FILE__,__LINE__) #else #define DBG_3(x) #endif #define DBG(x, y) DBG_##x(y) #define DBG_check(x) (DBGI()->check(x)) #define DBG_add_path(x) do { DBGI()->add_path(x); } while (0) #define DBG_add_path_t(x) do { DBGI()->add_path(x, true); } while (0) #define DBG_print(x,y) do { DBGI()->print(x,y); } while (0) #define DBG_println(x,y) do { DBGI()->println(x,y); } while (0) #define DBG_clear() do { DBGI()->clear(); } while (0) #define DBG_load_config() do { DBGI()->load_config(); } while (0) #endif /* __libdbg_dbg_h */ KCemu-0.5.1/include/libdbg/Makefile.in0000644001050700006200000003077311412404771017133 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/libdbg DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ dbg.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/libdbg/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/libdbg/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/libgtkex/0000755001050700006200000000000011412404771015442 5ustar glaubitzfbedvKCemu-0.5.1/include/libgtkex/Makefile.am0000644001050700006200000000017111340261610017466 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ gtkfilebutton.h \ gtkledline.h \ libgtkex.h KCemu-0.5.1/include/libgtkex/gtkfilebutton.h0000644001050700006200000000431111345001576020474 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __libgtkex_gtkfilebutton_h #define __libgtkex_gtkfilebutton_h #include G_BEGIN_DECLS #define GTK_TYPE_FILEBUTTON (gtk_filebutton_get_type()) #define GTK_FILEBUTTON(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_FILEBUTTON, GtkFilebutton)) #define GTK_FILEBUTTON_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST((obj), GTK_FILEBUTTON, GtkFilebuttonClass)) #define GTK_IS_FILEBUTTON(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_FILEBUTTON)) #define GTK_IS_FILEBUTTON_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((obj), GTK_TYPE_FILEBUTTON)) #define GTK_FILEBUTTON_GET_CLASS (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_FILEBUTTON, GtkFilebuttonClass)) typedef struct _GtkFilebutton GtkFilebutton; typedef struct _GtkFilebuttonClass GtkFilebuttonClass; struct _GtkFilebutton { GtkTable parent; GtkWidget *button_open; GtkWidget *button_clear; GtkWidget *comboboxentry; GtkListStore *store; gchar *filename; gchar *recent_group; guint changed_id; }; struct _GtkFilebuttonClass { GtkTableClass parent_class; void (* filebutton) (GtkFilebutton *filebutton); }; GType gtk_filebutton_get_type(void); GtkWidget *gtk_filebutton_new(const gchar *recent_group); gchar * gtk_filebutton_get_filename(GtkFilebutton *filebutton); void gtk_filebutton_set_recent_group(GtkFilebutton *filebutton, const gchar *recent_group); G_END_DECLS #endif /* __libgtkex_gtkfilebutton_h */KCemu-0.5.1/include/libgtkex/gtkledline.h0000644001050700006200000000343711345001576017745 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __libgtkex_gtkledline_h #define __libgtkex_gtkledline_h #include G_BEGIN_DECLS #define GTK_TYPE_LED_LINE (gtk_led_line_get_type()) #define GTK_LED_LINE(obj) (G_TYPE_CHECK_INSTANCE_CAST((obj), GTK_TYPE_LED_LINE, GtkLedLine)) #define GTK_LED_LINE_CLASS(obj) (G_TYPE_CHECK_CLASS_CAST((obj), GTK_LED_LINE, GtkLedLineClass)) #define GTK_IS_LED_LINE(obj) (G_TYPE_CHECK_INSTANCE_TYPE((obj), GTK_TYPE_LED_LINE)) #define GTK_IS_LED_LINE_CLASS(obj) (G_TYPE_CHECK_CLASS_TYPE((obj), GTK_TYPE_LED_LINE)) #define GTK_LED_LINE_GET_CLASS (G_TYPE_INSTANCE_GET_CLASS((obj), GTK_TYPE_LED_LINE, GtkLedLineClass)) typedef struct _GtkLedLine GtkLedLine; typedef struct _GtkLedLineClass GtkLedLineClass; struct _GtkLedLine { GtkDrawingArea parent; guint spacing; guint number_of_leds; }; struct _GtkLedLineClass { GtkDrawingAreaClass parent_class; }; GtkWidget *gtk_led_line_new(guint number_of_leds); G_END_DECLS #endif /* __libgtkex_gtkledline_h */ KCemu-0.5.1/include/libgtkex/libgtkex.h0000644001050700006200000000175211345001576017432 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __libgtkex_libgtkex_h #define __libgtkex_libgtkex_h #include "gtkledline.h" #include "gtkfilebutton.h" #endif /* __libgtkex_libgtkex_h */ KCemu-0.5.1/include/libgtkex/Makefile.in0000644001050700006200000003105111412404771017507 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/libgtkex DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ gtkfilebutton.h \ gtkledline.h \ libgtkex.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/libgtkex/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/libgtkex/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/cmd/0000755001050700006200000000000011412404770014373 5ustar glaubitzfbedvKCemu-0.5.1/include/cmd/Makefile.am0000644001050700006200000000015410527416074016435 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ cmd.h \ cmdlist.h \ cmdargs.h KCemu-0.5.1/include/cmd/cmdlist.h0000644001050700006200000000422511345001576016210 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __cmd_cmdlist_h #define __cmd_cmdlist_h #define __CMD_COMMAND_SHIFT (16) #define __CMD_VALUE_MASK (0xffff) #define __CMD_TYPE unsigned int #include "cmd/cmdargs.h" #define KCCMD(name,val) (new CMD_Val((__CMD_TYPE)(((KCCMD_##name##_##val) & __CMD_VALUE_MASK) | \ (KCCMD_##name << __CMD_COMMAND_SHIFT)), this)) #define KCCMD_0(name,val) (new CMD_Val((__CMD_TYPE)(((KCCMD_##name##_##val) & __CMD_VALUE_MASK) | \ (KCCMD_##name << __CMD_COMMAND_SHIFT)), 0)) class CMD_Val { public: __CMD_TYPE _type; CMD_Caller *_caller; CMD_Val(__CMD_TYPE type, CMD_Caller *caller) { _type = type; _caller = caller; } }; #define KCCMD_RESET (0x0001) #define KCCMD_RESET_0 (0x0000) #define KCCMD_RESET_RESET (0x0001) #define KCCMD_RESET_POWER_ON (0x0002) #define KCCMD_QUIT (0x0002) #define KCCMD_QUIT_0 (0x0000) #define KCCMD_LOAD (0x0003) #define KCCMD_LOAD_0 (0x0000) #define KCCMD_LOAD_IMAGE (0x0001) #define KCCMD_LOAD_IMAGE_OK (0x0002) /* * User Interface Callbacks */ /***** * this one is used to fetch a filename from the user interface * by setting the 'file-name' argument */ #define KCCMD_UI_BROWSE (0x0101) #define KCCMD_UI_BROWSE_0 (0x0000) #endif /* __cmd_list_h */ KCemu-0.5.1/include/cmd/cmdargs.h0000644001050700006200000001035311345001576016170 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __cmd_cmdargs_h #define __cmd_cmdargs_h #include class CMD_Change_Listener { public: CMD_Change_Listener(void) {} virtual ~CMD_Change_Listener(void) {} virtual void cmd_args_changed(void) = 0; }; typedef unsigned int CMD_Context; typedef enum { CMD_ARG_LONG, CMD_ARG_STRING, } CMD_Arg_Type; class CMD; class CMD_Args; class CMD_ListEntry { private: CMD *_cmd; CMD_Context _context; char *_name; public: CMD_ListEntry(CMD *cmd, CMD_Context context, const char *name = 0); virtual ~CMD_ListEntry(void); CMD * get_cmd(void); CMD_Context get_context(void); const char * get_name(void); }; class CMD_List { private: typedef std::listcmd_list_t; public: typedef cmd_list_t::iterator iterator; private: char *_name; cmd_list_t *_cmd_list; public: CMD_List(const char *name); virtual ~CMD_List(void); virtual const char * get_name(); virtual void add_cmd(CMD *cmd, CMD_Context context); virtual void remove_cmd(CMD *cmd, CMD_Context context); virtual void execute(CMD_Args *args = 0); virtual void dump(void); }; class CMD_Arg { protected: char *_name; CMD_Arg_Type _type; union { long v_long; char *v_string; } _val; bool _value_set; public: CMD_Arg(const char *name, CMD_Arg_Type type); virtual ~CMD_Arg(void); CMD_Arg_Type get_type(void); const char * get_name(void); virtual void set_long_arg(long value); virtual void set_string_arg(const char *value); virtual void set_pointer_arg(void *ptr); virtual long get_long_arg(void); virtual const char * get_string_arg(void); virtual void * get_pointer_arg(void); }; class CMD_Args { private: typedef std::list arg_list_t; typedef std::list cl_list_t; typedef std::list cb_list_t; public: typedef cl_list_t::iterator cl_iterator; typedef cb_list_t::iterator cb_iterator; typedef arg_list_t::iterator arg_iterator; private: void *_user_data; cl_list_t _cl_list; cb_list_t _cb_list; arg_list_t _arg_list; public: CMD_Args(void); virtual ~CMD_Args(void); protected: virtual void notify_change_listeners(void); public: CMD_Arg * lookup(const char *name); virtual CMD_Args * set_long_arg(const char *name, long value); virtual CMD_Args * set_string_arg(const char *name, const char *value); virtual CMD_Args * set_pointer_arg(const char *name, void *value); virtual CMD_Args * add_change_listener(CMD_Change_Listener *listener); virtual long get_long_arg(const char *name); virtual const char * get_string_arg(const char *name); virtual void * get_pointer_arg(const char *name); virtual bool has_arg(const char *name); virtual void add_callback(const char *name, CMD *cmd, CMD_Context context); virtual void remove_callback(const char *name, CMD *cmd, CMD_Context context); virtual void call_callbacks(const char *name); virtual void set_user_data(void *data); virtual void * get_user_data(void); virtual void dump(const char *text); }; class CMD_Caller { private: CMD_Args *_args; public: CMD_Caller(CMD_Args *args = 0) { _args = args; } virtual ~CMD_Caller(void) {} virtual CMD_Args * cmd_caller_get_args(void) { return _args; } virtual void cmd_caller_set_args(CMD_Args *args) { _args = args; } }; #endif /* __cmd_cmdargs_h */ KCemu-0.5.1/include/cmd/cmd.h0000644001050700006200000000467011345001576015320 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #ifndef __cmd_cmd_h #define __cmd_cmd_h #include #include #include "cmd/cmdargs.h" struct force_link { struct force_link *f; class CMD *t; }; #define __force_link(s) \ static s __##s; \ static struct force_link force_##s = { (struct force_link *)&force_##s, (CMD *)&__##s }; class CMD { private: char *_name; public: CMD(const char *name); virtual ~CMD(void); virtual const char * get_name(void); virtual void register_cmd(const char *list_name, CMD_Context context = 0); virtual void unregister_cmd(const char *list_name, CMD_Context context = 0); virtual void execute(CMD_Args *args, CMD_Context context); }; class CMD_Repository { private: static CMD_Repository *_singleton; typedef std::listcmd_llist_t; public: typedef cmd_llist_t::iterator iterator; private: cmd_llist_t *_cmd_llist; protected: CMD_Repository(void); virtual ~CMD_Repository(void); public: static CMD_Repository * instance(void); virtual void add_cmd(CMD *cmd, const char *list_name, CMD_Context context); virtual void remove_cmd(CMD *cmd, const char *list_name, CMD_Context context); virtual void execute(const char *list_name, CMD_Args *args = 0); virtual void dump(void); }; #define CMD_EXEC(list) \ CMD_Repository::instance()->execute(list); #define CMD_EXEC_ARGS(list,args) \ CMD_Repository::instance()->execute(list,args); #endif /* __cmd_cmd_h */ KCemu-0.5.1/include/cmd/Makefile.in0000644001050700006200000003101511412404770016440 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include/cmd DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ cmd.h \ cmdlist.h \ cmdargs.h all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/cmd/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/cmd/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/include/Makefile.in0000644001050700006200000004715411412404770015710 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = include DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = kc cmd getopt fileio libdbg libtape libdisk libaudio libgtkex ui sys all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu include/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu include/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/images/0000755001050700006200000000000011412404770013452 5ustar glaubitzfbedvKCemu-0.5.1/images/window-copying.png0000644001050700006200000000410211317574416017143 0ustar glaubitzfbedvPNG  IHDR #ꦷbKGD pHYsHHFk>IDATh{LgsA侠0Y@KdEk더jYMԮ?Jjհq5ZBDH ֊buAr/oaAnIN&9yD$]hDmp_wZ֩/% IsNt49&($D"HK;ݏxNt?!5H(5|q}HMj}ϋ:{33VsKK͘kىO~Frڹ{L&EJȕ˥C²#r\79(m5RM}H ni3tLg{,[ֲ:ujD#"cct1VVa"5d8|8׫r/X'D"Y&ʮʮx{kj[Ymh< t$uk Y~KE*εm5Ԅ_FG_*አ]܇uq B[pBVة}lVV &H0ED_jgo}H$S'CMV_Еӽ3NFn_UQvC  'rNV577 5(bb]=C/Bat]a4{^d(;m2֯  EP5`:lZj:<6mI'\M0ilgӸPMpLy'>ZWFhl灵B6Zq:zTe_YT 0 <ҟ?K3/_Rr9T^pMů'j*& X^= t1bM )M>p'>w֏|g=T׎(뾝~~DL7ò@}J )$(A^&KQ#ݣJ((˴_L)s4e4t^h3I+$Au*wjj<^0*L~ T BcEȽz$)* KQg c@ќ|__TmУO[N><f$ ]B gg|W]'ć 'yf fi5E4/cGsuӗLYA@LRA" $ض JLBꦺԁxǷP SځO'rq:$b/iUΦKQPl~Բ bCA "K$;N9΂,r) f-j-L )aj Bf-Z(QQ2JoE9-/R ++W $34Ƞ&VxMBvw5ASmojA[}w3|.:.x^Ntttxfs<3, ОU mU ܧAb6]oӟ33T T QKKp뉷AQ)`!~!aQNBlGs- XΟJ;Ǝ H) $_;Dw(!SnGˑDe[22n <_p:|wFBF?P%>FRc22PeP#3`(2j{iOdh> 4;'s37I~{ 5 kii1o>u!KCMt}uF迅v@KKocRYrEZ[H?{\ \ZZ^ϋkUK.5Ģ`֌9D{DHB`Y޽uǸ}+W[nX> 100 1 10 1 1 65536 1 256 100 1 10 100 1 10 65535 1 256 65535 1 256 KCemu: Save Memory Dump mouse True vertical True 2 0 etched-out True True 0 6 Save Memory Dump 0 True 4 4 window-disk.png False 1 False 0 True 4 4 6 6 6 True False False Automatically scroll to start address if the address is changed. False True True gtk-jump-to 5 6 1 2 True False False Automatically scroll to end address if the address is changed. False True True gtk-jump-to 5 6 2 3 True 5 6 3 4 True 0 End address: 2 3 GTK_FILL True 0 Start address: 1 2 GTK_FILL True dec 4 5 3 4 True hex 2 3 3 4 True 1 adjustment1 10 True 3 4 3 4 GTK_FILL True True Size of the memory dump in bytes. 1 adjustment2 10 1 2 3 4 GTK_FILL True 0 Length: 3 4 GTK_FILL 480 200 True True automatic in True True 1 1 False 2 2 False False 6 True 0 hex 2 3 2 3 True 0 hex 2 3 1 2 True 0 dec 4 5 2 3 True 0 dec 4 5 1 2 True Automatically scroll to start address if the address is changed. 1 adjustment3 10 True 3 4 2 3 True 1 adjustment4 10 True 3 4 1 2 True True End address of the memory area to save. The byte at the given address is included in the memory dump. 1 adjustment5 10 1 2 2 3 True True Start address of the memory area to save. 1 adjustment6 10 1 2 1 2 1 True False False 4 2 True 2 6 end gtk-help True True False True False False 0 gtk-close True True False True False False 1 gtk-refresh True True False True False False 2 gtk-save True True True True False False 3 False False 3 KCemu-0.5.1/images/icon-pcm.png0000644001050700006200000000251011131675406015667 0ustar glaubitzfbedvPNG  IHDRĴl;sRGBIDAT8EoW?x<8NbUXo= 8_y_sO11ք!1:3!c$b6XPJAdycO\zǕ@Aysk' <1Er*\*;D,*$%e%Hooh";,@9PB%)&J.TL$8@'YR }w` foS} )Z GFLIIq) KW}AizJ'*:ϔ&?RA"!Aze-Sd4D>i,}UBbOj~5,fF5ftsBV;x2F IA2,(OtQՂbАyR .E f!R"̴n:27ɣSlLS?$-&z;fx,!:o[cp}7߻իbf|nv<789,CM2m տ]cx0jL 698'"?<7!b`w r9G*R)쏷 MM,7#_ܙSe<ͽ. V )OTVXdTϸ ^ӟl6_>LܷzKG/bhWeٛŬzvqVgrNpIENDB`KCemu-0.5.1/images/logo-theora_org.png0000644001050700006200000001770511340261610017253 0ustar glaubitzfbedvPNG  IHDR4Z/sRGB pHYs  jIDATx\wxϙ%d{B ^ F墂(FDĂzAċEiZJ` !P${6v?&YM~|Oއg3s̙{ BI"d2͘1III}"H"|oJ$A=n8qLL̔)S Bvt!IEQ !VuϞ=2lٲeپO=5qXAv%\v[oŲd:qTBº ck"r⿑ ל͛7<zW7n3bd/pO:tLW+.c Ǚ3g͛7GE? x'_Lg.F}%Њ+֮][PP4gΜL)}zM;rz˖]B fͺqƂ N83n;uv β_}\EqE;ex≔4x Έ)@0D1ZF3W_vk3D}G;4>>ܹs ~~͚9CNzwRjLɈ %Ҙ`D!nfYֳgt=%I8;wܢEF=uUu5jXrp/f/A#^&`6 M>:Vf9╡C!y]=;Y]v͟??../ZmS_~AFW/ycdﯪRZF."!!0Uƺ=ݭp͊ukR1NE!B0 'O ?[ts]+0Q@BDAf75X? |9o^۷_W;M=6 ӧ CV椌tOl|. Q`K AEHD=W z{y*U}B=< NI.to`'ͼiӦŋWTTYK jHz ?BLւT-Hc\K״*~Z&4VMHR |-qw}V+*9sݺķmߔw}7//OG>#Fe3g?<qk͇{7@kp#?g۰R%6;b UC 6TrJe)'9"qϨ/acƌׯ_,Vuƌ͜9;sǼ?uw$smHQ\?J0r,V#pHV ~{=_?~%sh'BT#H;inn^|Çw E'O޸qc@@[]]~ť|4K " xEUOy{ 哟X@Q%!\*W/  }|0O&Ys`[ Z$0 ӷo߀.܁̚5bܹܼbſ|WQr(2j`" -7M S"-(LzX_X.ZukTЄ'b@ߑ˧Շ頵zb!Gv7kXA`hÓ'O 7 x"""~E޹{葃mYflZBDi4RI u׮uad) e-&i_\Y]A9RC()/9va:<'OC:tZpAws]@'V8N̠4g0"QEv+qپC gYvɒ}>iO+5H ,}| n;Ψ@D AZ-E@hQ=ؼ}r՟w3cZʛx\J{TO"DZg <pѡC=0}O Jǝc&0J܌BAڇ ]{_0BjJ͛7~ !4EQ&Mjl4xtӄ'{:('SKoe|Cu˯'z''D׉M@Ic" "h?a*c>K*jy H,G P[<0XZ JQ ̏>;vddd0o?q7|k}1>t/_l6g̘a2rss~{_~vںumt隚vڥjJKK/^>vXv^__رʘ .dpPIIÇ]\\Ο?ͲWllFiKUd7!f}[ΦEY*J$FEBժH$HEfycIoh;&a@HUN׍EUM۽{wUUU~k1ƍ0`ccc}}}{kZIqqqg4hЈ#^n:LH uVI.{=q^^ޛo#UV ]T}zb{Nrt:h4c6m_3fҤI3g,..pBkqbb3g&M$)2dHxx[>,iիWt)Sh4\n4J .^Fg!d4{5k֔{Νz(&&fƍuuuorrrqqq||BiZ.6,222---;;c,ɂl6`󋉉YbEll,deeS4aXZmhhR!BTXM! " "Pj !RQ _XNl#)2hB5AH!-ED&oc‡ڤIcn{xpcaƏ%%%/5<ϋj===PYYnݺAڥMR}煅۷ow\M3gJ555xBaz}uuuKKKcz-əx=T*sh㸨(\1kY]]][[V(߿ccc}}_-u Ar_E@A8 qJ߶@BE*>' Aƚ>fB{!J&LM2B`P!f@P-Z\NDӴuxmyyyEE8p`۶mKLL/)tܧOϯqrMI\\L"8fWBooo+00PP‘!d[,)֭˲ 8^HۣWBMױ[Yn\A}+Yzm[7~Ö=DmQYח8"P\ Bƈ\.fYVPtAQ0 EQ-uLQEl6etN6ldq[ZZjj4qC%WNJrX` 3# 654"@{P/[rM""DN,\ ,RHjFJ 3P% B헭41"ADe =V]-|*WW &8zW:9ldddJJJnnnnKS.GDDRRR"""nn"[Y WʢX"0Xn('ImKh"XyVj>CJ oA5"FD߼dIg ?ܹscccCBBwIO~21q܍7$mBZY SFEE͜9SғR!iZ+++;dGR)YNnnncƌX, 477iZ gg|-7mJA#ǺFEH=91BX,\M-@ oݢ!Ǩe UcUt5ͰfЖl, DQQSgޙ–߿nڧUP(.^(4_jJIgYX,}'mnݺ?noc{(4}ƍ+`htuu4hNcp:)w 4?7 H KVql&--(!BDK)&ʫG+¦V˜mkl}^`kh[wjUTVޜ>u\sNoo9^{Ut``N+++?3g{j67k,I󋊊KQꚚ$_K.Iam@n$n+))0Lp,#doھZG?oޡOrzLFZ㊊[ɄUȆ#zmYkYo̷6bZ j-=3IԳR V)sLHH;9"##+aNْ'믿ލjs΍7l6KIFFFN8f͚aoVK;==]EBDSP*9ڿ#6&v +_~%77cbCZk(}|'P(_@Y ScEbR1d !Uǫ< \qJnެoZuh۶ Cuuu@@@LL̷~:Gnnn}Y\\ɓ'.]*9,v.V[lqssaϞ=ҫ,gڴi(W^y%))iݻ$ .?!cŦQ7-((ҥK_~СC[)JKK;ykFވ0^EEE/_իfOII9rGk Hu$m]MMMVVVYYVUT*=""BZ yU땗zsE/&\!eUzƋT5ޜҽ$*6Z 5=u(o@PDAY,嗓 Yݻw  bŊ?!NNN[f [n=}KJJL&SddwNNҥK_β_pp0XP 2䧟~Rj:66~PTҍFctttRRӧΞ?!CΝ+9t˗/OMM*9QQQ BrJٳg%hSSSWXvDSO|!$X[ rn޼%u:uJ׏1(GvZJJ qcVV%o_Z,Ң^ߺuw(B7NgԈA~D夦@#gY37m駟>stXudee۷OΞ=j&$$ W^yᄏpႛdy)%%%566FDDH1S0??֭999*jܸqG/'OlDSSS>} 4`Νiiiaĉׯ_߱cJ;w(`ύ t=.7o$0@BW&?!$˥wv',RdY8Q9+((3fLk:_rڪ/<;>|h oΎ}55'ginB̙ӣGEޚ&;P9}2N$x`B4`A_!PI_Dy>??ƍ>ۅi//O)BE"u`5KSڢ%JΧe*k/_8pٳCCC;c:,-8EGwv':I'S{.AXTDGj_>pEEE޽Tl.4ܤ*f w_S&H:u92NNȰ6•^Z5x֮YTQQ1vW_}z9l}帆ź%v8Mr{89|<444HIXЅ?,Gѹ?v_37dYAZ5N{33Z'N_PiQJWnqXFR)bH0 fsFFjyW*woܸm?rN4\y!CF^v-==}ƍ<۷O>?B(_zV`/_|СױOe3fI!dkV,߻'1{Mݻw_p_|1~w{KNU{fffk$R=..nEVs䙱>pL=Ս,N\ȣ>l2Q̙3bĈٳgw}{YYY/^lllh4>r3g>FjfܸGE @bFDӰz={t_=>> uavoIb"_&&b?^0f0cضl=2 صkɓ{V-[/<>UgDi^q _X'ﶟ /^ີ7 *-#Gܹs;v0_`W\:PժR,Ya-/ts?^?NBIIENDB`KCemu-0.5.1/images/module.glade0000644001050700006200000001140611340261610015731 0ustar glaubitzfbedv KCemu: Module mouse True vertical True 0 etched-out True True 0 Module 6 0 True 4 4 window-module.png False 1 False 0 True 2 vertical 6 1 True False 4 2 True 4 end gtk-help True True True False True False False 0 gtk-close True True True False True False False 1 False 3 KCemu-0.5.1/images/window-help.png0000644001050700006200000000655411317574416016440 0ustar glaubitzfbedvPNG  IHDR #ꦷbKGD pHYsHHFk> IDAThYkTT3sg. b+H1 "CL.5KFԼ|6$%j\P b (* 0qgDOYTt{kDs wSeT=UN>a{y%4d1,!6YC6vwGk42nwߑY)Ϭ8r`|qȁ#;bb?QrV` @DFi)8WUu>tЄ2'&v=s 16HOII4); $"|SNMcտUI'墓CX{󑀶DͮXA^gd"WWfאO,2ZŤE?Hۻv>v%;KzroAqx0 }ZO}|4I2Lfŋ;^%fRۗuQd-Wd-II?JBۛH흹#(fLDƕHV7={ W;c#Fw|L+֍)򭣨K5?{xD=;=ӓR?RٳI7-Zz{S%$?Ow!Li|$ kd 6ꛭ7EJER88d;{oH"L@,]J-OJ8e wᄈs0ޮ۵Rb}j .Q5Mox+!o^fq3RYS ZHSǧ7FL88={$T=u.)TzW|<9HH6ÛcV9` gi)UV 5zl-h սMUW77yn}S67@1]N1n5@sNgcs,xc3rfSh~ OW Y8)zk<Ѓ1З)i-5fOK:AQ'K7|4Vy]a|'ˋ'@cqXv;]s8_Sq]@ ~_/L,vu=?`&֒%)dL@IH|S-)A7ro}}!(Ə56=הg &/V tk:gtkנG\dse2 JR,PYzR@}q o=2IkOhoO>~ӿњC TI+5Hڨ(bYݼs5&t>&`=$Mj/<>*3DXWY[4 p?n2ąb`| p׽^w@.!@&}~I"\-6l~H|&2 = =w8rصkڴe,1I+Ο >PH;';0N5NM@s͝7|Z ^ (d浆׀ @,g?5ltq )믇b6>j W[u͞M00j̱:nu1plg7>kY,D:'.8qDB^^ǩ;Nݺ.uK@L={dY06 ޼n}o`ck 7Zu[Oyl έ[;~.T@xT( +u=:YCוޱ+v.tMo= H' tq*ǩTL89X, Õn'%,i̫<#crR]G CR yM||| &wm|@g1z:kpf^#ljn|t$ R|9`f 僦}S^M]C&Kduƿ c[u5ZÚ_j zt7k!d2L&0TRg%L.'`pv8dMx#h6F`h(x$a^bNǁimtmjc^5`\d\ r3QpF0ms[-m-@Bp4q |}(iÖ|aG !%2"D0\1\T٪Z@p((UrV(%ŷlLZi`Rw@WVm讷l2E^?R9C7YEKŗR 0sSp)` l# k@r*Pp]x@n Yc4{^l8U\? fE,IFY#59'I : E'@K͒b$Z!рD-l+*'GĨOFFlk腖E _hQ*}Vc|x8oU*-S(++sm>F+'|IENDB`KCemu-0.5.1/images/vdip.glade0000644001050700006200000002562711340261610015420 0ustar glaubitzfbedv KCemu: Vinculum USB mouse True vertical True 2 0 etched-out True True 0 6 Vinculum USB 0 True 4 4 window-disk.png False 1 False 0 True 4 2 4 2 2 True 0 4 Slot 1: GTK_FILL True 0 4 Slot 2: 1 2 GTK_FILL True 1 2 GTK_FILL True False 1 2 1 2 GTK_FILL GTK_FILL True True False True gtk-open 2 3 GTK_FILL True False True False True gtk-open 2 3 1 2 GTK_FILL True True False True gtk-close 3 4 GTK_FILL True False True False True gtk-close 3 4 1 2 GTK_FILL 1 True False False 4 2 True 2 6 end gtk-help True True True False True False False 0 gtk-close True True True False True False False 1 False False 3 KCemu-0.5.1/images/media-play.png0000644001050700006200000000302111317574416016207 0ustar glaubitzfbedvPNG  IHDR$xbKGD pHYsHHFk>IDATH՗{HSmǟsiC l J6,5J$C( A2TZҥd422LMfQޚy9ky;y~|!zH`@@ƒ$+Flht4CQ MQ7"L,,^nl^OG>Hrρ:tAb**| CC%Iwc4\D ]V{ҍ/B'IdAy99##&%ae=z_"hHaDDH!p8;gԹa@,/wu_6jIb͛;c;->cVs6)),䅢xGS We_d_ D6H.a'.,υ |/_arDgHN nvv^C~P(*mlf2'|}'F`dd O޻'>IQF{튜H_(f)"b?YP]aܽ+ 1^^~۷IuDkWV4ɻY> @ԵkL&‚\E~O`X^^cDŽB|ԿZz^=y") 34` FyAİM_߰ͅ BN_ 7O@,q,;%4XLSn~|EvQaZ$-^].ӵs-,ZVVj.J7 dfDQ}=lNVX{X\K5𜶳Ʉp2582d"*;w@036Ѭ=*l вrbFhۇsveƤѸ1*kjJ[RSokq;"U;0ODDBZ;wARRw4eȈJ5 # *r9#`D~=;978.*(E.. < ``wclmcvbI@>8h@zcUتk)(ZM5aa UUA}{x88noӦ@׳@>= '١YN>j\O[Zv-9s!)2snZPa0XXi`67s¬8aϟݻc?g@̥IENDB`KCemu-0.5.1/images/kcemu-winicon_48x48.png0000644001050700006200000000220611345413765017620 0ustar glaubitzfbedvPNG  IHDR00WbKGD pHYs  tIME 2[IDATh?lu?IҴ$m:R˂0F*TqX@Bt`c`@" 0 Imb)iWpcc|%'pw{&&UFuU)zsf<(q7C*@w`#u]_>nuLfLtpdG+q)wMƣ'ow |SIkUu]'Hnɭ.@5:@]BKhԻ[ѲSSSZKo=۰} H,}^y5)\+BLm@invf e_O=;>6Vշ`CUjM~x7bQ.(o37i#I9K|lnsn?&/hdr`SQ;g*w 5Qνk<=:"2m(qs>T#+ҷ7*fҍ2S wVɒȐ;w[o.a9 M[z7QM K%5fREƿ፳!B5aM };l1=W7</IHTx*x/ɔKѷ*)aWHE~{/ >l+U{w}oVLG{2f.I 'ﷅW*y"U,܇LƎ92' (D|ө p ^ũMΜ867/J9,VEU[gVa+.L =>hXtTGvzNxpbChFSWn b`<ФBX{ųi?l6bvtVilyw \l C>W4Ͽ=?70S#bMp-p(4O?gҹ |d}{7n=!Zɔ_~Vo1'=man~jos R8wzUIENDB`KCemu-0.5.1/images/icon-poly880.png0000644001050700006200000000254611131675406016344 0ustar glaubitzfbedvPNG  IHDRĴl;sRGB IDAT8=Mg{d2d2i&iH(i -آ`i҅m R)]PX(+.`%."hڄ!њIfLf޹_ŝfsy9w?b fF RL0͈ DD{u;m{{ǟ8 8ƹ"X1JQ V J1RJ|ü9'WWgassF"䚺v{ GCbĐНBP-R.ٙiz᛿yNχ7_{ 7R1äoMbbfF)3cbX S.d!rbmsשcmF5CElP`VФ~ AD4M B" _M 5]x]nBGx܏+ B.DH)Rg I}&w\;Xp  E 0+Nǀ1Ȗ.M0F׳?o3"L-ef/؁*9ls~x7gҫ;-Z]$d zַ<|>"﶐klRp)bs&Lp@* }hTE#%)~$  /#/-JSų:S{;2 s٣+EMȂ<9%@;4!Ս+2{pvNs яRa9+cKM fWNSlCBG?/`UB`8L,ڃk,[;73q/S}7f|GQx@. V )%(úrj~̥wzټcX}Ԙ#'N{ԩv{/bGEۇbcH_SU)6s_cDDĦ{ZUSIENDB`KCemu-0.5.1/images/icon-vcs80.png0000644001050700006200000000254511131675406016063 0ustar glaubitzfbedvPNG  IHDRĴl;sRGBIDAT8=Mwwt&T UFn\X آ +HA]AP P7"V.ԏE,M⤝;37;x\܉svs<#Y+/]0a\GbTT3! K51Q'1cճ|QeTSs8l1&PMF:b Id""wS e,9+jcs=WEIgw./<>q#!ѐ=!*fӁY39gDKuNgot*+k8fb$bLcrV h?[Ĥtu c`&cGdANE(]E QXQe:TޫwzLp{p@ɚW,uJc]NcFR> ?A3|mo(jb"FE6؈oP<<#̄ONr*|BX&N<-EUhJǔ ~FDݻ6Ov:<;;|)Jb[lw|g}EquJ%p#]ZWgϏ_vMNQ@ B1 (xs>)AJLaRcs۞!X)q d9v;0B1UV<ꄫcBMbD;e7opJ>-% t)T=?A(C cߑPJ  o?M&bOEFHyۗ:~elXli&a4A^%bOhYm_^iTKSSsK\pw:#ssP*}yeoVBB.m_AkN7sh6m酰wru[wX>y'B>bLg\Ä'wm̽)X^9umO1t#/+o )o}ءCL];ŪXqF;|j>,NP4sO][%H_B:x2Y`ذqkLӣNi7>:;w;lI!"^pڻ=6wڤWm PL@ Wuel׽Pp|ךXt%2 =ILW.VjT4>׶T!O^yk$BR 0'sWNx|rbjn'=|'1`[ "N )HU\EUxΠi>.>6˙^ko]$l; 剅8~b%`L !k%Ƙk8N}E1hGyO\8s<~8!8 cp YBżO;uҁ~vфn̦k/}KŖkV2{("+j\P;JQ6n$/c>4~c_E34pCۧ_BSj3[嫖ݸxuG/MXvfʕ˯G\cKmtF!cubÆcR &I:(s^[Z)8C}B&װO1kO^;._+hO`vokꡡ'ɣ+rc,,"/I)[dFV)zO,}pd`N =gk):y0e^fVR13NwE71&;= RJE]\~TL3(!Qۨǧ KړGG.O- UR4CBB0|KRe)\oPwVi aY= ㄫ7\<#-7B0TA"BRJ67_X婏9p@_ZßZ/WŊCSj$8znñV:otPsw_P(דiݑ6r*W9T%3{ȳG+WfPCeXQ+I-F ɚ#L;sjmfYպcNtEfUm[ki\suWk[=Be) NBޟK w_E&z_Wz/ e;NU.&f }JNF(Ǫ 骲ҥrp)KXcP")@@P,2um3lx~c3#CSsKRl)e/\2qㅯ>ǎwH0H(@mtMJRHL57K uC7mm9 B0 0 E6qurloϯ=L,,b> MU>8{-?{X> ŭhDr+EK@Pf 蝸#W| t ~ck NŴ- m} aZ|_{=g/}261u3ݝÇ6k-"7[z(Azj3Ljf]Zk%^|cGmLRm}" R O6|p߷WVW&.OKw`g.C[X\"䌂Q4TU:v)! ܠVwAptJ!mPfĴDO_)uf{kCoP>}Z>M7(F1O[0øY(MMl;JY\urz6 0AJ!zDg SjK3csצc=4tnjB) 7iI-U^_JekZ_iNR^*aH!+*w\M% 7^gyk Udz gW=.@H4Wg\?|lt#;q}vs{-!T]Kg?xd8orv)e6Um"}I:e>-!aMʶ !wxQX7_x#GG{.L* \3cY^"ϑjm1BH*Yf+ծB8S VQKSg>;yxVkn[v gtBpiafc1XŮN° -OJ)EO_;26af,URP(635_t҆2@*a~Op-|[z[kyg:QqBC#֩Hčo} Z8НI1Ɲ\~*#9385(X)Uu{P\0\ãO^/W-Lhbgmе#&\.[+BRfS.J50/?}Rl,@%1M1u+W+zԵ"wwesEqƘrDl7xoJYFȞ-,, )jm;YQT*ij*6[x̕JAʴx&t'ޥWjթ:U4-š4z|t/!)׬S_LK'mUKم|1?Ѳ\_$fR1bm_ÎޥoTW| RԡNhw>M[|bn;3E6IRZ"4 *:LH(Ɔ+zVZۗ!K]o~GgD:gS goSG=|mP܉1zC1k sSckb)W1LiW/&!e*S4ʕhbCZ3Dֵ*߸GLa%zJ%%H)8gRP#!/M5J;-!BpU1RA.|_~Rq=Fk&؁J_Ɔ_g/yxRJB0!]Lnl81SX]DŽ)L1Eۉ% /0 zr\Z:N 㘮t\s8v40F1JdCbf0Tr Qׂ|oGu E$ C=9/%gh/RCMeّO* 4¥r\-ˉg4pt2>[\.lQŘfBwzs2:!THiYJv Cә˚i3@)%/PetܓRC\+ms9gtr#TǦ sK-J0„q\70a[9vڻʖTPXU.Mޘ_;:;3؊/UX/H0NjO6ѝ ;qêGB!Θ s |fvcP;Aºpi&S Hsw?ZT0][*/T_`6TdUٚ+B\q nys'ׇӝ31M }ۮTkޡS]9B '8We`؍ɹ )!*:MT}{/w)!0tl|2S>߲ OT]~lss8f?~~z_W~og_G#e& W02A3%$CpR[v뱆:a8Fb'UK={4N C[Ta@4E36"L0""qQލ6­}]$~y>?JIENDB`KCemu-0.5.1/images/logo-libsndfile.png0000644001050700006200000003074310527416074017246 0ustar glaubitzfbedvPNG  IHDR@ pHYs  tIME  ; IDATxY\Yr&}~{F.L ľPJvܺMfdzd!̏~BDklҽn{']3~ZA` xgǽ/!{] >풽 Gs`;9g{&WOs )a pe0(G"/0yDBřA3RG  ?? ʇK:b$Z$vG  !R iO@n?3UBL8#CPCS {tY(φ!Л@d0 A,F` `w"r$CD@Xf7%0 IG JƔB XHыǎ!H ޘR"3 /(’ fFbCX`$!!bX3 +R !F”HRX ,Q"`-6h}%`/b㔄J #2>/b%0$#L`dtQG#"%+jCX Ab $S0U E\G\eBJRT*AMjYJTiq"R"dH iM{j}U3*-~ɓe{Iыb eJR1 `:4)o0B`R#d $A3 ۦޓ0Izca*STsXa!2:,J,T@R*q&B0tO_ so}o- w %20"]~](bէ''"w77ndXJݹ1lNl|ln.wY\? I2ajޗ).OmwZ)=X;=+\3v_1XT*ykׇvb6eAt7[[ĉ}o|4LT^ҾIoZ;o|ђ Sc 2f0~<%KvG.3ax '1"UJR;ur_u'Kvko6 U1c&N]xW^~qlfmmNZj]hp(ܾ(JzrR2o|ejwK||O Q"(#A3$\3IAFawf/0K"0$ jyE592"c 0_W_ҹ g(csP0ۍM^> ?{L$+WZi:8o@YRww+_j:?oȲAW; }3g G)jȡH,( 06BJs^; 226np@ d; }ǝ….IPp矺wsiBʗaJR2ZF_;sԹsw$ !\?x|PHGSk"08)rJn>Mw"ɒ%˭Vof)feo;˯ͽ#Iŵh}&;< cӭl/ɰ0Jd pT`fY) |6F%J +A$IvF +🈌H;t׮v+IYA/0\ի $ f>5N'"N-11vaPCK`!ǚ q0,Md^ܧ^bQ&W/-ݥ߽HWMz\Tb=ZÌH:-`)-"@EuhH#c(UaL B Ljhow_.YT1s&T@M>U^^ypvj֏p Ǔ`, 2rM\˕Ն 흝^CC*Ɯ4ɺȅ8.;weq14"(RZmj|HWIIo{g]jj#|4+U3t>I~j{j'jPȱ{'K;5}r}&J$e٠(.&W{-``čCޘl6ť@Ҭjt;kYZ M >{E Gqсϝ9wnYO|pKD\>!RX.5gzJw.[Y~)I Ri8i0hO4Ǐq{{ݿLӾHqayrꙙ}Ը`s+kk?T#T cHMܸHI<9wӧ?_uo7Ԫ~ʀ`rj{C5ۜ9h6x{׼g=qqq ]݁ O^P0)cS8pggfq_~wΝ?V lh<Q5#Eg;?Oő,Y0{0paΞ2ggӗ.M`%f )pҌG^;u /;4ר++?a$D*㓧^x^:45G豩ߞu}r{DE"c΍s٩ɨt'ODʕ8}mpBiw$JS//޻wA8csw̓v-ɒ&N)0ٿWٗ_/WB'GUϟmiu)2uLՒ'"gFkY MN`֛${z@@S/bߺqs\;pgC3؃j]AnHM\-&g~+9vŧGNbG:R=}湣GOaŕÇǽ6尔RhN:gN\Z9Y!L|CrR,k;uĕygZi^3|驒 "0jtJƳ/ʫμvgۭNSSS_+0 ow-ཋYHGG}Z4'R@0$HI&ի˕Ծ}O]|3v:V""_}u Ͽޜ_G:JECO8y߹tB lܺ_z_x}7Mr5²z6-޽gg+h$ + $x< a$#C(7o~pN'N Tc~oy8p[WcӧOVkݮY׬OvaDF1\Y,-++ccE)aEh $vk^]PzfOzKԶXjJ$RTg7/ݻsy0XT.OsR!8>z|m}NVfAl?0wltf0"=vkwox'reW?jC3)05r(e+a4%nFUZ⽍zMݒc~ww=KN*7[^sϝ8qqgN!R3Bϵ (Z}v'av?Omv=ppFZLťsم;W]gǛɪȘHQ4}ȡ͍ҽ\*`sQYٙgZj6ȨT=pD39MqM)HT;z gæ8W Mf(v31N)Gnl촒Sg:~צ 3d9Zl0LU3uNA!?0d(fFS^~`T/81ϿCxjksw@*X#=oGޟW33S5zA#>b 0ÇSyK>'K"eFVT7=.$rIO;P&RUecNPֳ,sDkgugw~EJƜDLsmm-\8ҴsjfF)hF[[;w;~"J*k)&{0$df@VZ[^:SSssŸ{ᄋ~J!F2L 0&Kdk$~B^y0uO=} "&;-#ï}'|̃Ng+MC'aViP*Jsr<\hD KG>AcG[N8l_+>wQ2M{kji3'R)8R)=J ƚosl#˘{]r΅ytb7X{gA}U1y>:L5 0<7g{w~[of3g`ɠo{k}%"K@ #ʟZMSfYyWZ]JH\SSW'$4)QTABDvP0\ԉ\q.堇se0s^wTj?[ Gxrcs!m 6>wԷhRqTO=*,͝D#+/ݾ;81ybq1Fq=. b xavIDATua@KG{܀s4H0´5g@}敯+\7ߺr%Q*$I0:s~ssӹ13~br֎o"4AQ*\QI̓G YaajmVn_z!潵ʸ拍xqscːPBdT$i$)5o6,VB_{4 Oa^]7? 'UWV69}i2Lzj޽2Ӿj[uGuǴcR+V{oO(@HG=pH0ՔHÝ'&˥0i_G^ZYq<+fm,w0BEUY X_7="Uk wn|kY_[ںOzG! Qy43Y qO)؄Ź|P0J0Xnpyֿt|:jQnޜ?=؟\Z_ .\f]ӎYǬ[rS_~ڦ@Zև+;`i[jդP9qF\Tkq)V]V!R)W9E#lϽ8w݅+J LJzݬ\c',޻g- > eQ +c8†f c.DR (KB0'VR3[/W\P Ƞкֽ7)zo|c#G<\XX(-3'vk~D49Qo* *J &˓&SUWeYl8-߾~s|k6p f:s4,R|VͲ>"h,ۚ8ߜ?|^Fvͺ`H 4ꩱronyPo^ O/<8U#2^{Ы/(PLk?|ҏ^} w7I;qZ.\tf~怖 6nd>$tO_fUjeིK7zJ3 IV|w^~`c)F9Jキ~jHSBϜnTAޕ֛?UYA NGLND U3`>Mٱc P!g6T3yKM [tsK3qx7~jT먶LPNJڗ^?T3S6 a)a٠/OS'o j Ud0L}}}V'Pm55 CO~_yWP5IsR*XϿ+&h0ݧw6(La,Uz卍J%|0PXNMx߹qֿ᡹:iqs3nP|o?"I^g!lY2$`q `_ݺtʍZ [B )fcqT"fi:lO ^{,$n^;>DJտp{kfwˬ5mXb=Y5McH#:KTkAvTwL%Ȕ,69q.0USAT( .(i{ -MYJ8qD`yĺ|4ԼYT`)OIԷu,sP3 @.zMo̶T'KEj@l(LjY)1GE; (S9aĒfr﷊(,M4(5U8'"y}UwԯhПnjuBq&ȐP\-ULsE3C.lKDU!wR T3OAdiߐTEi fy4QRmuC">4tΉyz7 LTwT{Aa9NʠSfdFTf-i8WIT3T{@D\UdRj>'G չ jzСOO!wBp/e>/vOoS- Kޙ~T5< kD$d01o1i7hpCӾZ64Hj9"fӾi[2'*z@5#3 V$i6Ġ@n KL+d QDHj}hW GS.UPC9ԛy/hfaJ8ՒHKXfiϬ H!yC 4ZDoqG>lLLw:ejdf2c `k rÈM5"d+ cڈ$FG=:P45ы3e@8i %ԐcDmu qlkܥj0#>213Ȉu/ɁxqKm`ԁy fCH`0J/z؊`d Z @> aYzZnBB5Y_-!̏a+6YS.b#J#X70p4)Yq a S3CA f=BQ 8muYg? E] F(q`H0XAÐ2XP FQΉ.Q#B#% zSP=DgObGyҘF=}ן8g>zsx={Tk'Yf_, $?= C>Ϩ_wm~.4q~Qc/r}wEQz~/~lj?g?/znqIENDB`KCemu-0.5.1/images/audio.glade0000644001050700006200000004021411340261610015544 0ustar glaubitzfbedv KCemu: Audio mouse True vertical True 0 etched-out True True 0 6 Audio 0 True 4 4 window-audio.png False False 1 False 0 True vertical True True 0 True True False True gtk-open False False 1 True False True False True gtk-close False False 2 False 0 400 400 True GDK_EXPOSURE_MASK | GDK_STRUCTURE_MASK 2 1 True False 4 2 True True True False True False none True 0 0 True 2 True media-play.png False False 0 True Play True False False 1 False 0 True False True False none True 0 0 True 2 True media-stop.png False False 0 True Stop True False False 1 False 1 True False True False none True 0 0 True 2 True media-record.png False False 0 True Record True False False 1 False 2 False 3 1 True False 4 2 True 2 6 end gtk-help True True True False True False False 0 gtk-close True True True False True False False 1 False 3 KCemu-0.5.1/images/window-thanks.png0000644001050700006200000000377511317574416017002 0ustar glaubitzfbedvPNG  IHDR #ꦷbKGD pHYsHHFk>IDAThY{PT{",,FEWN"U'iDiffh 3h͈%"6J!" ce=xkCYfv3ssη9(suv4AhoJ%ȥ췶~r ;:!?:6% `j^ñA acS*ϞU,g0PJK#]oELLO3Z\Lx!|hSWB0J+ rlq*[0?h:ۿ'~7Gر15qLUF7U9#:S{zt1>"ˆE'%Γd߁;k)U=Rڨ@+IT*o56κqY3o3Wvmژmbم; ޓ򳽄 g`fV_vjW } yC'."3#-[<8 q挘{oX07n<񧱨,ϋʀ5) C'bٲ SPF~s~*0*jG,^?hCsPT =vzLn^vH\n|,ay;pbe+=XVo> 3 q 3,fM`Y9lDXlXjZlxҦBTO4 ۛo72.O'p|b}OtS#ɛ/~RB('赹w}H5WaN#޳(%7'>?ne"uO瑵k57Z47y;v%3O|\8Z.kzÀt**&waUL窘:+b%4ŊL@tN2u. nzz^~ZJ4n'D _P@[47b6 5`e pnv n\=հmذ ЕЕWZ.\iL*`Z,u;''Εk\B>t~IIK -&<&h=i9tH-/ Z,g!bt=Ʈ#0t*gyҗXp P~JpH;jƚ@GlXMsH"1OeUuH [[|9+2XiM pܒ\0nVѭPI5T1񼆏~FG".M2&@kY0_~}x0Q{0 7m"p.5DUWG҂0sM-n 'BhPQbm.Mh= 2RYwTY_ ?ix 'W ms80(s> "tB+YVMZz ˣK`Yհ%sMw|x}OymR\ 3הʹ\-`ϱssMsbh[~-,2KEp Z>WJ|jkk"3pL=R!m \>=w+W:!~ݻ$IENDB`KCemu-0.5.1/images/icon-kramermc.png0000644001050700006200000000261711131675406016721 0ustar glaubitzfbedvPNG  IHDRĴl;sRGBIIDAT8=KlWs^?ߎ'ThJSVB(.j"* RUBB QD*P]%$XaÂ(@U5M ۱c8v̧Fn]9>uZAD #H)'EtB !׿yY^;Riڤ*!DT4C$@L=JH1ֽWW7>#ny,ݥ-b5# Y94Yߏ!>6O?mfϞ9VX[93{O-L8B7кۤaNIs$ #Hp ONll8Ǜ{Kl^ZD~qIR7vB[w7a<2 ^՗E.'H_>.s'ӌ_zwLh_Ĵ3T .B +itM #븬"eO` T#?[D,WVG+>fHo*3.DDS21DP53>0CE# BX5)2h 쒣cs`_sdͤٿJ}$e)W: [ 0u'a4ڃk^)C@LΉKRΤƒr ABTT@ n?S9ClxjΙ#F'L5 "d5!"C= n͗ *k-EQ F%e(r70(~Zm8ؑ7i}?_`wg-BD*K FFPdȻK2:8o_e^X71*d k,!*>݌j@(1j:NS@(^_k O}8+N6c%O*8|,t3MlwoyGοU_T>NL%t􍌱BbI1oҨw( FCQ ;ybvu}kS_.eX_Ycym#[ FOBșV닋tu־O%pk_z~8I#H٠$D~)w]i.ޘ^{Z?_טcO|33'/69T|XPPAHQWz#VL}x{UخIENDB`KCemu-0.5.1/images/media-pause.png0000644001050700006200000000256311317574416016371 0ustar glaubitzfbedvPNG  IHDR$xbKGD pHYsHHFk>IDATHՖ]Hm~>6? ˕Z:_4˃Z! H4 #[` HB#:H DLI&rVjGdC0zɽoo^'yg{ Y~ZP"BIn.4fdjx%IRIʟ'ss4rӽb(Y}(>[$v.~+*bhbV2:e2-_Wc,Fe_^vR43a&N>wtMo?껻5pLEbbLEVW76jEql02dm@3J#d|i@}o@ \nHK# (noOOIOiZյ^EU??ՕqEϾp!?c@ wEP쩩IvQ3g$>lcb|y՛7Cn\%_{C.!AN"IHoidLAYfY!I+Ivqcv=xJY\#,XXpдǸ1LO:X6dn9Bq1AJHI)0=PC:^sST㘘Ǿ@ I"X/cP \56]~J:q"5JU#|ww`jhX*bӇa3Moܝ'@( [k;,d;aa;,flL&!T5OpфcG1veݻ+[.! `8j9H@AKT*`z׶zv?^8N`^:5ffIdRb7 WV BeenPBM}04Yy垞el Ȅ!=}o~f6`o0qwׯq鋾Cr`\FJl۶O (v}nqqRW& c<a^^{mCC{-L4o&%^E]]L&؇$UǢ ڦBfׁ"h c\U[JNWa}hr7tRI7o<tXI8otZN7<$%$$1SS%&F:] !ix`,Eh9qii9[eYqd9900r/kkcx?P>7TS̄ X`akxijXg?_7 "BIENDB`KCemu-0.5.1/images/disk.glade0000644001050700006200000004375311340261610015410 0ustar glaubitzfbedv KCemu: Disk mouse True vertical True 2 0 etched-out True True 0 6 Disk 0 True 4 4 window-disk.png False 1 False 0 True 4 4 4 2 2 True 1 2 2 3 GTK_FILL GTK_FILL True True False True gtk-close 3 4 3 4 GTK_FILL True True False True gtk-close 3 4 2 3 GTK_FILL True True False True gtk-close 3 4 1 2 GTK_FILL True True False True gtk-close 3 4 GTK_FILL True True False True gtk-open 2 3 3 4 GTK_FILL True True False True gtk-open 2 3 2 3 GTK_FILL True True False True gtk-open 2 3 1 2 GTK_FILL True True False True gtk-open 2 3 GTK_FILL True 1 2 3 4 GTK_FILL GTK_FILL True 1 2 1 2 GTK_FILL GTK_FILL True 0 4 Disk 4: 3 4 GTK_FILL True 0 4 Disk 3: 2 3 GTK_FILL True 0 4 Disk 2: 1 2 GTK_FILL True 0 4 Disk 1: GTK_FILL True 1 2 GTK_FILL 1 True False False 4 2 True 2 6 end gtk-help True True True False True False False 0 gtk-close True True True False True False False 1 False False 3 microdos.dump left caos.dump left tools.dump left a5105sys.dump left cpmz9.dump left z1013cpm.dump left z1013gdc.dump left KCemu-0.5.1/images/options.glade0000644001050700006200000056673611340261610016164 0ustar glaubitzfbedv 1 1 3 1 1 4 1 1 No Yes No Yes No Yes No Yes No Yes 800 500 GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK KCemu: Profiles True center-always dialog True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical True 2 0 etched-out True True 0 6 Profiles 0 True 4 4 window-options.png False 1 False 0 True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 290 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK all 2 2 True False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Create new profile... True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 gtk-new 2 False 0 True False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Copy selected profile... True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-copy False 1 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK False 4 2 True False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-delete False 3 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK False 4 4 True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Expand user profile level... True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-add False 5 True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Collapse user profile level... True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-remove False 6 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK False 4 7 True False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-go-up False 8 True False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-go-down False 9 False 0 True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK automatic automatic True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK automatic automatic True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK queue none True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 6 4 3 6 4 True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 automatic automatic in True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 2 1 3 3 4 GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 0 4 Comment: 3 4 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Variant: 2 3 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 2 3 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 3 1 2 GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 System: 1 2 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Profile Name: GTK_FILL GTK_FILL True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 3 GTK_FILL GTK_FILL True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 2 3 2 3 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK System False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK automatic automatic True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK queue none True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 6 5 3 6 4 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 3 3 4 GTK_FILL GTK_FILL True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 2 3 4 5 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Enable / Disable display debug code. When enabled the display cache behaviour will be graphically visualized. This setting is effective only if the display scale is set to 1. model1 0 1 2 4 5 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Display Debug: 4 5 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Display Scale: GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Display Effects: 1 2 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Display IRM Access: 2 3 GTK_FILL GTK_FILL True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 2 3 GTK_FILL GTK_FILL True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 2 3 1 2 GTK_FILL GTK_FILL True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 2 3 2 3 GTK_FILL GTK_FILL True False True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Scaling factor for the emulation window. Allowed values are 1 to 3. 1 adjustment1 True 1 2 GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Enable / Disable display effects for scale factors above 1. When enabled a scan-line effect will be used for scale factor of 2 and a smoothing effect for scale factor 3. model2 0 1 2 1 2 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK This setting is only used when emulating a KC 85/3 where it enables the emulation of the display dissortion when the screen memory is accessed by the CPU. model3 0 1 2 2 3 GTK_FILL GTK_FILL 1 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Display 1 False True True automatic automatic True queue none True 6 8 4 6 4 True False 1 2 True 0 1 GTK_FILL True 0 2 1 2 GTK_FILL True 0 3 2 3 GTK_FILL True False 1 2 1 2 True False 1 2 2 3 True False True True True gtk-open 2 3 True False True True True gtk-open 2 3 1 2 True False True True True gtk-open 2 3 2 3 True True False True 3 4 True True False True 3 4 1 2 True True False True 3 4 2 3 True 0 4 3 4 GTK_FILL True False 1 2 3 4 True False True True True gtk-open 2 3 3 4 True True False True 3 4 3 4 True 0 5 4 5 GTK_FILL True 0 6 5 6 GTK_FILL True 0 7 6 7 GTK_FILL True 0 8 7 8 GTK_FILL True False 1 2 4 5 True False 1 2 5 6 True False 1 2 6 7 True False 1 2 7 8 True False True True True gtk-open 2 3 4 5 True True True True False gtk-open 2 3 5 6 True False True True True gtk-open 2 3 6 7 True False True True True gtk-open 2 3 7 8 True True False True 3 4 4 5 True True False True 3 4 5 6 True True False True 3 4 6 7 True True False True 3 4 7 8 2 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK ROMs 2 False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK automatic automatic True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK queue none True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 6 9 2 6 4 True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 5 6 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 4 5 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 3 4 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 2 3 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 1 2 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Module 6: 5 6 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Module 5: 4 5 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Module 4: 3 4 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Module 3: 2 3 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Module 2: 1 2 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Module 1: GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Module 7: 6 7 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Module 8: 7 8 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 6 7 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 7 8 GTK_FILL GTK_FILL Override modules in this profile True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 1 2 8 9 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 8 9 GTK_FILL GTK_FILL 3 True Modules 3 False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK automatic automatic True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK queue none True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 6 11 4 6 4 True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 3 4 10 11 GTK_FILL GTK_FILL True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 3 4 9 10 GTK_FILL GTK_FILL True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 3 4 7 8 GTK_FILL GTK_FILL True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 3 4 6 7 GTK_FILL GTK_FILL True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 3 4 5 6 GTK_FILL GTK_FILL True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 3 4 4 5 GTK_FILL GTK_FILL True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 3 4 2 3 GTK_FILL GTK_FILL True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 3 4 GTK_FILL GTK_FILL True False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-close 2 3 10 11 GTK_FILL GTK_FILL True False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-close 2 3 9 10 GTK_FILL GTK_FILL True False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-close 2 3 7 8 GTK_FILL GTK_FILL True False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-close 2 3 6 7 GTK_FILL GTK_FILL True False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-close 2 3 5 6 GTK_FILL GTK_FILL True False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-close 2 3 4 5 GTK_FILL GTK_FILL True False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-close 2 3 2 3 GTK_FILL GTK_FILL True False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK gtk-close 2 3 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 4 1 2 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 4 3 4 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 4 8 9 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 10 11 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 9 10 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Hard Disk 2: 10 11 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Hard Disk 1: 9 10 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 2 3 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Audio: 2 3 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 7 8 GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 6 7 GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 5 6 GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 4 5 GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Disk 4: 7 8 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Disk 3: 6 7 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Disk 2: 5 6 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Disk 1: 4 5 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 2 GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Tape: char GTK_FILL GTK_FILL 4 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Media 4 False True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK automatic automatic True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK queue none True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 6 4 3 6 4 True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 2 3 3 4 GTK_FILL GTK_FILL True False True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Number of D002 busdriver devices to add to the system. The maximum number of emulated busdrivers is currently 4. 1 adjustment2 1 2 3 4 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 Busdrivers: 3 4 GTK_FILL GTK_FILL True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 2 3 2 3 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Enable or disable the second D004 ROM at slot F8. The standard ROM is available at slot FC. model4 0 1 2 2 3 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 F8 ROM: 2 3 GTK_FILL GTK_FILL True True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 2 3 1 2 GTK_FILL GTK_FILL True False GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Enable or disable the D004 Floppy Basis Device. model5 0 1 2 1 2 GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 D004: 1 2 GTK_FILL GTK_FILL True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 2 <b>Special settings for KC 85/2..5</b> True 3 GTK_FILL GTK_FILL 4 5 True KC85 5 False True True automatic automatic True queue True 6 5 3 6 4 True 0 IP Address: 1 2 GTK_FILL GTK_FILL True 0 Netmask: 2 3 GTK_FILL GTK_FILL True 0 Gateway: 3 4 GTK_FILL GTK_FILL True 0 DNS Server: 4 5 GTK_FILL GTK_FILL True False True 1 1 2 1 2 GTK_FILL True False True 1 1 2 2 3 GTK_FILL True False True 1 1 2 3 4 GTK_FILL True False True 1 1 2 4 5 GTK_FILL True True False True 2 3 1 2 GTK_FILL GTK_FILL True True False True 2 3 2 3 GTK_FILL GTK_FILL True True False True 2 3 3 4 GTK_FILL GTK_FILL True True False True 2 3 4 5 GTK_FILL GTK_FILL True 0 2 <b>Network settings for WizNET module (IP-Addresses only!)</b> True 3 GTK_FILL GTK_FILL 4 6 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Network 6 False 0 True True 1 True False False 4 2 True 2 6 end gtk-help True False True True False True False False 0 gtk-close True True True False True False False 1 gtk-ok True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True False False 2 False False 3 KCemu-0.5.1/images/plotter.glade0000644001050700006200000010211611340261610016134 0ustar glaubitzfbedv 297 1 10 210 1 10 10 0.10000000000000001 10 20 10 10000 10 100 KCemu: Plotter mouse True vertical 2 True 0 etched-out True True 0 6 Plotter 0 True 4 4 window-plotter.png False False 1 False 0 True 1 vertical True 200 300 True True automatic automatic True queue True 3 3 2 2 True 0 in 630 891 True True 1 2 1 2 2 2 True 1 2 3 2 True 1 2 2 3 2 2 True 1 2 2 2 True 2 3 1 2 0 True 6 12 2 20 4 True 2 5 6 GTK_FILL GTK_FILL 4 True True 0 True True False True gtk-open False False 1 True False True False True gtk-close False False 2 2 11 12 GTK_FILL GTK_FILL True 2 9 10 GTK_FILL GTK_FILL 4 True True False True 1 2 7 8 GTK_FILL GTK_FILL True 0 Show pen 7 8 GTK_FILL GTK_FILL True True False True 1 2 6 7 GTK_FILL GTK_FILL True 0 Show plot area 6 7 GTK_FILL GTK_FILL True True Define the initial y position of the pen after clearing the plotting area. Measured in millimeters from the top left corner. 1 adjustment1 2 1 2 3 4 GTK_FILL GTK_FILL True 0 Y origin 3 4 GTK_FILL GTK_FILL True True True #000000000000 1 2 1 2 GTK_FILL GTK_FILL True 0 Paper color 1 2 GTK_FILL GTK_FILL True 0 X origin 2 3 GTK_FILL GTK_FILL True True Define the initial x position of the pen after clearing the plotting area. Measured in millimeters from the top left corner. 1 adjustment2 2 1 2 2 3 GTK_FILL GTK_FILL True True Define the line width for plotting. Measured in millimeters. 1 adjustment3 2 1 2 4 5 GTK_FILL GTK_FILL True 0 Line width 4 5 GTK_FILL GTK_FILL True 0 Plot to PDF: 2 10 11 GTK_FILL GTK_FILL True True Delay between screen refreshes of the drawing area in milliseconds. 1 adjustment4 5 1 2 8 9 GTK_FILL GTK_FILL True 0 Display refresh 8 9 GTK_FILL GTK_FILL True True True Define the color to use for plotting. #000000000000 1 2 GTK_FILL True 0 Pen color GTK_FILL GTK_FILL False False 1 0 1 True False False 4 2 True 2 6 end gtk-help True True True False True False False 0 gtk-clear True True True Clear plotting area. When rendering to a PDF file a new page is created and plotting continues in the same file. True False False 1 gtk-save True True True Save the plotted picture as PNG image file. True False False 2 gtk-close True True True False True False False 3 False 3 KCemu-0.5.1/images/icon-z1013.png0000644001050700006200000000265711131675406015702 0ustar glaubitzfbedvPNG  IHDRĴl;sRGBiIDAT8EMlϳnx1Ҵ {mRqڨ(g)R) ">.VqZYݵ}ryF4hf~3 / (آZc ^q1ւ(m' :vvv6w(pK}y:Z ||Dk"qCyuas3;'J)U=zazDsRGfq Z$P B/ Zk[=hwJE,U,/xojg1I`zF $cp#%| R[IS$ Pt&S|3=CJi-#Zk5x%G*Ջsҁ(%&?щX16 IT*qӨ7fccLkk l;:0 Α$^RQ$W\^&''ڵkR{^O>Ôenܸŋ>4+ZOW6&'9tofnnN*/_fxxK.1;w{Ϟ<JDv>$Ihc?N^gqq;wjijׯ_3>><ӄp.9Z+DQ.\dY,{֒fرc"B+(J}!"hkD`eٳLLLp11r92 O>edd(9ѣG9)B4 BNA Nq]<'OX,r-zzzܹs>}bȃx17oorU@^<_?BtSҙ}erR*dppPr,BA楷6|tw[(Hǻ=(nBx܂C(vMggKf@7xZO;|@+R AloP/QZ[|Q)U+zk =ut5LGDJpB70vnVRuI;g " :7[MQ)D(boQ9ߕXnۘ:v⦿BzQt,ߵ oh rOx0*Ur{%"J){z(ݙh $X6 !`O;gYOb~&L&aB|pqp;'6*͵3!H)HW>Z [|(u. A]_Rl#2cUIENDB`KCemu-0.5.1/images/window-question.png0000644001050700006200000000623211317574416017350 0ustar glaubitzfbedvPNG  IHDR #ꦷbKGD pHYsHHFk> :IDAThYyP "GQA GT0`D|FaykRK+j)6OWiCDɪ(*"CQdY|㐤^Wm}ճ3ݿ!,qT,{T1*={{ZN+ML8|r4J1FWI׍޷lpO5gcF9DD#HFÔ3OOEQ'&jCyB+׋ o5{ /77\X¡Np0215{L%0#lR ˊ7:^7i)auS\/`ȭ_?-'+/nzSE(@q~鶐qq0gfnzoH Z/REH`CnVQ*x+%^khvijģGs9zW@WWRKwE{0Xg`y*s|y>'K ]Kx;\ @$x#ǿzg3ݿ&O.pQOX'$~-*z+àK-8/Xd}'B&&'ԖSVZfTj(#|S  72‰VxFrǦrJ\KO(Nn/:oZ~+*ٹ[zw1003lf0oEcqȌі+zS+H^y,y%MjF*V.qwOuuJnm 8y @S6%m>mJJ:iZpyp[Cî]]#7mM ja,8pyBtˤi/ҷ&&o63300pT@ƺ%P,qOW:wu՛a^wZK!@M͹|!5''H?[}\U\I^e%c۵ ]apBw0YS[/;4cǜڅsj=*Lßa~êG/+c@9&*2ZNKCE]ߖºKJrR@HMuņUWr-(,L tHw\8%QZQ&]+hgc{J\ qhWѤ^EkI)*r#ZBk;ri'Cۇp8E dD`D9cl0L9K]\5wܐSs)ʟkk4}/ }gԱŧqvS׏)lcmc Ay<.Ʀ n6KT,k)@/RwX*rqsnr]pc2[47sc6wqAL|Gs6cX2x Q&PlGcFc K§s TU}[e2Q3emj;!l;1|4YkG{ .]]Y嘻1@u@{bd~w@=˩OO=CGnl[8+'ī]<;= :s#< qK[ UvROՇ5>r^5՝{ؔt7oZЊ;t >8gq@:7)8 ',N /-@)8Kyy/{k|d Ou9G !ZWPܹJE+ŽV1ammӻG2>{aI!!WWܫ6d `b"DK"RiU.;R.; Yw5Py߽{9A.O_OӴ+g`U6p<8cDz<@#F 'ł&xKRkR)֎ypVO :Z\to}]oMpn7ą hK8n.'i%F$֜7Haئm-˯Yv떮vj,Xp>u A@LBZH  [Ytg)zv!D^h+~W̬Kl2}1Í ^56qy\BHjϐ~\/A7l!5X.M;8~p_8j D~ƌ77w> H ݲmjV9Pnr FfOoFޯyE/ZZkǰ=⣨)^/ZGDƼOњ R 磧%$T+u'OfT|Qž3 u/ᥨ9 !۽2|6wo_/q(WϡIENDB`KCemu-0.5.1/images/logo-ffmpeg.png0000644001050700006200000000712011340261610016354 0ustar glaubitzfbedvPNG  IHDR(y,sRGB pHYs   IDATx{5;, HDEq| &&# p"1(h@ PAA FQ*5Qh@QjT\y산GD#gfխV^@k@4lj3JCMI؎VVHR EG_根i$ů"W<]\¶ah|:4Ќdhs;=o-c}$h[\B_TS(|!qNEʀ%*||B,upxWfEl+.Qa[WH0P4jQjج+&SHk+*415hz' m4Ê˳'$!~*hr,~o)O nD$A1BQ iLq/4 ,&L0lZlCQ/۟˘+PLPb /hIBrCh,_he^o4gb.ǘ-z;3hx{V-|c0o'QLEc{s|c0_s"L c41sNf)uB'3)`71͍pOwN>] V߀AXƧ;k}.B1 |guWb3t!t[4Hߗ2MkT,G3ϋK0I0@P˰xL\(9g] #`Pl6HHr͇l>x."[}-0iARvI ZISK4cyn4 ( chqpis( )dJ *ur%!/!Y)FH*B\`8F7FcPT6`"3SX%>i4#$mO6XUiEx='q;pk#0Š1Z2{GW^6[]6퀱@<;ż}d=d 0z`ϱ(̅MX l$MS<>b>&}dhVc3|0/3d21 l.?~x-Yp&9= }e$Ќǿo}K21v)*0 ߑ(]Aekp_Ҿn(#wGs43Z9p SîFT{;I.~M5eKǀCWB6!wĽUﶓl0j!L`lS 7r->;ㄉgt!If|n4odc{r@o%h.VMp*@c\lw,qS][!.5[948+KXgjISFO1Y~Yy1'Bg}{IXIm-ƲxtPEїQb })I O;=)hOۺ3kaoks'dl#P {l jF| U . @c(G Čx,|L*A(N.E#| *X%&2`RI8u}[qdWMDȴ#o>KBI{9Fbpqy%iHO? U>;<0WZɖOm]L^4"7+W PSnwdƫrgɾkQ#1J>w^Kj)i1oV!*D-8hn+Ȥ~3t%{MH_Eqҏ#,u}|WH\iWNdtNǒ%A4mBFɂ#unl p}Ev0}a#e\½>QDǴZbG /2Yyv9`C1nK)cJi159} K2`Ӆs8ijܷGlth%U=c\73dڿJL٘^nإM_ǁz+8Ȯ$8_ X-dPñ2bnkNsH/&z΢i)j]K1$7TL4ajB<=`"rL8DI tqIr2!F1+nlq@ziǥqhTXoČKHh>;HBo20 NP{NUU P{lw1p|>f>7d, ֿ+Vg.`y~Na)QRt8L1ܺ?W[ 9KRQ #px̷+uE] h5Y߄>16}kYW uYis̍_gBƸ r`i%RAөۅ|+ELz(?bίlFxC $!ٳUhJ;8UB܊hS`QZ+6|e@ jǎ~; ;I_R 8Ut%SVHtSznhd%S4HMIwx"#Cʑ^>l~Sz^y|noMI\҈g24ξql兛R"MCQǽIENDB`KCemu-0.5.1/images/original/0000755001050700006200000000000011412404770015256 5ustar glaubitzfbedvKCemu-0.5.1/images/original/5floppy_mount.svg0000644001050700006200000001134510527416074020631 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:31:03 2004) hash computer icons device theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/player_fwd.svg0000644001050700006200000000642210527416074020145 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:29:46 2004) hash action computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/kxkb.svg0000644001050700006200000003030011131675406016736 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:31:03 2004) hash computer icons device theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/xmms.svg0000644001050700006200000001745010527416074017000 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:23:49 2004) hash application computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/player_eject.svg0000644001050700006200000000704510527416074020461 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:29:46 2004) hash action computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/player_rew.svg0000644001050700006200000000642210527416074020162 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:29:46 2004) hash action computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/tux.svg0000644001050700006200000001223410527416074016627 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:23:49 2004) hash application computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/player_play.svg0000644001050700006200000000625210527416074020333 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:29:46 2004) hash action computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/player_record.svg0000644001050700006200000002013010527416074020633 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:29:46 2004) hash action computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/blockdevice.svg0000644001050700006200000001465210527416074020267 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:31:03 2004) hash computer icons device theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/player_stop.svg0000644001050700006200000000731410527416074020353 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:29:46 2004) hash action computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/Makefile.am0000644001050700006200000000071211340261610017304 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ convert.sh \ 5floppy_mount.svg \ 14_layer_visible.svg \ blockdevice.svg \ jabber_protocol.svg \ kdat.svg \ kuser.svg \ player_eject.svg \ player_end.svg \ player_fwd.svg \ player_pause.svg \ player_play.svg \ player_record.svg \ player_rew.svg \ player_start.svg \ player_stop.svg \ tux.svg \ xedit.svg \ xeyes.svg \ xmms.svg \ bar6.svg \ kxkb.svg \ kmplot.svg KCemu-0.5.1/images/original/player_start.svg0000644001050700006200000000704210527416074020521 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:29:46 2004) hash action computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/convert.sh0000644001050700006200000000676411345001576017311 0ustar glaubitzfbedv#!/bin/bash # # KCemu -- The emulator for the KC85 homecomputer series and much more. # Copyright (C) 1997-2010 Torsten Paul # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. convert_small () { SRC="$1" DST="$2" COL="$3" TMP=`mktemp -t kcemu.convert.XXXXXXXXXX` || exit 1 echo "converting $SRC to $DST (color = $COL, temp = $TMP)..." rsvg-convert -a -f png -o "$TMP" -h 22 "$SRC" convert -colorize "$COL" "$TMP" "$DST" rm -f "$TMP" } convert_big () { SRC="$1" DST="$2" COL="$3" GAMMA="$4" TMP=`mktemp -t kcemu.convert.XXXXXXXXXX` || exit 1 echo "converting $SRC to $DST (color = $COL, gamma = $GAMMA, temp = $TMP)..." rsvg-convert -a -f png -o "$TMP" -h 32 "$SRC" convert -colorize "$COL" -gamma "$GAMMA" "$TMP" "$DST" rm -f "$TMP" } COLOR_GREEN=15,0,15 COLOR_RED=0,30,30 GAMMA=1.4,1.4,1.4 convert_small player_play.svg ../media-play.png $COLOR_GREEN convert_small player_fwd.svg ../media-forward.png $COLOR_GREEN convert_small player_rew.svg ../media-rewind.png $COLOR_GREEN convert_small player_start.svg ../media-start.png $COLOR_GREEN convert_small player_end.svg ../media-end.png $COLOR_GREEN convert_small player_pause.svg ../media-pause.png $COLOR_GREEN convert_small player_stop.svg ../media-stop.png $COLOR_GREEN convert_small player_eject.svg ../media-eject.png $COLOR_GREEN convert_small player_record.svg ../media-record.png $COLOR_RED convert_small homepage.svg ../icon-root.png $COLOR_GREEN convert_small flower.svg ../icon-default.png $COLOR_GREEN convert_small cancel.svg ../icon-deleted.png $COLOR_RED convert_big jabber_protocol.svg ../window-help.png $COLOR_GREEN $GAMMA convert_big tux.svg ../window-about.png $COLOR_GREEN $GAMMA convert_big xmms.svg ../window-audio.png $COLOR_GREEN $GAMMA convert_big xedit.svg ../window-copying.png $COLOR_GREEN $GAMMA convert_big 5floppy_mount.svg ../window-disk.png $COLOR_GREEN $GAMMA convert_big 14_layer_visible.svg ../window-screenshot.png $COLOR_GREEN $GAMMA convert_big blockdevice.svg ../window-module.png $COLOR_GREEN $GAMMA convert_big kdat.svg ../window-tape.png $COLOR_GREEN $GAMMA convert_big kuser.svg ../window-thanks.png $COLOR_GREEN $GAMMA convert_big help.svg ../window-question.png $COLOR_GREEN $GAMMA convert_big info.svg ../window-info.png $COLOR_GREEN $GAMMA convert_big bar6.svg ../window-color.png $COLOR_GREEN $GAMMA convert_big kxkb.svg ../window-keyboard.png $COLOR_GREEN $GAMMA convert_big configure.svg ../window-options.png $COLOR_GREEN $GAMMA convert_big flower.svg ../window-selector.png $COLOR_GREEN $GAMMA convert_big kmplot.svg ../window-plotter.png $COLOR_GREEN $GAMMA convert_big xeyes.svg ../window-video.png $COLOR_GREEN $GAMMA KCemu-0.5.1/images/original/14_layer_visible.svg0000644001050700006200000002506311340261610021134 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:29:46 2004) hash action computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/bar6.svg0000644001050700006200000001476211131675406016647 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:29:46 2004) hash action computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/xedit.svg0000644001050700006200000001524710527416074017133 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:23:49 2004) hash application computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/kmplot.svg0000644001050700006200000001013411163412576017312 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:23:49 2004) hash application computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/kuser.svg0000644001050700006200000000720310734566664017153 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:23:49 2004) hash application computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/player_pause.svg0000644001050700006200000000746210527416074020507 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:29:46 2004) hash action computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/jabber_protocol.svg0000644001050700006200000002253710527416074021164 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:23:49 2004) hash application computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/player_end.svg0000644001050700006200000000704010527416074020130 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:29:46 2004) hash action computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/xeyes.svg0000644001050700006200000001413411340261610017131 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:23:49 2004) hash application computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/kdat.svg0000644001050700006200000001241310527416074016731 0ustar glaubitzfbedv Part of the Flat Icon Collection (Wed Aug 25 23:23:49 2004) hash application computer icons theme Danny Allen Danny Allen Danny Allen image/svg+xml en KCemu-0.5.1/images/original/Makefile.in0000644001050700006200000003156711412404770017337 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = images/original DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ convert.sh \ 5floppy_mount.svg \ 14_layer_visible.svg \ blockdevice.svg \ jabber_protocol.svg \ kdat.svg \ kuser.svg \ player_eject.svg \ player_end.svg \ player_fwd.svg \ player_pause.svg \ player_play.svg \ player_record.svg \ player_rew.svg \ player_start.svg \ player_stop.svg \ tux.svg \ xedit.svg \ xeyes.svg \ xmms.svg \ bar6.svg \ kxkb.svg \ kmplot.svg all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu images/original/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu images/original/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/images/thanks.glade0000644001050700006200000017410711340261610015744 0ustar glaubitzfbedv Volker Pohlers for help with the windows port, technical information and bugreports Thomas Ludwig for the great KC website at http://www.kc85emu.de/ and lots of bugreports and hints how to make KCemu better Holger Krull for providing lots of information about the LC 80 computer (see http://www.lc80.de/) Kev Thacker for interesting insights concerning the floppy emulation (he's also the author of the KC driver for M.E.S.S. the Multi-Emulator Super System, see http://mess.emuverse.com/) Alexander Schön for starting the windows port, lots of tips and for providing a huge pile of files for use with the emulator or with information about the various systems Sourceforge User Boo-boo for the libz80ex emulation library which is now used to emulate the Z80 CPUs Marat Fayzullin for the Z80 emulation core used for the main processor up to KCemu version 0.4.2 (I needed to tweak some bits of the emulation core; see src/z80core/README for the list of changes) Marcel de Kogel for the Z80 emulation core used for the KC floppy processor up to KCemu version 0.4.2 Thomas Bretz for the OS/2 port of KCemu (see http://www.d4m.de/) KCemu: Thanks center dialog True vertical True 0 etched-out True True 0 6 Thanks 0 True 4 4 window-thanks.png False False 1 False 0 True 20 8 kcemu.png False 1 500 400 True True True vertical True True 0 4 4 I'd like to say thanks to many people who helped to bring KCemu to the point where it is now. The following list just lists some of them in no particular order... True False False 0 True True automatic in True True False 4 4 False textbuffer1 False 1 True People False True vertical True True 0 4 4 Lots of tools and libraries made it easier to write KCemu. Many thanks to the people behind all those projects for their work... True False False 0 True True automatic True True 6 44 2 16 True True 0 6 libsndfile True 1 2 25 26 GTK_FILL GTK_FILL True 8 logo-libsndfile.png 24 28 GTK_FILL GTK_FILL True True 0 6 Ogg & Vorbis libraries True 1 2 21 22 GTK_FILL GTK_FILL True 8 logo-vorbisdotcom.png 20 24 GTK_FILL GTK_FILL True 0 8 logo-openclipartlibrary.png 16 20 GTK_FILL GTK_FILL True True 0 6 Open Clip Art Library True 1 2 17 18 GTK_FILL GTK_FILL True 0 8 logo-lame.png 12 16 GTK_FILL GTK_FILL True True 0 6 LAME - LAME Ain't an MP3 Encoder True 1 2 13 14 GTK_FILL GTK_FILL True True 0 6 FLAC - Free Lossless Audio Codec True 1 2 9 10 GTK_FILL GTK_FILL True True 0 6 GTK+ - The GIMP Toolkit True 1 2 1 2 GTK_FILL GTK_FILL True 0 8 logo-flac.png 8 12 GTK_FILL GTK_FILL True 0 8 logo-libsdl.png 4 8 GTK_FILL GTK_FILL True 0 8 logo-gtk.png 4 GTK_FILL GTK_FILL True True 0 6 libSDL - Simple DirectMedia Layer True 1 2 5 6 GTK_FILL GTK_FILL True 8 logo-theora_org.png 28 32 GTK_FILL GTK_FILL True 0 6 Xiph.org Foundation - Theora video compression True 1 2 29 30 GTK_FILL GTK_FILL True 8 logo-ffmpeg.png 32 36 GTK_FILL GTK_FILL True 0 6 Audio/Video codec library libavcodec True 1 2 33 34 GTK_FILL GTK_FILL True 8 logo-bbc.png 36 40 GTK_FILL GTK_FILL True 0 6 BBC Research - Dirac Video Codec True 1 2 37 38 GTK_FILL GTK_FILL True 8 logo-xvid.png 40 44 GTK_FILL GTK_FILL True 0 6 Xvid project 1 2 41 42 GTK_FILL GTK_FILL http://www.theora.org/ True True True True none 0 0 http://www.theora.org/ 1 2 30 31 GTK_FILL GTK_FILL http://ffmpeg.org/ True True True True none 0 http://ffmpeg.org/ 1 2 34 35 GTK_FILL GTK_FILL http://www.bbc.co.uk/rd/projects/dirac/ True True True True none 0 0 http://www.bbc.co.uk/rd/projects/dirac/ 1 2 38 39 GTK_FILL GTK_FILL http://www.xvid.org/ True True True True none 0 0 http://www.xvid.org/ 1 2 42 43 GTK_FILL GTK_FILL http://www.gtk.org/ True True True True none False 0 0 http://www.gtk.org/ 1 2 2 3 GTK_FILL GTK_FILL http://www.libsdl.org/ True True True True none 0 0 http://www.libsdl.org/ 1 2 6 7 GTK_FILL GTK_FILL http://flac.sourceforge.net/ True True True True none 0 0 http://flac.sourceforge.net/ 1 2 10 11 GTK_FILL GTK_FILL http://lame.sourceforge.net/ True True True True none 0 0 http://lame.sourceforge.net/ 1 2 14 15 GTK_FILL GTK_FILL True 1 2 True 1 2 3 4 True 1 2 4 5 True 1 2 7 8 True 1 2 8 9 http://openclipart.org/ True True True True none 0 0 http://openclipart.org/ 1 2 18 19 GTK_FILL GTK_FILL http://www.vorbis.com/ True True True True none 0 0 http://www.vorbis.com/ 1 2 22 23 GTK_FILL GTK_FILL http://www.mega-nerd.com/libsndfile/ True True True True none 0 0 http://www.mega-nerd.com/libsndfile/ 1 2 26 27 GTK_FILL GTK_FILL True 1 2 11 12 True 1 2 12 13 True 1 2 15 16 True 1 2 16 17 True 1 2 19 20 True 1 2 20 21 True 1 2 23 24 True 1 2 24 25 True 1 2 27 28 True 1 2 28 29 True 1 2 31 32 True 1 2 32 33 True 1 2 35 36 True 1 2 36 37 True 1 2 39 40 True 1 2 40 41 True 1 2 43 44 1 1 True Projects & Libraries 1 False 2 True False 6 3 True 6 end gtk-close True True True True True False True False False 0 False 4 KCemu-0.5.1/images/color.glade0000644001050700006200000004773011345001576015603 0ustar glaubitzfbedv 1 0.01 0.10000000000000001 1 0.01 0.10000000000000001 1 0.01 0.10000000000000001 1 0.01 0.10000000000000001 1 1 0.01 0.10000000000000001 1 0.01 0.10000000000000001 300 GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK KCemu: Color Configuration mouse True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical True 2 0 etched-out True True 0 6 Colors 0 True 4 4 window-color.png False 1 False 0 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 4 4 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0.5 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 2 2 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0.5 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical adjustment1 2 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Brightness True 0 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0.5 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical adjustment2 2 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Contrast True 1 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Foreground True 0 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0.5 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 2 2 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0.5 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical adjustment3 2 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Brightness True 0 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0.5 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical adjustment4 2 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Contrast True 1 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Background True 1 4 1 True False False 4 2 True 2 6 end gtk-help True True True False True False False 0 gtk-close True True True False True False False 1 False False 3 KCemu-0.5.1/images/media-stop.png0000644001050700006200000000250311317574416016233 0ustar glaubitzfbedvPNG  IHDR$xbKGD pHYsHHFk>IDATHՖoHS}KW[bbc@RJ^D( ; C{#$Ea69 7vݽ{x%缹\~~{Efz?LRI*N(8+Ξ՘)N8_83E(OG+ %iӁFc7.ffkjN.==T*8M{l]Xھ=b ! Zw_ X񏯰嘢w>{{7 Pi2%TlD-AͺD]I-XQҹcҹ@r:߼q:EqQ ͛k>t$—/sVdѳ]zr4rty۷#nVS{i;5J(?KK?C^ ŢAEñ1\vƻO楦C-#㴍jjC)IA`HDĒWY,( !JA(!Cѱ E BzѨ`=jPiip^{;I &33wv9Nxja ]BAZ)A`XHI!"<ϣӢ3q ^V۶SN!$ XVK:It87 fA@hdj9B$ C<xzOϽޭ6==wM }}!y̼ld=Y,B]cc0™ f8yڍ(j`0h:$aMƦ-7x ss-ڂ~n9*RexѶ;<TpmVD9/r}eg|l FsWoe3\9rp%3)…*Q٣*A刂D~jΡ!C[ic/5Aܽ6a=sKLBF?Bݵ I7σ}۵h;TدZCē!uuL^_E #yL߿{LQ;y\X1UTZZmf֛R!YY)Mj*Hd$vDv` P<r'|nIENDB`KCemu-0.5.1/images/media-end.png0000644001050700006200000000301311317574416016011 0ustar glaubitzfbedvPNG  IHDR$xbKGD pHYsHHFk>IDATH՗[Hmٙqӊ-M- K5M"cE݋"P+@PȂ@F y.4#44JP< E2ՙݙ/F_\齛{σ_&~TrejKr+/I 87LMYY2<٧d">&Ǯ]N?‹ /F4lEh&ubb&awh32>߿nkc`8 bALHs4iܽ{~π2߼1yWѫ8|^Gnmدaʨ(ID"Iol>}::}k}k2 !S0Y&[^P DHy@a4σE)*t622t=G=GI>ɓa)ak߾{ݍ\..hD2:],C`Yqe3MM͙0LQZลNjK-$-$neeU1ihk˺MyxM!ON4.%0@jLQ>>8>SCAYa}|v$as3< >tuȸS"(ʡZ*u.-k gqr4G9C[dbiNKWWT?C~YV1 B `lð}YVzQzakDAEзofjneeUryyUպ]`lðawwRsk>[(9%'o(s))ϟ)jqz{ 8hl@B+MCS.ǹZ-Tg!''=g1'qqqٺ!l0I.;ӟJ`đ#7n33AA~/r@[XX/_V76d3lyS|ϕX\UG鴉4AϷ jjf5bt++nXc ۿ!GFf^o,&^Dxг޳̲[)^"jeIIZInU 2Li-mEaWWW?ʺ>,##7W~]`ʓXo[Z8.]ƼiIHh,l,gc"cHY߯[HN- RPAZsk+4 hP$2?4U5no"hP˃\‚\"6R~CGoo^:ZZ:,[[Ɂݶ> )44 )8LI X,$ěS9Ibぱ吥19bea8#cLoXL~IZ-(R qwXH ZRUknU% p IENDB`KCemu-0.5.1/images/about.glade0000644001050700006200000001776211340261610015571 0ustar glaubitzfbedv KCemu: About center dialog True vertical True 0 etched-out True True 0 About 6 0 True 4 4 window-about.png False False 1 0 True vertical True 20 6 kcemu.png 0 True True 14 <big><b>[ Version ]</b></big> True False False 1 True True (c) 1997-2010 Torsten Paul True False False 2 <Torsten.Paul@gmx.de> True True False True none False mailto:Torsten.Paul@gmx.de 3 http://kcemu.sourceforge.net/ True True False True none False http://kcemu.sourceforge.net/ 10 4 True True 8 [ Build ] True False False 5 1 True False 6 2 True 6 end gtk-close True True True True True True False False 0 False False 3 KCemu-0.5.1/images/media-start.png0000644001050700006200000000311711317574416016405 0ustar glaubitzfbedvPNG  IHDR$xbKGD pHYsHHFk>IDATH՗YLS[Cd*HJiQ4b0)h>`$@A|0 x &hDA Rb-܇MJo#pý휽k̐. s scF =#..PEhh; yN?kJ6LMM"xPSԿ|\WIeeMQUbytww h9*ZbDKOM}{;5#HRGOr>twcdðzvnh(;O xAt萃h'@$I$2k{{kF|qXXcÃ|wZ[ccbcml OOVV6<5FG4͞M rAR  ˖bo o'Obb|=<|2\)ͅ~ d4Ofdē@+sdZFiӷ4چpuuChhFuuӆVzF\=#G/LXcyA66hII Pk>?88ىhx5Z[[4 ?=>p}@LrRRL2n`4>{0UOOSh*r唀;% Gh^YE$WV勍EQi'IkP/ ̈́ `dAw;Gc1r u[$EV*WOOLQ>kǬ~5V ) 'vlmןww B!y< `Y,sݯQlII{f{,Td Q ,M\RWOs`H̕i(ڦTF8=4Xz|b)43Ls++unN֪Vl.E^MA$5'c YJ<:&3kk0Jmmi42Z ezzT:~W9:ګȼyf7ζh*jM\{7o,Fjd[##z;c*|'jVl6_UUHu8j2Ym\cҥUuuoHrc\]̳|8ov s᏿( 񮳳]֘kLZ<]]~^x2VaXYUU3**aQEuc`{X/ eaxE(pec>$+22$˅i*qxh2 IfE<PEln"̷h1;z}20Ukv_$sOOt+>~'QTPa0*uv ~ j0?oJLթo(IENDB`KCemu-0.5.1/images/kcemu-winicon_32x32.png0000644001050700006200000000143011345413765017600 0ustar glaubitzfbedvPNG  IHDR szzbKGD pHYs  tIME )IDATXVkA}jPbEPpPSM.{nIKnB`.?(ŤM*6dmwiLt`;}oy{1A#R01z`1m |>DG/|R*܉Mkp+ƲB  %n"Z|>~'o".(P( ()l`i^G N슀~LċJ3 tU#W@k1ī1vۍn51 on%bSq;ӃCAӢ/O5^R jn,!PTdE>>v}|YWsUTf@z"Ң&L>>_t:&#{3gJHO\4:pdU:]M!&kJ*M`nt6dWL$ jH%C.˱i2V ̝ԝX^gX.8sz? 򚉱CM&"guLJ:.h6ϥq `Qo u$ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_KEY_PRESS_MASK | GDK_KEY_RELEASE_MASK | GDK_PROPERTY_CHANGE_MASK False True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical True True _Emulator True True True _Run... True True _Load... True True _Save... True True _Tape... True True _Disk... True True _Module... True True _Audio... True True Pl_otter... True True Vinculum _USB... True True True Screens_hot... True True _Video... True True True R_eset True True _Power On True True True _Quit Emulator True True _View True True True Zoom x_1 True True Zoom x_2 True True Zoom x_3 True True True _Keyboard True True True _Menubar True True _Statusbar True True _Options True True True _Colors... True True _Display Effects True True No _Speed Limit True True True _Profiles... True True _Help True True True _Help True True Help _Index True True _Context Help True True True _About True True _Thanks! True True True KCemu _Licence True True No _Warranty! True False 0 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 1 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 0 in 60 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 False 0 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK False 1 False 2 True True _Run... True True _Load... True True _Save... True True _Tape... True True _Disk... True True _Module... True True _Audio... True True Pl_otter... True True _Vinculum USB... True True True Screens_hot... True True _Video... True True True _View True True True Zoom x1 True True Zoom x2 True True Zoom x3 True True True _Keyboard True True True _Menubar True True _Statusbar True True True R_eset True True _Power On True True True _Quit Emulator True KCemu-0.5.1/images/window-color.png0000644001050700006200000000230111317574416016610 0ustar glaubitzfbedvPNG  IHDR #ꦷbKGD pHYsHHFk>aIDAThX]HW~93!]\]4Z)\tl7,RAf)TU*좔R[2GČYREjRo;g! >s9yWJLXN@|pcHc+$NB>&e$ I.HB8y*F)3+1'@(*(O*YV a'۪6ą&Soп8݁ T*FX$B3qBg,GH<r\BАɢmڇْ,sFx=#M$G+hlV,҅omoXY|sGCr Iڷ @Khbzey}mp `vH,4lyj]zjC!IױSlT<+b,|odӅDZj+TK>.q:7Eo?z~ɓc'/6uuj//moG .@sRz#}xvccG3v$~` ^[k-KV(sdHQcO:qEF#SȔ(_VQL~‡* BîiϤ{sfOtәw7*P\_RT\MF.ٹK{6m`c`wMp)G)G߻gޛ5F"i1t3, 7F҅\[0pM&=l`a1CʡP b nnZOB. .܄*cKAJ`॓`M| . e/]({M4ۺ48i+iy3D.Z"Ep;kwtOW#⧢ Zќ{ܜI}nǕ?<"]G#SS0OuxB_BynB2Ҳh]\:d=We=EF?]x^ yU#IENDB`KCemu-0.5.1/images/icon-deleted.png0000644001050700006200000000345011317574416016527 0ustar glaubitzfbedvPNG  IHDR$xbKGD pHYsHHFk>IDATHWmL[e>^ҖQZ _-A`!cb;l4#1eeKHRb 1e L 5D7`PBB)mPWpxsEAnjsyI'++;;ŒbIdTѣ Bq zx]|nf|> xDi!-++JwJ$%!Z[r\(E}/bևUU"@qqB K!75D32(+"vƋ/?LeKeKTðf̲0f=t*J01{N-T )2717|OO|pSvS t5j4̶̶tu0@NNjcjcbbd$H6:ee`lgeeeİ_#,ߗ_. 1-.pkڵ~m{w0cx啽xI x@CVՒdNNԓ//l*.qKYNx`z:!'O0Ǐ#~Xn$''''֭ r4*rg;h gݺnRR7߬*x@ m??PPp``<1 +a%óAy(mi4hq%dvfv,ֱu\Px옺E݂8?/ *ssss\aGod{] ؋׻q*nM $Ihwߡ8=3afXݩP nF8x< 77} Dmm͢! O\%rthJWMy"y tt$6 M`K/73}Hw1,-M#qP? X{}kY_Z_kW&QOtԋD vrr޶ѷ߾w)t ?'5?"щ%|B$Ih -ʕ+\/+.v8=+$҈4mm K Kz}MM|>tB':Sc.B,Xш䩣cT*^SwS)n/SR^HN7ś:Nxz] eat $IJ ZV'@&d|}?=6͏1 g̿uk>fIY++wRcBp^8ÊnLJ%$H,ِz5=`ssMBMM5BKϑ <(ЏN(N T(@Ky!XT==/Q{XPO`y9:"_7ieIENDB`KCemu-0.5.1/images/window-video.png0000644001050700006200000000327311340261610016572 0ustar glaubitzfbedvPNG  IHDR szzbKGDC pHYsHHFk> vpAg IDATX[le盝mwn/Rb[nR ^BM(mP1$J0M|D>&HT.$0A"$b^ln{tkv}||wwN"g8}_H~,3G{|FбI)kId&DKD'ijLD# G6a5%zu?sOt-RsBjؤ(\8wzB z(|܇H[uE۳X^7)VԮ@<BVވ߈FZ}K9CD{^ڣ4oP\." y1=5ݺ=Ez`]-T]S}ߞ}h-6<|Ғw޾ݨ]U+nK>eY*+woŗ'@+x9 j;";*Өn~-^齼dSJٰ-⟒@͏6 fݶc)ͺM !Nq}#0˖zxgUHuk**C‘̌5=(]U(f~0Ld©@Q  Uco&eRGBF*j*b-iǚ@(l&7Yf^ކi5RJ}f@T,Xa.K A{rzf`$X,̝nݹfέRk㞆BfFRO"T3xyQW_u(z@5 JP^Q0>=t'f$k/*dR_ǭ[غc+**kp\L +ƆNJtCڇM[6ic&Nhx?NDɉ į$ki3r3*VTe҅K %r/cjr ek1Go.4[6Z%%%LjHw]gf31klx,FJ #k P- {< 34a?K%S,`p3fs)iSӰmrҩ4;ݩC˲a,\.l&2_ჇEc:3Rʄ@>_0 HW5|('tmr~r4't(bg3٧/Ģmۖ6q>R`&& ԙygsFn?+N۶s^HCDym'oӧI1KDbV_o(-WU4WN~yb3v]z 2N!D/ŢNt9T%tEXtdate:create2009-10-25T18:54:24+01:005d%tEXtdate:modify2009-10-25T18:54:24+01:00DXCIENDB`KCemu-0.5.1/images/window-about.png0000644001050700006200000000533411317574416016615 0ustar glaubitzfbedvPNG  IHDR #ꦷbKGD pHYsHHFk> |IDAThY{TgG&I+0Bx#Dn]im==ZԭuץxZY_(i%`""yL?ƜڠH;g|w$ ACCsc H~h;GuXoȵ\ȅ ݷ׭~RM۹(g1n<;k W P({÷PV\ZZzѢL}L=E K;%<^yeO,=2A+nu]!cȂYH't.\&񎻡x5$[*VM 3Ⱳs _:eb:2 0c>S~a./5gNK3_~H˺ۃlكrr&T|hB%*< 4׸\CD*s/+'+Zݎ<-'|-ǦM{p1.IN !~2A??<&0Hy/G'0 %~J{!4 KD;G'q:ks+@^ܭy V32D'$%"b"+||J2>3HDhd2BL+Ϝ2a~^Gcys͛˲|o;u*+؄?u%W S=|9=rF_ xcVav.uLl 6QL W2<)G?t(Bnjw%t <[lOtQQ`>0:44ZL{5k(Q~8.[eǃq|2f&$o/ۖ.MGΦ"y9M{v{`18˸wƽwfoS$Bh.j\;Vnߞ6,mH,WޫW7Z0?t@/8@̷bf3ag&˦ ʛQZpwuA&y%Ǫ=Lv/\ײem %ۆ?{${IId%GfW;2lVxPxavHMugQ uuEEi'% kNーlv9qQ}ɳwySnrn-9X]z9Q=5 Q-sfͨp:-[-Yh+k'zzCy0Q,XI''T6Y t04t,m)(a҆UT{ -dVZi9AoA.ɸ8ݙ3&G6m8mRfI ͖3١{c;֏Gw`TRUJDT8()16ށQw&;A1OlWh튿?Q6˸Y&9Y%iT*ťĥ<7Ϟ&X#yS0L8fy}f9@XqԟŠT ,uSA{'@ҥϒ.Prj/e$rƵ w0̜ 0xcdn v24ޣ58qO]^HՇQt5עܣݜafmam!@Dq\]D1Vc1'~SGx<68nV[`n3YmC Эin5@r+[6{`}׮<|A)̝8m1nzzb0p1%,DTĞx."A[;<瑰vLﳦ8t0+:˜RSG>e~>eyWϻLs,_<>y0<HD5u}z'pɢ @f#DtW+sWc 6:KU`u6lv{w؝r+`* LQ#j,^WõCp˫=xA[-zɉeDL:nqWö]f^hݼ5Iajd`.etRB+xN~gLJL·5XջOŲ; Fqժĥ+ED$T"8xa8(6cwuhI:tVi##ĕZJvҊ!^ڵsNym6~]f8Pm4޿)̘QӸL7 "5D \-`G4nAMegw쨽rP\{E="Y0V~x9#^"+/*΍AoIENDB`KCemu-0.5.1/images/media-record.png0000644001050700006200000000327711317574416016535 0ustar glaubitzfbedvPNG  IHDR$xbKGD pHYsHHFk>_IDATH՗KL[3P ((q+47h;Ѝ0PH h0Q& Z V)[M#@[];*QYߴ;|wg~sNQAMvH޽Ǘ+W~4MӔMLooW,mTU)ӳg/^H{,۷rj*++# k׮_[[LӫWGl,+EP5̌s9X,EE>S>ö-yy55 L@ϟ'׮+XW@iiII4-vv.n|>nZZ98iNʕ>Ey~;v$8N1 f7n0TTjV sӧѝ@}۬Y϶[[@Ea0 `:2ze2LfZM328M`8+D"Ο?Hiʩ 77 ))n(nX:BW`fE(a4: ;|a (H# !\.˓,+?]a1-rg3ĴjZoU*]WtBB^::@,D: (Hf&0-!gg]%tijeH;;-d !D6v˹@|À5_5_BDE0(HZ'OKS vv+!!-[4| %%2KKbmsC +!Ɔ ::.\Ⱦ}["RE!PessgcjkN ϟ~!Cҳ(AKݠ( yʫXӧLB5_=_ГדDzVddʯb&'t௿ZZ<b dcc;;_DEMMZ}4uZܨ(#:66?TT" nY}QQ[[-MHgI]!NKKH`L|[|{适77/^tK%(K[2Fo ޛժj$x$쬻]X,EE,k2}ֳ,YΝ#>TW3D6{7)=JLI60$\FQ[[_C_@sr7,&IENDB`KCemu-0.5.1/images/icon-lc80.png0000644001050700006200000000253611131675406015666 0ustar glaubitzfbedvPNG  IHDRĴl;sRGBIDAT85݋Wk}|tfr:31IHSm%[{'hXJi@"wzQ x!Ƣ-*TZIiqOvǜ}k//N|Xz`uNݻt@eӊFV4551ANRf imcYYyKG?[T'b d#刚RhM9RN䔈rsm}m{)bN 03J)Ss|gvwwvt"}CbAbcEBr@g{Y?/!>CgQG>Oe@%i+∲ۘ/V7A-\_ZamI9nxh& X_a 8I>"Brp)ɨb A~ܜOE ߦpgPMrS3X d 0gp X߰#l]Sm PlhUY7Ts@?̀\ BNflKN&i_)C7e'Dp{~k!9G #(8Nx">_#dJwA4R%E:fdQá!;" Q0,B!XQ$%1xMm+mSȏnj ޘ& BExBLx,Q2% #HLX!0Ip x}n;YtC'~I}u\UQ֘:>InLgFBz3Pf C& `y,sPR!r8/X1ʄ^ABD(ip@IG0Œ̌LNM3#P.ĆRJ|t#xfnZ#8q 92;/~sesXK4>^"8MuӀ *TDkL;Lɭjpݛ  ٻO {[GOP75Q{z}oo~W`8{3՞=lnn|HUtg)Qw52Xs1%7Z3I2|8`woܢDD"S_ه>GQA Fr<F KuՕkBX9$\gOw{[2+ǀq3D_:vc_޾55IENDB`KCemu-0.5.1/images/icon-kc85.png0000644001050700006200000000271711131675406015673 0ustar glaubitzfbedvPNG  IHDRĴl;sRGBIDAT8E[Uw9g̅a P%U#5ԚڎVckb%4ڤ&j5AӔXRR2L̹{oˇZ/+_>xW61v2lP|0HcȂ@v$nzft'@mltcVE$! W 8CpEwxyGI{f}酇dqC{g>"AF<F4(1F"D:ˎ;ٵi,,S/21zv{,Z-+m,C4*FF1\xB*HbvmUek-5^=ri~?{V#R\)5/ܶzzEC^SɊ (' = 1S{rosr*!"ƻ ,!*y$PCddJDP%DXfF+DA!5\r:cDOȣ37K-w_18Oyl !fIW-lT*)"BOOdy8c۶=$p8zKLH5ºo|sK cHӷzi4>QQoQUL94oa?|زqf3G42k36Kj#PZl~sIr# F=Eny;cq: ?vz-"~n}t3_F%^wY_2 M֯`4Oyqv_/+Yⓛ_elxbYP%b 4-q%rmt86zx'^T4I٬9c<Ǒ.^VP]{Koo؊NNf` RJT{lJ SSv+=[ 3O &_!+ }r41(T6tjh3j`2_3^ @[("wV`XC^׌y+2>>FnsTxǫd]qbe<+0׬AP ARAon$/rZM wj5۷$-+l_,7 eTFߘǔ 9{vaJ2Uf͆Q L1=wxgmqrxkF[acn:>TLRkEmY!"w݌_:ȩ[ AP"* 1E;@T`!˭; .O]O.M)ÃCϏl GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK False True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical True 2 0 etched-out True True 0 6 Keyboard 0 True 4 4 window-keyboard.png False 1 False 0 True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 2 False False True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_EXPOSURE_MASK | GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK Sorry, keyboard display not configured. center 1 1 False False 4 2 0 4 False 3 True False False 4 4 True 2 6 end gtk-help True True True False True False False 0 gtk-close True True True False True False False 1 False False 5 KCemu-0.5.1/images/screenshot.glade0000644001050700006200000004667311340261610016637 0ustar glaubitzfbedv KCemu: Screenshot mouse True vertical True 2 0 etched-out True True 0 6 Screenshot 0 True 4 4 window-screenshot.png False 1 False 0 True 6 5 4 12 6 True 1 4 4 5 GTK_FILL True True 1 crop_left_adjustment 1 2 1 2 GTK_FILL True True 1 crop_top_adjustment 3 4 1 2 GTK_FILL True True 1 crop_right_adjustment 1 2 2 3 GTK_FILL True True 1 crop_bottom_adjustment 3 4 2 3 GTK_FILL True 0 Left 1 2 GTK_FILL GTK_FILL True 0 Top 2 3 1 2 GTK_FILL GTK_FILL True 0 Right 2 3 GTK_FILL GTK_FILL True 0 Bottom 2 3 2 3 GTK_FILL GTK_FILL True 0 File 4 5 GTK_FILL GTK_FILL True 0 Format 3 4 GTK_FILL GTK_FILL True 3 3 True 0 320 100 True GDK_EXPOSURE_MASK | GDK_STRUCTURE_MASK 1 2 1 2 1 1 True 1 2 True 1 2 True 1 2 2 3 True 2 3 1 2 4 True 1 4 3 4 1 True False False 4 2 True 2 6 end gtk-help True True True False True False False 0 Screenshot True True True False False 1 Save True True True False False 2 gtk-close True True True False True False False 3 False False 3 PNG JPEG 100 1 10 100 1 10 100 1 10 100 1 10 KCemu-0.5.1/images/logo-lame.png0000644001050700006200000000710410527416074016044 0ustar glaubitzfbedvPNG  IHDRa@ 0bKGD pHYs   IDATxypeǿ;ӝ#WH:*ˆ h@0"8;,55SV"&@"g@Qew$AN?";$R=>\M esH_!R H= w؞1_&?=E@(a@oׁvQ&3xܢɎ4bQ WkWbKur6腦ʨ0NV$d 9q@q/T8kxS#BG"+Na0[' Bڹ6Oh@M4C郜IIm•WwdW{ ,!#%&hZf{Ccke0N-6aC08>Rcy`3bU@r:,\Vţm ("nrJ{ zO=ٓٙ!);K$2="_ӒUK XD[p\Y= oTkm·j%;jAҎ1V-Sn, Ox2x>hV<-zȣ!\vHTR b:VGA$q)bϐcz/ rvWp:fzԄI5RF ƨ8J@KO^O_f8 PeB!ׁN]c,Z"dkntƈӻh5<H|Rxr B;nsl6ˤKHxGSENL ZP2RhK4d{ﴞ8AW:H"q)s]eMY J3M7Y_TXSm>+H}ugϑ)\dy,.5e f: "ZLKݺyU71> Ƀ6^j&'/=̐ fJ2F+o @!0)l,; ~O{Y L8v5<(䪪.fD؆Ruy_˖JB^ڻW<N=\eϚ}?sAܢѶ >g@ D+پ"H;G> 've[Mջ]g~8R3z/)xZka{4ۼ<5ån]9)wMl9FMas7UO3r佚"X0VU,̞ußBY>Irdݰ &ϠSTGGWDIe?: J,4/~hLs3- #;q,/oD%;g&6Bɦ"ڃ|U:gS%sK0ȮkéZ %eMPQc.bA33֜kɠMW \Zp3`s &ƅ aسb-IosΥ)g~nӒ!Tk( +)T!bץFNZrhd~xXC+|җՓ/M}rUsgسhʳ4w6N0L;=?/ʞߊC#a@ؙGILuBNcl8_Zs9VDuo BpchQ͢A]k;mP96!B ׈up M 0? '|]:Ą3j~3VM&X0(w@%GX>a|*RrcuawTñ5h]U~YVl/fI4n.֖1j篯%:4RO [N !}dߋ98hHgd܋jHgU @W:x]BUDH󀠰XlusR?z?50@b-]4oJod:qo ԄU yU@YwYzWVGtcO|G~V.M9tvl%PQ >U]SlF5(X9nU0M[hΈ㈫ ]U$FaCr銍F$b(._rtU1y2kqQQ(X}e՞iKYAc:Ue@< Ӓ (ײeko``u%#v Mxޡ[ 2Q;?3uYKwBCS09K\&IJq;[aKQF?G o #7xC鷲҆45^[}p 8loXvWrXѕv0o*|w`@ۼzZ*<).L^yqJ" 5ݗɶ3AOt|c,s4-+/uue{'Pm$ \xިlpdZVGo1^Cw?w=IENDB`KCemu-0.5.1/images/window-audio.png0000644001050700006200000000633311317574416016604 0ustar glaubitzfbedvPNG  IHDR #ꦷbKGD pHYsHHFk> {IDAThYiPW-|(> AD,AQQXD"cLF+2.(ZqJ2&hP\Ab$/{~\\TMۧ͜sO K)Jݮ0j%.4K.ՖY)*bN7֟>uT\oV o91iYl,1(0Um <_TDż;[^=Sz5"8BM4D:t( Tg<8CQN?,# &N`"H"@;^[;^I"}@HޣRI2\AF/qef22ȋ&O )'i~=|To u4Cp-Z>o` +WSH>0WʁYMZf덍AIfED`fgf E3w}{0HN:'640(#=qf$*"mM7n] 6$PDyU `SwTas7vU͌U:i:>N$2lo>.jjjK/샓& Ҿ"vycG8`v4xY]<)WrH0i>0%8ᰢ D1< <,hog=;^ijЌ98H(Q@~}p~:?Nan6e(( bĹnqܧzs*Θmj޽JD@rO]#N';E^T5=ewrw0fYQUWwԠ;*Ш |$_h uBdd#4]sH7] _}uAqAw. NEXaea@JvD pB*$,tB@o<O"qo4۞oC|ΘNar6r^T Q5SSꦊM~W]UriNi#r'N,.uf3|F 7϶ koa./4l-l Y 6 `v0lҲ*W^)LScMS- @CY&SG']k!qe244Q@9~zz{ݵqJT@-@ZAC`Fu8jc1;`O='OR~Ҏ+Űl_4A&89҉_ 7uɆb(Jo| yRZs'qS}z5HQ 祯 :2j"a&,LL;S_fTNOTo2l}'b)#r 7?ha0\fΚs-u[6.Z%s=:(9Hko^${/ HT\s%*_l޶=6o"̀_Mv :[H5pgp^WWfV.Pmƅm RJO7wZDRhFL-%@Đl4L/xUX+k|]T o$E%h-'yB Qu;~f?q~,ܦM8m>u83vqN)&ν}=Cm&_*n7L h`z!E/YH^FPkT=H&/Pw* *@ e~{u1eP0#V;8ɜ{\t8V(dH & 4RHitB>W+Al10֘ g+6T1r؅(ލו4:iTp7n @(}(gV3@ˀ1ω  TbH4o1 76x&w& p"gI<Vl鬛-`YGujS:P7-2 WT}!.g,f\\Ȩ+I+%?iT^PR"P~]h/$1*uѶ, 3G]tX 7=foMco Xr tHzJ3$=m21 3a>%c A T8RR DN:&Ą&dNÊ;@O]:@*x CzJ3 I{Y%K?`@VQ\\q?9ԳT!Y KIXVmKt2ʕ@h??)'֢/X`9d ^c!z%fRqBq)B杙IÆQO jj0{,zc0m8DAiR K.zmMcrOOX! ƠhnkK q[QNcv1vB춗l N:xHRaЛG9MH8p WQAɪYSUQ PEI$p, EQDDKTpK#ƺn֨[t ,@_>й>y` su sVH:[Q^N8}^ Ge$II!J2-ddq#tC >||uC X,aji-w}3mg&wN7l gĮ_'|QIY.RKH(-!k^F\5'I2ӧ N]ݯeoH(F?DLIENDB`KCemu-0.5.1/images/icon-kc87.png0000644001050700006200000000255511131675406015675 0ustar glaubitzfbedvPNG  IHDRĴl;sRGB'IDAT8m[Wk s3ÙZja1)&`fDo 5bB‹*BX/541 aL2 s?a|߷oˇ#wv>2lP|0HcȂ@"}C֭rJx-B`)8o pGE6`{OZ׎^yG,"y]Y7N,( 5"1@PUXxSu;%R]"1B8Vɋ>|g_&"IʄY\\brr4M)%%&oNr=ɓlݺf1hUJZFn4^mR)311̝-V2Ν;ݻ9r1F1ٳLODD(2z:*y:;;@UfebnԐ`\vcY_.]RIAcHLVC⡃\|%];H_IM)R$I&&&rE[>})N:EQ ܱQ!`2R)SyKwlЁCiU j5b4ƮD%:G@*Zxpq\… ƍQRFbuT$ ܆n7~L>DDjyNZM:<;,WvLJƀx>!OUED6 Ykĉcdd=/axh[Xo6@Ha6(z;]?7˹—yVPYݝmm² gp>wU1?k_k޽Kʕ[c˶m"ez/b% 5"SxY!FDkv=}+˷,[, 9fCNjxVu>YeiyX'k6DDA:؞݇~%4XXD|AZ[$Iny 101 0.10000000149 1 KCemu: Tape mouse True vertical True 0 etched-out True True 0 6 Tape 0 True 4 4 window-tape.png False False 1 False 0 True vertical True True 0 True True False True gtk-open False False 1 True False True False True gtk-close False False 2 False 0 200 True True in True True True 1 True 4 20 5 True False False 0 True True adjustment1 False 4 1 False 2 True True True True False none True 0 0 True 2 True media-play.png False False 0 True Play True False False 1 False 0 True False True True False none True 0 0 True 2 True media-start.png False False 0 True Previous True False False 1 False 1 True False True True False none True 0 0 True 2 True media-end.png False False 0 True Next True False False 1 False 2 True False True True False none True 0 0 True 2 True media-stop.png False False 0 True Stop True False False 1 False 3 True True False none True 0 0 True 2 True media-record.png False False 0 True Record True False False 1 False 4 False 3 1 True False False 4 2 True 2 6 end gtk-help True True True False True False False 0 gtk-close True True True False True False False 1 False 3 KCemu-0.5.1/images/logo-flac.png0000644001050700006200000001700010527416074016027 0ustar glaubitzfbedvPNG  IHDR@=AbKGD pHYs  IDATx]yTW!,"`dPĥU*nNTZFv.N;R[+VGme9 * B KXI @j!t7sr似}'y>x4!PhS@hG0#6CNU闿)d2666p BPi&T>LaZlVT*b޸իWFEEYn`eeX,H$R!\4RBE=P Q)*7/>%22d2d{xxxEceqqqٳgl6DDDuE Ab]RrZZZPBaH0A@ct:>...oy庛7oFrqqYR~p8yRryQmD"~P"0B|~o®Z*?4z?`gWM%ě߆Ζx饗6~x<~e2?ޙPUU'kdGmh{la(Al,Y:`LB V4jR;jjy| ߪܙU(`{X,BBBf1A@$hT0gO01Hժ`F p8dtt ! 4K(6L ٳel~J%7(Wpww ™Y}@p5StPRR2rϜ ۻg ݍ ))}#3A0 :A" 1f A@jV ,,̨z]]]Wdo,*jP^^͐ 7nkkk{ƺ6l['CII @FFFH$j::m׃wv)fLp ƺ@.J-`˖-^mmmoRi%P( ܀Nl߾O <|PMq $ۯ V*A*~:OԕU<h p@һ6x7nIp:J5zV d {q)//@q2MDDNN bwDDY`BCC7pId `mm `K4ڗݙΜ :89 yYXؼAt:#b0 ZPPM&yN}w s瘢??jkb?;ZG[89˃!P#]BǡaST<ˆ|٘S [t?CCCgvn߾=hCkxxXȑ#L&s'GpjPmeJp84pH,k% "STTI111k\\\2Zm7|sϘvGr),, ~r@ a;kp8{Ҵw`^yߓ =KU:q|a]\\,@tW?%%eS36vgT*7)ĹW***}Iaa w y>9 gy\h,$+>}y\a,!_9 Wֆa,hZ@wn#&U ((p=F( Xx3wΜ9p~ƍ˖-{޼yjLNv-~H)-Ѹ \D1.`*W}5JܿOp% L T ذu3zk-^p8j Z[[%WgןFfch1={X88LP&=P(T*hbbbsJKK{/\{w'P؞M U*UJ}}#swI\\5 EYmDmf}ǭYYYFկoݺfThUSS|woŕ6c\ś7'l@*JpO=-juRsssN;#Sg4uuuAYYddd&%%MFBMM7ϟT֙PT]vX~WWWd2^p!5,,O11[\75wlp…lTz ࡾ _ -.qX 1`+:Cd⣣طo_TD0]BJ?Oj@A @-!F'КQ(0TBw0\?V`:@ `Ac!SIMMv:F!QHHDZ%!8F+@ᇰj~Zhp½8 M+"Ùl׮]{33"N1ꩃ.E._| ԯW_ԈJB9tmަx?x(&Cm!^I{`ǽU_ՂFNH$P(L[dIT*֯J>̘?˶mۈSt:ٳg% 禸8w33iieOL˟Swh4ڔhzjdRR= HqqSĝBp8S`0hEEE9v6S\xЗ'NGS21r;xi}bPՑF56YBH4=uرO⩏@x<^z%͞T~)Aǯˆr.Ot/ryg'P - 2 4ԛda9w s 2ŁS>Jٳfͪdt6lr۶m6m ٴiHJJ<r9hcȐNU1I~hl԰BХ7ջزe}aa# V=i>$!;_# EoOǗt}RGSk&[֜xW. LVcÆ ky`c3u888cbb/99yUYvv=WY,ÅD"_~~g\ R%N vuAA޴NLkggκug@0AJKK\ͿdW^pgOOY,+7<< V (u&-bm~]nʵ2-(0) ()P<]NXaa;&f'ɒj$srrJH2Ju566i!NhgggdQQ O01+944/##]vnTT7;v{္@ ={v)Z}*-DU^ //֭[V^B&@QQiSPPPPP֭"(_|`9s+ QyyyiZχׯK.5ac'!Cd'4Gi^5.fwNlh껮 j$ lc/^J5qqqP(\.WH״rʅ[nuzҮ^+W^[[[d2}9{r߽{5dmffVBF,L&;nݚ;v$k4wj Db@sc\Sc.d29>طqF @ xoor||<ё@&MMؗ_^HÃ, _b,h4:<oA  Dj֬YΝ A߿JB > ĞGGG,KOOOd ʊa ORh49d$ c P(Sct:aFH$h4#))) 66o-Z4LYEѺSRRtww3Xݟ}R>TAAvppp433P* Hry}}}snDvvv>ށFX,2X,ǃ.PT===kߺu}NRͼ;::ҥK-\.f|~YYYٿlHQ,B  +;;zccc-,,BUUU܅ nhh(j#Vٳ'ZV$ XXXzxoD?555mh4M޶mmmmrv{{;iIGGP(X* (QRcEE@KK3PGG_y|```s\_9}QD"mii9y'' +W BU"lpu5ѣwrsskVVV{(j,r󡡡au3̘=co*+˫ lmm8N^杝}N7nܸaii9pH${xx\ʺf&A,ǣPs%%w_Aoo/ªU˵E_޽>qAccq= vtt2_R5I$OkjkּrڵozzzRU4''m?T \.ʕ+bcD" glbB tqq}/?WTs"W5R(:p88@qa&$& F1#JR-1ڲ2 BB :Q(8B!R y!& D7rUT*`0A{a IDAThmLw?3,..+ •݀`awm~  @% 5kA.X*T##qm>4,Fp* l\luA]qP dY(8@/tˣBȯ7pbӛ0jcHX=)A<RjxVnE1%2[{!Lvv"^{XvYvP|pN9pN0ٱ!sMUj'hkWmւhQKgu/+=?M큉~2̗̃YWfR - x^n'v<枇>kCkKоR}>r{Qp;\0sjz)0db~z0bp=8w $ &mvr*+/rnW`ͩ7978$J N Fr57bF0KSKSۡ?TҵŮ$ a]ȝr ܖ @}\cSϨwQm1omC 'j)E:{.c^9ߺOpPp;k%׀X9>߰?)JHh/'Y`~~ 8ca2dܹ2sv>x2f'd>Xt٨Km: Ew7]o¤!/C-@.rj[W5` L g@ժ>j g^kK^/X 7E0}W^ bVY^C ? Du0↩7RQ(kV%@mp elܣwݣ0ssFR4)5G |96vQ&(ϋ@Z0tu:Z9GOzER&?kXd[00?S1K\-fZ/|ܡU_Bm)5R e^2ox8ɱ$Qo瀷lOսDI8SEE(X Q)m.$KIr[㯝7L0ZErIENDB`KCemu-0.5.1/images/video.glade0000644001050700006200000004406111340261610015555 0ustar glaubitzfbedv KCemu: Video mouse True vertical True 2 0 etched-out True True 0 6 Video 0 True 4 4 window-video.png False 1 False 0 True 6 5 2 12 6 True False liststore1 0 1 2 2 3 GTK_FILL True 0 Frames per Second 2 3 GTK_FILL GTK_FILL True 0 Start record on reset 4 5 GTK_FILL GTK_FILL True False True False True 1 2 4 5 GTK_FILL True 0 Encoder GTK_FILL GTK_FILL True 1 2 GTK_FILL GTK_FILL True 0 Quality 3 4 GTK_FILL GTK_FILL True False True 1 quality_adjustment 1 2 3 4 GTK_FILL True 0 Video file 1 2 GTK_FILL GTK_FILL True 1 2 1 2 GTK_FILL 1 True False 4 2 True True True True none True 4 True media-record.png False False 0 True Record False False 1 0 True False True True none True 4 True media-pause.png False False 0 True Pause False False 1 1 True False True True none True 4 True media-stop.png False False 0 True Stop False False 1 2 False False 3 True False False 4 4 True 2 6 end gtk-help True True True False True False False 0 gtk-close True True True False True False False 1 False False 5 50 25 12.5 90 100 1 10 KCemu-0.5.1/images/logo-gtk.png0000644001050700006200000001460510527416074015717 0ustar glaubitzfbedvPNG  IHDR4@UT<bKGD pHYs  %IDATh՚yxU?7yt4C4'en Aʤ2\'^W@IR^:X tN6MǓ3'ihz{<9Z{?yu׉wswmҺ m)m8a E7n䣡JޥU9kEC]UClo~CzόjD.n_9J_24yd{/^kO k?wSl$c}?cp-%owьLl-px~Ӯ^θ)$3>E0>R2\U'J`xpWI]ku%E .<;^v4E1@axLE(]| U' v7dxcM[k{뚃pё12x?@ P\!hNjژ/zҩx͛Pq ?:Ҙʌp [IѼq2 O\k'EXHicB#P`Q3N9SةNꆳN;^zhW $]Cќ膏MeeB4)A:I3 Ri ͦl O.#]ӵFcc/ͮ[?1Ċℿߛ6l;#N5- _ᮍ+dP$ ,]"m';Z(AJYs[%"t|ݿ#3ro|{f@]u靭\E@d>eK/"\h+R,'\'TnzFfs^!Bp^*cB3 d=+z?̺R#_.]= P6&Vv^l~[D(Yx!G3= DG & Ly_.F3 r]>)`g3Bzh͜t.ݯ7IMiqpi['Wͨ+PcDJ4N&>eױu/B XvM31 +qZt3re/ce˓V;ۓp{Aԅr羧~: OTCTA$QBpO>ˢkBY)7Z {׿3k(Wt2(C7|9M[i2VW; / /Lcš,) 'JHW t逦>b,)NA%T[={_p!|$]Coٱ#${ F)?Pl( ֓jHf R{Q#6mEeh`(kFDBtsOK.K"y@'WUVURߤ[!Cӽ.=B"?aUG M ޾mVJl1f)|GB tTb\*P!dfɜOXGyU>3?B ,}O N#y1ɉlfd]ſ9BF&ixȱx'>~ō5\\YJC 'w掺:jZ~Gv*2X-J XH%q"7b&{`2gamʢG+( 7.)HZQ&ym\oh ;ΧH poSL1H[ƷWLx l';{9t [`ytlɕdq"(LeR|fn^emM%J ܾs/= 7̪qQ/mkd|{0:h,[I4)ʃп~Q~JЃXTFPʵ'JNBhJcqp%!ST P I = E榝;+[Ц'ڙ$'tb^1+oE_;?*hE W Iߴqvs|< * vW\R86rĝcB#VNyɽI{;~Vvpbq鴆gju"SYJHsij{4#0&ʃZ6*+6}(Jr0Gʐi6 eKu!ƥMp9pTɄcsō7ѢZ8QӺ<k |j5rL'Nʢ>ֶ\3u3KpNA¸uD QEx&ztVQo3{k ->;HWYߟl倧vsJT0<-.)@2K4֭ 6UBcMkODI:WSJ槎%tJF'˨Jhɨ0r+tx-{O}ޣXi0`_JPŞ|TL Pru#.o~|fDd4WcD%O3aؓ|m"m?o]kぢzMz(?]:23` gOms6my4ìϢpn<*W];t_}}[_jW%66>0Fg XnBa恎$~a,/ҖxgGhy:#ڒs ]Yd&ۮߍ7=~qҶ[-X0? S̐7իpzoM7sjUr{(o0 33n޳1rtMM pm:4.p &%mq軝 fq u_ذc/rx}SOTE ]Lm Wy~)΍gܥAZl%8t/V$^^[ `UU[̄mo4k|sAE|iі΢$hA]I:kÈFMd'vl]vT[_<ԶS=k;;8lDA; S <%L|m+#9BH{n=[yUnOTVEs/~Bڙ ȼ:yrťk(SPUv=7=~VZ^PEbjqQ*03>1KkjW *+0ݐry ,:`S006cGWziI",?݂9y\zΕrdžiz鐚/ 7/9}g9 83[Ooz.*kz6֠>|WVڻ1i7=^IKϺNђG;a͏YE.IG_&R>IENDB`KCemu-0.5.1/images/window-selector.png0000644001050700006200000000730211317574416017320 0ustar glaubitzfbedvPNG  IHDR #ꦷbKGD pHYsHHFk>bIDAThY{XTm` Wl2rLSz̬|*͝M}Sn3ۥdnSQIBbŁ\e:d|xk3{{[ ?afЙc0XX+/$.yz=ͽz|]#A|t$BhMV2:GGb沺Gv~\z1/vD/ÒGŅ%O2eS){tDm:/Ðe0L5>y-[N~ ^ ,ټIdqƍO'22Pu]\]*-T(fkƦnׇzի@ OtiNr>ۧCO$LsӥR9ݜ"9Q%6/<3'ANw#cѢ `j`lT12s͝mgf{5^p$!/o*| mWobsP*~Uplvq'n |? mem5 ?r;E~b14*L; y\JŬJ97Ef=k6so]['BSx̛T#%S#OrwvMaWgIij~wJ.W}hvo$ʜi>i@!nrb}Q,ۉvn]:1r5kbZbZE"bV1sEJf^r@Uq)SV{rygR@qT\Ғd$&ebk7&3Oc2|m]i6Jy G2˫uo XĴ)c,ne4034L@zFMZ(,_\ {MC$yLWI'xP5h pm~`::7F~DFFnQ@[UmnGq8T-*IRC_ߟ`oa3CM 9*y/,V򞯯= (@k sT8Xy슑Kb* ~G؜G&LFE{x<@|PFNpqraQaZ毭Ow]Mwazy3gREUs*mjŊ1kY Ǹkk+Zό׆l49VMFg 4oۀٙ'-?V9ISgNXXCg<[mD~ DM~UL7 /V5x@ ߧW3rt|&'+OgS+{'  JC'ݱX j S?L>t548ho! ԝrB, p,lHY ? 4U ʀڴɉy'=l=)u) P.Ȳ&5nn>|DS2Xp4a 0;QlrzA4 "xMMnLsFύbuQY]+Uծ06}/] ZW[, `࡫@s f >f_Xv싅re9'gt擀Txv$:C!IK)2} URyȚ5ݫQkWHgΔǼ# uFnQUfJtq% TnlfYՀeIR2ٲL!V )2nb PgXgy#2RE`p؞ vpAg00WIDATxZKLQ=o((-B#_ݘcMԠ #!5F;. +Wb .\kCZt3әʜͤ}{}o 0aB1(-_:nvǒg5z]#EJ$`````@Aߧ6D|npo QkPԒ0ZĎIB=Da+~H!$IQ1鷎 :Q088888>?r\ʚb=#VO>@@z[BhɟKGu7Ldm3I@+=ȴXҭ.rIx<̛AF,e &xoGGGGGGPߏ5GEbnUz(S<i+mc 2 ftTTLCwf]#L$º ˋJo) zzi\n,^Z2a"SA7K&]XbXlmmf͇qoz== 013GNJ)pءC/~fw8w5KG@@YَuJ8 =/]ͫWa}ŋ7ndeׯ_$UE|:3nݽ+$! B}}ϟ BD^GdH)!,1>}Bcn]]U/,/ӄNgE:_@Y| zR@gxdeaΦ z_wlYffe q[XmyyJ1<<:2pN'GgOm-޽ 1GmܘC)3Ty\Uv| ꪫ˳@YXw'/#7w&J"5TPo?} (d˗_ fQ,hdžBLN^$爹ymv&O17Dz5bPU{7=(ccV55?NM[2?nhm=qB9DR<8jk3vh=gR (+<)A` YSz8W/QnЮ]pl>8^be,-[) n3ef"ɓ0NgEWv `iq^M(+Xw,~L%noҁR<=x)H-Wof?~E٩dNXs}@R42!#{l?! Pf!ɓhl+IDAThXiLTW{, *PAZ .U\ $k5uj&՘*!((ҐAQLmh%D@ " a`ͼqyLPM#_rsܳ|{y aCA4aBC&3I 4&fЁsL])򀀁ڑ숅gG ǨDIXe9@Unl7ڃCAZCCNRKfq:=%N=Z`{ 44ԯ%_ cTw==@8nOc̯ y`eE<.tݸPJT$qe" DU Zn$d"i+xHm}"eUKTK!RM7G̖Ou99pJ/g%`i48gӜ}k#%%]4+J< n^nwRL0B.s+ mn;jV]Gi yF^x "qy ]W}Z˖QB@ OoR\㡛2W^nzwժ>'`&^M; /-Wea>IIr%ES҈@!;[f)3C7^ g,tʐm:`g9۵92VYYP͇5+jO;Ζ_[`YNYlsv.!k' Y;+^^r+w*߻β(qBVh:ZhXӬ_[{A?@?Mנ–-ngvx<ytuHsI$?I}NO#ZZ QV梶"wKyw~ =GR.[Gwu;_z}$g$^31P2;Ļӯȑ#+TyS;*lB6t͋u:@bU%KzmZ Pe2ﰱMa=#~w[kn=Oi.НqYb\ ЇW2}i8v=ht77ri4HPluD^yM_vPu-IˎFӁFFo+IDATHǥWkLW~~_[*P +L,EeRu 0- $.d.fsC"6܈[6:3s\"Vh"Q-mJ)]I˞9=yҧJ/\{=[=n4A j}==_#wbRiϋqr$8{7MϏ ٰ|~~d40Wl Zj6[Klz׷~rTVi4x σ!!׮GDi4MXšs9IZFK=%R*U]XMQRblV`"PHQt g,)/llK;:`|Z2뭷ޥKSJ_fUzHxx]jxӴ@Mʴ뀂M "/ ?T\ǣ#rtFTVVFTycD#K4VQ(==Lf'|~'ށ̀bjE$S(\ JStΖN'Vwt[k5i< 8qtβY7r>;p$9UCH'x,R"9[L>5\x=O9PXSRRX .ݢmqq6 U|y0ݿo끩ɩ:_VT55ߩ} 酥K^6l+TWw#NEvеw:AXL E 7aC` ! rHzsҤ7f9߯1{pPUuDFGG.& +id4Z.y߈DDELffrDd:gfoL&YPSb1@ZBh^ N~ "=.ulN;iggߧ'O>?T=YhOv|Ogݑ2elx@*22\=oO*QnJtmjX;;Kƍcu5A_ѯB۷eM.΍8qns?@<"DXhn\\4 ߠ( k{wy;wDZ)DZ?q?ϟ߸!h m.zbE|_RR|If:ED oΜm {mJkQ`E _<^_8`6L33BsVX_z޽zA sussThLLTvˠ2[gOBXPCK-9ىBv@ΌFh ؝np(hj(pG !:ժu/#+Y_olvXܛzJojJ7o8=Mf&x W ⏉?&靓;vwcc޻^nI SoGAy$C?OJf"L^p~kwpNק}Հ~6IENDB`KCemu-0.5.1/images/icon-bic.png0000644001050700006200000000263211131675406015652 0ustar glaubitzfbedvPNG  IHDRĴl;sRGBTIDAT8=Ke;s;tivD:):PQ. 5&Dn MܺDc qCpA41jb@4VZBLeg=9}>.N=yޘD)K|b,1F@pc|{+if1vb NC$#ƈ "XkAA!j|pe% J)54d{? hHP($!H$?|n4#',3kloq9677(.Ztv#ĈHoaJ)5Ԇdy^4sQZ^ߠ2litpȆ٠FYHQR?elP(X?]8=+<)FC6qw alP_%h>x7@TkIO_`[]g~:˗6ٸܠ2lxקxWU&DeB|-kO!߉.LP}w~>I&DXisgrǨ e,_5}^v"&@u_ABdh!3 C̱:%3}9I! B6лd"! )%wMYQG;@b t ػo7SJNE)t$Fkߨ3A=q _eK%Cnt(_|/$1-+";Od|xn!#?go4BB6.Bģ خy=1XbLj($9B =nAߞ41$:OHd:CGbJD T=(u-Zk$Z4Zݯ9 L;D9F༧h`* 5IDAThY}PSW?G$D@T2D>A+D:uǮkePvedgW;) (RT@?]"@B$$/c8?s߹y{ K{׬^! vDބRaPFlۆ5,,xy!-4]XxNvu HbTO ^QAPrrw$:>I'*rY ntmiյdɇ,(XzժmK>=  368ΔHf-6k!S6TKt%9=9O<+ XGNNE_seQ,Yxas ]W\>>@J  9ePydu'ic\qQSf)7ύn`wT44"qJLDO,mΜb $-j3-\]m*$dݩES&'#=߿,-YbKP2R(~@W<ދ+WJyLnDt(˲{ޢ|vwCFw sɏKbr_vj0T?N22P [Bf>673T0s'"~^3 CJa\\x$loDfѹpIENDB`KCemu-0.5.1/images/window-keyboard.png0000644001050700006200000000370711317574416017305 0ustar glaubitzfbedvPNG  IHDR #ꦷbKGD pHYsHHFk>gIDAThX}L>c󍨃qK1-`C44J)&"L3)NH]HB*V4( mtU de}nRN>{ޠ<$Ҩjkj,:sUuH*L,`?at3M7#bJunrRuDd-f튩Y`MfL nw7z5%] iB),[yxx`w2 v'hu4GOY$|oGL`ײee+X2XܲXnYʙ/7z&`lC-tk PkH.2R[(3I=9FG}ځ\ZΏ0mf4L,zۃum6~R?B#N9$Ɨt+2ZрPR;;J)>J|@|ڹy ҇{PN,T0S:fY' DL.#+Zɠ߇n3F |:> $$Xr+I gnpf ,b7 Ό7E_V>v`k_?zctcsǀjmvA#h=*G D: HHݟܱ SM) <doů  _Hl2MB?*+$X_%~QI?*`U1.(MV1ݡ lwx^kEKYc0U.3oU (=s W,G,J4J ?Q"h(H'"ch=BT :!~Lȟ6U26V w2_ʑR0wL6@؉}8$$Y\'ZFM0j>~5| P)?QSRfSo`Ko5:+4zcRf1^uod pRf@.Sv{jk _4 $(IT껯ޯZ\ks!k|չk  ktF TC 1~ŽaLpƙl}>Ž,y>~{~㍇x/zZ),Q^С>,p_}y|uqH9^IENDB`KCemu-0.5.1/images/window-screenshot.png0000644001050700006200000000311611340261610017635 0ustar glaubitzfbedvPNG  IHDR szzbKGDC pHYsHHFk> vpAg wIDATXKly.{<3MD#pZ^ DORn.E+!Bl* @m -Zvd%Ʃ-Ǔ_Ӆc+IJEU9{># G\UD~A]ӵ% "Riګi.AS 99&psz|c;SJ+K*LO @ӵރR@DH$8@'R:v;ikv! ß>0de¸3ǟ~tȓh|ot&R q\q*(,2 h+bѨ5XbqOa4i=@eOO i7-F.C7tU60LD2A"e(d3&AjUk dGd*PYl8JĽ 8чE"jO>x}Ig1/s%Iv$wWTi7;3axGVjeke(*9/9n}} |{t&`phK {>|M(] phݰ)0a Ǟ?6z+q''޳?D\k70X y=mZ&okLW Ƣҕzl]_ôLJ%\%DX^\f:MԹ)"}y"#"+>J)"!KݑkM>_r펡|!T)Dr|y./ePJyC|pμ|4S/27;Gn/;|U,/.gihY\roL4&:rD#K{˲#}^D++ vpAg,`6WbIDATx}[׵LϝË($J)ɲa 8I980!y?HEIތȱ˲h"s:+Y{]I53}UַjDDDUPB *T(>' 0 pK~yc *TP!<< X4 8UPB 5g44B"RA0y_'R*TPB(X?`"gEE\K^.14?.$^:TP`CD*-483fӉS1UF]㛦?i^}C^*TD%T.4)e]вyY Sp*\B6+kϵuT?ZtffC+`EgVl7?BeŤ,Λ ?T\B;(FqNqq^޸Tلآa^U *\,|Vr* n4~glZIovr˵#Pg]4uhAhׯB {@%V &NeEW~•l Sˬ =yΛUvj쑗pUDB CF*Ui*A}}<ʯdC~"eŸޤWHM81(OM~ѪP;L#V ӈQ?{Vi6oܐibhi-d^2-vkESYvhUP|$X&V6Qm"%Wfڵ, tSpeGV"-&##-d•77^@q"7gp\:꼄"Z*T>V+RBurb0<zDZD_&^Y-y}1Zx]!Pv7>Y פO:5)ehUPl$Xi ̽P?kbe0<>~*)a;;ߏFwp&T ~=}L.*S."eQ@P=V' fo3_P>oy&!@4Ypyy\,:VDB FgSX1A &T RB `05e~nqz:?}]~%F4r4'\<[Z2_o+Q/h%ZxMڶ"uApr'IfѪ+Tp6\P`kA<@ЄH(a!X@Mq'ĀX̌14szuy?=)#۳s֐ܸrQ==}VtDҡSDVV;Є*>Ԧ B^ŋ'OߏjUSQ\^"%S=@Hvrꮬ޾M)ǢayD;;"F׻r%h ѲCKrdW0*T"LNfOyCɹVqgs|9WT1h6;kׄ@Xx2Ċ'f~7}A⃅ <ш\@FWi+߿vme%PZ.EsJZsHί#$iQ 0O-G *0ΐ`%O܂4l?PōI+&2o+\ b U7KK/)\V8TyGGB''p'hiI_~eC4]ʝ&VKKͦ|&V=+h*ah`457r\YX^/z3&T!ѓ'I6Ʉ ӧ<~L?|Mtz:&)lL~@F1g`@oUib ,~{Pxv:VA(gϥ DMm"hf&)Mz"B \B)W+$h+:Qbd劉 ZTrp~&Vq EnmymȈD*db%xb%>.8ёI@y`c."tr*NN.6i-Q5 գG5T!iUzH._]ȼoh JbK"EFq0aU@q;r݇C#f5jj/~yOލ5;>6 AýCQh~[X6vLbG^C}U yހjIj/p?؆(f߿KG~[1*բ F| *ٽB l%ʕI\0!x&;s +k #ѷߎ\9VZk35% j@Budpb2B?r|"-UTq% D!/(42f-Օq/l޼I4LOs25n Dzkٳ/$E"%U.ݾ} эׯJ*?+*2+ۦJU1=Re}@|3^ӭyܴ|p2Tv *TU†HS͹Zr7P>ɵbbbSa  ''#*JHZ*`0?xH47P\qshHN׹5Lq"p(UAJ\X/ZibjMG~+J+4 UA< J+UhJ5jZ׹H $φZxO?cE :D8.*T(%]쌬Vrt9WhPKJ !ys(X!ɘC7\-.%n∕l6kWq; }DyÝcō&Hr}t~3?o+URj0+P"/4C\ø*w{?7cTE*?B*(U L7Z̠ uj(VA#sբq1ZEXB  %=&gkyU8']8w{ULJ((p\B W?91&U57j38}@ ٳׯ_cHiB;N,T9n[ɂ=B&bn bF21u+xi"._^\4[ECќ**'VQj >yp;7;,r=>798~s$GٹWUBl(U*$7kN "uۑ'th ͚umL>IVCaB&g8=ZKCl@`Ӏ#M2e \""N&U˂6jDbcNM@H=[_ Ev 8rm\!@Ҕ*,P1D(sbWp"WY!oѲ7.•UϊU]Dukў!A\!4HMdnB jQ͵J_ \#V4o&JUztm44ARD/<|/DL\!?ߏϡ*(?'k/iZlJQ⡉`!cS*"[3ݸ*JTZog_ s\  zI sX2> m +(˞A#-(rmL*V¤0:_@v&V(;ϫ\QcDDcos!A,??$V:Ihzn*k!'e` =WMO./KaPq(My P|gRrn4.IWދynm홎Ҽn$Arl&T(/񼥥R Xe#Vu^gQKEz~bߓ"l*L VVrm`Gr|nISl明쮐 V$ipU @Rx DAíOZ%P}hnM*p`VbBѶ9Vv$jv]xgGH.{l*:~:&V.ZҥWX~mХ+(W&N'VZ3q@VzK7b -aq$kF&l{~ $'\m N6)ylG0I`B!M| C9lY J[Zq˗уLBMѣNXaI܉ "WХV* n 0 R#/yNv+}|7>(J bGUZ:47ހbŊimҽ]9x I^|C~Wd/C;/B;~SZ0]*W.\ rYa{W/X!^0zLƇ؃P>gICў:3F߳8bRք[sX C 9;Ƥ S/"|yn J %2gҖ*>z sU>JոQ%mZ4`A!V} &zhmmchk(Xt:SS;;T԰R#^҈U:I_4Mf'5{q"VV=E[ نf+< U(~йVuD&zv:WJUysѠ88\BGr'Q&L#@M=׃`NgQߤIJɹthoAߓ+ MhB'THO?L76^$>5{0?2?O{7o޹Cn//,8@H@jH"EL52yɉ)aKVU}?\*ҶhR6V2mbeF亁XJp4a0=}UtVEW%+ʪ\iSW҈SƲ8yy/RQjx{yCe)U ~z>/҄Ɛ&>FPHpC>W-,9>eGO]cyyffjmy^9EFE{ ]&~yf+*Vo0AD>Hrl U jrL:+.]= ߳zVOthP+ɢ3xϻ~^0AhtTҠ>MThJ#Ne+gs[q[ɻ|gE+jUl+Mh9G?*r T\O54e蟵!Ƞ0V2Q}.Ox k2vj5/OryvBOhvxq!eB]qb<]=m9*V.XFDD x:0 rJKq=6EUr}=︊)柬MQ*>}|{^( ynd/(jpR=/+a9EQ/F\kDk*¬U<\ ^RLA@5+ʃ+sI F,/w:}$%0NB-dLhb*ͅ<V{DBϛI&V&. O݅9BŚ`Kk~~rDϟZ۬moGqڃ+l$҈U&ד qy!J)5)>'VpCbD Q<7.xfD1"L. )//+6=䛦l^_h%`2,MatypڽַߚL8E DBX-/ <&R^_?͚-uLcR,XW/\Q{LiI#Vyw>J{"V,.E\i5F#dYl^_ѡgyth6wwj56ʬ|Z@*XuHPnZ⒕H[yW_]^V+u QYEiΧmC4b<~~2a~?eHFE,jB&\.Mي~SG@̰+^1DϿZǵ&B?.K [E}0XF#^ C,\6 7g%ZH*Xip=E'b@k0L+{ZK$kRʤ`4{{ 3 C;Mh\]sЋ ^ДK&V0 l*z}h0ri*mU0 uO*2&8>-o}޽/F\%}~0BECY&Xi'^ "-gH0{6E˕Ԟ@Uo?=x Iک R+0`DHEszz7 d,\H 9xP7D+ P}DV'M~'vQ؊ `^R"Up8~]H]NXy1;؂{=޸AtaH],/Csj8kzibnzZ*W+$7窜 :NNo{|^Rx&@J oF8(n^iʛhs<naYi UcQCQ]L"4]Ƃ9L"Eb 󖖒s\,aOd`*Xqν ~PsT)zEQB8[._~-!ZϞ+9H(_vQ'UzH0gSt.P}\&P.!҄J'C+]Qǟl򵬊 Dpv+@h $w:l)ѫW|\95/n\4. A6`;Z 9Yٔ,Yʵ]f4+WU2uEW-HE4,7웆ŕU)io\J`ptyO[W|H/J!^CPzF7V%c&\kv}f%>%ZY㕬x|dy Vz{OP/p͡@9>"}~i)L8l6wv7,SS\ %Z|BBD ?Ysl% J2v+Yiərc$ĵeA47g&gStA,6<+4%,͹G#NtȪ\Dj)Vˍ]߿{7 ZD ٶD#ٳOף3?rxno?~5իw>ybVW>+q\ z6}iwyll_MtxyxHt||zD׮ݼHtWDDɄٜzwhm nŋ‡>وG 50|=6>LST29-/w:D7nܺ%wt~YBP [x! [ݸAlv|h5{|T%=ChhHNō;&&0mom~mNL9o0q̝g4/S(Lڳdl`d*Il yhP$kE D^ծ\S]) |jQxTP=D!"[Xg`^%qpgَYi.|iU{buK :\*V{Ȝ^"zpm׿& nW:9hCbD )<7wzj[[ǒkW]be6hssw/vws( -?CEI(-` DO"SS </_z=[^~wVV>\~~78.+GPxP>Vi?aܹ4$L@º3t˗DOM4B$wl4'߯Cbc&ZD ZKl!+ZD˭dɕʑ[|\ l7LdعȎټuoT"_xP&(@|x"Bu!{&xrvvTut &ZR%'GVR0/"b?/UGh朕hXr|~>┮PRĀH1OEs-p)Q@J{?5X DaHM@\|A3z>M@YrDn|第޼)0߯iBF@ =C<^j|] V]6B`Д=xA@~kw߽{Ie7X_~DaР$>_/^a|۽~=}acS!lzXϞ=}\o"Fcw=>/lD!a y\<C :&&Lb% O>xM;wy⦅\Bhy;r5I,P@O+WA0!8llDA\9Lgkj6ՂXEbw7D ZBXW6YC-|q햲*VZ:`\s32]}Xrf]Q4%Ǜ!:\6ݦ-9lIM[+WO[[ CFO>!"~ݎҹ} T04&eGtpA("XaP҂MD+  1yiiu6!#1;X-$AHSru+x /'[nD"Zr}$,h!7.2D3 ysץVN߳O}AHnZժ:E5kpV !Z[Lj0+ M̲}H7u- -̀v[[kk'{BW_|7?]"2}S< xSQ|U?s2Dr0At )!2XgF扮ٴ%Cqq#c>(W9zӧQjv=iyiEĹ;@!,hAgRDm`-A~cQ~@"ƒ!勤, Dׄ!Gݱ D%Ύq\/x$peي >Ǵ'1qBZ &~(1ŒtBy7C]K#VzC!Z "7q8[^F P(W6kjw'xBjDyKSL:#*F(->OzD$YgɭqG=nj1ض ͍EoD˄:c !!Ѭz0a;QEn0{PrтqJL상m\+6G[ phlUhY ]JV츿o="Z^^]e{^P1EEq&&*NRy+(Р`# 7V4=U͎A ǁR0DȚSMo )rP5ҽCG#.&4B.= ǩ> EM?Es:@zZaaV@by`|}q_H+:I*ON&9s4?:ȭ`B Z~??a233^#R ,^aijʯr+$A+W޻s8='M~5X3_Fk pz4 ,遇PDl6С¾ZVpsq֙ DliWJM뗖y( C;-m+ךi&DeVќ+>W# \۹(3|o~%HT3PXib r?Dsw4`H"V4Q$vSXA5ޭ6l_@(r|_ݻD yX_l7l4n$4~׭߿?KHJ|Ul"&X7v߿2?#$ir ta8YrA.r?g?u >#.2@2zOf7Ywo.FE{d6cC h0b$_r{Aj4VW^Z_o߽|GlnT1vJp!$<2.ÅI!Zڹ,-8jjtz{{,OO!=2GBb&n3T7>4+;d!v;;έ[D4NcB mx'E44! •l }!RIu9c_Eœ'Dw X|)t|s~^rZtÂՆq|ū|`V/1 eB.~ υ}*7Bet"W:w\ EeEu*`r=q<>gψ^NNnяܑ\#rJO5SǽLk q5aѼ+\wɵ?U %S1nو)8ĭr+ 0E0<_7=,1G8g[0#14:#VV`;XzښHi!znw$6tA/D7KёiwAp|)1ё;:Jy`NAW+[2~-{do/-ݽKBEtScO0HnVk6DRw&bAG~3>W'KRoZM.9~>/Hag,# 8y@LXL!nLBnE3уLcGB pj].A~ӕ5]$?^BwON E!AߟZ\+7`!= wvN0&V>Qg\/|)|_ >Γ'O?w$<~5{b;'W /ђ߻+݂be%n0VqN;d`ܓygRgE kqO:GD2 1p~1}-;A{HK.AÂ<.tg 'eٕn*Rm$UK݊DUEBoک\&}w" VJb<#}}"Eg.pnBnW\Jl Īf"N1k+dƘiۨ*y?y87BjcEmböW@hRe K6:%V6"EXaܠua'⾕9"sitQZ4&VzDtz7|ݟ,( ~ռ@J^⥉p#4\O.%"Z6\D 7&BxpkkJVHJ#$Ba $\-.xb,-5<_`\Y1ľrԊ [f,Bqpd$Syv\(@s:m"~o!h*1ԽCPypDs#HJD BJ bBUP;@9n7 %F-_}tb5m@ cX(P>0`NIDKWQ/6āE<bҀ\G&hyQ$޵k~EV&,~xMjv $qz^ǎ{=B(ns( Q\Z!9HXJq/ ?q]vw)!ko\wd~cK!Vi)NQJg|'GC\; o"ݐyqZ^y^Ua>hPE9IQChHH.& P8޺Zqi<~E'5ݻK6 ;5x$5_t:&k>%Y6nAݢA;`Ea؞ǭWtJQhҔ-{gm{Aﻓ6F}l3 LJVŝUߥ^W+ [9!؏R5P&2'1+\I9VB:A!@'voB$S]mĨm)ch54q*3~r%kg{YhPA sD\ yT՛79w,KnnݢhC6&_yc}vR~hc]$ بu*zqtzHhsz{f!.HՊ@h.k8#iy~|ϞŭP1a V8thߌS6\6!l@4º"],|/}_͊rXư_qHIW0^}mssr 2y ;-,ҕEقVTCIh,!CcyBLMoO8-`(׋}Ƹ|_=~lxccVkq=m8]%|>)e^$ 'l /E UdV#>xEK+7 ~~Dmox# SrBP-!FH2?:Gץp7ٳo"$!(2}0"=VV89dekqArQ~" y@$e~{"[k Zb"c+a8;;3É,"c'!ƷnlH4)ޘE ظ#UA+(m6 f!BjiheK5?]Bs2`'Iq0 ^b? p(0fI+Vqp-L}088ޖ,/&Zؗ) ~o'˳QvG8C.7i6qfTZd'6\ʄ?/kBO"Z?3;0}Nq…cՉ|?B6C՗I4\ebjC @ 3BD  $SsGBh<+"tG1 OҀV+ng~q 1 lYQ qю8t)# v(ӷEWhlQ%*6\&Z 1=mvTqM*Ѩ`T(I|e'^$zat&oƬ/E9oq%y~.zv7"~ٳSTI?U59?z%V+VWx90׉>~k/76vwݻ}om?h V0}ru ~psd&eAZ  6z%-moAge|Nh1i.F+CmvÒ8H.Y(@W*xip V_Rwsx>gd֬DKU`QƑW*;I+hyO @>*qv -G#|yq^xB8 (@䀳6} eb8}h! ?CP.oMM-/%B' z׋ Mc\5l9?+$n"-{lgyI͖? ߙfi^g(n63.& Uһ,8}A`jA./,?:QWтk++BdN&[2!AN"9=n|7Qp6ބM| fKp0V2ȕ .?#*{Lm"VQfslpj_BcӒh ssOjMx"&n- W1MGr$ӳt {%pb=r.P"WDA`~g,JWHJ&WDe߻&hw_7j*[XaO;A>s] !bMM$qXEy‰(cj ()v 8@\onA u/5] p8 `&BűCXtvͥuV6%~M</A0'.FL-Z0Ws?.?xzbȼ?YE8:s68@؅P3ױ"V%m ^Wn Ee_Fx>ђb J썉2?2?O{?ɽ{|_URP?96/^={&Dſwhjjno$rnsSPOO\V:1c !&Zz[ْf''Nz^Ik@bLsxF&sƒeK.PbV&-}v!vA BR#B&6''/L'@yCbq`DK|1@+X7Z l+:TJSdb%kJ 4A>==Ւ#ό(BLp1<ܜ[MP xt14E ƻVCKI/x: 5A~ŋ6z}1NG{Ђpih!r-vw>ghSj&Cӌ7xj]дFbfy 'hK:D rE;w-JF j;w.]"{Oy!{T1|f?%ww.;.}~َgWEJBroY@%UQXbҟ67[\ .Ee!] qE$6p\&nu3"><{7 #B:0qC` uyP'4v݃b:TjE+IyZ gW(̍D 3i=u3h\0d{$G mG$R9[fhU %V:2=}ߐ1D J#VqxqͬDhnμ(ZDQ{jFQhDIa(ifU>فMM1AX=+8\5U{X;='..|_vnswhD/>G#vN_^D4}b@$G+C*̍\+wr<=fAF {''G}\ PU lh8~S'&;Thʵ nC'PBnbDD \ϓ (n M }v\ȹcqJ3u> y(pϛ7DJ+qxϿep)J!l@8P#}BrXQ6϶C: gk>ma 訡I썚Yۀ])^'z-`T<-DŇrd%Wjx\lXi^ C.%8=dV*'Mr焢%KR߃SSGIsJ 7[jH0iu @F p:y =÷F.}=1=a7@UTj>K$-9 LHTfU(`B&rg#N Fci-˗y>$1]}|r$/xIQh<|Mt|=/]}{QbńVFl y}.rN@j4 =&5Z\ωD}&Ez"Vn{=[Z27\bgo| +u?¯K·wNI$ĵ:O b$\E5 >˯TE0fD8BK,9QHB ZCwn~@t.60s@[8`nμjE%\ؒNy񭏒0 yc?zb\}N:hG}=GB8fd}]6GBl%J;될nm'hB)~ 翮EWE[|RUZ(縒$w%cT]Bw cϳ=FWߏ&KCciWz2:^u>~D~-||{W@_g!|н554JSqjGwqV X'<*i6ͦr<~Ⱥ휸(Nx*\PlۙLUip!RY>|DK L8!jTSvOhϼr׵û ;6K+O'R@BP\/]W(؉  +4M t- ZOi#_щ .iТ -VI6XAol~O!)}xދh` v*6*Mhyf}8.Aw@7rv(t-a^4֝A~Vb*94Nth0`-6ђWg%\ِHa J- +93>6AKS6vb^bա?:rPt&^r>6-&\OWٶtY}]{E)(?#Ǯ(D:`GPXY W>%bŸNx'#4[b'ʋ4"D OL</!~ qȫt/ ==Q2q 31p/Xp}􂗶0 @-&щ*6.BكTVYƕɓ^gs­ǟ' ~|ruPl:XG;=Toi 2-qiD;ħY`ixJru=b h^_|yq|^D a>e H"\fs嬹V6q+w룼_ I4q!ժO8H"TX0>^1N'ϾP&<.#[MC* -4]Iʪ A!;хI;N9yìAӔX lCrٲK##TMXSr, /ro\%PPJVSʖ|^VKc?R l; 9|*kՇ65Ѿq7(/Ǝi*HvBTBd9*.H(&NYxU]>K'|~#}s4Vl.e(h^Wn^}k("V\ǫV SV5iUYlՕ]D p)[pu:޻YϚ4ZaU2v3B@7V]Ƶ%+Fʇ]n @Y'R/I-Y^()7>MC=] o,9Eܯ/G-و`Q޺벉")9#Ҹh+M*;TX6B5rJ]Alv(gȶsN#T:>:f#^JE4Q;獣Xδ[4Tćb=emp~NwP+i CJ4!@y_1b%?'瑙`ɮӐF% oVd !xy}1ln80)cY׸k]dE$mDVKЊ=%R@S*]H[8|!qq RY܍}!͏1xE\57>*Y7\ٔ*ydP`iƸ*yUpi䕪"#}!ڪl tٹ@ň t?$i Y-YqHWShp0ʼnZχhR.(X>aqVkRDy#Zb|;;HQe"*H!EƤ7mb,y̬׵WA2fPhǤ?RȻ17_WsbL`АlO4ہqE\eNz**E| ~\:4Ϊ*cR0/((;; i^tNP;*lɫP,8U(E S4]IEqQ+ 3bG~XH!V@E&DKnҽ묔b ;Ʉ0.&ipiwIhg=uyu`*5qMw,u(Hk Q8|zq^4_KL }'̥ At+v/as*`9&\X'+@6:2" n*'$\lB#/ƽ~8I78FW7}IIDATh{LTW?3sG`DqFoJU">VJX*6MQ?\EJ5Ub.-t2KYkQB@`d tl1I~sΜ{|={aQFeQ~H~ܱtKgϞmmZe=ٽD7zz$2V"/9w-zၑ -7$2$2eKaW4E)eY-eMMaa]8v  >mx 1Ɖf=( #Cxv\>!Zq!Es>V5Daa?x2h+DuB/U^Ěu"4=u (NPh'ӷ'=zg;+mm~[x$Lv8,7jAsV"-gA $ BO3(]<jtt āNvy0:*gQw@v[6Cv{亞[EYP[](ף(P+5R+A`6FQUo:b &CpRAq (ͮ(셆 = \".8FT7ZZݲw4_\׈\ Lh {g]ALiL O71/Pƺ$)cئΏy6h8paIP"xZvx!}aNK.\qk 퍭koǻ)w!WcAn7ѹG/(u.!sv9î:4hj[9!/8o;vX #=/ k+xirAKB"qf3Jv?*)QT8!C.wh 5Ã=`G3$Zoa;f @ph1\"j G|̋% D E S3rh{8c9gΑKakkPr?bRADh[`mj-LhQ;&C. HJ{AHԪ w;O.bZ@^k:ɧJ.׶-yGڡ=N} ?vwab>;'H)ѶgvaC^#66qwD]D$\ߚ3T̩')DNSGX^/?;F.q@ׯSO>qaeqMKwR*VW2.f[kl 2XO%m1%hK/OcW"pKb#zFۍq&ooo9ךM\z3O`ggU37AhsI 9#"?}XgIENDB`KCemu-0.5.1/images/logo-xvid.png0000644001050700006200000000613311340261610016065 0ustar glaubitzfbedvPNG  IHDR}#6fsRGB pHYs   IDATh[kTK!( HEj}TQ(RZRkR\^PX_XT[KjVZb<B ! 9DŽɐLBumu|3ZZ‹_oF/ 4ѼJOoNqX5q4)S$ެ=XT18f/@g%hч=Y>nޟV~VKAY>n< $cG؄a 5xg9m{"Z?jAc$,_ЩSG?i^î U +3P~d$/9._3p͟02:sx;U2%;|Q 6 =)H ۖ׷"ѷv-80g{U.6#ʗe6j~>AJa |`=m-],S.ˢ~t"{9~sϽO9F(͆,OuqWOjN=e|f5J]_s.i(n7M3*Z'+pC+LЦ(nV_N;" ww rDeSr˄G-lJDy`%2=kįiv(q6#1\$|,W AcߝN_ʕ$omkݭnYb{y$'ɪӜgZiU&hWNsVqcs$ I8 5gdCp]tvi%JYؾVcټ6 @*W D'r%A=.PO+p"Խj)W_*SI 9e" ǯ> 8^R.S wY9ڀ>4z4veS gc##noHp <"L\ĘBy2W"L'eVhAERg b{J"ĕMtiW5nǴ)_` <64&š_fj@[ͽ$ƒ;p,M4A% ھLWD/}>A ѧg(k@_F~MQk(;ksmȒ D_<ݲU!e,&M#v$41u[ߝNE.t\XXLMm{ۿO#%L.r*w !.>Lp2aj$.<>V53xܩݏyH{N^# Ig]t fY?sQo.e'eT:v^7҇81a}VV(huҿMtN([c=PQ_| .%OW j"LY0 ;unu'%|iK@ 2,f Yw4_մ}y)vhmwj.VJL[ DpŁokAnRSntW< JOQJ߫|,l죲p;`fb=*w^IC*j[>!;a\yꎼ1OCjn)AOqe=s`y_ߺbF^:W]]9gB–tD]'r.fbߊSZg3;QT -zR$Sy95vTt[;M۳P ̘mҷg}큫5@ֺr@Wj):VhO `#ܝb$Ɍ#'[Soi*6cg30T(qTiD#ȵ20f'REUw+ē VPNC(Kwb RA@B !6-tƷ-t@F$bOi(aGW HBu:M&zs<=<ŵ*/>p.[e~e=TW `s ЖE;N׵HT /m[1K_!We^keoPWR~uƢ]"%LdNa F/4x=!몺X]}VQQ~!S/omHGDٻyxJۆȵڻ>@:p՗T a;ݙ~!X_|#ZTY* r'X$3 k2o?;M :v@]ɱk:B[ү$v " o3)؍T ыBKKlH6F%^R^74ڣS=<ۥĄ~ӱg,_XԺ*pC0( *^zi$dԒ .{&蝢ZG/o}'_?c{\k:QMSrwX>)6_4T"ѱ!@0dbbK`.2K{:U<.2ʂ9n۟$[1_q-NowcVb(x}x0$m3өsuPGGSwwk]EW\S;Bt-6k%3D8q/;LTsFySUuy;KSMZcp,,x|05]W6.K|_t7tuU*zIENDB`KCemu-0.5.1/images/logo-bbc.png0000644001050700006200000000122711340261610015640 0ustar glaubitzfbedvPNG  IHDRx*sRGB]PLTESSS:::CCCcccKKK$$$555000[[[tttlllzzz***̬...cd pHYs  IDATH `!/?A@vS5ko?T?p8b_?D_sU5' j~un؟(.Y(2o|/h_oL%Xq5P s_Ü;'K圃06svx8Tkؘ*LQgl KvoSn Kb,ܡ8>BUhs!p:ywZJZZPoc&T݋wӦiDZ\^R^$ >mLx8g;ICmU3;Fh$J$=Fw \]CHCmJ)I"  qb? %/} <.ꠏDF.]J&'yE"?OTb624O<B rgWO@PRkk ~r7\S9yI1,`e}%ׯŠ R .7z"$t-Y~,qR_s{+vH)>RX,f4Ji&{ѣv.9Sgϒxq`Wz<:$gxiB10f.Up#zs;c'nxOBv;;X[x=Nٹu 8 M9eE d9Bl2M?!g(v-Ȇ!9W*Ry,;UZ->t>t3V,LrMّ>?x|}yKj$O$z03gH_-+勿quuej8܊%ôAK钲&0sb ېڊ#qnb 8nArljmusʶ41sĎ!Oi|ew"KW^s/ok' do*@ 6N*lb2e4`۶?*DRl /PShOyU4m}L[$E*\ ^f!dp# O0K;d2r^Z'4A>?ύ~ث~`8WtivKhNk;n|Ϭ8}s w}+-ilq ) 0;6+W߱p3ٚ)ƍxVmC I|IКZ#ˣEn p8jF#t|w)̀`} ]\^6;;@Xi4bp$e)4ù y4մ8{epd o^bͬe Uɗ UX6Es>B'ZThD*KhxM7B.//rnBmۆYqW0''O =QUuϬ8I`#uO9u^i͑',=cH/*{[\1 ܻGc= XuqT"?'؉E/]3z\APZtz$R\;81:^Mࡇ 0hҗ1QLɞ*j"Qprb۫p#4Fvge߾ZÁQ[~ڧ42XVnތ*R ˲bLNNR()&_`[y]۰#hƆށm%8~ n)zIF-Jh>Fu5 _ s'Wn[$۶)Jybd˲PJ!t؈圊R lD4]463֞ /qzdIUWǶR\--Ttv/nϯ:ZZnLcQyիR.($dT*E< ˖4nG T,D(FPv b|Z#LLesx$΅+}S<6z_V"Q[K`n/Ҿ |*Ƿ};-[+,cZbKWyY'I8iYj^/~)%mH$H$#El{eM`Heq\974/+|cٲ  kUuw/SaٰOqYQU`+m+"LWN284D$B>[&.7tSSUɖfvD}C%RJ\NMerN"AHm圣&/b|i\e,`E}eyʎ::DJ`.j> *YpK" zx9N]&͗opU-RѸoykTw[) ͱwGFFc[] ezcVrf8QFmaEcQ:%eKO WN=D" 'Bj[hSeTY2sG@~^[k eIRضR f8tWH vmI U*P5?!f xHgɭr/k*}+GrmNd'9{# U.<14@}M8([qBt]SMU|lV$?~T}S3F,&X`c* "><]cs1d`hMd4mj2>:Ah8hw8S,~:lf: 5C Dc F'^J&cZ6[֯`2fE}%b ۶x} E+^ NR5"I*ش%<3O";>I&%._y|oh"HS[]q~| BH*jz\IpY3O}x=ImMo3geT͵!Z4QS%0?Srp njmwʀ/~j$?>|{kY$-w2;PҲ>ɛgן߇mY]=a׭ˏԹ.zǐwerL&+RUʺ걓W8YikaCǟ.HߘWIl\׈ǩ!n.锳lIj^d6La<.'͍XA +4ex;䗿9D,+ ({Zѷ/K'i .iY/!O/!ҹ,aYxL7M>M<zxӴ(,GcMmdT^7l۶BzECC%Ub]sQJQ, u*oy]hBv:yhy禹d:dD92-ŃֱvU-{u\CŢ:81|h#8Crk<~&cINjέ 7n'XT1m՚Xv9>G D2I>ڛgi3w)-lg@kl/{CĦ/?xgP_W͇w֙.ݟxx`l|+$Wz04Aohk}XdZ\ E`1004A:I,!:w'9w߼qb) ѹp+X6YzF(-zGɕĶJ't#5!"LKJ S8sT:ˏ[)#\6D8#H9s(.0t 10DJʆJ66Lζ̲+5nh3??vsd;*M^ض9gV6rtX)ea+@RuA'esR;Q5u^!,|66:¶i{l+_6B֠gw;4u/btlo?Eskۂ2<]=CiD߻I^􄐈>IJCs9{2BJtIrMBҧ%Ĝ+ACM(1^X=F ̑/.hS;Y>qhHfAaLh4^IENDB`KCemu-0.5.1/images/dialog.glade0000644001050700006200000001725611340261610015714 0ustar glaubitzfbedv KCemu True mouse dialog True vertical True 0 etched-out True True 0 4 [ Title ] 0 True 16 False False 1 4 4 window-question.png False 2 4 4 window-info.png False 3 False 0 400 True True automatic in True True 2 False 4 False 2 1 True False 6 2 True 4 4 end gtk-cancel True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True False False 0 gtk-no True True False True False False 1 gtk-yes True True False True False False 2 gtk-ok True True False True False False 3 False 3 KCemu-0.5.1/images/kcemu-winicon_16x16.png0000644001050700006200000000035211345413765017606 0ustar glaubitzfbedvPNG  IHDRb PLTEM-,,a?tRNS@fbKGDH pHYs  tIME 67ZS[tEXtComment̖CIDATc` ll {?@ƆFacص{: ڵXD ؊IENDB`KCemu-0.5.1/images/logo-vorbisdotcom.png0000644001050700006200000001440710527416074017644 0ustar glaubitzfbedvPNG  IHDRN@AmbKGD pHYs  IDATxyt]Օwo4=Ͳly'l0$p NR2u馫UJJ30$M S pb0<ϓl֬'3a]wwJcuu>1`M']WD,2vS9@[ч~ǫG.1MOxזz~˞;{r˼H8tu`CޥWm7頭|~˞۞}iU "H긶=7`jߺmh+hv;򓧶H-^LvjH2Cy2LJ4T~ \z'=lر>Z~Յj#(] !=c{" Wj#s>^e^ŕx<70йU%3O$K^PsֺQ]7Kwi֯+ P{l/cAF9|}>1bu-.gAYPK -,=!|/@qRE1s"iSֲA߽{U̿;ܹ'x~C@v2'@1'|r=EĊNkK+^olJzƢw&O?ר5 s9^6 dyב*O4+$$ yYMO@nAo(f$]_"|54a8 7e.c;bd@o#'!FoKL>c)x\_{ 9?0XTd4ۨk0=azjO;9dZv/2S `5E[cj;'VuMCwVbH|6H+)6B b*z E%drj6{;Qqi=4{S#<(C)`:ՁІ7i+> 透eCrr#ZJ3/`y1v%DV!ϗd,%Lo`k&̏p\|6_[rǟ:L߸fDy~'[ iqWU)il-Nfv:3sCamʵrYO^p74/pPMUI1F?"cӏѸݗt#_gc,pw횕d%vn#U q[BČbJĵ1 C4SJVME1 ˑу! U;|ckȘ=>|//|wzˉsݽos/[P01Sq9u5/6BVUtj)dzG9vĦ2yGwHjA3 $C*ʤ  hI}Ŋ%s~ \Z܆b)'3B!Ts=?r7,#$M |_s"#:&b )N8Qre(YlkDUnoؕQX[7?@|cp"XjD3, =<̎7cddiy--o'YCצMLq\ƒDueڙn1$}kT.06ٟE#6#zYl9Bvau T+ёQ=$05EYvU߻bn'_7pʆJjW3@%d{(kOZ;/COp)l\VTv}nEkD0W f =HZY}w$!8h  [LC}T_qвo%Xl{ꪻ(8*wy'-K߆ux*E8 `WXǨ8eQͷ=3tdPK-U͵Oo#),M,U-d2IX{am(A>s,bGbIUպu_r|@j:4>O0XJcSxUWIaQ$DP($$yMj[~p-@BC [ovRQ$:RHMc!!MI;Vϊ7]!o!;6 kE2!0 c !Gne_^a _&q';l>ё+UIzH8Lo>u2>]N)b=9o477e"M*MYrXC@u}¬J@RU4U:ǧgG7SL#S@0eD]}=N0(A('${BhIADSrj5ї0lBC%+=2qj_kY gw;D8}I1Ax JHղ^p$1>Qg =xhq7O~i35]%>tvE.g\nQP;c4 EHqO@@bD+ń8"[ɘH ]~}{2AO9Mʧ;HH΄#&f&.{C'V mf!3ih}#őJGZԏ^!2.Vn|٣-Œt̰gp %jvܙ&⛨>(k|x=c9>føqU'3H LÕ \I إX$BRa"a2,98spJ~܁kp&3Xw6KȒLнGU9@mg5u1Yq,C[s@MNA G@0{Y8B[iH(N <T vlb> :8[{ 2W}pݳu:4oT<Y:J0Bk}u)~޽zsDiUlj t]SDT*_N=fSq'įRNQTh}],{hVkÇ/_| ۑ*(&+T"zcW7W}yv<g^wݿhd2Jf*A$ 9*qD/s?<%!:b0!I`l C'yoTẫ.~9}ӍaX~ÇCxjkc;B.ȯI;8/Qմwr-a݊)9azd)Ӊuow{C`NW+DB kqp(pH7qkey{uչ@O-]Â%hHf =h<W21L?OQIPQ"'}|$jP՜ kˏ D5 xӍ֞3ʺ}/lfQTE1+rMQx" 7܀һ͹ʄn˜Ta*Rns/$ˉ)2Of̶YFIƉ֓j! tW\?s㺵tv+-Y8A`^'/ᒷ'd4 0 ԵOD*g"/Re_?$ l@4t ih2@UHuug3nq{0כeDe{%!܂=5qlb˶#'Qj 0y ֞N36m_ $#/ӟ~4E=6|SB:@"9XuXJxZH"qVRv]zK8ĭ1(&:NeP.dL^N*  F8@$]lpxf)x͛+F+͏ m EIkҍd2H_0]>R_kdlgTk$V'[a֭2f$@z5 Zڔ=.;SkGUaoO"/|7D)4j=F>7oL=ֺBߝe+,h$/3زcz#?aNIO!5O"w_p9.ޙs<|{q3+?k&ӳYpǏpli$z.ѿɛ?s% ༅7] sʹ;C4rU: sh&,w^C|qK.X@sCo\zEt.mfRWT5{hVkçφg$xmGuX]uk9k?IENDB`KCemu-0.5.1/images/tapeedit.glade0000644001050700006200000001677311340261610016257 0ustar glaubitzfbedv GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK KCemu: Rename File True mouse True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical True 0 etched-out True True 0 6 Edit Tape 0 True 4 4 window-tape.png False False 1 False 0 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 0 6 6 [ Text ] [ more text ... ] 1 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 6 Tape name: False 0 True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 6 1 False False 4 2 True False False 4 3 True 2 6 end gtk-cancel True True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True False False 0 gtk-ok True True True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True False False 1 False 4 KCemu-0.5.1/images/window-plotter.png0000644001050700006200000000300211317574416017162 0ustar glaubitzfbedvPNG  IHDR #ꦷbKGD pHYsHHFk> vpAg IDAThY{LW  Ђ8a`At4 ‚ m65LFA3AZ]b]EŴ?~byl矓sνw=Qd헌e=W\lql1[iMp0%Kl5V~H==ǤGV>Veejyz)Fa Q2CTEt^ (*pE=+Ih,C+WB61,`Xf,7uJZ")ǒ. -*!M" tن}}k7ݻ\):u]ǚuhs8Fy߾`S #9)C sr%#8tuMF.h#ȞgbT0ZjDϜeGY`IIV4KIJ@>xziq 64^ ^ r-b)) Y!GG[Zut`aaX׭뾯QgsA]rrL@ݘE&~׾~ի!X,eCCvlY .]'9!Ob4Bʲvqy' 1q}K44R;Z}vdL9s?6 #nf >=J /&j6cñ24H$/v\0PhàL<oJDzџ"}I cq4X fQ,WPP` BCX(23aݿ,zo7ouAu rBeeB}`D~~p;wBZ 8\Xe0(bc֭ ;pKOr.!7?n545<; В$M#7Z@S.צ]EE.^.o99xL] {FY-L*AHr98 ^o݂$aC*-2Ʈ#DŽ^fJ w IENDB`KCemu-0.5.1/images/legal.glade0000644001050700006200000001524611340261610015536 0ustar glaubitzfbedv KCemu: Licence & Warranty center dialog True vertical True 0 etched-out True True 0 6 License & Warranty 0 True 4 4 window-copying.png False False 6 1 False 0 True 20 8 kcemu.png False 1 660 300 True True automatic True True vertical True True [ Licence ] True False False 0 True True [ Warranty ] True False False 1 6 2 True False 3 True 6 end gtk-close True True True True True False True False False 0 False 4 KCemu-0.5.1/images/help.glade0000644001050700006200000002667511340261610015412 0ustar glaubitzfbedv KCemu: Help mouse dialog True vertical True 0 etched-out True True 0 6 Help 0 True 4 4 window-help.png False 1 False 0 True vertical True 4 start gtk-go-back True False True True False True False False 0 gtk-go-forward True False True True False True False False 1 True True True False True 0 0 True 2 True gtk-home False False 0 True Home True False False 1 False False 2 gtk-index True True True False True False False 3 gtk-refresh True True True False True False False 4 False False 4 0 600 300 True True automatic in True True False 4 4 False 1 1 True False 6 2 True 6 end gtk-close True True True True True False True False False 0 False 3 KCemu-0.5.1/images/icon-default.png0000644001050700006200000000413011317574416016541 0ustar glaubitzfbedvPNG  IHDR$xbKGD pHYsHHFk>IDATHǭW{H[~rNrr55hKc5NoC [G s+:9JW([adžJ Z*pP((s[͌y&&O8; }y{{xNVU]]zu{c!`4Z32tJ>Ͷ>>?k̘1ݹc6bPR J$~o699[CTҳ=.cfN49F &D=_ .Н[[tͦ :I__#:noO37"yE&ěxrֽx| }s?6z$NR($;v){Wn^^ijR{/K$lDbskk3yOJ%})ؽ?4==(*2}A/Aa@\Ҵݺ-b߫)>5UbT*-##v _$%IdTHQ#@- Ä[Cp+ 5@!52\.E""`ᘯ"PaT~VOMUԫՊ_Ţe9h/v?33@C o%+Ç33xU^^| `i.y)jB!͓'H2c0u::55hzM;`h1 -O|X!;LcKVd2O?MXFF&, tmN=`0|mR(^x{ovII`멩ٯ5ʚ` ~$Ri@~Q_'76'76ffw~t`0I$;55,d)zwFMQ\YN9\^nG[[# I~@t-&) saK@~0NWM_]u$ D駎㎣6]j-VVzKKc"pK7(#EQF  íGn:rq``才YyyYB! P~Zk =8V׫?NIaWfbXF#qY226uŝǨiHK427FMw=ˣ hopLƄ}v-ɔ}SQh\9 : " GO"H  @8_<{y/sv'j Vd*oպj]_# uEEdl"e˥ȥu:v+m`x6@ӖÇ-C$OM޼őHCyw> #avc/PQ&l6xˬ/foۍ##v? of3+؁Xpw(gUw=5t:5vccN)PH)":Dfgٸ'N$ÕcJQJEEjJZAܤda|AmnSGz>Vppvwd$r,kk䯿?YYy86LIENDB`KCemu-0.5.1/images/selector.glade0000644001050700006200000002553611340261610016275 0ustar glaubitzfbedv GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK KCemu: Select profile... True center-always dialog True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK vertical True 2 0 etched-out True True 0 6 Select Profile... 0 True 4 4 window-selector.png False 1 False 0 True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 2 0 in True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 0 True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 2 7 2 2 2 True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 2 4 <b>System profiles...</b> True False 1 True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True 200 True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 2 automatic automatic in True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 0 2 4 <b>User profiles...</b> True 2 True 2 6 end gtk-cancel True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True False False 1 gtk-ok True True True GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK True False False 2 gtk-quit True True True True False False end 2 False False 3 KCemu-0.5.1/images/window-info.png0000644001050700006200000000507211317574416016435 0ustar glaubitzfbedvPNG  IHDR #ꦷbKGD pHYsHHFk> IDAThYmPW> A!ACT*PVl+D (;/f٩,Zj(clg"JQD*EC $}2}s?9=s7z޳fdP*%y,1f ,;t~/_[/d #6f(C/:e&0l55t|^3`: //. &a]/]Tv-n%fEk{k ƶŢlWA,TV0 ?2ɴ<*j󨈐zNF )/; +OV^3bu՛V^Vo~5x!Jo"B'1MNrQ9Ϲ 4SOR(r7 !!NAQYgLؚ5?ԜC͆ =]]꘮.yjy/[l1!"d,v[YDm:4m(22D>>>xsh-XXbr8}zh4ĞGrda8`~n~.6̛g46M'N<2@zP-{w{wxkӟT,K= )sGl D87N_ Z!etˢ&%O?IJ+];VUVw?h;BT2CnޑKCuKCDE l rبNܼQm1#=HWbJ+Vc,\+p)4%;,KPc+/YOw pӆs&oV4\?? l\!4Gta 8kFGseW}抌Kl2O<a7!Eb<-0yRp[N,HhL&"j>9ܨ-׍Zj8B4(K[w'UKs+e>H%\I$_~cB.i-0x;!t*졩kZM ś_^3ck==W%Z$К_cncW\p4J43 J2e1Ա8ht1==\͋V07j1kbXSk+W;:VMTh ԄڻwiFq|DZNRGĥ&7nL|?3 vtk|ӗ,^ݽݴ.^V;&' )! BmUDKTAw4>B}-(.y?\GBbZ^om.&z@ Zcϴ;1/E3}4oy@GD{HGW/ nw^P<9)(^\]He~i~ PlhBGwtlP1a`@iӥ$d/xL_)y~c8sz8@sTJ̲ gGB z|DWWuv$^Ke[>!~CHJY[ &Wq{ B:o>rupyE=;%K0`~r}Ǔ齐L?yJܷY׷BRgެ,F'%;GNDI).[°_c1!BzIs'nu7 jOMj^Mugτ(v1ehb}6gg24j؉e1LWDQ"@Ĺzyj}5W#rotO0^*3)""R^їFEJ/_Ųִsnz%%Sڳ?;oGИakk]62Bdř29.]lEm0?AFqAm /Tu59asFk:h7I880+/nB(rrӽ,]jiN{T_`b1} dz=%6zUY󝲲m ac֩tIENDB`KCemu-0.5.1/images/Makefile.am0000644001050700006200000000655411412404314015512 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in VPATH = svg SUBDIRS = original icondir = $(pkgdatadir)/icons imagedir = $(pkgdatadir)/images ICONS = \ kcemu-icon.png \ kcemu-winicon_16x16.png \ kcemu-winicon_32x32.png \ kcemu-winicon_48x48.png \ icon-root.png \ icon-default.png \ icon-deleted.png \ icon-bic.png \ icon-c80.png \ icon-kc85.png \ icon-kc87.png \ icon-kramermc.png \ icon-lc80.png \ icon-pcm.png \ icon-poly880.png \ icon-vcs80.png \ icon-z1013.png LINUXICONS = \ kcemu-icon.xpm \ kcemu-bic.xpm \ kcemu-kc85.xpm \ kcemu-kc87.xpm \ kcemu-lc80.xpm \ kcemu-vcs80.xpm \ kcemu-c80.xpm \ kcemu-pcm.xpm \ kcemu-kramermc.xpm \ kcemu-poly880.xpm \ kcemu-z1013.xpm WINICONS = \ kcemu-bic.ico \ kcemu-kc85.ico \ kcemu-kc87.ico \ kcemu-lc80.ico \ kcemu-vcs80.ico \ kcemu-c80.ico \ kcemu-pcm.ico \ kcemu-kramermc.ico \ kcemu-poly880.ico \ kcemu-z1013.ico \ kcemu-winicon.ico IMAGES = \ logo-flac.png \ logo-gtk.png \ logo-lame.png \ logo-libsdl.png \ logo-libsndfile.png \ logo-openclipartlibrary.png \ logo-vorbisdotcom.png \ logo-theora_org.png \ logo-ffmpeg.png \ logo-bbc.png \ logo-xvid.png \ media-end.png \ media-play.png \ media-record.png \ media-start.png \ media-stop.png \ media-pause.png \ window-about.png \ window-audio.png \ window-color.png \ window-copying.png \ window-disk.png \ window-help.png \ window-info.png \ window-keyboard.png \ window-module.png \ window-options.png \ window-selector.png \ window-question.png \ window-screenshot.png \ window-tape.png \ window-thanks.png \ window-plotter.png \ window-video.png \ kcemu.png UI_XML = \ about.glade \ audio.glade \ color.glade \ dialog.glade \ disk.glade \ help.glade \ keyboard.glade \ legal.glade \ main.glade \ module.glade \ options.glade \ plotter.glade \ savemem.glade \ screenshot.glade \ selector.glade \ tapeedit.glade \ tape.glade \ thanks.glade \ vdip.glade \ video.glade .png.ico: # xpmtoppm --alphaout /tmp/ico.alpha.1.$$$$ $< | ppmquant 256 > /tmp/ico.icon.$$$$ ; \ ppmtowinicon -andpgms /tmp/ico.icon.$$$$ /tmp/ico.alpha.1.$$$$ > $@ ; \ rm -f /tmp/ico.icon.$$$$ /tmp/ico.alpha.1.$$$$ convert $< $@ .png.xpm: convert -resize 32x32 $< $@ .png.ppm: SIZE=`echo "$<" | sed -e 's/.*[0-9]*x\([0-9]*\).*/\1/'`; \ COLORS=`expr 16 + "(" $$SIZE / 48 ")" "*" 240`; \ echo "### Found png icon of size $$SIZE, setting number of colors to $$COLORS"; \ pngtopnm -alpha $< > $*.alpha.pgm ; \ pngtopnm $< | ppmquant $$COLORS > $@; kcemu-winicon.ico : kcemu-winicon_16x16.ppm kcemu-winicon_32x32.ppm kcemu-winicon_48x48.ppm ppmtowinicon -andpgms \ kcemu-winicon_16x16.ppm kcemu-winicon_16x16.alpha.pgm \ kcemu-winicon_32x32.ppm kcemu-winicon_32x32.alpha.pgm \ kcemu-winicon_48x48.ppm kcemu-winicon_48x48.alpha.pgm \ > $@ if TARGET_LINUX icon_DATA = $(ICONS) $(LINUXICONS) endif if TARGET_FREEBSD icon_DATA = $(ICONS) $(LINUXICONS) endif if TARGET_MINGW icon_DATA = $(ICONS) $(WINICONS) endif image_DATA = $(IMAGES) $(UI_XML) all : $(ICONS) $(WINICONS) $(LINUXICONS) CLEANFILES = kcemu-winicon_16x16.ppm \ kcemu-winicon_16x16.alpha.pgm \ kcemu-winicon_32x32.ppm \ kcemu-winicon_32x32.alpha.pgm \ kcemu-winicon_48x48.ppm \ kcemu-winicon_48x48.alpha.pgm \ $(WINICONS) \ $(LINUXICONS) EXTRA_DIST = $(ICONS) $(WINICONS) $(LINUXICONS) $(IMAGES) $(UI_XML) KCemu-0.5.1/images/kcemu-bic.png0000644001050700006200000000405111412374645016026 0ustar glaubitzfbedvPNG  IHDR00%bKGD X pHYsHHFk> vpAg00WRIDATxOWǿLɟuwlwEo)E n{RA?(RD҂b=҃ BX-QaQtwY׸f3Lf&IÏ1dv>0{{oymT622z1i˶ Fl˗27/~m:m ?555pԙ3gv;f*ۮTeۖm۶ ?W_۶,B"x<t:eo$"I'pvW~kZcd?txHd2O&>?d++R/Yyl.PдR 0MӴ,@P,:-˶g|+ &׳7WMӴ| ?;;777\?cHwx#; 0lXc'W({{۷w۷/ccw6>=q™|on.g+ߙOxX|׈e9>dw߽Ջf$ _A߸޹JX/X[ۿB*M iV+_^ѿr]б'$Y}cti~%Yn“/ Zo]GAI/dgzkm8ڵhQIqI L(m+ughgk~@48}AHE) r?Rr*'gJׯQ4kO eYeYFD'ޖ[[iy^tiv;] ?XԴ=hWxoCt 7<#orI]lކG{Bbz5㛟!<%v344444Ԫ M;adz=CQTUQ!5\?C M+EYY_x/_p믁K\;@Q޼QNzkk<%t{~ӱ^^Z̜ر7~~@}u FhΉJ蠤a4t䚮;:p ǎ]~իږ-#### ?t}۶q F% X[[_4`ppnnfд͛GGIdX{Y~dzRdXXd B`z>d2@8<} ÇϏn2P8ak>_*9m?]8嗧Oj{60:yzvPm 9iFs#?>R$s6|I3W<}əl_zQz/ܻ]Rsˆٙ9`h(n}-[H$ g?Mi`}T*\.[\tUB!`uUUyge2p֭[~khAHp?[!/_^\dD"UUUU`iIQT $ m V#G~ykF"(%6̥8m3ɵjXFNJ? OdY}p0$'*qf$o,n;l(|$&Pt:0ů@֫E g ׆haDEL%tEXtdate:create2010-04-24T00:11:00+02:00Y%tEXtdate:modify2010-03-09T10:42:13+01:00PIENDB`KCemu-0.5.1/images/kcemu-c80.png0000644001050700006200000000505011412374645015663 0ustar glaubitzfbedvPNG  IHDR00%bKGD X pHYsHHFk> vpAg00W QIDATxZ]hU~oOj 1D-"U/UAP("R*޴bk ЋJER ybhS4$1Mt9swq8N6} ;g9sy!B"D!Bmktiۄ[e9N~eY#4ixi PjۍaZZZBX^cǤ B7_';m"4[VVׁ'O:swAN;o7|ر^ %uVzB!x~سFc1YVx<ǁ\.CQTUQ_P?c;?gych4GD"K$~'ڋbP^o)e^e۶ FjaapFb7wUYeYfRJ)ފzVj5Ox\UQ`qquueX__]h\7UT5۝"VW] 꺮 7oz៱[O{i&!̅: xafgG(rIQUwJX ~>!? + 04B,<3C) /.@޽Pkd)Z>2;ǶV 0]?ruxJI؊v_e Npv,8m:QÇ#@Q>4][k\;R).sV人?΂D.a?TulLE1 YTX3ntx$g~D?P 0k'Ra ;wZ??$ҥѱ'Hz<}{pX9BB\@$4IV9~Q4@[Ą$;9)Ic|~,Ӥ}L͂^:w/!vg{Hຏ<"I@:=]>q")9xPUY~R/[$= O7%je=<x:/ F<޲D~AQ$ilZ={[ e H&yR}VXO]PFjg2iϺx+4gEBEL&J0w =V#>qu˪V44TNH>;`,QI,cI$dM9T5411Z*JG3:^E2TU@xڶngAk뎎]N,ʿ$o_3\V?N̯V]GJ6 ߾4 v)fhwi֏/_|ynK/SO8p;Jq`r[͛ @& }wꦢssKK.67W 4UeT*epҥK߿ݭ}ߒD"?[ ܺ'D4굗JbŢ>4H#Co/з8rb졇HD" M&yMX v~K.OVkv)?xO?}ITHt:RU0Sƿ(f"~MD O(])u6ru#_DS7B߂&܏{.@vZ{!B"D!B}09.%tEXtdate:create2010-04-24T00:11:00+02:00Y%tEXtdate:modify2010-03-09T10:42:13+01:00PIENDB`KCemu-0.5.1/images/kcemu-kc85.png0000644001050700006200000000541411412374645016047 0ustar glaubitzfbedvPNG  IHDR00%bKGD X pHYsHHFk> vpAg00W 5IDATxZ]h~o6IMVZ/H RW6`)$EH k0~E>)D4n;3>fm Ν;wι{ZhZhZh7HյuM,eiϽ}S?ܲTzs.຦IWUU4Uղ[r\8qĉߗi{;!^vqJm]m\mۦޖi* |󓓍 $߸q"pSuImDZmO"_8%8xԋz|u~bq`~q#] L|4F@__oo_J%8F"(r$"bX,Dp4 r($ޫ,2 IR(B: MkYmY^bY,^?ՊA^W.H"<xĶdM( B4U4@MSr?M42 @\.ˀaXaxO HHW\+uӟY$I!EMQ0 $b,˲YeflsΝ;wfa&rʊ (FYp,( '?d>ppP܏NN^dcui u B!/UrZKKĨa%}phŢ}3^>sȑھ%6o{r ;@utٶR*)Lii~;EPƾba Xٳg|S<x=x@0d`'lzP-dYd%TD[X-|XsЀ D"HDD'윓D"N0l[8cD&s?~_7sGIm:`X]+&rR)|~}T*JAP Am{ v<*~#P4T} ׵4K|(omew o^:_F1&>IeIFI/F&ɼg;$~aalllL\k?WGFFGo5777&?(é0Ӥm.PhZ((XA~tttM&|+ (&xppv6TްoP躮:`ۦil ڵ'yuUX`7bb܌hCQUxuffΜ9|4qa5==0'_7/|{#Gff pط;&_k(.38zUq%yz:ztW@163ě5|RRYh( Ul$;KjvJp-TR|yde>8x7l€IRs@]+`BFx憆}%yyijAg8] d>LJ+bx/]mumx&|k7$aħt˶-˶ӧO JR) S)_WҺ8RT*bX,bH$p89)x|N.1ܽ{\u @Ui" ܹO?=wo  ְBu ouummu'}  I>NKH\6tuuuuv==/rti"ӽ>7v8bDN?qLSU+T\U)%R <0h/Ceі+|mWP?K{)ju@UF$4u"i==atvvuc-/b{{,hڮ]O<ɄX쯿uRb1p8rPr|>z{{{{{h4yho߿E'_\|E/$\NQNʕ+W;~wuv6 `׮=8%X%6x[t\a6uiZAb6&R ꦩiT˕Jo|M:6F<ŽxrtOLl>c&P"AA7%x($u`vtkk,+Ef}#?7ǃ4_zԟ#ZhZhZh/V,a%tEXtdate:create2010-04-24T00:11:00+02:00Y%tEXtdate:modify2010-03-09T10:42:13+01:00PIENDB`KCemu-0.5.1/images/kcemu-kc87.png0000644001050700006200000000434711412374645016055 0ustar glaubitzfbedvPNG  IHDR00%bKGD X pHYsHHFk> vpAg00WIDATxZk#[ޚ4IuktE^dO=-x ,hidEb0 E`}A={7Ka)lv^y~/oIm'n@3y F1bĈ#F5Haj~|rrbPx2i:N;:i':F/ɘisp}rnc8뺮ׯ_RhyE"~G>-{kY ﻮ1n߿_| Q@Pw޽[7n޸qt>ẞݔ$ |< ͘?X[[[[[7 0 `~~~~~~ I, `ЛhiHj"mw'`9R3D 81\$Gr\.;ӺaAh1B|O Jq,+"Dm 2t:۶F3ai֭qmǠ2W亖ض$E dyb<ҥzo{Jk׆_).cd2## <~9@ ķU Qܾ/$"63ftBGϋjTi}}}}8O_%^}WI! dl6 LM]85ln60:::.J( ~N6;>^,RuvL*P,r##4L)J xڂQMڵz _yҥiLқdReebdٶˢ!BToA{t]YeǶ=|3`Q(qa̲mƀ}dYhV Ǔ@dJӊR|>'t:IjCQι&-<2P(S¦TDH1_)2t*J)sI4: h((='xuI~i/t1bĈ#F1b*|-%tEXtdate:create2010-04-24T00:11:01+02:00.%tEXtdate:modify2010-03-09T10:42:13+01:00PIENDB`KCemu-0.5.1/images/kcemu-kramermc.png0000644001050700006200000000435011412374645017074 0ustar glaubitzfbedvPNG  IHDR00%bKGD X pHYsHHFk> vpAg00WIDATx[UI&l7I m# `BP| xC}XDlŗ>R* VZv^Zs$ep8əI&Ut~/Ü3grw3ۆo?7t2y]7Mr7 è:3 ð7@zsX hf{=CUUUZ5Z |P^{ĉkuy93ie:nlgμnssssn33vNnYs}fY 8-˲, 8}z ܻFc`л7Hx<YNdߋpXarPHB!vNEk7.^O?X4:<"$_\oScΜxazKPE40L4UVUPU]WUG|3 MxZ4@  fh4 h`hx\Q`yym-|.W,wWVVVZ:"Ò^G[9-(W*G |vq>r_a@Q*E3SS߸qP{ܼyNCuW-Xotj.]:}zm ~ Msͫ}[JB8 A'޼ɯT.|>x7Z.ȉjUUUt+$/b^^W"Lb{+ d2Gnn ^4WO8/з 7N<ܗ[V > C[g2t/]vnw,:47g_NgQ핾?X\?r駟y,<|~H'}\M7C.|ٳ|s|s eHrR){l6OdQ$I$1j!ah{Lvd^w; )&\ 83U Nx@YI{Y@z b4$n,N"}πK|b:q1ud~{·{92Fv?|ОUxizLvAtov껥"~(ժ^v=D.~P^)9+% s=w۸bSSoċxzh?kIRTS+zІMO]\4-xEzR Pw23Lf>ʕ/3uՁ5]8AwWs:brMX\8yEx{@˗/^l6ww/h(tKG9O%tEXtdate:create2010-04-24T00:11:01+02:00.%tEXtdate:modify2010-03-09T10:42:13+01:00PIENDB`KCemu-0.5.1/images/kcemu-lc80.png0000644001050700006200000000526711412374645016051 0ustar glaubitzfbedvPNG  IHDR00%bKGD X pHYsHHFk> vpAg00W IDATxZk&$)A/R/ؓ (@9Є ԃЃR<)` DtL?fw~=<<3ٶnw?̼3yy> 0 0 e7....Jt+o.֋֍Od[Vg;r:zmBBx,,;w 0ϟ=e| ݷe]anA8AZAT<U`vvnOz7Hz7$u֭E… !%aD/# 0~%ٞբ^پaeBvgfffff'|rruW%R6g2L&W*@ @6f@&i ii뺮L:Jj RJ"oJRtA@=IJټq;;z/^嚖 {I0CCCCCC/|4 Yz^l۲lps\϶m\eYjZ`ۮkۀ뺮Q9<.|ɑ$#mPEq]i.:l<"}PtZUM`cccccC,s]VWY]eL6> up`2A$Ŏ8N2} zVׁ5 ZXƃ%}pR/@_<9=v\ű1YcC.駵Zg}bQ֣Lw:! l6MXZ_~rsz @:#(A8*J?ӱ} :ajۭvnR=D?}}R;,s&USϗ~c 6@rڳ[[p~~|n2F$ѭ77Wȣy8vRIΦV{\.Z&HWo믤=]_T1݈NZtisss#+W =+b9hf]s?>$;ϓ29o ">zC jU$1wF]Brzt=TG X<rޙo'8!Bal flZz0Z0JRTL\^Zœ'09v Y\|(d0mqqׯ_:gςjzwyGSu]ȑS5mrˢJQϗ>:\SosnHvvhvؙHq]ZT<ۦ:lnmU7o.,,,t`wtz3gΞ=s rԉSSp?~P˴?ghhl\ VWWWWV]WU%4khlo7e2,,|֨/"D\(in5aVnnnmͦe9P,rի5 ]$z: b@xi2aߝz7xsx>qR]d$ȥxmRK2I M1faHc 04@xxj6YZ+6Z~gmdȈ \>JMQ~߇C>6Ӿ!#O;ذ|*ˑ,O]vA F0Pvډo7"'' ````J-}:%tEXtdate:create2010-04-24T00:11:01+02:00.%tEXtdate:modify2010-03-09T10:42:13+01:00PIENDB`KCemu-0.5.1/images/kcemu-pcm.png0000644001050700006200000000407311412374645016054 0ustar glaubitzfbedvPNG  IHDR00%bKGD X pHYsHHFk> vpAg00WdIDATxkOǟ$צ/IZc=x""R_ E^FQT*Hk7`}&@`=V}Zh׊>4#p=4(`,bG=zQ<_,RE[C $(*(j ,Fݎ4pl6ͦPԳ$I$0@4q0R.rz++++-Ac߭:%|'_`M !B&hc a;MС~o2iW5\ȶXc(*j-V{rtsz>|NU^DQ d|>\hes4O }Ѓ1( b}>{n߾w}BacPcW.ons|~myHgU~'O"m|>5_$qCCyP vpAg00WQIDATxkOǟ&dҼ״9x"7҃)E^ xASo=C}ƚUMvlaxd6ks ;o}<3&&&&&&&&&&&7Vop\^%5EDQ~T|J,j[*IRlTyo~b NisfgtK /ST*$b,[[7o޾ݻC WVVV޽8Ź^Vko8Zj%I$ +W._p88b1zn t:N'@$G"3kbXX_g vb~gs8ny^#(@Q3l6ެj=XT*l>8wܸq[w޻LLjqgeΎ~Iu{Ԕ^+uF67 pxh(F={>]\|HY.P:P7vJѨ/JDI{&jNFǎ813300?hF"~Z>b<ol0!>_} pxݻwvX7pA|T*x}ɓƾ}h4 `lv;A%JIŐESR#kvgʋ/_z?#̀#`pt!F%tD:™tu4Fjo.(G`0 @ j~5FWxgPߎӆ511111111111Q0E%tEXtdate:create2010-04-24T00:11:01+02:00.%tEXtdate:modify2010-03-09T10:42:13+01:00PIENDB`KCemu-0.5.1/images/kcemu-vcs80.png0000644001050700006200000000542611412374645016243 0ustar glaubitzfbedvPNG  IHDR00%bKGD X pHYsHHFk> vpAg00W ?IDATxZ[hmgvdiҤIlj>mHև썶^@RD"***KAAxAԂŊQJtI6fݝp8fvn6.3:ZhZhZiŋ}vwwv.^_MӶ 0,V;0gۺX^Au`YuMsa9U>kZ rsss{4,04 &u`rrbbzxw} (3gΜ9wx^ڷoөضㄗ[m"p۶m6k+ IJewEF(L&ɤAps\?m>(bؿ?$Qlkku[@T,I C[\.77GLҥWEQM 4MPrYUUuUl8/(q j~{2My`YeYs]u]Ѳ 4M4hEO'&t:nwz*JUL(_f3mUQPصkj/ZK]'m730SWRVZj_O@QVf|QuGFee_x!SffH]Çggttij `xuG0Z<04DT*X_-u bX6.mk8.Jut? {b$?l"pw60d2}}f, :qwIt/LfZ<ׯ'Fb5kI~Xd@u%㏍Z5>0Vʡn8EAyevI;Hݪ (i2 m/I{*`KXVz ѣ 6633͎hڱc<n4jۀ/m7 ]_hq%uh Dp$8+W*Aظ4l_,㺀LOA{E;' 80$k@$r= ymR,[2 -f%m˲,uŀHTY6Jݚ$'Nd2}}<]g@};}zf~Fa1 0ѨD:w.dٶx- <^Qby~q8KQwttp%̼"Z{QIfgDZ'EQ= ZR'~-\+c}}& (*/L.U[i6s'p.ԛ勥EprYQz"z(^O#f&fetCT",f4zXxD"H$ZՃFww2}\>?7x7{?fggz謭q<9Wn%,nݻyƨLfjjb̑u뀯>Oo:P-8ЃvdQ9`rM|\=pj&Ggʬd帋/\4mhhx`HbQQαWE[do/I.]b,Rx2^(J%]bPz{UK&/_::6l8yP._޼46 qHZ(*!ƶcهk={zޖ- ^w~MD4I>G~#bϗ⩁`&FR  z GG:tzF~Ӌ۷ocX,n0k׮^`͚~@"\~noI.XTUU&&&&iR^WaY brT6\yJȿ-xYO>Ԯ]~B$b[[{;J[ KSײXN]noOG=rh0$<wvV흝ϓh$IS-Q˨&M0/,D) Iu-YJu5VJ vpAg00W[IDATxkMǟ&d&iik(TsED@T'"R/ nݚY/ W ˒(jD`{;d>| ˜@ w=ZMQ:EQ{`bbbb|aYúwS(zp(k0.>0Nz/_z]38hLcYsN|>SzK$Qlu q I,<_<ϋ"(t @ #_Vep8l4FwWԷAA30F*Ld2VKGaw;b{&|'|o-q&|"rjvZ"!]E]QT+c! "-+@{==gGvA$,j>-...ҟbXLN&dR,'dvvёhTobX,`0l9:z6??555NR/ܤ K[4l6 ~:0'V+WBP(8R8MxR0lZ{E"H$b]$u!0~7RfACL@G~go8ڷp0xȷmtA98Noy'8pU.W* K40fa VY 56$# GD"ТE!G~ v[ߟ]f%oSp/>g6 E5a2 Ecruk,]:u&F> j6Z"V9Z`Ye4L~F3?(('}&V{vAxb6;{ǑOb6aAL/'k=ݲ_.}@oõn A1{5 =$ BN7l5 1E"pk\i$OɃ_p\elٳG<x/_ZhB>l>>_;: ZxIJpW4ǎ8rKQ]bHBKk1h};3>~;f2 P0~?èQ:"}fNgi7 TCcO.i855E@W Ӡ {-8ɾ^f/7۾%tEXtdate:create2010-04-24T00:11:01+02:00.%tEXtdate:modify2010-03-09T10:42:13+01:00PIENDB`KCemu-0.5.1/images/Makefile.in0000644001050700006200000006324011412404770015524 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = images DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(icondir)" "$(DESTDIR)$(imagedir)" DATA = $(icon_DATA) $(image_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" VPATH = svg ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = original icondir = $(pkgdatadir)/icons imagedir = $(pkgdatadir)/images ICONS = \ kcemu-icon.png \ kcemu-winicon_16x16.png \ kcemu-winicon_32x32.png \ kcemu-winicon_48x48.png \ icon-root.png \ icon-default.png \ icon-deleted.png \ icon-bic.png \ icon-c80.png \ icon-kc85.png \ icon-kc87.png \ icon-kramermc.png \ icon-lc80.png \ icon-pcm.png \ icon-poly880.png \ icon-vcs80.png \ icon-z1013.png LINUXICONS = \ kcemu-icon.xpm \ kcemu-bic.xpm \ kcemu-kc85.xpm \ kcemu-kc87.xpm \ kcemu-lc80.xpm \ kcemu-vcs80.xpm \ kcemu-c80.xpm \ kcemu-pcm.xpm \ kcemu-kramermc.xpm \ kcemu-poly880.xpm \ kcemu-z1013.xpm WINICONS = \ kcemu-bic.ico \ kcemu-kc85.ico \ kcemu-kc87.ico \ kcemu-lc80.ico \ kcemu-vcs80.ico \ kcemu-c80.ico \ kcemu-pcm.ico \ kcemu-kramermc.ico \ kcemu-poly880.ico \ kcemu-z1013.ico \ kcemu-winicon.ico IMAGES = \ logo-flac.png \ logo-gtk.png \ logo-lame.png \ logo-libsdl.png \ logo-libsndfile.png \ logo-openclipartlibrary.png \ logo-vorbisdotcom.png \ logo-theora_org.png \ logo-ffmpeg.png \ logo-bbc.png \ logo-xvid.png \ media-end.png \ media-play.png \ media-record.png \ media-start.png \ media-stop.png \ media-pause.png \ window-about.png \ window-audio.png \ window-color.png \ window-copying.png \ window-disk.png \ window-help.png \ window-info.png \ window-keyboard.png \ window-module.png \ window-options.png \ window-selector.png \ window-question.png \ window-screenshot.png \ window-tape.png \ window-thanks.png \ window-plotter.png \ window-video.png \ kcemu.png UI_XML = \ about.glade \ audio.glade \ color.glade \ dialog.glade \ disk.glade \ help.glade \ keyboard.glade \ legal.glade \ main.glade \ module.glade \ options.glade \ plotter.glade \ savemem.glade \ screenshot.glade \ selector.glade \ tapeedit.glade \ tape.glade \ thanks.glade \ vdip.glade \ video.glade @TARGET_FREEBSD_TRUE@icon_DATA = $(ICONS) $(LINUXICONS) @TARGET_LINUX_TRUE@icon_DATA = $(ICONS) $(LINUXICONS) @TARGET_MINGW_TRUE@icon_DATA = $(ICONS) $(WINICONS) image_DATA = $(IMAGES) $(UI_XML) CLEANFILES = kcemu-winicon_16x16.ppm \ kcemu-winicon_16x16.alpha.pgm \ kcemu-winicon_32x32.ppm \ kcemu-winicon_32x32.alpha.pgm \ kcemu-winicon_48x48.ppm \ kcemu-winicon_48x48.alpha.pgm \ $(WINICONS) \ $(LINUXICONS) EXTRA_DIST = $(ICONS) $(WINICONS) $(LINUXICONS) $(IMAGES) $(UI_XML) all: all-recursive .SUFFIXES: .SUFFIXES: .ico .png .ppm .xpm $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu images/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu images/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-iconDATA: $(icon_DATA) @$(NORMAL_INSTALL) test -z "$(icondir)" || $(MKDIR_P) "$(DESTDIR)$(icondir)" @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(icondir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(icondir)" || exit $$?; \ done uninstall-iconDATA: @$(NORMAL_UNINSTALL) @list='$(icon_DATA)'; test -n "$(icondir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(icondir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(icondir)" && rm -f $$files install-imageDATA: $(image_DATA) @$(NORMAL_INSTALL) test -z "$(imagedir)" || $(MKDIR_P) "$(DESTDIR)$(imagedir)" @list='$(image_DATA)'; test -n "$(imagedir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(imagedir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(imagedir)" || exit $$?; \ done uninstall-imageDATA: @$(NORMAL_UNINSTALL) @list='$(image_DATA)'; test -n "$(imagedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(imagedir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(imagedir)" && rm -f $$files # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(DATA) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(icondir)" "$(DESTDIR)$(imagedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-iconDATA install-imageDATA install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-iconDATA uninstall-imageDATA .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-iconDATA install-imageDATA \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-iconDATA uninstall-imageDATA .png.ico: # xpmtoppm --alphaout /tmp/ico.alpha.1.$$$$ $< | ppmquant 256 > /tmp/ico.icon.$$$$ ; \ # ppmtowinicon -andpgms /tmp/ico.icon.$$$$ /tmp/ico.alpha.1.$$$$ > $@ ; \ # rm -f /tmp/ico.icon.$$$$ /tmp/ico.alpha.1.$$$$ convert $< $@ .png.xpm: convert -resize 32x32 $< $@ .png.ppm: SIZE=`echo "$<" | sed -e 's/.*[0-9]*x\([0-9]*\).*/\1/'`; \ COLORS=`expr 16 + "(" $$SIZE / 48 ")" "*" 240`; \ echo "### Found png icon of size $$SIZE, setting number of colors to $$COLORS"; \ pngtopnm -alpha $< > $*.alpha.pgm ; \ pngtopnm $< | ppmquant $$COLORS > $@; kcemu-winicon.ico : kcemu-winicon_16x16.ppm kcemu-winicon_32x32.ppm kcemu-winicon_48x48.ppm ppmtowinicon -andpgms \ kcemu-winicon_16x16.ppm kcemu-winicon_16x16.alpha.pgm \ kcemu-winicon_32x32.ppm kcemu-winicon_32x32.alpha.pgm \ kcemu-winicon_48x48.ppm kcemu-winicon_48x48.alpha.pgm \ > $@ all : $(ICONS) $(WINICONS) $(LINUXICONS) # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/conf/0000755001050700006200000000000011412404770013132 5ustar glaubitzfbedvKCemu-0.5.1/conf/a5105.conf0000644001050700006200000000004711131675406014541 0ustar glaubitzfbedv# kcemu configuration file variant = 1 KCemu-0.5.1/conf/pcm.conf0000644001050700006200000000003311131675406014560 0ustar glaubitzfbedv# kcemu configuration file KCemu-0.5.1/conf/kramermc.conf0000644001050700006200000000003311131675406015602 0ustar glaubitzfbedv# kcemu configuration file KCemu-0.5.1/conf/lc80.conf0000644001050700006200000000003311131675406014547 0ustar glaubitzfbedv# kcemu configuration file KCemu-0.5.1/conf/Makefile.am0000644001050700006200000000057511131675406015201 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in confdir = $(pkgdatadir)/config CONFIG_FILES = \ default.conf \ kc85-1.conf \ kc85-2.conf \ kc85-3.conf \ kc85-4.conf \ kc85-5.conf \ kc87.conf \ a5105.conf \ c80.conf \ kramermc.conf \ lc80.conf \ pcm.conf \ poly880.conf \ vcs80.conf \ z1013.conf conf_DATA = $(CONFIG_FILES) EXTRA_DIST = $(CONFIG_FILES) KCemu-0.5.1/conf/z1013.conf0000644001050700006200000000004711131675406014564 0ustar glaubitzfbedv# kcemu configuration file variant = 5 KCemu-0.5.1/conf/c80.conf0000644001050700006200000000003311131675406014373 0ustar glaubitzfbedv# kcemu configuration file KCemu-0.5.1/conf/poly880.conf0000644001050700006200000000003311131675406015224 0ustar glaubitzfbedv# kcemu configuration file KCemu-0.5.1/conf/kc85-4.conf0000644001050700006200000000006311131675406014717 0ustar glaubitzfbedv# kcemu configuration file d004 = 1 busdrivers = 1 KCemu-0.5.1/conf/kc85-3.conf0000644001050700006200000000005211131675406014714 0ustar glaubitzfbedv# kcemu configuration file busdrivers = 1 KCemu-0.5.1/conf/kc87.conf0000644001050700006200000000004711131675406014562 0ustar glaubitzfbedv# kcemu configuration file variant = 3 KCemu-0.5.1/conf/kc85-5.conf0000644001050700006200000000006311131675406014720 0ustar glaubitzfbedv# kcemu configuration file d004 = 1 busdrivers = 1 KCemu-0.5.1/conf/kc85-2.conf0000644001050700006200000000005211131675406014713 0ustar glaubitzfbedv# kcemu configuration file busdrivers = 1 KCemu-0.5.1/conf/kc85-1.conf0000644001050700006200000000004711131675406014716 0ustar glaubitzfbedv# kcemu configuration file variant = 0 KCemu-0.5.1/conf/vcs80.conf0000644001050700006200000000003311131675406014744 0ustar glaubitzfbedv# kcemu configuration file KCemu-0.5.1/conf/default.conf0000644001050700006200000000043111131675406015427 0ustar glaubitzfbedv# kcemu configuration file system = 8 variant = 0 display_scale = 1 display_effects = 1 display_mem_access = 0 display_debug = 0 #color_fg_saturation = 80 #color_fg_brightness = 95 #color_bg_saturation = 65 #color_bg_brightness = 50 #color_black_level = 10 #color_white_level = 90 KCemu-0.5.1/conf/Makefile.in0000644001050700006200000003524111412404770015204 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = conf DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(confdir)" DATA = $(conf_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ confdir = $(pkgdatadir)/config CONFIG_FILES = \ default.conf \ kc85-1.conf \ kc85-2.conf \ kc85-3.conf \ kc85-4.conf \ kc85-5.conf \ kc87.conf \ a5105.conf \ c80.conf \ kramermc.conf \ lc80.conf \ pcm.conf \ poly880.conf \ vcs80.conf \ z1013.conf conf_DATA = $(CONFIG_FILES) EXTRA_DIST = $(CONFIG_FILES) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu conf/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu conf/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-confDATA: $(conf_DATA) @$(NORMAL_INSTALL) test -z "$(confdir)" || $(MKDIR_P) "$(DESTDIR)$(confdir)" @list='$(conf_DATA)'; test -n "$(confdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(confdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(confdir)" || exit $$?; \ done uninstall-confDATA: @$(NORMAL_UNINSTALL) @list='$(conf_DATA)'; test -n "$(confdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(confdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(confdir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(confdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-confDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-confDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-confDATA install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-confDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/0000755001050700006200000000000011412404772012776 5ustar glaubitzfbedvKCemu-0.5.1/src/ui/0000755001050700006200000000000011412404773013414 5ustar glaubitzfbedvKCemu-0.5.1/src/ui/error.cc0000644001050700006200000000236411345001576015060 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "ui/error.h" Error *Error::_instance = 0; Error::Error(void) { } Error * Error::instance(void) { if (_instance == 0) { _instance = new Error(); } return _instance; } void Error::addErrorListener(ErrorListener *listener) { _l.push_back(listener); } void Error::info(const char *msg) { for (error_list_t::iterator it = _l.begin();it != _l.end();it++) (*it)->errorInfo(msg); } KCemu-0.5.1/src/ui/generic/0000755001050700006200000000000011412404773015030 5ustar glaubitzfbedvKCemu-0.5.1/src/ui/generic/memaccess.cc0000644001050700006200000000435111345001576017301 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include // DEBUG #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/kc.h" #include "kc/z80.h" #include "ui/generic/memaccess.h" #include "libdbg/dbg.h" MemAccess::MemAccess(void) { reset(); } MemAccess::~MemAccess(void) { } void MemAccess::update(void) { _base_counter = z80->getCounter(); } void MemAccess::set_value(int x, int y, byte_t value) { _buf[40 * y + x] = value; } byte_t MemAccess::get_value(int x, int y) { int idx = 40 * y + x; byte_t val = _buf[idx]; if (val > 0) _buf[idx]--; return val; } void MemAccess::reset() { _base_counter = 0; memset(_buf, 0, BUFFER_SIZE); } void MemAccess::memory_read(word_t addr) { DBG(3, form("KCemu/MemAccess/read", "MemAccess::memory_read(): addr = %04x\n", addr)); } void MemAccess::memory_write(word_t addr) { static double line_val = 35000.0 / 288.0; static int val = Preferences::instance()->get_int_value("display_mem_access", 0) ? 2 : 0; DBG(3, form("KCemu/MemAccess/write", "MemAccess::memory_write(): addr = %04x\n", addr)); if (_base_counter == 0) return; double diff = z80->getCounter() - _base_counter; if (diff >= 35000) return; int y = (int)(diff / line_val); if (y >= 256) return; diff -= (y * line_val); int x = (int)((diff * 384.0) / line_val); if (x >= 320) return; x /= 8; _buf[40 * y + x] = val; } KCemu-0.5.1/src/ui/generic/ui_1.cc0000644001050700006200000001312011345001576016170 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/prefs/types.h" #include "kc/prefs/prefs.h" #include "kc/pio1.h" #include "kc/timer1.h" #include "kc/memory.h" #include "kc/module.h" #include "ui/generic/ui_1.h" UI_1::UI_1(void) { int a; set_real_screen_size(320 + 64, 192 + 64); _dirty_size = (get_real_width() * get_real_height()) / 64; _dirty = new byte_t[_dirty_size]; _bitmap = new byte_t[get_real_width() * get_real_height()]; _pix_cache = new byte_t[_dirty_size]; _col_cache = new byte_t[_dirty_size]; for (a = 0;a < _dirty_size;a++) { _dirty[a] = 1; _pix_cache[a] = 0xff; _col_cache[a] = 0xff; } } UI_1::~UI_1(void) { delete[] _dirty; delete[] _bitmap; delete[] _pix_cache; delete[] _col_cache; } void UI_1::generic_put_pixels(byte_t *ptr, byte_t val, word_t color) { for (int a = 0;a < 8;a++) ptr[a] = (val & (128 >> a)) ? (color >> 8) : color; } void UI_1::generic_set_border_24(int width, int height, byte_t border) { int a, x, y, z; byte_t *ptr = _bitmap; z = -1; for (y = 0;y < height;y += 8) for (x = 0;x < width;x += 8) { z++; if ((y >= 32) && (y < 224) && (x >= 32) && (x < 352)) continue; _dirty[z]++; for (a = 0;a < 8;a++) generic_put_pixels(ptr + (y + a) * width + x, 0, border); } } void UI_1::generic_set_border_20(int width, int height, byte_t border) { int x, y; byte_t *ptr = _bitmap; for (y = 40;y < 232;y += 10) for (x = 32;x < 352;x += 8) { generic_put_pixels(ptr + y * width + x, 0, border); generic_put_pixels(ptr + (y + 1) * width + x, 0, border); } } void UI_1::generic_update_24(int width, int height, int fchg, byte_t flash, bool clear_cache) { word_t color; byte_t pix, col; int a, x, y, z, d; byte_t *irm = memory->get_irm(); byte_t *font = memory->get_char_rom(); byte_t *ptr = _bitmap; z = -1; d = 195; for (y = 0;y < 192;y += 8) { for (x = 0;x < 320;x += 8) { z++; d++; col = irm[z]; if (_col_cache[z] != col) _dirty[d]++; if (fchg && (col & 0x80)) _dirty[d]++; pix = irm[0x400 + z]; if (_pix_cache[z] != pix) _dirty[d]++; if (clear_cache) _dirty[d]++; if (!_dirty[d]) continue; _col_cache[z] = col; _pix_cache[z] = pix; color = (0x0011 * col) & 0x0707; if (flash && (col & 0x80)) color = ((color << 8) & 0x0700) | ((color >> 8) & (0x0007)); for (a = 0;a < 8;a++) generic_put_pixels(ptr + (a + 32) * width + x + 32, font[8 * pix + a], color); } ptr += 8 * width; d += 8; } } void UI_1::generic_update_20(int width, int height, int fchg, byte_t flash, bool clear_cache) { word_t color; byte_t pix, col; int a, x, y, z, d; byte_t *irm = memory->get_irm(); byte_t *font = memory->get_char_rom(); byte_t *ptr = _bitmap; z = -1; d = 195; for (y = 0;y < 200;y += 10) { for (x = 0;x < 320;x += 8) { z++; d = (y / 8 + 4) * 48 + (x / 8) + 4; col = irm[z]; if (_col_cache[z] != col) _dirty[d]++; pix = irm[0x400 + z]; if (_pix_cache[z] != pix) _dirty[d]++; if (clear_cache) _dirty[d]++; if (!_dirty[d]) continue; _dirty[d + 48]++; _col_cache[z] = col; _pix_cache[z] = pix; color = (0x0011 * col) & 0x0707; for (a = 0;a < 8;a++) generic_put_pixels(ptr + (a + 32) * width + x + 32, font[8 * pix + a], color); } ptr += 10 * width; d += 8; } } void UI_1::generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache) { static byte_t old_flash = 0xff; static byte_t old_lmode = 0xff; static byte_t old_border = 0xff; static byte_t old_color_expansion = 0xff; int fchg = 0; int width = get_real_width(); int height = get_real_height(); int flash = ((Timer1 *)timer)->get_flash(); if (old_flash != flash) { fchg = 1; old_flash = flash; } byte_t lmode = ((PIO1_1 *)pio)->get_line_mode(); if (old_lmode != lmode) { old_lmode = lmode; clear_cache = true; } bool color_expansion_installed = !module->is_empty(61); if (old_color_expansion != color_expansion_installed) { old_color_expansion = color_expansion_installed; clear_cache = true; } if (clear_cache) old_border = 0xff; // force drawing of screen border if (color_expansion_installed || clear_cache) { byte_t border = color_expansion_installed ? ((PIO1_1 *)pio)->get_border_color() : 0; if (old_border != border) { old_border = border; generic_set_border_24(width, height, border); if (lmode) generic_set_border_20(width, height, border); } } if (lmode) generic_update_20(width, height, fchg, flash, clear_cache); else generic_update_24(width, height, fchg, flash, clear_cache); } KCemu-0.5.1/src/ui/generic/ui_base.cc0000644001050700006200000000416211345001576016750 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "ui/generic/ui_base.h" #include "libdbg/dbg.h" UI_Base::UI_Base(void) { _width = 0; _height = 0; _dirty_size = 0; _dirty = 0; _bitmap = 0; } UI_Base::~UI_Base(void) { } void UI_Base::create_buffer(int buffer_size) { _bitmap = new byte_t[buffer_size]; memset(_bitmap, 0, buffer_size); } void UI_Base::set_real_screen_size(int width, int height) { _width = width; _height = height; } byte_t * UI_Base::get_buffer(void) { return _bitmap; } byte_t * UI_Base::get_dirty_buffer(void) { return _dirty; } int UI_Base::get_dirty_buffer_size(void) { return _dirty_size; } int UI_Base::get_real_width(void) { if (_width == 0) { DBG(0, form("KCemu/internal_error", "KCemu: call to UI_Base::get_real_width() while width is still 0!\n")); abort(); } return _width; } int UI_Base::get_real_height(void) { if (_height == 0) { DBG(0, form("KCemu/internal_error", "KCemu: call to UI_Base::get_real_height() while height is still 0!\n")); abort(); } return _height; } void UI_Base::generic_signal_v_retrace(bool value) { } int UI_Base::generic_get_mode(void) { return 0; } void UI_Base::generic_set_mode(int mode) { } KCemu-0.5.1/src/ui/generic/ui_3.cc0000644001050700006200000001203511345001576016176 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/memory.h" #include "ui/generic/ui_3.h" UI_3::UI_3(void) { int a, b, n1, n2; set_real_screen_size(320, 256); b = (get_real_width() * get_real_height()) / 8; _bitmap = new byte_t[get_real_width() * get_real_height()]; _dirty_size = b / 8; _dirty = new byte_t[_dirty_size]; _pix_cache = new byte_t[b]; _col_cache = new byte_t[b]; _scan_cache = new byte_t[b]; for (a = 0;a < 256;a++) { n1 = (a & 0x03) << 2; n2 = (a & 0x0c) >> 2; _bitswap1[a] = ((a & 0xf0) | n1 | n2); n1 = (a & 0x03) << 4; n2 = (a & 0x30) >> 4; _bitswap2[a] = ((a & 0xcc) | n1 | n2); } for (a = 0;a < 256;a++) _bitswap3[a] = 0x3000 + (_bitswap1[_bitswap2[a] >> 2] << 3); for (a = 0;a < _dirty_size;a++) _dirty[a] = 1; for (a = 0;a < b;a++) { _pix_cache[a] = 0; _col_cache[a] = 0; _scan_cache[a] = 0; } } UI_3::~UI_3(void) { delete[] _dirty; delete[] _bitmap; delete[] _pix_cache; delete[] _col_cache; delete[] _scan_cache; } void UI_3::generic_put_pixels(int x, int y, byte_t val, byte_t fg, byte_t bg) { int idx = y * get_real_width() + x; _dirty[(y / 8) * (get_real_width() / 8) + (x / 8)] = 1; for (int a = 0;a < 8;a++) { if (val & 0x80) _bitmap[idx++] = fg; else _bitmap[idx++] = bg; val <<= 1; } } void UI_3::generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache) { int x, y; int changed; int p, pc, ys, yc, s; byte_t val, col, fg, bg; byte_t *irm = memory->get_irm(); p = 0; for (y = 0;y < 256;y++) { pc = (p & 0x7f) | ((p & 0xfe00) >> 2) + 0x2800; ys = _bitswap1[y]; s = 0; if (scanline) s = scanline->get_value(ys); for (x = 0;x < 32;x++) { changed = clear_cache; val = irm[p]; col = irm[pc + x]; if (val != _pix_cache[p]) { changed++; _pix_cache[p] = val; } if (col != _col_cache[p]) { changed++; _col_cache[p] = col; } bg = (col & 7) | 0x10; fg = (col >> 3) & 15; if (memaccess) { byte_t m = memaccess->get_value(x, y); switch (m) { case 2: /* * access in the current frame */ if ((fg == bg) || (val == 0)) { /* * nothing to change so we don't need to * update in the next frame */ memaccess->set_value(x, y, 0); } else { fg = bg; changed++; } break; case 1: /* * access in the previous frame */ changed++; break; } } if (col & 128) { if (_scan_cache[40 * y + x] != s) { changed++; _scan_cache[40 * y + x] = s; if (s) fg = bg; } } p++; if (!changed) continue; generic_put_pixels(8 * x, ys, val, fg, bg); } } p = 0x2000; for (y = 0;y < 256;y++) { ys = _bitswap2[y]; yc = _bitswap3[y]; s = 0; if (scanline) s = scanline->get_value(ys); for (x = 0;x < 8;x++) { changed = clear_cache; val = irm[p]; col = irm[yc + x]; if (val != _pix_cache[p]) { changed++; _pix_cache[p] = val; } if (col != _col_cache[p]) { changed++; _col_cache[p] = col; } bg = (col & 7) | 0x10; fg = (col >> 3) & 15; if (memaccess) { byte_t m = memaccess->get_value(32 + x, y); switch (m) { case 2: /* * access in the current frame */ if ((fg == bg) || (val == 0)) { /* * nothing to change so we don't need to * update in the next frame */ memaccess->set_value(32 + x, y, 0); } else { fg = bg; changed++; } break; case 1: /* * access in the previous frame */ changed++; break; } } if (col & 128) { if (_scan_cache[40 * y + x + 32] != s) { changed++; _scan_cache[40 * y + x + 32] = s; if (s) fg = bg; } } p++; if (!changed) continue; generic_put_pixels(8 * x + 256, ys, val, fg, bg); } } } KCemu-0.5.1/src/ui/generic/ui_4.cc0000644001050700006200000001157111345001576016203 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/ports.h" #include "kc/memory.h" #include "ui/generic/ui_4.h" UI_4::UI_4(void) { int a, b, y; set_real_screen_size(320, 256); y = get_real_height(); b = (get_real_width() * y) / 8; _bitmap = new byte_t[get_real_width() * y]; _dirty_size = b / 8; _dirty = new byte_t[_dirty_size]; _pix_cache = new byte_t[b]; _col_cache = new byte_t[b]; _scn_cache = new byte_t[y]; for (a = 0;a < _dirty_size;a++) _dirty[a] = 1; for (a = 0;a < b;a++) { _pix_cache[a] = 0; _col_cache[a] = 0; } for (a = 0;a < y;a++) _scn_cache[a] = 0; } UI_4::~UI_4(void) { delete[] _bitmap; delete[] _dirty; delete[] _pix_cache; delete[] _col_cache; delete[] _scn_cache; } void UI_4::generic_put_pixels(int x, int y, byte_t val, byte_t fg, byte_t bg) { int idx = y * get_real_width() + x; _dirty[(y / 8) * (get_real_width() / 8) + (x / 8)] = 1; for (int a = 0;a < 8;a++) { if (val & 0x80) _bitmap[idx++] = fg; else _bitmap[idx++] = bg; val <<= 1; } } void UI_4::generic_update_hires(Scanline *scanline, byte_t *irm, bool clear_cache) { int x, y, yy, z, p; int yyadd, idx, val, col, changed; p = 0; yy = 0; yyadd = get_real_width(); for (y = 0;y < get_real_height();y++) { for (x = 0;x < 320;x += 8) { changed = clear_cache; idx = 32 * x + y; val = irm[idx]; col = irm[idx + 0x4000]; if (val != _pix_cache[p]) { changed++; _pix_cache[p] = val; } if (col != _col_cache[p]) { changed++; _col_cache[p] = col; } p++; if (!changed) continue; _dirty[(y / 8) * (yyadd / 8) + (x / 8)] = 1; for (z = 0;z < 8;z++) { /* * some bit juggling to map one bit from val and * col to the color index for the current pixel * * mapping is: * * val | col | color index | color * ----+-----+-------------+------ * 0 | 0 | 0 (000b) | black * 0 | 1 | 5 (101b) | cyan * 1 | 0 | 2 (010b) | red * 1 | 1 | 7 (111b) | white */ val <<= 1; _bitmap[yy + x + z] = ((val & 256) | (5 * (col & 128))) >> 7; col <<= 1; } } yy += yyadd; } } void UI_4::generic_update_lores(Scanline *scanline, byte_t *irm, bool clear_cache) { int x, y, p, s; int idx, changed; bool scanline_changed; byte_t val, col, fg, bg; p = 0; for (y = 0;y < get_real_height();y++) { s = 0; if (scanline) s = scanline->get_value(y); scanline_changed = false; if (s != _scn_cache[y]) { _scn_cache[y] = s; scanline_changed = true; } for (x = 0;x < 40;x++) { changed = clear_cache; idx = 256 * x + y; val = irm[idx]; col = irm[idx + 0x4000]; if (val != _pix_cache[p]) { changed++; _pix_cache[p] = val; } if (col != _col_cache[p]) { changed++; _col_cache[p] = col; } bg = (col & 7) | 0x10; fg = (col >> 3) & 15; if (col & 128) { if (scanline_changed) changed++; if (s) fg = bg; } p++; if (!changed) continue; generic_put_pixels(8 * x, y, val, fg, bg); } } } void UI_4::generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache) { int a; int hires; byte_t *irm; static byte_t *irm_old = NULL; static int hires_old = -1; irm = memory->get_irm(); if (irm != irm_old) { /* * on screen switch we need to ignore the * display cache */ irm_old = irm; clear_cache = true; } hires = ((ports->in(0x84) & 8) == 0); if (hires != hires_old) { /* * when switching lores/hires mode ignore the * display cache too */ hires_old = hires; clear_cache = true; } if (clear_cache) for (a = 0;a < _dirty_size;a++) _dirty[a] = 1; if (hires) generic_update_hires(scanline, irm, clear_cache); else generic_update_lores(scanline, irm, clear_cache); } KCemu-0.5.1/src/ui/generic/ui_vcs80.cc0000644001050700006200000000412711345001576017002 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/pio.h" #include "kc/z80.h" #include "ui/generic/ui_vcs80.h" #include "libdbg/dbg.h" UI_VCS80::UI_VCS80(void) : UI_LED(624, 112, 1, 64, 16, 8, 4, 2, 32, 128) { _counter = 7; for (int a = 0;a < VCS80_NR_OF_LEDS;a++) _led_value[a] = 0; } UI_VCS80::~UI_VCS80(void) { } void UI_VCS80::generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache) { generic_draw_digit(65 * 4 + 32, 12, 4, 0, clear_cache); for (int a = 0;a < VCS80_NR_OF_LEDS;a++) { int idx = 7 - a; if (idx > 3) idx++; generic_draw_digit(65 * idx + 32, 12, a, _led_value[a], clear_cache); } } void UI_VCS80::generic_signal_v_retrace(bool value) { led_update(); } void UI_VCS80::led_update(void) { _led_value[_counter] = pio->in_B_DATA() & 0x7f; DBG(2, form("KCemu/ui/vcs80/led_update", "UI_VCS80::led_update(): LED: [%d] %02x %02x %02x %02x - %02x %02x %02x %02x\n", _counter, _led_value[7], _led_value[6], _led_value[5], _led_value[4], _led_value[3], _led_value[2], _led_value[1], _led_value[0])); // trigger next display interrupt _counter = (_counter + 1) % 8; pio->set_A_EXT(0xf7, _counter | 0x70); pio->set_A_EXT(0xf7, _counter | 0xf0); } KCemu-0.5.1/src/ui/generic/ui_led.cc0000644001050700006200000001250111345001576016576 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "ui/generic/ui_led.h" UI_LED::UI_LED(int width, int height, int a, int b, int c, int d, int e, int f, int g, int h) { int len = width * height; _a = a; _b = b; _c = c; _d = d; _e = e; _f = f; _g = g; _h = h; set_real_screen_size(width, height); _bitmap = new byte_t[len]; _dirty_size = len / 64; _dirty = new byte_t[_dirty_size]; for (int i = 0;i < len;i++) _bitmap[i] = 0; for (int i = 0;i < _dirty_size;i++) _dirty[i] = 1; } UI_LED::~UI_LED(void) { delete[] _bitmap; delete[] _dirty; } void UI_LED::generic_put_pixel(int x, int y, byte_t col, bool clear_cache) { int idx = y * get_real_width() + x; if ((_bitmap[idx] != col) || clear_cache) { _bitmap[idx] = col; _dirty[(y / 8) * (get_real_width() / 8) + (x / 8)] = 1; } } void UI_LED::generic_draw_hline(int x, int y, byte_t col, bool clear_cache) { for (int a = 2;a < 38;a++) generic_put_pixel(x + a, y, col, clear_cache); for (int a = 3;a < 37;a++) { generic_put_pixel(x + a, y - 1, col, clear_cache); generic_put_pixel(x + a, y + 1, col, clear_cache); } for (int a = 4;a < 36;a++) { generic_put_pixel(x + a, y - 2, col, clear_cache); generic_put_pixel(x + a, y + 2, col, clear_cache); } for (int a = 5;a < 35;a++) { generic_put_pixel(x + a, y - 3, col, clear_cache); generic_put_pixel(x + a, y + 3, col, clear_cache); } } void UI_LED::generic_draw_vline(int x, int y, byte_t col, bool clear_cache) { for (int a = 2;a < 38;a++) { int q = a / 8; generic_put_pixel(x - q, y + a, col, clear_cache); } for (int a = 3;a < 37;a++) { int q = a / 8; generic_put_pixel(x - q - 1, y + a, col, clear_cache); generic_put_pixel(x - q + 1, y + a, col, clear_cache); } for (int a = 4;a < 36;a++) { int q = a / 8; generic_put_pixel(x - q - 2, y + a, col, clear_cache); generic_put_pixel(x - q + 2, y + a, col, clear_cache); } for (int a = 5;a < 35;a++) { int q = a / 8; generic_put_pixel(x - q - 3, y + a, col, clear_cache); generic_put_pixel(x - q + 3, y + a, col, clear_cache); } } void UI_LED::generic_draw_led(int x, int y, byte_t col, bool clear_cache) { int space[10] = { 6, 4, 3, 2, 1, 1, 0, 0, 0, 0 }; int len[10] = { 8, 12, 14, 16, 18, 18, 20, 20, 20, 20 }; for (int yy = 0;yy < 10;yy++) for (int xx = 0;xx < len[yy];xx++) { generic_put_pixel(x + xx + space[yy], y + yy, col, clear_cache); generic_put_pixel(x + xx + space[yy], y + 19 - yy, col, clear_cache); } } void UI_LED::generic_draw_point(int x, int y, byte_t col, bool clear_cache) { int space[4] = { 2, 1, 0, 0 }; int len[4] = { 4, 6, 8, 8 }; for (int yy = 0;yy < 4;yy++) for (int xx = 0;xx < len[yy];xx++) { generic_put_pixel(x + xx + space[yy], y - 4 + yy, col, clear_cache); generic_put_pixel(x + xx + space[yy], y - 4 + 7 - yy, col, clear_cache); } } /* * * LC 80 POLY 880 VCS 80 C 80 * * 4 32 1 1 * -a- --- --- --- --- * | | 2 | | 1 64 | | 128 64 | | 2 32 | | 2 * b f | 8 | |16 | |32 | |64 | * -g- --- --- --- --- * | | 64 | | 32 1 | | 4 16 | | 4 16 | | 4 * c e | | | | | | | | * -d- (h) --- --- --- --- * 128 (16) 2 (8) 8 (-) 8 (128) */ void UI_LED::generic_draw_digit(int x, int y, int index, byte_t led_value, bool clear_cache) { byte_t fg, bg; fg = 1; bg = 2; generic_draw_hline(x + 4, y , (led_value & _a) ? bg : fg, clear_cache); generic_draw_hline(x , y + 40, (led_value & _g) ? bg : fg, clear_cache); generic_draw_hline(x - 4, y + 80, (led_value & _d) ? bg : fg, clear_cache); generic_draw_vline(x + 4, y , (led_value & _b) ? bg : fg, clear_cache); generic_draw_vline(x + 44, y , (led_value & _f) ? bg : fg, clear_cache); generic_draw_vline(x , y + 40, (led_value & _c) ? bg : fg, clear_cache); generic_draw_vline(x + 40, y + 40, (led_value & _e) ? bg : fg, clear_cache); generic_draw_point(x + 42, y + 80, (led_value & _h) ? bg : fg, clear_cache); } KCemu-0.5.1/src/ui/generic/ui_0.cc0000644001050700006200000001345611345001576016203 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/gdc.h" #include "kc/memory.h" #include "ui/generic/ui_0.h" UI_0::UI_0(void) { _font = NULL; _dirty = NULL; _bitmap = NULL; _pix_cache = NULL; _col_cache = NULL; generic_set_mode(UI_GENERIC_MODE_Z1013_32x32); init(); } UI_0::~UI_0(void) { dispose(); } void UI_0::init(void) { _dirty_size = (get_real_width() * get_real_height()) / 64; _dirty = new byte_t[_dirty_size]; _bitmap = new byte_t[get_real_width() * get_real_height()]; _pix_cache = new byte_t[_dirty_size]; _col_cache = new byte_t[_dirty_size]; memset(_dirty, 1, _dirty_size); memset(_bitmap, 0, get_real_width() * get_real_height()); } void UI_0::dispose(void) { if (_dirty) delete[] _dirty; if (_bitmap) delete[] _bitmap; if (_pix_cache) delete[] _pix_cache; if (_col_cache) delete[] _col_cache; } void UI_0::generic_put_pixels(byte_t *ptr, byte_t val, word_t color) { for (int a = 0;a < 8;a++) ptr[a] = (val & (128 >> a)) ? (color >> 8) : color; } void UI_0::generic_update_gdc(byte_t *font, bool clear_cache) { if (gdc == NULL) return; int a, x, y, z, p, c, fg, bg, col; long offset = gdc->get_pram_SAD(0); int width = 80; int height = 25; int lines = 10; int linecount = 0; int subscreen = 0; byte_t *ptr = _bitmap; z = -1; for (y = 0;y < height;y++) { if (linecount >= gdc->get_pram_LEN(subscreen)) { subscreen++; linecount = 0; offset = gdc->get_pram_SAD(subscreen) - z - 1; // compensate value of loop variable! } linecount += lines; for (x = 0;x < width;x++) { z++; p = gdc->get_mem(z + offset); c = gdc->get_col(z + offset); _dirty[z] = clear_cache; if (p != _pix_cache[z]) { _dirty[z]++; _pix_cache[z] = p; } if (c != _col_cache[z]) { _dirty[z]++; _col_cache[z] = c; } if (gdc->get_cursor(z + offset)) { _pix_cache[z] = 255; // invalidate cache on cursor position to force _col_cache[z] = 255; // update there when cursor position changes } if (!_dirty[z]) continue; fg = c & 15; bg = (c >> 4) & 7; col = 0x0100; if (p & 0x80) { p &= 0x7f; col = 0x0001; } ptr = _bitmap + y * 8 * 8 * width + 8 * x; for (a = 0;a < 8;a++) { int xor_val = 0; if (gdc->get_cursor(z + offset, a)) xor_val = 0x0101; generic_put_pixels(ptr + a * 8 * width, font[8 * p + a], col ^ xor_val); } } } } void UI_0::generic_update_32x32(byte_t *font, bool clear_cache) { byte_t pix; int a, i, x, y, z, width, height; byte_t *irm = memory->get_irm(); byte_t *ptr = _bitmap; width = get_real_width(); height = get_real_height(); i = -1; z = 73; ptr += 16 * width + 16; for (y = 0;y < 256;y += 8) { for (x = 0;x < 256;x += 8) { i++; z++; _dirty[z] = clear_cache; pix = irm[i]; if (_pix_cache[i] != pix) _dirty[z]++; if (!_dirty[z]) continue; _pix_cache[i] = pix; for (a = 0;a < 8;a++) generic_put_pixels(ptr + a * width + x, font[8 * pix + a], 0x0100); } z += 4; ptr += 8 * width; } } void UI_0::generic_update_64x16(byte_t *font, bool clear_cache) { byte_t pix; int a, i, x, y, z, width, height, width8; byte_t *irm = memory->get_irm(); byte_t *ptr = _bitmap; width = get_real_width(); height = get_real_height(); width8 = width / 8; i = -1; ptr += 6 * width + 8; for (y = 0;y < 16;y++) { z = (((12 * y + 6) / 8) * width8); for (x = 0;x < 512;x += 8) { i++; z++; _dirty[z] = clear_cache; pix = irm[i]; if (_pix_cache[i] != pix) _dirty[z]++; if (!_dirty[z]) continue; _dirty[z + width8]++; _pix_cache[i] = pix; for (a = 0;a < 8;a++) generic_put_pixels(ptr + a * width + x, font[8 * pix + a], 0x0100); } ptr += 12 * width; } } void UI_0::generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache) { byte_t *font = memory->get_char_rom(); if (_font != font) { _font = font; clear_cache = true; } switch (_mode) { case UI_GENERIC_MODE_Z1013_32x32: generic_update_32x32(font, clear_cache); break; case UI_GENERIC_MODE_Z1013_64x16: generic_update_64x16(font, clear_cache); break; case UI_GENERIC_MODE_GDC: generic_update_gdc(font, clear_cache); break; } } void UI_0::generic_signal_v_retrace(bool value) { if (_mode == UI_GENERIC_MODE_GDC) if (gdc != NULL) gdc->v_retrace(value); } int UI_0::generic_get_mode(void) { return _mode; } void UI_0::generic_set_mode(int mode) { _mode = mode; switch (_mode) { case UI_GENERIC_MODE_Z1013_32x32: set_real_screen_size(288, 288); break; case UI_GENERIC_MODE_Z1013_64x16: set_real_screen_size(528, 200); break; case UI_GENERIC_MODE_GDC: set_real_screen_size(640, 200); break; } dispose(); init(); } KCemu-0.5.1/src/ui/generic/ui_9.cc0000644001050700006200000001773411345001576016217 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/gdc.h" #include "kc/vis.h" #include "ui/ui.h" #include "ui/generic/ui_9.h" UI_9::UI_9(void) { _dirty = NULL; _bitmap = NULL; _pix_cache = NULL; _col_cache = NULL; generic_set_mode(UI_GENERIC_MODE_LORES); init(); } UI_9::~UI_9(void) { dispose(); } void UI_9::init(void) { int a; _max_ptr = get_real_width() * get_real_height(); _dirty_size = (get_real_width() * get_real_height()) / 64; _dirty = new byte_t[_dirty_size]; _bitmap = new byte_t[get_real_width() * get_real_height()]; _pix_cache = new byte_t[_dirty_size]; _col_cache = new byte_t[_dirty_size]; for (a = 0;a < _dirty_size;a++) _dirty[a] = 1; for (a = 0;a < _dirty_size;a++) { _pix_cache[a] = 0; _col_cache[a] = 0; } } void UI_9::dispose(void) { if (_dirty) delete[] _dirty; if (_bitmap) delete[] _bitmap; if (_pix_cache) delete[] _pix_cache; if (_col_cache) delete[] _col_cache; } void UI_9::set_pixel(int x, int y, int color) { int yaddr = y * get_real_width(); if (yaddr >= _max_ptr) return; if (_bitmap[yaddr + x] == color) return; _bitmap[yaddr + x] = color; _dirty[(y / 8) * (get_real_width() / 8) + x / 8] = 0xff; } void UI_9::set_char(int x, int y, int c, int fg, int bg, int width, int lines) { byte_t *chr = vis->get_memory(); int xx, yy, pix, col_fg, col_bg, addr; addr = width * y + x; c *= 8; x *= 8; y *= lines; y += 20; // move smaller screen a little bit to // the center of the window if (lines < 10) y += (10 - lines) * 12; for (yy = 0;yy < 8;yy++) { pix = chr[c]; if (gdc->get_cursor(addr, yy)) { col_fg = bg; col_bg = fg; // not truncated to 3 bit! } else { col_fg = fg; col_bg = bg; } for (xx = 0;xx < 8;xx++) { if (pix & (1 << xx)) set_pixel(x + xx + 32, y, col_fg); else set_pixel(x + xx + 32, y, col_bg); } y++; c++; } // fill space between lines (if any) with the background color for (yy = 8;yy < lines;yy++) { for (xx = 0;xx < 8;xx++) set_pixel(x + xx + 32, y, bg); y++; } } void UI_9::generic_update_border(int border, int lines) { int x, y, top; lines++; top = 20 + (10 - lines) * 12; for (x = 0;x < get_real_width();x++) for (y = 0;y < top;y++) { set_pixel(x, y, border); set_pixel(x, y + top + 25 * lines, border); } for (x = 0;x < 32;x++) for (y = 0;y < 25 * lines;y++) { set_pixel(x, top + y, border); set_pixel(get_real_width() - x - 1, top + y, border); } } void UI_9::generic_update_text(int width, int height, int lines, bool clear_cache) { int x, y, z, p, c, fg, bg; long offset = gdc->get_pram_SAD(0); z = 0; for (y = 0;y < height;y++) { if ((lines * y) == gdc->get_pram_LEN(0)) offset = gdc->get_pram_SAD(1) - z; // compensate value of loop variable! for (x = 0;x < width;x++) { int changed = _dirty[z]; p = gdc->get_mem(z + offset); c = gdc->get_col(z + offset); if (p != _pix_cache[z]) { changed++; _pix_cache[z] = p; } if (c != _col_cache[z]) { changed++; _col_cache[z] = c; } if (vis->get_changed(p)) changed++; if (gdc->get_cursor(z + offset)) { changed++; _pix_cache[z] = 255; // invalidate cache on cursor position to force _col_cache[z] = 255; // update there when cursor position changes } z++; if (!changed) continue; fg = c & 15; bg = (c >> 5) & 7; set_char(x, y, p, fg, bg, width, lines); } } vis->reset_changed(); } void UI_9::generic_update_graphic_2(bool clear_cache) { int a, x, y, col; long offset = gdc->get_pram_SAD(0); for (y = 0;y < 200;y++) for (x = 0;x < 320;x++) { a = x & 7; col = (gdc->get_mem(offset + 40 * y + x / 8) >> a) & 1; col += 2 * ((gdc->get_col(offset + 40 * y + x / 8) >> a) & 1); set_pixel(x + 32, y + 44, vis->get_color(col)); } } void UI_9::generic_update_graphic_3(bool clear_cache) { int a, x, y, col; long offset = gdc->get_pram_SAD(0); for (y = 0;y < 200;y++) for (x = 0;x < 640;x++) { a = x & 7; col = (gdc->get_mem(offset + 80 * y + x / 8) >> a) & 1; col += 2 * ((gdc->get_col(offset + 80 * y + x / 8) >> a) & 1); set_pixel(x + 32, y + 44, vis->get_color(col)); } } void UI_9::generic_update_graphic_5(bool clear_cache) { int a, x, y, mem, col, val; long offset = gdc->get_pram_SAD(0); for (y = 0;y < 200;y++) for (x = 0;x < 80;x++) { mem = gdc->get_mem(offset + 80 * y + x); col = gdc->get_col(offset + 80 * y + x); for (a = 0;a < 4;a++) { val = (mem >> a) & 1; val += (mem >> (a + 3)) & 2; val += ((4 * col) >> a) & 4; val += (col >> (a + 1)) & 8; set_pixel(4 * x + a + 32, y + 44, val); } } } void UI_9::generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache) { int mode; int border; int screen_on; int nr_of_lines; static int old_mode = -1; static int old_border = -1; static int old_screen_on = -1; static int old_nr_of_lines = -1; screen_on = gdc->get_screen_on(); if (screen_on != old_screen_on) { old_screen_on = screen_on; if (!screen_on) { memset(_bitmap, 0, get_real_width() * get_real_height()); memset(get_dirty_buffer(), 0xff, get_dirty_buffer_size()); return; } } mode = vis->get_mode(); border = vis->get_border(); nr_of_lines = gdc->get_nr_of_lines(); if (mode != old_mode) { // call to ui->set_mode below will trigger new update, we need to // make sure that we do not get into a loop. old_mode = mode; clear_cache = true; switch (mode) { case 0: case 2: case 5: ui->set_mode(UI_GENERIC_MODE_LORES); break; case 1: case 3: ui->set_mode(UI_GENERIC_MODE_HIRES); break; } } if (border != old_border) clear_cache = true; if (nr_of_lines != old_nr_of_lines) clear_cache = true; if (vis->is_color_palette_changed()) { clear_cache = true; vis->reset_color_palette_changed(); } old_border = border; old_nr_of_lines = nr_of_lines; if (clear_cache) { memset(_bitmap, 0, get_real_width() * get_real_height()); memset(get_dirty_buffer(), 0xff, get_dirty_buffer_size()); generic_update_border(border, nr_of_lines); } switch (mode) { case 0: generic_update_text(40, 25, nr_of_lines + 1, clear_cache); break; case 1: generic_update_text(80, 25, nr_of_lines + 1, clear_cache); break; case 2: generic_update_graphic_2(clear_cache); break; case 3: generic_update_graphic_3(clear_cache); break; case 5: generic_update_graphic_5(clear_cache); break; } } void UI_9::generic_signal_v_retrace(bool value) { gdc->v_retrace(value); } int UI_9::generic_get_mode(void) { return _mode; } void UI_9::generic_set_mode(int mode) { _mode = mode; switch (_mode) { case UI_GENERIC_MODE_LORES: set_real_screen_size(384, 288); break; case UI_GENERIC_MODE_HIRES: set_real_screen_size(704, 288); break; } dispose(); init(); } KCemu-0.5.1/src/ui/generic/tape.cc0000644001050700006200000000306111345001576016267 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "ui/generic/tape.h" DummyTapeHandler::DummyTapeHandler(void) { } DummyTapeHandler::~DummyTapeHandler(void) { } void DummyTapeHandler::tapeAttach(const char *name) { } void DummyTapeHandler::tapeDetach(void) { } void DummyTapeHandler::tapePower(bool power) { } void DummyTapeHandler::tapeProgress(int val) { } void DummyTapeHandler::tapeNext(void) { } void DummyTapeHandler::tapeAddFile(const char *name, long load, long start, long size, unsigned char type) { } void DummyTapeHandler::tapeRemoveFile(int idx) { } int DummyTapeHandler::tapeGetSelected(void) { return 0; } const char * DummyTapeHandler::tapeGetName(int idx) { return ""; } void DummyTapeHandler::tapeAddArchive(const char *name) { } KCemu-0.5.1/src/ui/generic/ui_kramermc.cc0000644001050700006200000000432411345001576017637 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/memory.h" #include "ui/generic/ui_kramermc.h" UI_KramerMC::UI_KramerMC(void) { int a; set_real_screen_size(64 * 8 + 32, 16 * 8 + 32); _dirty_size = (get_real_width() * get_real_height()) / 64; _dirty = new byte_t[_dirty_size]; _bitmap = new byte_t[get_real_width() * get_real_height()]; _pix_cache = new byte_t[_dirty_size]; for (a = 0;a < _dirty_size;a++) { _dirty[a] = 1; _pix_cache[a] = 0xff; } } UI_KramerMC::~UI_KramerMC(void) { } void UI_KramerMC::generic_put_pixels(byte_t *ptr, byte_t val) { for (int a = 0;a < 8;a++) ptr[a] = (val & (128 >> a)) ? 1 : 0; } void UI_KramerMC::generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache) { byte_t *irm = memory->get_irm(); byte_t *chr = memory->get_char_rom(); byte_t *ptr = _bitmap; int width = get_real_width(); ptr += 16 * width + 16; int z = -1; int d = 137; byte_t pix; for (int y = 0;y < 128;y += 8) { for (int x = 0;x < 512;x += 8) { z++; d++; pix = irm[z]; if (_pix_cache[z] != pix) _dirty[d]++; if (clear_cache) _dirty[d]++; if (!_dirty[d]) continue; _pix_cache[z] = pix; byte_t *chr_ptr = chr + 8 * pix; for (int a = 0;a < 8;a++) generic_put_pixels(ptr + width * a + x, chr_ptr[a]); } ptr += 8 * width; d += 4; } } KCemu-0.5.1/src/ui/generic/Makefile.am0000644001050700006200000000060111163412576017064 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in noinst_LIBRARIES = libui_generic.a INCLUDES = \ -I../../../include libui_generic_a_SOURCES = \ ui_base.cc \ ui_0.cc \ ui_1.cc \ ui_3.cc \ ui_4.cc \ ui_6.cc \ ui_8.cc \ ui_9.cc \ ui_led.cc \ ui_kramermc.cc \ ui_muglerpc.cc \ ui_vcs80.cc \ ui_c80.cc \ scanline.cc \ memaccess.cc \ module.cc \ tape.cc KCemu-0.5.1/src/ui/generic/scanline.cc0000644001050700006200000001015211345001576017131 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/prefs/prefs.h" #include "ui/generic/scanline.h" #include "libdbg/dbg.h" static inline void set_bit(int nr, void *addr) { ((unsigned short *)addr)[nr >> 4] |= (1UL << (nr & 15)); } static inline void clear_bit(int nr, void *addr) { ((unsigned short *)addr)[nr >> 4] &= ~(1UL << (nr & 15)); } static inline int test_bit(int nr, const void * addr) { return ((1UL << (nr & 15)) & (((const unsigned short *)addr)[nr >> 4])) != 0; } Scanline::Scanline(void) { reset(true); } Scanline::~Scanline(void) { } void Scanline::update(void) { int c; _count++; if (_count == 3) _count = 0; if (_idx < 255) { c = _val; if (_idx != 0) c = test_bit(_idx - 1, _v3); if (c) { while (_idx < 255) set_bit(_idx++, _v3); } else { while (_idx < 255) clear_bit(_idx++, _v3); } } /* * new frame time will be set when the first call to trigger() * occurs this is needed to synchronize the flash frequency * with the screen update */ _frame_time = 0; _idx = 0; switch (_count) { case 0: _v1 = &_vec[0]; _v2 = &_vec[16]; _v3 = &_vec[32]; break; case 1: _v1 = &_vec[16]; _v2 = &_vec[32]; _v3 = &_vec[0]; break; case 2: _v1 = &_vec[32]; _v2 = &_vec[0]; _v3 = &_vec[16]; break; default: break; } } /* * Linefrequency: 15.625 kHz => 64�s/line => 112 cycles/line * * This function is called by the CTC channel 2. */ void Scanline::trigger(bool enable) { /* * time (clock counter) of the previous call to this function */ static long long t = 0; /* * floating time offset to fine tune the scrolling effect * that is caused by the interference between the flash * frequency and the crt refresh */ static long long offset = 0; /* * config value that is added to offset each time this function * is called */ static long long o = Preferences::instance()->get_int_value("flash_offset", 50); /* * difference between the current and the previous call to * this function in clock ticks */ long long diff; if (!enable) { _enabled = true; // force reset of flash variables reset(false); return; } _val = !_val; _time = z80->getCounter(); if (_frame_time == 0) { offset += o; diff = _time - t; /* * synchronize flash only if flash frequency is high enough * to change the flash value twice per frame * (128 lines * 112 tics/line) */ if (diff < 14336) _val = 0; /* * reset flash scrolling offset */ if (offset > 2 * diff) offset = 0; _frame_time = _time + offset; } while (242) { if (_idx >= 255) break; if ((112 * _idx) > (_time - _frame_time)) break; if (_val) set_bit(_idx++, _v3); else clear_bit(_idx++, _v3); } t = _time; } int Scanline::get_value(int y) { return test_bit(y, _v1); } void Scanline::reset(bool enable) { _enabled = enable; _val = 0; _idx = 0; _time = 0; _count = 0; _frame_time = 0; for (int a = 0;a < 48;a++) _vec[a] = 0; _v1 = &_vec[0]; _v2 = &_vec[16]; _v3 = &_vec[32]; } KCemu-0.5.1/src/ui/generic/module.cc0000644001050700006200000000213411345001576016623 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "ui/generic/module.h" DummyModuleHandler::DummyModuleHandler(void) { } DummyModuleHandler::~DummyModuleHandler(void) { } void DummyModuleHandler::insert(int slot, ModuleInterface *m) { } void DummyModuleHandler::activate(int slot, byte_t value) { } KCemu-0.5.1/src/ui/generic/ui_8.cc0000644001050700006200000000305011345001576016200 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/pio8.h" #include "ui/generic/ui_8.h" UI_8::UI_8(void) : UI_LED(464, 112, 4, 2, 64, 128, 32, 1, 8, 16) { } UI_8::~UI_8(void) { } void UI_8::generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache) { byte_t led_value; for (int a = 0;a < 6;a++) { led_value = ((PIO8_1 *)pio)->get_led_value(a); generic_draw_digit(65 * a + 62, 12, a, led_value, clear_cache); } /* TAPE OUT led */ led_value = ((PIO8_1 *)pio)->get_led_value(6); generic_draw_led(18, 20, led_value ? 1 : 4, clear_cache); /* HALT led */ led_value = z80->get_halt(); generic_draw_led(18, 60, led_value ? 3 : 1, clear_cache); } KCemu-0.5.1/src/ui/generic/ui_6.cc0000644001050700006200000000303111345001576016175 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/ports6.h" #include "ui/generic/ui_6.h" UI_6::UI_6(void) : UI_LED(560, 112, 32, 64, 1, 2, 4, 128, 16, 8) { _idx = 0; for (int a = 0;a < NR_OF_LEDS;a++) for (int b = 0;b < HISTORY_LEN;b++) _data[a][b] = 0; } UI_6::~UI_6(void) { } void UI_6::generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache) { for (int a = 0;a < NR_OF_LEDS;a++) { _data[a][_idx] = ((Ports6 *)porti)->get_led_value(a); byte_t led_value = 0; for (int b = 0;b < HISTORY_LEN;b++) led_value |= _data[a][b]; generic_draw_digit(65 * a + 32, 12, a, led_value, clear_cache); } _idx = (_idx + 1) % HISTORY_LEN; } KCemu-0.5.1/src/ui/generic/ui_c80.cc0000644001050700006200000000251311345001576016426 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/c80/display.h" #include "ui/generic/ui_c80.h" #include "libdbg/dbg.h" UI_C80::UI_C80(void) : UI_LED(560, 112, 1, 32, 16, 8, 4, 2, 64, 128) { } UI_C80::~UI_C80(void) { } void UI_C80::generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache) { for (int a = 0;a < C80_NR_OF_LEDS;a++) { byte_t led_value = display_c80->get_led_value(a); generic_draw_digit(65 * a + 32, 12, a, led_value, clear_cache); } } KCemu-0.5.1/src/ui/generic/ui_muglerpc.cc0000644001050700006200000000442411345001576017655 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/memory.h" #include "ui/generic/ui_muglerpc.h" UI_MuglerPC::UI_MuglerPC(void) { int a; set_real_screen_size(64 * 8 + 32, 32 * 8 + 32); _dirty_size = (get_real_width() * get_real_height()) / 64; _dirty = new byte_t[_dirty_size]; create_buffer(get_real_width() * get_real_height()); _pix_cache = new byte_t[_dirty_size]; for (a = 0;a < _dirty_size;a++) { _dirty[a] = 1; _pix_cache[a] = 0xff; } } UI_MuglerPC::~UI_MuglerPC(void) { } void UI_MuglerPC::generic_put_pixels(byte_t *ptr, byte_t val) { for (int a = 0;a < 8;a++) ptr[a] = (val & (128 >> a)) ? 1 : 0; } void UI_MuglerPC::generic_update(Scanline *scanline, MemAccess *memaccess, bool clear_cache) { byte_t *irm = memory->get_irm(); byte_t *chr = memory->get_char_rom(); byte_t *ptr = _bitmap; int width = get_real_width(); ptr += 16 * width + 16; int d = 137; int offset = 0; for (int y = 0;y < 256;y += 8) { offset = 0x400 - offset; int z = (y / 16) * 64 + offset - 1; for (int x = 0;x < 512;x += 8) { z++; d++; byte_t pix = irm[z]; if (_pix_cache[z] != pix) _dirty[d]++; if (clear_cache) _dirty[d]++; if (!_dirty[d]) continue; _pix_cache[z] = pix; byte_t *chr_ptr = chr + 8 * pix; for (int a = 0;a < 8;a++) generic_put_pixels(ptr + width * a + x, chr_ptr[a]); } d += 4; ptr += 8 * width; } } KCemu-0.5.1/src/ui/generic/Makefile.in0000644001050700006200000004374511412404773017112 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/ui/generic DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libui_generic_a_AR = $(AR) $(ARFLAGS) libui_generic_a_LIBADD = am_libui_generic_a_OBJECTS = ui_base.$(OBJEXT) ui_0.$(OBJEXT) \ ui_1.$(OBJEXT) ui_3.$(OBJEXT) ui_4.$(OBJEXT) ui_6.$(OBJEXT) \ ui_8.$(OBJEXT) ui_9.$(OBJEXT) ui_led.$(OBJEXT) \ ui_kramermc.$(OBJEXT) ui_muglerpc.$(OBJEXT) ui_vcs80.$(OBJEXT) \ ui_c80.$(OBJEXT) scanline.$(OBJEXT) memaccess.$(OBJEXT) \ module.$(OBJEXT) tape.$(OBJEXT) libui_generic_a_OBJECTS = $(am_libui_generic_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(libui_generic_a_SOURCES) DIST_SOURCES = $(libui_generic_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libui_generic.a INCLUDES = \ -I../../../include libui_generic_a_SOURCES = \ ui_base.cc \ ui_0.cc \ ui_1.cc \ ui_3.cc \ ui_4.cc \ ui_6.cc \ ui_8.cc \ ui_9.cc \ ui_led.cc \ ui_kramermc.cc \ ui_muglerpc.cc \ ui_vcs80.cc \ ui_c80.cc \ scanline.cc \ memaccess.cc \ module.cc \ tape.cc all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/ui/generic/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/ui/generic/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libui_generic.a: $(libui_generic_a_OBJECTS) $(libui_generic_a_DEPENDENCIES) -rm -f libui_generic.a $(libui_generic_a_AR) libui_generic.a $(libui_generic_a_OBJECTS) $(libui_generic_a_LIBADD) $(RANLIB) libui_generic.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memaccess.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/scanline.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tape.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_6.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_8.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_9.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_base.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_c80.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_kramermc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_led.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_muglerpc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_vcs80.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/ui/log.cc0000644001050700006200000000232311345001576014503 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "ui/log.h" #include "ui/status.h" #include "libdbg/dbg.h" LOG::LOG(void) { Status::instance()->addStatusListener(this); } LOG::~LOG(void) { } void LOG::setStatus(const char *msg) { DBG(0, form("KCemu/LOG", "LOG::STATUS | %s\n", msg)); } void LOG::errorInfo(const char *msg) { DBG(0, form("KCemu/LOG", "LOG::ERROR | %s\n", msg)); } KCemu-0.5.1/src/ui/hsv2rgb.cc0000644001050700006200000000733411345001576015306 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * * Copyright (C) 1995, 1996 Robert Gentleman and Ross Ihaka * Copyright (C) 1997--2000 Robert Gentleman, Ross Ihaka and the * R Development Core Team * Copyright (C) 2001 Torsten Paul * * For the original licence statement of the graphics.c file * see below... * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. * * 2001-03-28: * - Code for colorspace conversion from HSV to RGB stolen from * the file R-1.1.0/src/main/graphics.c of the R statistical * language. * - modified to use different input/output ranges * */ /* * R : A Computer Language for Statistical Data Analysis * Copyright (C) 1995, 1996 Robert Gentleman and Ross Ihaka * Copyright (C) 1997--2000 Robert Gentleman, Ross Ihaka and the * R Development Core Team * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA * * * This is an extensive reworking by Paul Murrell of an original * quick hack by Ross Ihaka designed to give a superset of the * functionality in the AT&T Bell Laboratories GRZ library. * */ #include #include #include "kc/system.h" #include "ui/hsv2rgb.h" #include "libdbg/dbg.h" /* hsv2rgb -- HSV to RGB conversion */ /* Based on HSV_TO_RGB from Foley and Van Dam First Ed. Page 616 */ /* See Alvy Ray Smith, Color Gamut Transform Pairs, SIGGRAPH '78 */ void hsv2rgb(double h, double s, double v, int *r, int *g, int *b) { int i; double f, p, q, t; h = h / 360.0; /* original function had h in [0,1] */ t = 6 * modf(h, &f);/* h = t/6 + f = fract. + int. */ i = (int)floor(t+1e-5);/* 0..5 */ f = modf(t, &p); p = v * (1 - s); q = v * (1 - s * f); t = v * (1 - (s * (1 - f))); switch (i) { case 0: *r = (int)(v * 255); *g = (int)(t * 255); *b = (int)(p * 255); break; case 1: *r = (int)(q * 255); *g = (int)(v * 255); *b = (int)(p * 255); break; case 2: *r = (int)(p * 255); *g = (int)(v * 255); *b = (int)(t * 255); break; case 3: *r = (int)(p * 255); *g = (int)(q * 255); *b = (int)(v * 255); break; case 4: *r = (int)(t * 255); *g = (int)(p * 255); *b = (int)(v * 255); break; case 5: *r = (int)(v * 255); *g = (int)(p * 255); *b = (int)(q * 255); break; default: *r = 0; *g = 0; *b = 0; DBG(1, form("KCemu/warning", "bad hsv to rgb color conversion")); break; } } KCemu-0.5.1/src/ui/status.cc0000644001050700006200000000240711345001576015250 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "ui/status.h" Status *Status::_instance = 0; Status::Status(void) { } Status * Status::instance(void) { if (_instance == 0) { _instance = new Status(); } return _instance; } void Status::addStatusListener(StatusListener *listener) { _l.push_back(listener); } void Status::setMessage(const char *msg) { for (status_list_t::iterator it = _l.begin();it != _l.end();it++) (*it)->setStatus(msg); } KCemu-0.5.1/src/ui/Makefile.am0000644001050700006200000000041311340261611015436 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in SUBDIRS = generic gtk noinst_LIBRARIES = libui.a INCLUDES = \ -I../../include AM_CPPFLAGS = \ -DVERSION=\"$(VERSION)\" libui_a_SOURCES = \ log.cc \ error.cc \ status.cc \ commands.cc \ hsv2rgb.cc KCemu-0.5.1/src/ui/commands.cc0000644001050700006200000000152511345001576015526 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ KCemu-0.5.1/src/ui/gtk/0000755001050700006200000000000011412404774014202 5ustar glaubitzfbedvKCemu-0.5.1/src/ui/gtk/kc854_keyboard.xpm0000644001050700006200000233750310543271620017457 0ustar glaubitzfbedv/* XPM */ static char * kc854_keyboard_xpm[] = { "762 412 516 2", " c None", ". c #E6E6E6", "+ c #C2CAC2", "@ c #AAB6AA", "# c #A2AEA2", "$ c #E00000", "% c #CA3D39", "& c #C64742", "* c #DADADA", "= c #D2D2D2", "- c #BAC2BA", "; c #A1ADA2", "> c #98A3A6", ", c #97A3A6", "' c #9EAAA3", ") c #9FABA3", "! c #BE5E58", "~ c #DC0A09", "{ c #A4A79B", "] c #A5A398", "^ c #D81514", "/ c #C44D47", "( c #D81513", "_ c #A2ABA0", ": c #AC9187", "< c #A3AA9E", "[ c #A2AB9F", "} c #DC0808", "| c #C2534D", "1 c #A79D92", "2 c #DE0303", "3 c #A89C91", "4 c #DD0807", "5 c #C44C47", "6 c #D6D6D6", "7 c #A6B2A6", "8 c #0000EA", "9 c #575DC3", "0 c #0708E6", "a c #0809E6", "b c #090AE5", "c c #939EA8", "d c #2D31D5", "e c #0404E8", "f c #5258C5", "g c #DA100F", "h c #D32321", "i c #C05851", "j c #D32421", "k c #B18178", "l c #B1837A", "m c #B0857B", "n c #D4201E", "o c #BE5C56", "p c #DD0605", "q c #BE5D57", "r c #B47870", "s c #B47A72", "t c #AA948A", "u c #DF0201", "v c #AE8B82", "w c #D91211", "x c #BD615A", "y c #AF897F", "z c #DE0404", "A c #BC625C", "B c #DF0000", "C c #AE8A80", "D c #0506E7", "E c #8792AD", "F c #3235D3", "G c #464BCA", "H c #9CA8A4", "I c #9EA9A3", "J c #5359C5", "K c #CE322F", "L c #BE5E57", "M c #C1544E", "N c #C1554F", "O c #B96D65", "P c #C2534E", "Q c #C3514B", "R c #DD0606", "S c #AB9489", "T c #DD0706", "U c #D41F1D", "V c #B27F76", "W c #B27E76", "X c #B37C74", "Y c #DA0E0D", "Z c #B5766D", "` c #D22623", " . c #D22422", ".. c #DF0101", "+. c #B7716A", "@. c #E2E2E2", "#. c #3437D2", "$. c #1415E0", "%. c #4146CC", "&. c #99A5A5", "*. c #C05852", "=. c #B37D74", "-. c #B0857C", ";. c #A9998E", ">. c #DB0D0C", ",. c #B6746C", "'. c #DA0F0D", "). c #A79E93", "!. c #B18279", "~. c #B28078", "{. c #D32220", "]. c #A3A99E", "^. c #DE0403", "/. c #AC9086", "(. c #DA0F0E", "_. c #B0867D", ":. c #AA978D", "<. c #A3A99D", "[. c #AA968C", "}. c #A2ACA0", "|. c #CC3532", "1. c #848DAF", "2. c #4D53C7", "3. c #1618DF", "4. c #0808E6", "5. c #95A0A7", "6. c #A79F94", "7. c #A5A397", "8. c #C93E39", "9. c #A99A8F", "0. c #000000", "a. c #121312", "b. c #676F67", "c. c #6C746C", "d. c #585F58", "e. c #A2ADA1", "f. c #D61B19", "g. c #CD3531", "h. c #C05953", "i. c #CB3834", "j. c #A6A095", "k. c #DC0908", "l. c #B77169", "m. c #B7726A", "n. c #DE0505", "o. c #A3A89C", "p. c #A4A79C", "q. c #D4201D", "r. c #BF5A54", "s. c #D81312", "t. c #97A2A6", "u. c #7780B4", "v. c #0607E6", "w. c #3B40CF", "x. c #363AD1", "y. c #8B95AC", "z. c #8D98AB", "A. c #3F44CD", "B. c #DB0C0C", "C. c #AD8D83", "D. c #C8413C", "E. c #BD605A", "F. c #D51E1C", "G. c #AF877D", "H. c #BA6A63", "I. c #CD332F", "J. c #A0ACA0", "K. c #788078", "L. c #080908", "M. c #262826", "N. c #9EAA9E", "O. c #1E201E", "P. c #BC645E", "Q. c #B77068", "R. c #CD3430", "S. c #D22522", "T. c #B86D66", "U. c #D22624", "V. c #C15550", "W. c #D51E1B", "X. c #BA6962", "Y. c #CF2D2A", "Z. c #0A0AE5", "`. c #1416E0", " + c #6168BE", ".+ c #4045CD", "++ c #1112E2", "@+ c #666DBC", "#+ c #CF2D29", "$+ c #A89B90", "%+ c #C93E3A", "&+ c #C54A45", "*+ c #DC0A0A", "=+ c #B6736B", "-+ c #DB0C0B", ";+ c #B86F67", ">+ c #BF5A53", ",+ c #C54944", "'+ c #161716", ")+ c #444944", "!+ c #717971", "~+ c #666D66", "{+ c #4C514C", "]+ c #C9403B", "^+ c #BB655E", "/+ c #D81413", "(+ c #D61A18", "_+ c #AF877E", ":+ c #C15650", "<+ c #020202", "[+ c #A89C92", "}+ c #A4A69B", "|+ c #DB0B0A", "1+ c #BC645D", "2+ c #B28077", "3+ c #AF887F", "4+ c #030303", "5+ c #707870", "6+ c #8B958B", "7+ c #242624", "8+ c #A1ADA1", "9+ c #8F9A8F", "0+ c #8892AD", "a+ c #9CA7A4", "b+ c #CF2E2B", "c+ c #9DA9A3", "d+ c #A0ABA2", "e+ c #C93F3B", "f+ c #A6A297", "g+ c #A6A195", "h+ c #798379", "i+ c #313531", "j+ c #474D47", "k+ c #343834", "l+ c #3E42CE", "m+ c #474CCA", "n+ c #8993AD", "o+ c #1A1CDE", "p+ c #0505E7", "q+ c #1A1BDE", "r+ c #929DA8", "s+ c #0303E8", "t+ c #919CA9", "u+ c #292DD7", "v+ c #0304E8", "w+ c #0A0BE5", "x+ c #535AC4", "y+ c #AD8C82", "z+ c #CC3734", "A+ c #D02A28", "B+ c #D12926", "C+ c #B5776F", "D+ c #CF2F2B", "E+ c #7B847B", "F+ c #798279", "G+ c #7A837A", "H+ c #5960C2", "I+ c #7880B4", "J+ c #7881B4", "K+ c #5A60C1", "L+ c #2A2DD7", "M+ c #555CC3", "N+ c #565CC3", "O+ c #828BB0", "P+ c #5A61C1", "Q+ c #8A94AC", "R+ c #3337D3", "S+ c #5055C6", "T+ c #7F89B1", "U+ c #5C62C1", "V+ c #0000E9", "W+ c #2F33D4", "X+ c #494FC9", "Y+ c #484DC9", "Z+ c #D61B1A", "`+ c #D12724", " @ c #C64641", ".@ c #0F110F", "+@ c #99A4A5", "@@ c #747CB6", "#@ c #0D0EE4", "$@ c #6D76B9", "%@ c #2B2FD6", "&@ c #6C74B9", "*@ c #2326DA", "=@ c #474DCA", "-@ c #2224DA", ";@ c #9AA5A5", ">@ c #D02B28", ",@ c #B37E75", "'@ c #BA6861", ")@ c #B37C73", "!@ c #D4211F", "~@ c #B0847B", "{@ c #95A1A7", "]@ c #0C0DE4", "^@ c #7D86B2", "/@ c #5F67BF", "(@ c #6067BF", "_@ c #8D97AB", ":@ c #0E0FE3", "<@ c #8C96AB", "[@ c #1D20DC", "}@ c #4F55C6", "|@ c #545AC4", "1@ c #858FAE", "2@ c #929CA9", "3@ c #3034D4", "4@ c #1D1FDD", "5@ c #3438D2", "6@ c #1B1EDD", "7@ c #7A83B3", "8@ c #7B85B2", "9@ c #96A1A7", "0@ c #393DD0", "a@ c #0F10E3", "b@ c #686FBB", "c@ c #7F88B1", "d@ c #1719DF", "e@ c #949FA7", "f@ c #1C1EDD", "g@ c #5056C6", "h@ c #2E31D5", "i@ c #2F32D5", "j@ c #AD8E84", "k@ c #D71715", "l@ c #A9988D", "m@ c #B5786F", "n@ c #D12825", "o@ c #AB9287", "p@ c #CE312D", "q@ c #868FAE", "r@ c #BD6059", "s@ c #A5A599", "t@ c #A5A499", "u@ c #CE302D", "v@ c #BB665F", "w@ c #4349CB", "x@ c #4348CC", "y@ c #CB3A36", "z@ c #C54943", "A@ c #0102E9", "B@ c #0202E8", "C@ c #B86E66", "D@ c #4A50C8", "E@ c #5D64C0", "F@ c #1E20DC", "G@ c #0101E9", "H@ c #282AD8", "I@ c #8089B0", "J@ c #A6B2A2", "K@ c #B2BAB2", "L@ c #CACEC6", "M@ c #DADEDA", "N@ c #EEEEEE", "O@ c #F2F2F2", "P@ c #EAEAEA", "Q@ c #DEE2DE", "R@ c #CED6CE", "S@ c #BEC2BE", "T@ c #D6DAD6", "U@ c #E2E6E2", "V@ c #CAD2CA", "W@ c #AAB6A6", "X@ c #C6CAC2", "Y@ c #AEB6AA", "Z@ c #CACECA", "`@ c #DEDEDE", " # c #AEBAAA", ".# c #AAB2A6", "+# c #E6EAE6", "@# c #B2BEB2", "## c #B6BEB6", "$# c #BEC6BE", "%# c #C2C6C2", "&# c #D2D6CE", "*# c #A6AEA2", "=# c #CED2CE", "-# c #EAEAE6", ";# c #E2E2DE", "># c #8A8A8A", ",# c #3E3E3E", "'# c #1A1A1A", ")# c #262626", "!# c #5E5E5E", "~# c #BABABA", "{# c #969696", "]# c #2E2E2E", "^# c #C6C6C6", "/# c #AAAAAA", "(# c #5A5A5A", "_# c #0E0E0E", ":# c #565656", "<# c #9E9E9E", "[# c #4E4E4E", "}# c #222222", "|# c #AEBAAE", "1# c #626262", "2# c #7A7A7A", "3# c #161616", "4# c #CACACA", "5# c #DADAD6", "6# c #6A6A6A", "7# c #323232", "8# c #B6BEB2", "9# c #B6BAB2", "0# c #1E1E1E", "a# c #C6CAC6", "b# c #9A9A9A", "c# c #868686", "d# c #121212", "e# c #C2C2C2", "f# c #424242", "g# c #B2BAAE", "h# c #EAEEEA", "i# c #AAB2AA", "j# c #BAC2B6", "k# c #AEB6AE", "l# c #C2C6BE", "m# c #CECECE", "n# c #B6C2B6", "o# c #B96B64", "p# c #BB675F", "q# c #B96B63", "r# c #D71716", "s# c #B47971", "t# c #B6756D", "u# c #CA3C37", "v# c #6A716A", "w# c #484D48", "x# c #D91311", "y# c #D02A27", "z# c #AA968B", "A# c #5B625B", "B# c #1B1E1B", "C# c #585E58", "D# c #5C625C", "E# c #BB6760", "F# c #BC635C", "G# c #BF5B55", "H# c #C34F49", "I# c #D71614", "J# c #C7443F", "K# c #D51C1A", "L# c #C44E49", "M# c #C64843", "N# c #7F887F", "O# c #161816", "P# c #060606", "Q# c #4A504A", "R# c #1A1B1A", "S# c #818B81", "T# c #C54B46", "U# c #A79E94", "V# c #D51D1B", "W# c #1C1E1C", "X# c #5E655E", "Y# c #9BA79B", "Z# c #5C635C", "`# c #030403", " $ c #A9988E", ".$ c #BD5F58", "+$ c #C8423D", "@$ c #CE312E", "#$ c #B96C65", "$$ c #9CA79C", "%$ c #050505", "&$ c #9CA89C", "*$ c #050605", "=$ c #D3221F", "-$ c #DF0202", ";$ c #CC3733", ">$ c #C05751", ",$ c #B37B72", "'$ c #B47A71", ")$ c #5F675F", "!$ c #5E645E", "~$ c #1F221F", "{$ c #778077", "]$ c #202220", "^$ c #AB9288", "/$ c #AA958B", "($ c #494F49", "_$ c #6A726A", ":$ c #0F100F", "<$ c #3E433E", "[$ c #6B736B", "}$ c #BF5C55", "|$ c #616861", "1$ c #828B82", "2$ c #CE2F2C", "3$ c #D71816", "4$ c #A6A6A6", "5$ c #4A4A4A", "6$ c #828282", "7$ c #525252", "8$ c #BEBEBE", "9$ c #666666", "0$ c #727272", "a$ c #464646", "b$ c #363636", "c$ c #2A2A2A", "d$ c #A2A2A2", "e$ c #B2B2B2", "f$ c #848EAE", "g$ c #4E53C7", "h$ c #4E54C6", "i$ c #2426D9", "j$ c #6F78B8", "k$ c #2528D9", "l$ c #5F66BF", "m$ c #838DAF", "n$ c #363AD2", "o$ c #8690AE", "p$ c #666EBC", "q$ c #676FBB", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # $ # # $ $ $ $ % & # & % # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . - # # # # # # # # # # # # # # # # # # # # # # # # # ; > , # # # ' ) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ ! # $ # # $ ~ { ~ $ # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # $ # # $ # # # ] ^ / ( ] # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # _ : # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # < < # # # [ [ # # _ : # # # # # # # [ [ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ } | 1 2 3 # # $ $ } | # $ $ $ $ # $ $ 4 5 # # # # # # # # # # # # - . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . 7 # # # # # # # # # # # # # # # # # # # # 8 8 8 8 # 9 0 a b # c d e b f # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ g { $ # # $ h i j $ # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # $ # # $ # # # # k $ l # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ } | # $ $ 4 5 # # m n $ $ $ $ $ % & # & % # # # # # # # # # # # # # # # # # # # # # # # # # o p p q # r ~ ~ s # m n # # t u # # r ~ ~ s # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # $ ! # $ # # $ # v w x # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # y z A B x # # $ # y z # $ # # # # $ # C 4 # # # # # # # # # # # # # 7 . . . . . . . . . . . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . * # # # # # # # # # # # # # # # # # # # # # # 8 # # # # D E # # # F G H I J # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ K L $ # # $ M 4 N $ # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ $ $ # # $ $ $ $ # ! $ O # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # y z # $ # C 4 # # P Q # # $ # # ] ^ / ( ] # # # # # # # # # # # # # # # # # # # # # # # # # R t S T # U V W n # P Q # # % $ # # U V W n # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # $ g { $ # # $ X Y Z # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ } | ` / .# # $ $ } | # $ # # # # $ $ ..+.# # # # # # # # # # # # # # # * . . . . . . . . . . . . . . . . . . . . . . @.= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = @.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # 8 # # # # #.$.%.E # D &.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # *.2 $ # *.2 $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ =.Y $ # # $ m $ -.$ # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # $ # # $ # # # ;.>.,.'.).# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ } | # $ $ ..+.# # h !.# # $ # # # k $ l # # # # # # # # # # # # # # # # # # # # # # # # # # n ~.V {.# 2 ].].^.# h !.# /.(.$ # # 2 ].].^.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # $ K L $ # # $ 4 _.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # :.Y <.(.[.# $ # # # # $ $ $ $ # $ }.| |.# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . 7 # # # # # # # # # # # # # # # # # # # # # # # 8 8 8 8 # # 1.2.3.# 4.5.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ $ $ # # $ $ $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 6.A / x 7.# # # # # $ $ $ $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 6.A / x 7.# # # # # # # # # # # # # # # # # 6.8.# # # # # # # # >.9.# # >.9.# # # # # # # # # # # # # # # # # # # 0.# # 0.0.0.a.b.# # 0.c.# # # d.0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ e.f.$ # # $ [ ^ _ $ # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # $ # # $ $ $ $ g.h.# M i.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ }.| |.# j.k.< # # $ # # # ! $ O # # # # # # # # # # # # # # # # # # # # # # # # # # l.T T m.# n.o.p.p j.k.< # i.L $ # # n.o.p.p # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # $ =.Y $ # # $ q.N # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # r.$ $ $ r.# $ # # # # $ # # # # $ # o.s.y # # # # # # # # # # # # # # # 7 . . . . . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . - # # # # # # # # # # # # # # # # # # # # # # # # 8 # # # # , t.u.v.# w.x.y.z.A.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ $ $ # # $ $ $ $ B.# # # # # # # # # # # # # # # # # # # # # # # # # # # C.(.D.E.5 F.# # # # # $ # # # # # # G.H.G.# # # # # # # # # # # # # # # # # # # # # # # # # # C.(.D.E.5 F.# # # # # # G.H.G.# # # # # # # # ,.I.# # G.H.G.# # # $ # # # $ # # # # # # # # # # # # # # # # # # # # 0.# # 0.# J.K.L.# # 0.M.# # N.O.0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # P.$ # # $ # # # $ # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # o.s.y Q.R.# # # $ # # ;.>.,.'.).# # # # # # # # # # # # # # # # # # # # # # # # # 4 G.G.} # S.T.T.U.Q.R.# # B $ $ $ # S.T.T.U.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # $ e.f.$ # # $ j.U V.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # W.l # m W.# $ # # # # $ $ $ $ # $ # # X.Y.# # # # # # # # # # # # # # # # - . . . . . . . . . . . . . . . . . . 6 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # 8 8 8 8 # b Z.`. +# &..+++3.@+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # # G.P # # # # # # # # # # # # # # # # # # # # # # # # # # # #+H.# # # $+# # # # # $ # # # # # i w %+w r.# $ &+2 # $ r.*+'.=+P *+-+;+# # # # # # # # # # # #+H.# # # $+# # # # # i w %+w r.# $ >+~ B.T.# ,+q # i w %+w r.# $ $ $ # $ $ $ # # # # # # # # # # # # # # # # # # # 0.# # 0.# J.K.'+# # 0.)+!+# ~+{+0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # # X.Y.]+^+# # # $ # # g.h.# M i.# # # # # # # # # # # # # # # # # # # # # # # # # h./+/+>+# _.(+(+_+]+^+# # # # $ # # _.(+(+_+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # $ # P.$ # # $ # j.F.:+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . = = = = = = = = = = = <+= = <+<+<+<+<+= = <+<+<+<+= = = = = <+<+<+= = = = <+<+<+= = = <+<+<+<+<+<+<+= = = = = = <+<+<+<+<+<+<+<+= = = <+<+<+<+<+<+<+<+<+= = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ $ $ # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # # I.[+# # # # # # # # # # # # # # # # # # # # # # # # # # # n.}+# # # # # # # # # $ $ $ $ # # |+S # S -+# $ O _ # $ 1+p.W 2 1+p.2+'.# # # # # # # # # # # n.}+# # # # # # # # # |+S # S -+# $ 1+p.X Y # F.3+# |+S # S -+# # $ # # # $ # # # # # # # # # # # # # # # # # # # # 0.# # 0.0.0.4+5+# # 0.6+7+8+O.9+0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0+# # # # # # a+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # b+[.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # b+[.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # c+d+# # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . . . * = = = = = = = = = = = <+= = <+<+<+<+<+= <+<+<+<+<+= = = = = <+<+<+= = = <+<+<+= = = <+<+<+<+<+<+<+<+<+= = = = <+<+<+<+<+<+<+<+<+<+= = <+<+<+<+<+<+<+<+<+= = = = = = = = * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . @ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ $ $ # # # # -.e+# # # # # # # # # # # # # # # # # # # # # # # # # # # # } f+# # # # # # # # # $ # # # # # R j.# 6.T # $ [ # # $ }.# # $ }.# # $ # # # # # # # # # # # } f+# # # # # # # # # R j.# 6.T # $ }.# # $ g+} [ # R j.# 6.T # # $ # # # $ # # # # # # # # # # # # # # # # # # # # 0.# # 0.# 8+h+'+# # 0.# i+j+k+# 0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0+# # # # # # ' ) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; G l+m+; # # n+o+p+q+n+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ' ) # # # # # # # # # # ' ) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ' ) # # # # a+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 8 4.2.r+s+t+# # t+u+v+w+x+# 8 8 8 8 # # # # # # # # # # # # # # # # # # # # @ . . . . . . . . . . . . . . . . = = = = = = = = = = = <+<+= = <+<+<+<+= = <+<+<+<+<+= = = = = <+<+<+= = <+<+<+= = = <+<+<+<+= = = = <+<+= = = = <+<+<+= = = = <+<+<+= = <+<+= = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # Y.y+# # # # # # # # # # # # # # # # # # # # # # # # # # # # z+i # # # C # # # # # $ # # # # # e+A+E.B+D.# $ # # # $ # # # $ # # # $ # # # # # # # # # # # z+i # # # C # # # # # e+A+E.B+D.# $ # # # $ C+D+# # e+A+E.B+D.# # $ # # # $ # # # # # # # # # # # # # # # # # # # # 0.# # 0.# 8+E+L.# # 0.# F+0.G+# 0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; G l+m+; # # c d e b f # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H+I+# J+K+# # L+M+# N+u+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # c d e b f # 8 # # # 8 # c d e b f # 8 # O+++P+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # c d e b f # n+o+p+o+Q+# 8 8 4.2.R+S+# S+R+# # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # T+e U+V+P+# # W+X+c+c Y+# 8 # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = = = <+<+= = <+<+<+= = <+<+<+<+<+<+= = = = = <+<+<+<+<+<+<+= = = = <+<+<+= = = = = = = = = = = <+<+<+= = = = <+<+<+= = <+<+<+<+<+<+<+<+= = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # $ $ $ $ $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # l A+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # 9.Z+`+ @I.U.# # # # # $ # # # # # <.P.,+^+].# $ # # # $ # # # $ # # # $ # # # # # # # # # # # 9.Z+`+ @I.U.# # # # # <.P.,+^+].# $ # # # $ 5 h.# # <.P.,+^+].# # $ # # # $ # # # # # # # # # # # # # # # # # # # # 0.# # 0.0.0..@~+# # 0.# # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H+I+# J+K+# # F G H I J # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # p++@# +@p+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # F G H I J # 8 # # # 8 # F G H I J # 8 @@#@$@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # F G H I J # L+M+# N+%@# 8 # T+e t+#@&@#@t+# # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 8 4.2.*@=@-@# # D ;@# b 8 # 8 # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = = <+<+<+= = <+<+<+= = <+<+<+<+<+<+= = = = = <+<+<+<+<+<+= = = = = <+<+<+= = = = = = = = = = = = <+<+<+<+<+<+<+<+= = = <+<+<+<+<+<+<+<+<+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # >@C+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # [ ,@'@)@_ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # [ ,@'@)@_ # # # # # # # # # # # # # # # # !@~@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # D &.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # v.{@# 5.]@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # D &.# # # # 8 # # # 8 # D &.# # # # 8 0 ^@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; G l+m+; # R+S+# S+R+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # D &.# # # # p++@# +@D # 8 8 4.2.# /@8 (@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # _@#@c+:@<@# 4.5.# # 8 # 8 8 8 8 # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = = <+<+<+= = <+<+= = <+<+<+<+<+<+<+= = = = = <+<+<+<+<+<+= = = = = <+<+<+= = = = = = = = = = = = <+<+<+<+<+<+<+<+= = = = = = = = = <+<+<+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # )@].# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 4.5.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # R+G c m+G # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 4.5.# # # # 8 # # # 8 # 4.5.# # # # 8 [@}@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H+I+# J+K+# t+#@&@#@t+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 4.5.# # # # v.{@# 5.4.# 8 # # # # ; 8 ; # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # |@8 8 8 |@# x.%.t+1@8 # 8 # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = <+<+<+<+= = <+<+= = <+<+<+<+<+<+<+= = = = = <+<+<+= <+<+<+= = = = <+<+<+= = = = = = = = = = = <+<+<+= = = = <+<+<+= = = = = = = = <+<+<+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # w.x.y.z.A.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 2@d D 3@c+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # w.x.y.z.A.# 8 # # # 8 # w.x.y.z.A.# 8 5.4@S+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # /@8 (@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # w.x.y.z.A.# R+G c m+5@# 8 # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # 6@7@# 8@6@# 9@0@a@q+b@# 8 8 8 8 # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = <+<+<+<+= = <+= = <+<+<+<+<+<+<+<+= = = = = <+<+<+= = <+<+<+= = = <+<+<+<+= = = = <+<+= = = = <+<+<+= = = = <+<+<+= = <+<+= = = = <+<+<+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # &..+++3.@+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # c@d@e@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # &..+++3.@+# 8 8 8 8 8 # &..+++3.@+# 8 # 5.f@g@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; 8 ; # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # &..+++3.@+# 2@h@#@i@c # 8 # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = <+<+<+<+<+= = <+= <+<+<+<+<+<+<+<+<+= = = = = <+<+<+= = = <+<+<+= = = <+<+<+<+<+<+<+<+<+= = = = <+<+<+<+<+<+<+<+<+<+= = <+<+<+<+<+<+<+<+<+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # 6.A / x 7.# # # j@P P j@# # # $ H.# # # $ # $ $ $ $ $ # $ $ ..k@=+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+<+<+<+<+<+= = = = <+<+<+<+<+<+<+<+<+= = = = = <+<+<+= = = = <+<+<+= = = <+<+<+<+<+<+<+= = = = = = <+<+<+<+<+<+<+<+= = = = <+<+<+<+<+<+<+= = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # C.(.D.E.5 F.# # 2+Y N M Y k # # $ #+l@# # $ # # # $ # # # $ # [ s |+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # #+H.# # # $+# # U.m@# # Z n@# # $ o@p@e.# $ # # # $ # # # $ # [ s /+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0+# # # # # ; > , # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # q@# # q@# # # # # # # # # a+# # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # n.}+# # # # # # z o.# # p.n.# # $ # E.r@# $ # # # $ # # # $ $ $ q./.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0+# # # # # # ' ) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; G l+m+; # # 9 0 a b # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # r+s+t+# # 8 # # 8 # 8 8 8 8 8 # n+o+p+o+Q+# # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # } f+# # # # # # T s@# # t@4 # # $ # e.u@o@$ # # # $ # # # $ # }+&+,@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; G l+m+; # # c d e b f # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H+I+# J+K+# # D E # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; G l+m+; # 6@8@# 8@6@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; G l+m+; # # 8 8 4.2.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # U+V+P+# # 8 # # 8 # # # 8 # # # L+M+# N+%@# # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # z+i # # # C # # D+'@# # v@p@# # $ # # l@>@$ # # # $ # # # $ # # o.!@f+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H+I+# J+K+# # F G H I J # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #.$.%.E # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H+I+# J+K+# |@w@# x@|@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H+I+# J+K+# # 8 # T+e # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # *@=@-@# # 8 # # 8 # # # 8 # # # p++@# +@D # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+= = = = = <+= = <+<+<+<+<+<+<+= = <+= = = = = <+= = <+<+<+<+<+= = = = = <+<+<+<+<+= = = = = = <+= = = = = <+<+<+<+<+<+= = = <+<+<+<+<+= = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # 9.Z+`+ @I.U.# # C.Y y@y@(./.# # $ # # # X.$ # # # $ # # # $ # # # X.z@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # D &.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1.2.3.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # _@a@I :@<@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 8 4.2.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # _@#@c+:@<@# A@' ' B@# # # 8 # # # v.{@# 5.4.# # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+= = = = <+= = = <+= = = = = = = = <+= = = = = <+= = <+= = = = <+= = = <+= = = = = <+= = = = <+= <+= = = = <+= = = = = <+= = <+= = = = <+= = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # [ ,@'@)@_ # # # j.C@;+g+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 4.5.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # , t.u.v.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # *@D@-@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |@8 8 8 |@# 4@E@E@F@# # # 8 # # # R+G c m+5@# # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+= = = <+= = = = <+= = = = = = = = = <+= = = <+= = = <+= = = = = <+= = <+= = = = = <+= = = <+= = = <+= = = <+= = = = = <+= = <+= = = = = <+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # w.x.y.z.A.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # b Z.`. +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # U+G@P+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 6@7@# 8@6@# c@H@H@I@# # # 8 # # # 2@h@#@i@c # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+= = <+= = = = = <+= = = = = = = = = = <+= <+= = = = <+= = = = <+= = = <+= = = = = <+= = <+= = = = = <+= = <+= = = = = <+= = <+= = = = = <+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # &..+++3.@+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # r+s+t+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+<+<+= = = = = = <+<+<+<+<+= = = = = = = <+= = = = = <+<+<+<+<+= = = = <+= = = = = <+= = <+= = = = = <+= = <+<+<+<+<+<+= = = <+= = = = = <+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+= <+= = = = = = <+= = = = = = = = = = = <+= = = = = <+= = = = <+= = = <+= = = = = <+= = <+= = = = = <+= = <+= = <+= = = = = <+= = = = = <+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # 7 X@M@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@T@Y@# # # # # # # # # # # # # # # # # # # # # # # 7 X@M@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@T@Y@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+= = <+= = = = = <+= = = = = = = = = = = <+= = = = = <+= = = = = <+= = <+= = = = = <+= = <+<+<+<+<+<+<+= = <+= = = <+= = = = <+= = = = = <+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # .#T@P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@+#@## # # # # # # # # # # # # # # # # # # .#T@P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@+#@## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+= = = <+= = = = <+= = = = = = = = = = = <+= = = = = <+= = = = = <+= = <+= = = = = <+= = <+= = = = = <+= = <+= = = = <+= = = <+= = = = = <+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # Z@P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@M@# # # # # # # # # # # # # # # # # Z@P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@M@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # . . . . . . . . . . . . . . . . * = = = = = = <+= = = = <+= = = <+= = = = = = = = = = = <+= = = = = <+= = = = <+= = = <+= = = = = <+= = <+= = = = = <+= = <+= = = = = <+= = <+= = = = <+= = = = = = = = = * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#M@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@W@# # # # # # # # # # # # # *#M@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@W@# # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # . . . . . . . . . . . . . . . . . = = = = = = <+= = = = = <+= = <+<+<+<+<+<+<+= = = = = <+= = = = = <+<+<+<+<+= = = = = <+<+<+<+<+= = = <+= = = = = <+= = <+= = = = = <+= = <+<+<+<+<+= = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # *#;#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@N@W@# # # # # # # # # # # *#;#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@N@W@# # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # . . . . . . . . . . . . . . . . . 6 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # M@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@P@# # # # # # # # # # # M@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@P@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # . . . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # Z@O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@M@# # # # # # # # # Z@O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@M@# # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # # . . . . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@O@@## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@O@@## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # # # . . . . . . . . . . . . . . . . . . . @.= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = @.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # 5#O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@+## # # # # # # 5#O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@+## # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # # # . . . . . . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@J@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@J@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@Y@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@Y@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@Y@# # # # # 7 P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@O@@## # # # # 7 P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@O@8## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@J@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . 6 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@. )#>#O@O@O@O@- # # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@. )#>#O@O@O@O@- # # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@. )#>#O@O@O@O@T@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@. )#>#O@O@O@O@T@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@. )#>#O@O@O@O@T@# # # # # a#O@O@O@O@* 0#<#O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@<+<+<+<+O@O@O@O@O@O@O@. )#>#O@O@O@O@U@# # # # # a#O@O@O@O@* 0#<#O@O@<+<+<+<+<+O@O@O@O@<+<+<+<+<+<+O@O@O@<+O@O@O@O@O@<+O@. )#>#O@O@O@O@+## # # # # $#O@O@O@O@* 0#<#O@O@<+<+<+<+O@O@<+<+<+<+<+<+<+O@O@<+<+<+<+O@O@<+<+<+<+O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@<+<+<+<+<+O@O@O@<+O@O@O@O@O@<+O@O@O@<+<+<+<+<+O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@<+<+<+<+<+O@O@O@O@<+<+<+<+<+<+<+O@O@<+O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@<+<+<+<+<+O@O@O@<+O@O@O@O@O@O@O@O@<+<+<+<+<+<+O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@<+O@O@O@O@<+O@O@<+<+<+<+O@O@<+O@O@O@O@O@<+O@<+<+<+<+<+. )#>#O@O@O@O@- # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@O@b#)#. O@O@O@&## # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@b#)#. O@O@O@&## # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@b#)#. O@O@O@P@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@b#)#. O@O@O@P@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@P@# # # # # `@O@O@O@O@>#]#N@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # `@O@O@O@O@>#]#N@O@O@<+O@O@O@O@<+O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@O@<+O@O@O@b#)#. O@O@O@O@# # # # # T@O@O@O@O@>#]#N@O@<+O@O@O@O@<+O@O@O@O@<+O@O@O@O@<+O@O@O@O@<+O@<+O@O@O@<+O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@O@O@<+O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@<+O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@<+O@O@O@O@<+O@<+O@O@O@O@<+O@<+O@O@O@O@O@<+O@<+O@O@O@O@O@b#)#. O@O@O@&## # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@;## # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@P@d#~#O@O@O@;## # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@<+O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@<+O@O@O@O@<+O@O@O@O@<+O@O@O@O@<+O@O@O@O@<+O@<+O@O@O@<+O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@<+O@O@O@O@O@<+<+O@O@O@O@<+O@O@<+O@O@O@O@O@<+O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@<+O@O@O@O@<+O@<+O@O@O@O@<+O@<+<+O@O@O@<+<+O@<+O@O@O@O@O@P@d#~#O@O@O@;## # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@P@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@f#b#O@O@O@P@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@<+<+<+<+O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@<+O@O@O@O@<+O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@<+O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@<+O@O@O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@<+O@<+O@O@O@<+O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@<+O@O@O@O@O@<+O@<+O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@<+O@O@O@O@<+O@<+O@O@O@O@<+O@<+O@<+O@<+O@<+O@<+O@O@O@O@O@O@f#b#O@O@O@P@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@N@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@N@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@<+<+O@O@O@O@<+O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@<+O@<+<+<+<+O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@<+<+<+<+<+O@O@O@O@<+<+<+<+<+<+O@O@O@<+<+<+O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@<+<+O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@<+O@<+<+<+<+O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@<+O@O@O@<+<+<+O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@<+O@O@O@O@O@<+O@O@<+<+<+<+<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+<+<+<+<+<+O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@<+<+<+<+<+<+O@<+O@O@O@O@<+O@<+O@<+O@<+O@<+O@<+<+<+O@O@O@O@1#b#O@O@O@N@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+<+O@O@O@O@<+O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@<+O@O@O@O@<+O@O@O@<+O@O@<+O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@<+<+O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@<+O@<+O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@<+O@<+O@O@O@O@O@O@<+<+O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@<+O@O@O@O@<+O@<+O@O@O@O@<+O@<+O@O@<+O@O@<+O@<+O@O@O@O@O@O@1#b#O@O@O@O@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@<+O@O@O@O@<+O@O@<+O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@<+O@O@O@O@<+O@<+O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@<+<+O@O@O@O@O@O@O@O@<+O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@<+O@O@O@O@<+O@<+O@O@O@O@<+O@<+O@O@<+O@O@<+O@<+O@O@O@O@O@O@f#b#O@O@O@N@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@O@<+O@O@O@<+O@O@O@<+O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@<+O@O@O@O@<+O@O@O@O@<+O@O@O@O@<+O@O@O@O@<+O@<+O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@O@O@<+O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@<+O@O@O@O@<+O@<+O@O@O@O@<+O@<+O@O@O@O@O@<+O@<+O@O@O@O@O@P@d#~#O@O@O@N@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # `@O@O@O@O@>#]#N@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@b#)#. O@O@O@O@# # # # # `@O@O@O@O@>#]#N@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@b#)#. O@O@O@O@# # # # # `@O@O@O@O@>#]#N@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@b#)#. O@O@O@O@# # # # # `@O@O@O@O@>#]#N@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@b#)#. O@O@O@O@# # # # # `@O@O@O@O@>#]#N@O@O@<+O@O@O@O@<+O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@O@<+O@O@O@b#)#. O@O@O@O@# # # # # `@O@O@O@O@>#]#N@O@<+O@O@O@O@<+O@O@O@O@<+O@O@O@O@<+O@O@O@O@<+O@<+O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@O@O@<+O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@<+O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@<+O@O@O@O@<+O@<+O@O@O@O@<+O@<+O@O@O@O@O@<+O@<+O@O@O@O@O@b#)#. O@O@O@U@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # Z@O@O@O@O@* 0#<#O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@. )#>#O@O@O@O@+## # # # # Z@O@O@O@O@* 0#<#O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@. )#>#O@O@O@O@+## # # # # Z@O@O@O@O@* 0#<#O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@. )#>#O@O@O@O@+## # # # # =#O@O@O@O@* 0#<#O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@. )#>#O@O@O@O@N@# # # # # =#O@O@O@O@* 0#<#O@O@<+<+<+<+<+O@O@O@O@<+O@O@O@O@O@<+O@O@<+O@O@O@O@O@<+O@. )#>#O@O@O@O@N@# # # # # Z@O@O@O@O@* 0#<#O@O@<+<+<+<+O@O@O@O@O@<+O@O@O@O@O@<+<+<+<+O@O@<+O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@<+<+<+<+<+O@O@O@<+O@O@O@O@O@<+O@O@O@<+<+<+<+<+O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@<+<+<+<+<+O@O@O@O@<+<+<+<+<+<+<+O@O@<+<+<+<+<+<+<+O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@<+<+<+<+<+O@O@O@<+<+<+<+<+<+<+O@O@<+O@O@O@O@O@<+O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@<+O@O@O@O@<+O@O@<+<+<+<+O@O@<+O@O@O@O@O@<+O@<+<+<+<+<+. )#>#O@O@O@O@V@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@W@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@W@# # # # # 7 P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@O@8## # # # # 7 P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@O@8## # # # # 7 P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@O@8## # # # # .#P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@O@$## # # # # .#P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@O@+ # # # # # 7 P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@W@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # * O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@h## # # # # # # * O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@h## # # # # # # * O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@h## # # # # # # `@O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@N@# # # # # # # `@O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@N@# # # # # # # * O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # i#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@O@j## # # # # # # i#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@O@j## # # # # # # i#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@O@j## # # # # # # k#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@O@l## # # # # # # k#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@O@l## # # # # # # i#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # m#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@U@# # # # # # # # # m#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@U@# # # # # # # # # m#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@U@# # # # # # # # # = O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@P@# # # # # # # # # = O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@P@# # # # # # # # # m#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # `@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@N@# # # # # # # # # # # `@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@N@# # # # # # # # # # # `@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@N@# # # # # # # # # # # `@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@O@# # # # # # # # # # # `@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@O@# # # # # # # # # # # `@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # *#@.O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@N@@ # # # # # # # # # # # *#@.O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@N@@ # # # # # # # # # # # *#@.O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@N@@ # # # # # # # # # # # *#@.O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@O@|## # # # # # # # # # # *#@.O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@O@|## # # # # # # # # # # *#@.O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#`@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@@ # # # # # # # # # # # # # *#`@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@@ # # # # # # # # # # # # # *#`@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@@ # # # # # # # # # # # # # *#`@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@|## # # # # # # # # # # # # *#`@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@|## # # # # # # # # # # # # *#`@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # m#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@# # # # # # # # # # # # # # # # # m#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@# # # # # # # # # # # # # # # # # m#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@# # # # # # # # # # # # # # # # # = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@# # # # # # # # # # # # # # # # # = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@# # # # # # # # # # # # # # # # # m#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # i#* P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@h#n## # # # # # # # # # # # # # # # # # # i#* P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@h#n## # # # # # # # # # # # # # # # # # # i#* P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@h#n## # # # # # # # # # # # # # # # # # # Y@`@P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@$## # # # # # # # # # # # # # # # # # # Y@`@P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@$## # # # # # # # # # # # # # # # # # # i#* P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@h# ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # 7 4#`@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@Q@|## # # # # # # # # # # # # # # # # # # # # # # 7 4#`@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@Q@|## # # # # # # # # # # # # # # # # # # # # # # 7 4#`@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@Q@|## # # # # # # # # # # # # # # # # # # # # # # .#m#`@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@+#8## # # # # # # # # # # # # # # # # # # # # # # .#m#`@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@+#8## # # # # # # # # # # # # # # # # # # # # # # 7 4#`@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@Q@|## # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # :.o## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |.# |.# # # # # # p#p## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |.# |.# # # # # # # p#p## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1+# 1+# # # # # # # # k@z+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ;+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # q#:.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # C+# C+# # # # # # $ @# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |.# |.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # C+# C+# # # # # # # @$ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # z@# z@# # # # # # # # B }.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1+# 1+# # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1+# 1+# # # # # z+r## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # s#$ s## # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # C+# C+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # I.# # # # I.# # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.# 0.# # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.# 0.# # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ,.'.-+t## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # < ..# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # z@# z@# # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # z@# z@# # # # # }.B # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # u@u#p@# # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j@P P j@# # # # # 8.).# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.0.0.a.b.# # # # 0.# # # # # 0.# # # # # v#w#v## # # # # # # # # # # # # # # # # # # # # # # # 0.0.0.a.b.# # # # 0.# # # # # 0.# # # # 0.0.0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # x#!.G.r## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ w s## # # # v@]+y## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # G.H.G.# # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ..[ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # z#U _ U [.# # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 2+Y N M Y k # # # # I.=+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.# J.K.L.# # # # 0.# # # # # 0.# # # # A#B#C#B#D## # # # # # # # # # # # # # # # # # # # # # # 0.# J.K.L.# # # # 0.# # # # # 0.# # # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # I.# # # # I.# # { E#/ F#s@# # 6.8.# $ $ z Z+G#_ # $ $ $ $ $ # # # # # # # # # # # # # # # # # # # # # # # # # # $ e.H#g.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # }.k I## # # # J#K#5 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # i w %+w r.# # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # $ # # # # # y#]+v@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # L#,.# ,.H## # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # U.m@# # Z n@# # # # L M## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.# J.K.'+# # 0.# 0.# N#O#P#Q#0.# # # # R#S## S#R## # # # # # # # # # # # # # # # # # # # # # # 0.# J.K.'+# # 0.# 0.# N#O#P#Q#0.# # # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # # >@y#! T#W.# # ,.I.# $ # < v ` P # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # p <.# # # # # # # # # # e.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # F#s...$ B # # # # # U#2 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |+S # S -+# # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # $ # # # # # 5 V#J## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # p.-+$ $ $ -+o.# # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # z o.# # p.n.# # # # y W.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ..[ # # [ u # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.0.0.4+5+# # 0.# 0.# W#X#Y#Z#0.# # # # 4+N.# N.`## # # # # # # # # # # # # # # # # # # # # # # 0.0.0.4+5+# # 0.# 0.# W#X#Y#Z#0.# # # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # # T $# # $# # ,+q # $ # # # o@x## # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # y@V.< # # # # .$} !@m@j.+$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # n.W p.s#$ # # # # # # $ e.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # R j.# 6.T # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # }.$ # # # # # 2 j.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # o#@$# # # @$#$# # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # T s@# # t@4 # # # # [ k.g+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # f.,@# # ,@K## # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.# 8+h+'+# # 0.# 0.# <+$$# Y#0.# # # # %$&$# $$*$# # # # # # # # # # # # # # # # # # # # # # # 0.# 8+h+'+# # 0.# 0.# <+$$# Y#0.# # # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # # q k.=$,+[+# # F.3+# $ # # # < -$# # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # e.F#;$# # # # E#o.V S.-+E.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # V.~ *+>$$ # # # # # # >.i # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # e+A+E.B+D.# # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # >.W o.v@$ # # # # e.$ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # h ,$# # # ,$j # # # # $ p## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # D+'@# # v@p@# # # # # u@C+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # '$|+A+A+-+)@# # # # # p#$ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.# 8+E+L.# # 0.# 0.# W#)$$$!$0.# # # # ~$K.# {$]$# # # # # # # # # # # # # # # # # # # # # # # 0.# 8+E+L.# # 0.# 0.# W#)$$$!$0.# # # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # ..[ # # [ u # # # }+G.z@j # g+} [ # $ # # # ^$x## # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # /$4 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # W &+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # <.P.,+^+].# # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # O B.k.*.$ # # # # i Y # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # @ @# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # C.Y y@y@(./.# # # # # G#5 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7.~.~.] # # # # # # @ @# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.0.0..@~+# # 0.# 0.# N#O#*$($0.# # # # _$:$<$:$[$# # # # # # # # # # # # # # # # # # # # # # # 0.0.0..@~+# # 0.# 0.# N#O#*$($0.# # # # 0.0.0.0.0.# # # # # # # # # # # # # # # # # # # # # # f.,@# # ,@K## # _.# # j.-$# C+D+# # $ # < C.n@| # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # $ 4 }$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # &+,@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j.C@;+g+# # # # # # _.=$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # S#|$1$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # '$|+A+A+-+)@# # B+2$J#3$;$# 5 h.# # $ $ ^.f.r.[ # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # < )@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7.~.~.] # # # e.V E#W _ # !@~@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # )@].# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4$5$'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#,#6$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#7$8$. O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@. 8$7$7#9$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$]#= O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@= ]#:#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$a$P@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@P@a$:#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@J@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@N@6#7#P@O@O@O@P@J@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@<+O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@N@6#7#P@O@O@O@P@Y@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@J@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#P@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@P@]#b$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@. )#>#O@O@O@O@- # # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@. )#>#O@O@O@O@- # # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@. )#>#O@O@O@O@T@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+O@O@O@O@. )#>#O@O@O@O@- # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#= O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@= 7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@b#)#. O@O@O@&## # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@&## # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@P@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+<+<+O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@&## # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [#O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@[#c$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@;## # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@;## # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@<+O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@;## # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#8$O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+O@<+<+O@O@O@O@O@O@O@O@O@O@O@O@8$6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@P@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@P@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@<+<+<+<+<+<+O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@<+<+<+<+O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@<+<+<+<+<+<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@<+O@O@<+O@<+O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@<+<+<+<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@<+O@<+O@<+<+O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+O@O@O@O@O@O@f#b#O@O@O@P@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#. O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@. 7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@N@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@N@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@<+O@O@<+O@<+O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@N@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@<+O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@<+O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@<+O@<+<+<+O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@<+O@O@O@<+<+O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@<+<+<+<+O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@. 7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@<+<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@<+O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@<+<+<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#8$O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@8$6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@<+<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@O@# # # # # `@O@O@O@O@>#]#N@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [#O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@[#c$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@+## # # # # Z@O@O@O@O@* 0#<#O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#= O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@= 7#d$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@W@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@W@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@8## # # # # 7 P@O@O@O@O@{#'#= O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@W@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#P@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@P@]#b$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # = O@O@O@O@N@1#)#= O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # * O@O@O@O@N@1#)#= O@O@O@O@<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$a$P@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@P@a$(#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # i#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$]#= O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@= ]#(#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # m#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e$7#7$8$. O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@. 8$7$7#c#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # `@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4$5$]#]#'#'#'#'#'#'#'#'#'#'#'#'#'#'#]#]#,#6$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # *#@.O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#`@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # m#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # i#* P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@h# ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # 7 4#`@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@Q@|## # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # 8 8 8 8 # # # f$g$g$f$# # # 8 # # # # # 8 # # 8 8 8 8 8 # # # # # 8 8 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # 8 # # # # # u.#@}@h$#@J+# # 8 # # # # # 8 # # 8 # # # # # # # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # 8 # # # # # i$j$# # $@k$# # 8 # # # # # 8 # # 8 # # # # # # # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # 8 8 8 8 # # e H # # a+p+# # 8 # # # # # 8 # # 8 8 8 8 8 # # # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # 8 # # # # # v.&.# # +@0 # # 8 # # # # # 8 # # 8 # # # # # # # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # 8 # # # # # %@ +# # l$d # # 8 # # # # # 8 # # 8 # # # # # # # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # 8 # # # # # m$#@n$n$:@o$# # 8 8 8 8 8 # 8 # # 8 8 8 8 8 # # # # # 8 8 8 8 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # 5.p$q${@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . 4$5$'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#,#6$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4$5$'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#,#6$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . 7#7$8$. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. 8$7$7#9$. . . . . . . . . . . . . . . . . . . . . . . . . . . 7#7$8$. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. 8$7$7#9$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . 0$]#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= ]#:#. . . . . . . . . . . . . . . . . . . . . . . . 0$]#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= ]#:#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+<+<+O@O@N@2#3#4#O@O@O@O@V@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . 0$a$P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@a$:#. . . . . . . . . . . . . . . . . . . . . . 0$a$P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@a$:#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@J@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@J@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@Y@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@N@6#7#P@O@O@O@P@W@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . ]#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@]#b$. . . . . . . . . . . . . . . . . . . . . ]#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@]#b$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@- # # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@- # # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@T@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@. )#>#O@O@O@O@V@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . 7#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= 7#. . . . . . . . . . . . . . . . . . . . 7#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= 7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@&## # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@&## # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@P@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@b#)#. O@O@O@U@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . [#O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@[#c$. . . . . . . . . . . . . . . . . . . [#O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@[#c$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@;## # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@;## # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . 6#8$O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@8$6#. . . . . . . . . . . . . . . . . . 6#8$O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@8$6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@P@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@P@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . 7#. O@O@O@O@O@O@O@<+<+<+O@O@<+<+<+<+<+<+<+<+<+<+<+<+O@O@O@O@O@O@. 7#. . . . . . . . . . . . . . . . . . 7#. O@O@O@O@O@O@<+<+<+<+<+<+<+<+<+<+<+<+O@O@<+<+<+O@O@O@O@O@O@O@. 7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@N@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@N@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . 7#O@O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@7#. . . . . . . . . . . . . . . . . . 7#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+O@O@O@O@O@O@7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . 7#O@O@O@O@O@O@O@O@<+<+<+O@O@<+<+<+<+<+<+<+<+<+<+<+<+O@O@O@O@O@O@O@7#. . . . . . . . . . . . . . . . . . 7#O@O@O@O@O@O@O@<+<+<+<+<+<+<+<+<+<+<+<+O@O@<+<+<+O@O@O@O@O@O@O@O@7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . 7#. O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. 7#. . . . . . . . . . . . . . . . . . 7#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@. 7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . 6#8$O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@8$6#. . . . . . . . . . . . . . . . . . 6#8$O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@8$6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@O@# # # # # `@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . [#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@[#c$. . . . . . . . . . . . . . . . . . . [#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@[#c$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@+## # # # # Z@O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . 7#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= 7#d$. . . . . . . . . . . . . . . . . . . 7#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= 7#d$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@W@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@W@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@8## # # # # 7 P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . ]#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@]#b$. . . . . . . . . . . . . . . . . . . . . ]#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@]#b$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # * O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . 0$a$P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@a$(#. . . . . . . . . . . . . . . . . . . . . . 0$a$P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@a$(#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # i#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . 0$]#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= ]#(#. . . . . . . . . . . . . . . . . . . . . . . . 0$]#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= ]#(#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # m#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . e$7#7$8$. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. 8$7$7#c#. . . . . . . . . . . . . . . . . . . . . . . . . . e$7#7$8$. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. 8$7$7#c#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # `@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . 4$5$]#]#'#'#'#'#'#'#'#'#'#'#'#'#'#'#]#]#,#6$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4$5$]#]#'#'#'#'#'#'#'#'#'#'#'#'#'#'#]#]#,#6$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # *#@.O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#`@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # m#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # i#* P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@h# ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # 7 4#`@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@Q@|## # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4$5$'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#,#6$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#7$8$. O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@. 8$7$7#9$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$]#= O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@= ]#:#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # + O@O@O@O@N@1#)#= O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$a$P@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@P@a$:#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@N@6#7#P@O@O@O@P@J@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@J@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@Y@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@N@6#7#P@O@O@O@P@J@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#P@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@P@]#b$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@. )#>#O@O@O@O@- # # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@- # # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@T@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@. )#>#O@O@O@O@- # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#= O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@= 7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@b#)#. O@O@O@&## # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@&## # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@P@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@b#)#. O@O@O@&## # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [#O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@[#c$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@P@d#~#O@O@O@;## # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@;## # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@P@d#~#O@O@O@;## # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#8$O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@8$6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@f#b#O@O@O@P@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@P@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@<+<+O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@f#b#O@O@O@P@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@. 7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@1#b#O@O@O@N@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@N@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@1#b#O@O@O@N@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#. O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@. 7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#8$O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+O@<+<+O@O@O@O@O@O@O@O@O@O@O@O@8$6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@O@# # # # # `@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [#O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@[#c$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@+## # # # # Z@O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#= O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@= 7#d$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@N@6#7#P@O@O@O@N@W@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@W@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@8## # # # # 7 P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@W@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#P@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@P@]#b$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@<+<+<+<+<+<+<+O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # * O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@<+<+<+<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$a$P@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@P@a$(#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # i#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$]#= O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@= ]#(#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # m#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e$7#7$8$. O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@. 8$7$7#c#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # `@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4$5$]#]#'#'#'#'#'#'#'#'#'#'#'#'#'#'#]#]#,#6$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # *#@.O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#`@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # m#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # i#* P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@h# ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # 7 4#`@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@Q@|## # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # J@K@L@M@@.N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@P@Q@R@- J@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # J@+ U@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@Z@W@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # ##. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@$## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # L@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@&#J@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@7 # # # # # # # # # # # # =#O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@T@J@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # L@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@&## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4$5$'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#,#6$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # ##O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@$## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#7$8$. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. 8$7$7#9$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # J@. O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@= [#}#~#O@O@O@O@P@W@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$]#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= ]#:#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@N@2#3#4#O@O@O@O@V@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # + O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@N@2#3#4#O@O@O@O@V@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$a$P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@a$:#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@J@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@J@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@Y@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@N@6#7#P@O@O@O@P@W@# # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # *#. O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@N@6#7#P@O@O@O@P@W@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#P@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@]#b$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@- # # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@- # # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@T@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # 9#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@. )#>#O@O@O@O@V@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#= O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@= 7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@&## # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@&## # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@P@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@b#)#. O@O@O@N@# # # # # L@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [#O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@[#c$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@;## # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@;## # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+<+O@O@O@<+<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@P@d#~#O@O@O@O@# # # # # M@O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#8$O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@8$6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@P@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@P@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # @.O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#. O@O@O@O@O@<+O@O@O@O@O@O@<+<+<+<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@. 7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@N@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@N@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#O@O@O@O@O@O@<+O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # N@O@O@O@P@0#@.O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@1#b#O@O@O@O@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#O@O@O@O@O@O@<+O@<+<+<+<+<+<+<+<+<+<+<+<+<+<+<+<+<+<+O@O@O@O@O@O@7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@N@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@<+O@O@<+O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # . O@O@O@P@0#e#O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@f#b#O@O@O@O@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#. O@O@O@O@O@<+O@O@O@<+<+<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@. 7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@N@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # . O@O@O@N@,#c#O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@d#~#O@O@O@O@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#8$O@O@O@O@O@<+O@O@O@O@O@O@<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@8$6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@U@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@<+O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@O@# # # # # `@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@O@# # # # # T@O@O@O@O@>#]#N@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@b#)#. O@O@O@N@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [#O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@[#c$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@V@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@<+<+<+<+<+O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@+## # # # # Z@O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@N@# # # # # $#O@O@O@O@* 0#<#O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. )#>#O@O@O@O@Q@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#= O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= 7#d$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@<+<+<+O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@W@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@W@# # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@8## # # # # 7 P@O@O@O@O@{#'#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@O@- # # # # # J@P@O@O@O@O@{#'#= O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@6#7#P@O@O@O@N@g## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#P@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@]#b$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # * O@O@O@O@N@1#)#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # = O@O@O@O@N@1#)#= O@O@O@O@<+<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@h## # # # # # # = O@O@O@O@N@1#)#= O@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@2#3#4#O@O@O@O@Q@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$a$P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@a$(#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@<+O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # i#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@<+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@O@j## # # # # # # .#P@O@O@O@O@P@!#'#<#N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= [#}#~#O@O@O@O@N@|## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$]#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= ]#(#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # m#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@U@# # # # # # # # # %#O@O@O@O@O@N@{#'#]#>#^#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@* /#(#_#:#* O@O@O@O@O@&## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e$7#7$8$. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. 8$7$7#c#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # `@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@N@# # # # # # # # # # # T@O@O@O@O@O@O@* >#,#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#)#!#~#N@O@O@O@O@O@U@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4$5$]#]#'#'#'#'#'#'#'#'#'#'#'#'#'#'#]#]#,#6$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # *#@.O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#@ # # # # # # # # # # # # `@O@O@O@O@O@O@O@N@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@P@O@O@O@O@O@O@O@-#7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#`@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # *#T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@U@7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # m#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # %#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@R@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . @ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # i#* P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@h# ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # 7 = P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@`@ ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # @ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # 7 4#`@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@Q@|## # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # J@S@T@. . N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@U@V@W@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . - # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . 7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . * # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . 7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . - # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4$5$'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#,#6$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#7$8$. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. 8$7$7#9$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$]#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= ]#:#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$a$P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@a$:#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@]#b$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= 7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@[#c$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#8$O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@8$6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. 7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <+O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<+. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. 7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#8$O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@8$6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . [#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@[#c$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= 7#d$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@]#b$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$a$P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@a$(#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 0$]#= O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@= ]#(#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . e$7#7$8$. O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. 8$7$7#c#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4$5$]#]#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#'#]#'#'#]#]#,#6$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}; KCemu-0.5.1/src/ui/gtk/poly880_keyboard_pressed.xpm0000644001050700006200000071004210527416075021567 0ustar glaubitzfbedv/* XPM */ static char *poly880_keyboard_pressed[] = { /* width height num_colors chars_per_pixel */ " 680 340 52 1", /* colors */ ". c #563f49", "# c #000000", "a c #7c0a00", "b c #7a7a70", "c c #780004", "d c #a93b0c", "e c #a3998b", "f c #9d0303", "g c #a3360b", "h c #962c08", "i c #700e01", "j c #831d05", "k c #9c310a", "l c #761302", "m c #7d1803", "n c #902707", "o c #892206", "p c #968c7d", "q c #827768", "r c #7c7061", "s c #8f8576", "t c #9d9284", "u c #756a5a", "v c #685c4c", "w c #6f6353", "x c #897e6f", "y c #960303", "z c #890202", "A c #900202", "B c #820202", "C c #750101", "D c #610000", "E c #680000", "F c #6e0101", "G c #7c0101", "H c #135817", "I c #04a403", "J c #039702", "K c #039002", "L c #049e03", "M c #017d01", "N c #006900", "O c #017601", "P c #028a02", "Q c #007000", "R c #028301", "S c #432f38", "T c #302026", "U c #49353e", "V c #503a43", "W c #3d2a32", "X c #36252c", /* pixels */ "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".................######################################################################......######################################################################......######################################################################......######################################################################..................................................................######################################################################......######################################################################..................................................................######################################################################.................", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#....#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#................", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..............................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#...............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb##bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#............................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#............................................................#bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb##bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb#............................................................#cccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccccc#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#............................................................#bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb##bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb#............................................................#ccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddddddddddghhhhddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddkjliiiiiimndddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiiiiiiiiiiimjhdddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddgmiiiiiiiiiiilkdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiiiiiiiiiiiiiiindddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddddhiiiiiljjjliiiiihddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiiiiiiiiiiiiiiiijddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddhiiiijkdddddkmiiiikdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddhoiiiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddgliiihdddddddddjiiildddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddgliiioddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddoiiihdddddddddddmiiinddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddgliiigdddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddgiiimddddddddddddkiiimddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddddhiiiodddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddoiiikdddddddddddddljohddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddliildddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddliiiddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddoiiikddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddhiiihddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddkiiinddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddgiiioddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiljjjjjjjjjjjnddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddhiiihddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddddddiiijddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiijddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddhiiihddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddddddiiijddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiijddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddhiiihddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddddddiiijddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiimhhhhhhhhhhhkddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddhiiihddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddddddiiijddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeepqrrrseeeeeeeeetsrrrseeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeepsspeeeeeetssseeessssssssssteesssteeeeeepsspeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddgiiioddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddkiiioddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeetuvvvvvvwseeeeeexvvvvvvvxeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervvueeeeeexvvveeevvvvvvvvvvseevvvxeeeeeeuvvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffyzzzzzzzAffffffzzzzzzzzzzyffffyBCCCzfffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddhiiihddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeepvvqpeepqvvpeeeeqvwxtetxwvqeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervvvteeeeervvveeevvssssssssteevvvueeeeeevvvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDDDDDDDDEzffffDDDDDDDDDDzfffzDDDDDDEzfffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddjiiiddddddddddddddkimjkdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddoiiigddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeewvseeeeeexvueeepvwteeeeetwvpeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervrvseeeeevrvveeevveeeeeeeeeeevvrveeeeesvrvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDFzzzzzCDDyfffDDzzzzzzzzyffADDBffyGDEyffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddniiikdddddddddddddoiiindddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddliildddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeesvueeeeeeeewueeeuvxeeeeeeexvueeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervsvreeeesvsvveeevveeeeeeeeeeevvsvseeeervsvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCffffffGDGfffDDfffffffffffGDBfffffCDBffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddgiiimdddddddddddddliiigdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddddniiindddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeervseeeeeeeeeeeeevveeeeeeeeevveeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervsrveeeervevveeevveeeeeeeeeeevvevreeeevrsvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCffffffzDCfffDDfffffffffffCDzfffffACBffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddoiiihdddddddddddoiiioddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddgliiigdddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeevveeeeeeeeeeeeesvreeeeeeeeervseeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervsxvseeewuevveeevvssssssspeeevveuveeepvxsvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCffffffBDCfffDDfffffffffffBDEyfffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddgliiihdddddddddniiiigddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddgliiinddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeevveeeeepssssstesvreeeeeeeeervseeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervstvqeepvxevveeevvvvvvvvvreeevvexvpeeqvtsvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCfffffBDDAfffDDzzzzzzzAffffEDDFBAffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddhiiiimkdddddkmiiiihdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddghoiiiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeevveeeeervvvvvsesvreeeeeeeeervseeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervsewweeqvtevveeevvssssssspeeevvepvqeewuesvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDDDDDDDDDGffffDDDDDDDDDCfffffGEDDDEGyfffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddddhiiiiiljjjliiiiihddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiiiiiiiiiiiiiiiijddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiiiihdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeewvteeeepsssuvsepvueeeeeeeeeuvpeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervseqvpeuweevveeevveeeeeeeeeeevveewwetvqesvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDECCCDDCAfffffDDzzzzzzzAfffffffAGFDDEyffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddhliiiiiiiiiiilhdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiiiiiiiiiiiiiilndddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiiiihdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeervxeeeeeeeervseevvteeeeeeetvveeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervsepvxtvqeevveeevveeeeeeeeeeevveeqvtxvpesvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCfffADEyfffffDDffffffffffffffffffyCDCffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddnmiiiiiiimndddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiiiiiiiiiiijjhdddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiiiihdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeepvweeeeeeeervseeqvqeeeeeeeqvqeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervseevuxvseevveeevveeeeeeeeeeevveesvxuveesvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCffffzDEyffffDDffffffffffACBffffffyDDffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddddddddddkhhhhddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeervrteeeeepwvseetwvseeeeesvwteeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervseervrveeevveeevveeeeeeeeeeevveeevrvreesvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCfffffCDCffffDDffffffffffADEfffffffDDffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeervwqssxuvvrteeeswvuxsxuvvseeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervseesvvreeevveeevvrrrrrrrrxeevveeervvseesvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCfffffyEDAfffDDfffffffffffEDCfffffBDCffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeexwvvvvvupeeeeeetuvvvvvrteeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervseeevvseeevveeevvvvvvvvvvreevveeesvveeesvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCffffffBDEfffDDCCCCCCCCBffADDFBzzFDEyffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeetssseeeeeeeeeeeessseeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCfffffffFDGffDDDDDDDDDDCfffAFDDDDDFyfffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccfffffffffffffffffffffffffffffffffffffffffffffffzzzyfffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddkhhhhhkddddddkojjhdddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjiiiiiimgdddjimjjilgdddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjddddkloddolkdddglmdddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjdddddnidgihdddddkikddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjdddddhidnidddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjdddddmmdjjdddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjljjjjlikdjjdddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjljjjjngddjjdddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjddddddddhidddddddnkddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjddddddddgindddddginddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjdddddddddolkdddglldddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjddddddddddjimjjilgdddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddkkdddddddddddkojjndddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#............................................................#bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb##bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb#............................................................#ccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcccc#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#............................................................#bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb##bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb#............................................................#cccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccccc#..............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb##bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#............................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#..............", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..............................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#...............", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#....#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#................", ".................######################################################################......######################################################################......######################################################################......######################################################################..................................................................######################################################################......######################################################################..................................................................######################################################################.................", ".................######################################################################......######################################################################......######################################################################......######################################################################..................................................................######################################################################......######################################################################..................................................................######################################################################.................", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#....#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#................................................................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..............................................................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#...............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb##bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#............................................................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#............................................................#bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb##bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb#............................................................#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#............................................................#bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb##bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb#............................................................#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddkjliiijnddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddhjiiimogddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddniiiigdddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiimjkdddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddgmiiiiiiiilgddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddgliiiiiiiiodddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddliiiindddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiimgdddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddliiiiiiiiiilgdddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddgliiiiiiiiiijddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddkiiiiildddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiiilgddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddoiiimkddgoiiildddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddliiimhddgnliiodddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddoiijiiikddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijdddddddghmiiimddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddiiijddddddniiihddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddoiiijddddddgliikddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddiiinjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddmiiikdddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddhiiikdddddddliioddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddliilddddddddniijddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddniiigkiiigdddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddkiiiodddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddhiiiddddddddjiijddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddgiiindddddddddiiiddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddmiijddliindddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijdddddddddddiiijdddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddhiiigdddddddmiijddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddhiiigdddddddddjiihdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddkiiikddoiildddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijdddddddddddiiijdddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddiiinddddddgiiihddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddhiiiddddddddddjiihdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddoiimdddgiiikddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddkiiihdddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddoiiihddddgliildddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddhiiiddddddddddjiiodddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddiiinddddmiijddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddmiilddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddjiiiljjmiiilgdddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddkiiikdddddddddiiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddniiigddddniiigdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddhmiiihddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddddkliiiiiiindddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiioddddddddniiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddmiijddddddiiindddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiilhdddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddhliiiiiiiiinddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddoiiihddddddgliiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkiiihddddddjiildddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiinddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddjiiilohhnmiiijdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddgiiiiokddgniiiiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddoiiidddddddkiiikddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiiilhddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddhiiijddddddhiiioddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddhiiiiiiiiiijjiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiioddddddddliijddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddhoiiiihdddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddkhhkddddddghhhddddddknjjokddddddghhddddddghkdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddliimddddddddniiigdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddhliiiiiiiodjiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddniiiiiiiiiiiiiiiigdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddgliildddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjiimddddddniiiddddgjiiiiiilkddddhiihdddddhijdddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddgiiihdddddddddiiindddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddgomiiljkddmiihdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddmiiiiiiiiiiiiiiiindddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijdddddddddddniiihddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjiiigdddddjiiiddddlimhddkoiikdddhiilgddddhijdddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddhiiiddddddddddjiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddiiihdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddkiiiiiiiiiiiiiiiiildddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijdddddddddddgiiijddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeesrrrxteeeessssssssssstetsssssssssseeessssssspeeeeeeeeeebbb##bbbeeeeeeeeeeeeeetssssssspeeeeeessssssssssteeeeeesrrrqpeeeeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjijihdddddijiidddoijddddddhildddhiiioddddhijdddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddhiiiddddddddddjiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddkiiigdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddoiiigddddddddddniiikddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddiiijddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeetwvvvvvvqeeevvvvvvvvvvvsesvvvvvvvvvveeevvvvvvvvwseeeeeeeebbb##bbbeeeeeeeeeeeeeesvvvvvvvvwseeeevvvvvvvvvvseeeeswvvvvvvuteeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihijddddhihiiddgiigdddddddminddhimiikdddhijdddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddhiiigdddddddddmiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddhnjkddddddddoiilddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiimdddddddddddgiiijddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijdddddddddddgiiijddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeewvrteexwvseessssqvusssstesvusssssssseeevvsssssrvvteeeeeeebbb##bbbeeeeeeeeeeeeeesvusssssrvvteeevvssssssssteeeqvwxteesuvweeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihjiddddjidiiddhijddddddddhijddhijoildddhijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddiiinddddddddgiiihdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddliijddddddddliioddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddniiinddddddddddddjiiigdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijdddddddddddniiihddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeepvueeeeesvueeeeeesvreeeeeesvreeeeeeeeeeevveeeeeervxeeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeeeqvqeeevveeeeeeeeeeepvwteeeeeeuvxeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihnihdddlmdiiddjihdddddddddiiddhijdlioddhijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddmiilgdddddddjiiigdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddjiiigddddddoiiigddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddmiiidddddddddddddhiiindddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddgliiigddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeesvreeeeeerreeeeeesvreeeeeesvreeeeeeeeeeevveeeeeesvreeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeeesvreeevveeeeeeeeeeervxeeeeeeepvxeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihgioddkindiiddjihdddddddddiiddhijdkiigdhijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddkiiilkddddgjiiioddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkiiilgdddgjiiiodddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddkiiijddddddddddddddiiildddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddknliiiodddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeetvvseeeeeeeeeeeeesvreeeeeesvreeeeeeeeeeevveeeeeexvreeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeeexvreeevveeeeeeeeeeevveeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihdllddoigdiiddjihdddddddddiiddhijddoimdhijdddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddoiiiiljjmiiiildddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddjiiiimjjiiiijddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddoiiikddddddddddddddoiiikddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiiiilddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeqvvwqseeeeeeeeeesvreeeeeesvusssssssteeevveeeeetwvseeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeexvvpeeevvssssssspeesvreeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihdoikdmlddiiddoinddddddddgilddhijddglinhijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddoiiiiiiiiiijgdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddjiiiiiiiiijdddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddliildddddddddddddddkiiioddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiiiodddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeesuvvvvrpeeeeeeesvreeeeeesvvvvvvvvvseeevvrrrrrvvreeeeeeeebbb##bbbeeeeeeeeeeeeeesvvvvvvvvvqeeeevvvvvvvvvreesvreeeeesssssseeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihdkingioddiiddhimddddddddnijddhijdddhiinijdddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddddkjiiiiiimndddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddnliiiiimhddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddiiioddddddddddddddddliiiddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiljngddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeetxrvvvseeeeeesvreeeeeesvusssssssteeevvvvvvvuqeeeeeeeeebbb##bbbeeeeeeeeeeeeeesvwrrrvvrpeeeeevvssssssspeesvreeeeevvvvvveeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihddimnihddiidddlikdddddddlikddhijddddjilijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddkhhhddddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddghhhdddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeexvveeeeeesvreeeeeesvreeeeeeeeeeevveeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeesvreeepvwteeeeevveeeeeeeeeepvueeeeessssvveeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihddjijidddiidddhilgdddddjijdddhijddddgliijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeerreeeeeeeuvseeeeesvreeeeeesvreeeeeeeeeeevveeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeesvwteeeevveeeeeeeeeeevvteeeeeeeevveeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihddhiijdddiiddddoiijhholilgdddhijdddddniijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeewvpeeeeeervseeeeesvreeeeeesvreeeeeeeeeeevveeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeervreeeevveeeeeeeeeeeqvqeeeeeeeevveeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihdddiihdddiidddddhliiiilodddddhijddddddmijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeqvwteeeetvveeeeeesvreeeeeesvreeeeeeeeeeevveeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeetwvpeeevveeeeeeeeeeetwvxeeeeeexvveeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddghhkddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeewvwqssqvvseeeeeesvreeeeeesvwrrrrrrrrpeevveeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeeexvweeevvrrrrrrrrxeeetwvuxssqwvvxeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeetqvvvvvwseeeeeeesvreeeeeesvvvvvvvvvvseevveeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeeeeuvqeevvvvvvvvvvreeeetqvvvvvvqteeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeepsspeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeepsspeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddkkddkhhhhhhhgdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddkkdghgdddddhkdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddkkdhkddddddkhdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddgnjjngddddhhhhhhgdddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjiiiiiiihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddmmddddnigdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdnigddddgindddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddklljjlihdddiiiiiiioddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjjddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddglnddkinddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddmjddddmmddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddmjddddoigddihddddnikdddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjjddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddhikdljdddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddkihddhikddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddihdddddjkddihdddddmjdddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjjddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddjlolgdddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddolgglodddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddljgddddddddihdddddjjdddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjmhhhhhhddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddglihddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddljjlddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddhiimokdddddihddddgindddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjiiiiiiiddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddglihddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddkiikddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddkjliilhdddimjjjjilddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjjddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddjlolgdddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddddjjdddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddddddgnlikddimjjjjhdddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjjddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddhikdljdddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddddjjdddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddghddddddljddihddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjjddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddgloddkihddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddddjjdddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddkikdddddjjddihddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjjddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddmlddddnlgdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddddjjdddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddlmgdddkihddihddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjiiiiiiijdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdnigdddddmmdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddddjjdddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddglijjmijdddihddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddkkddkhhhhhhhkdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddkkdhkddddddghgddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddkkdddddkkdddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddddhjjokddddhgddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#............................................................#bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb##bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb#............................................................#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#............................................................#bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb##bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb#............................................................#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#..............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb##bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#............................................................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..............................................................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#...............", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#....#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#................................................................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................", ".................######################################################################......######################################################################......######################################################################......######################################################################..................................................................######################################################################......######################################################################..................................................................######################################################################.................", ".................######################################################################......######################################################################......######################################################################......######################################################################..................................................................######################################################################......######################################################################..................................................................######################################################################.................", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#....#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#................", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..............................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#...............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb##bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#............................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#............................................................#bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb##bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb#............................................................#HHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHHH#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#............................................................#bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb##bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb#............................................................#HHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddgomiiimogdddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkjjjjjjjjjjjjjjjjnddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddkjjjjjjjjjjjjkddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddoiiiiiiiiioddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddhiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddhjjkddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddjiiiiiiiiiiiihddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddjiiiiiiiiiiijdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddhiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddddddddddkiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddmiiiiiiiiiiiihddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddoiiimhddgnliiikddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkjjjjjjjjjjjjjliihddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIJKKJIIIIIILKKKIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddgliiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddiiimjjjjjjjjjkddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkiiijddddddgiiimddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddhiindddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNNOIIIIIIPNNNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddmiiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddkiiihddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddjiilddddddddoiiigdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddhiijddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNNNLIIIIIMNNNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddddddddoiiiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddhiiidddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiinddddddddgiljkdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddglilgddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNMNKIIIIINMNNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddhiiiiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddjiildddddddddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddhiiidddddddddddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddmiihdddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKNMIIIIKNKNNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddddddgiiiliiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddmiijdddddddddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddoiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddniimddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKMNIIIIMNINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddddddliiihiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddiiinddkhhgdddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddjiioddkjliimogdddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddgliigddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKPNKIIIQOINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddjiiindiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkiiihnliiiilndddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddliihgmiiiiiiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddoiiodddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKLNRIIJNPINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddddhiiijddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddhiiiliiiiiiiimgdddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiinliiiiiiiiiihdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddgiiigdddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKIQQIIRNLINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddkiiilgddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddjiiiiimjjmiiiimdddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiililngddkoiiiikddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddmiioddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKIRNJIOQIINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddgliiikdddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddmiiimgddddgjiiioddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiilgddddddgliilddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddgiiigddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKIJNPLNRIINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddjiiihddddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddjmijddddddddmiiiddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiigddddddddniiikdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddoiimdddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKIINOPNKIINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddniiijdddddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddkiiihdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijddddddddddiiindddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddiiihdddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKIIMNMNIIINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddhiiilddddddiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddliiodddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiihddddddddddjiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddhiiiddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeetsssssssssteeeeepqrrxteeeepsssssssssspeeeeeeeeeeeeeebbb##bbbeeeeeeeetsssssspeeeeeeeeetsseeeeeeeeeetxrrqpeeeeetspeeeeeepsseeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKIIKNNMIIINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddgliiigddddddiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddjiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddjiihddddddddddjiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvvvvvvvvvseeetuvvvvvvseeervvvvvvvvvvreeeeeeeeeeeeeebbb##bbbeeeeeeeesvvvvvvvwseeeeeeervvseeeeeeeeqvvvvvvreeeesvreeeeesvvseeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKIIINNKIIINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddjiiiljjjjjjjiiimjjndddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddjiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddjiihddddddddddjiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvusssssssteetwvqpeexvvseepssssvvsssspeeeeeeeeeeeeeebbb##bbbeeeeeeeesvussssqvvteeeeetvuvueeeeeeervuseepwvreeesvreeeesvvseeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddjiiiiiiiiiiiiiiiiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddkhddddddddddjiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddhiijddddddddddiiindddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddhiiidddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeeeuvxeeeeesvweeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvreeeeeqvqeeeeexvxuvteeeeexvueeeeetwvpeesvreeesvvseeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddjiiiiiiiiiiiiiiiiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddhiiigdddddddddiiihdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddgiiigddddddddkiiikdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddoiimdddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeetvweeeeeeewrpeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvreeeeesvreeeeewvesvqeeeeeuvpeeeeeequxeesvreesvvseeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddnjjjjjjjjjjjiiimjjndddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiinddddddddniiigdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddjiimdddddddgliimddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddmiijdddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeexvreeeeeeeeeeeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvreeeeeqvxeeeepvreewweeeetvveeeeeeeeeeeesvresvvseeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddmiilgddddddgliimddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddgiiilkddddkliiikddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddiiihdddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvusssssseeervseeeeeeeeeeeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvussssqvreeeeervpeeqvseeesvreeeeeeeeeeeesvrsvvxeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkiiilkddddkliiigddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddhiiiiljjliiiijdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddgiiihdddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvvvvvvvveeervseeeeeeeeeeeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvvvvvvvvpeeeetvweeepvueeesvreeeeeeeeeeeesvwvvvueeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddjiiiimjjliiiihdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddhiiiiiiiiiijddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddhiiiddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvusssssseeervseeeeeeeeeeeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvussssqwvseeexvxeeeeuvteesvreeeeeeeeeeeesvvvswvreeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddjiiiiiiiiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddgoiiiiiimkdddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddhiiiddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeeqvxeeeeeeeeeeeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvreeeeetvvteewvvvvvvvvqeepvueeeeeeeeeeeesvvsetwvseeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIKMMMKIIIIJKJIIIIIIIIJKJIIIILPMMRJIIIIILKJIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddkmiiiiiiogdddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddkhhhddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeesvreeeeeeexuxeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvreeeeeervsepvwrrrrrrvweeevveeeeeeetwreesvreeesvvteeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIKQNNNNNQLIILNNJIIIIIIJNNLIIIRNNNNNNMIIIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddhhhkddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeeevvteeeeeewvseeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvreeeeeeuvseuvseeeeeervxeervxeeeeeeqvreesvreeeeqvwteeeeeeeebbb#............................................................#HHHIIIIIIIIIIKNQPLILMNQLIIPNQLIIIILQNPIIIMNOKIIJQNMIIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeeeqvuteeeervweeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvreeeeesvvetvveeeeeeepvueepvvpeeeesvvpeesvreeeeervreeeeeeeebbb#............................................................#HHHIIIIIIIIILNNLIIIIIMNRIIIMNMIIIIMNOIIIPNOIIIIILQNJIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeeeervwqssuvvpeeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvwrrrruvvseqvqeeeeeeeewvpeesvvrssqvvqeeesvreeeeetwvxeeeeeeebbb#............................................................#HHHIIIIIIIIIPNRIIIIIIJQMIIILQNKIIKNQLIIIONJIIIIIIROPIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeeeeeqvvvvvuteeeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvvvvvvvrpeewvpeeeeeeeeqvqeeeswvvvvwseeeesvreeeeeepvvseeeeeebbb#............................................................#HHHIIIIIIIIIONKIIIIIIIIIIIIIKNQLLQNKIIILNNIIIIIIIIIIIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeesssteeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeepsspeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIINNIIIIIIIIIIIIIIIMNMMNMIIIIKNMIIIIIIIIIIIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIINNIIIIIIIIIIIIIIILQNNQLIIIIKNMIIIIIIIIIIIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIINNIIIIIIIIIIIIIIIIKNNKIIIIIKNMIIIIIIIIIIIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIQNLIIIIIIIIIIIIIIIINNIIIIIIJNOIIIIIIIIIIIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIMNKIIIIIIIOMJIIIIIINNIIIIIIINNIIIIIIILQMIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIKNOIIIIIIJNNIIIIIIINNIIIIIIIMNPIIIIIIRNMIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIQNRIIIILQNRIIIIIIINNIIIIIIIJNNJIIIIKNNJIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIILQNOPKPQNQIIIIIIIINNIIIIIIIIKNNMKKRNNRIIIKNQMMMMMMJIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIILONNNNNRIIIIIIIIINNIIIIIIIIIKQNNNNQKIIIIKNNNNNNNNKIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIILKKKIIIIIIIIIIIIIIIIIIIIIIIIJKKJIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddgkddddddhhhhhhhkdddghdhhgdddddhhgddhgdddddddddddddddddddddddaaa##aaadddddkhhhhhgddddddkojjhddddddghdhhgdddddhhgddddkojjnddddddddddddddddaaa##aaadddddkhhhhhgdddddhhhhhhhhdddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddkkddddddhgddhgddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddmigdddddiiiiiiijdddomdiioddddkiihddihdddddddddddddddddddddddaaa##aaadddddjiiiiiioddddjimjjilgddddomdiioddddkiihdddoiljjilhddddddddddddddaaa##aaadddddjiiiiiimgdddiiiiiiiidddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddgijndddddihdddddddddlodilmddddnlihddihdddddddddddddddddddddddaaa##aaadddddjjddddninddolkdddglmddddlodilmddddnlihddoihdddgjigdddddddddddddaaa##aaadddddjjddddklldddihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddookldddddihddddddddgikdioigdddmoihddihdddddddddddddddddddddddaaa##aaadddddjjdddddjjdgihdddddkikddgikdioigdddmoihdginddddddmmdddddddddddddaaa##aaadddddjjdddddginddihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddlkdlkddddihddddddddniddihinddgihihddihdddddddddddddddddddddddaaa##aaadddddjjdddddmodnidddddddddddniddihinddgihihdnidddddddhidddddddddddddaaa##aaadddddjjddddddomddihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddhlddojddddiohhhhkdddjjddihjjddhidihddihdddddddddddddddddddddddaaa##aaadddddjmhhhhmigdjjdddddddddddjjddihjjddhidihdjjddddddddihddddddddddddaaa##aaadddddjjddddddhiddiohhhhhkdddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjljjjjjjihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddmoddgigdddiiiiiijdddihddihhiddjjdihddihdddddddddddddddddddddddaaa##aaadddddjiiiiiijddjjdddddddddddihddihhiddjjdihdjjddddddddihddddddddddddaaa##aaadddddjjddddddhiddiiiiiiijdddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjljjjjjjihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddgimjjjindddihdddddddhigddihgihdindihddihdddddddddddddddddddddddaaa##aaadddddjjddddklodjjddddddddddhigddihgihdindihdjjddddddddihddddddddddddaaa##aaadddddjjddddddhiddihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddoljjjjmldddihdddddddomdddihdmohigdihddihdddddddddddddddddddddddaaa##aaadddddjjdddddhidhidddddddnkdomdddihdmohigdihdnldddddddhigddddddddddddaaa##aaadddddjjddddddjmddihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddlnddddgikddihdddddddlodddihdololddihddihdddddddddddddddddddddddaaa##aaadddddjjdddddnidgindddddgindlodddihdololddihdginddddddmmdddddddddddddaaa##aaadddddjjdddddginddihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddhiddddddjjddihddddddgikdddihdkiloddihddihdddddddddddddddddddddddaaa##aaadddddjjddddkloddolkdddglldgikdddihdkiloddihddoihddddjikdddddddddddddaaa##aaadddddjjddddhlldddihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddmjddddddhigdihddddddniddddihddiihddihddihdddddddddddddddddddddddaaa##aaadddddjiiiiiimgdddjimjjilgdniddddihddiihddihdddoiljjilhddddddddddddddaaa##aaadddddjiiiiiimgdddiiiiiiiihddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddiiiiiiidddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddhgdddddddhgdhgddddddkkddddhgddkhdddhgddhgdddddddddddddddddddddddaaa##aaadddddkhhhhhgddddddkojjndddkkddddhgddkhdddhgddddkojjngdddddddddddddddaaa##aaadddddkhhhhhgdddddhhhhhhhhgddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddkkddddddhgddhhhhhhhdddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#............................................................#bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb##bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb#............................................................#HHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHH#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#............................................................#bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb##bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb#............................................................#HHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHHH#..............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb##bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#............................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#..............", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..............................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#...............", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#....#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#................", ".................######################################################################......######################################################################......######################################################################......######################################################################..................................................................######################################################################......######################################################################..................................................................######################################################################.................", ".................######################################################################......######################################################################......######################################################################......######################################################################........................................................................................................######################################################################........................................................................................................######################################################################.................", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#......................................................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#......................................................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#................", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....................................................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#....................................................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#...............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..................................................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#..................................................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#..................................................................................................#cccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccccc#..................................................................................................#HHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHHH#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#..................................................................................................#ccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcccc#..................................................................................................#HHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddmijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddnjiiimokddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddddkjliiijhdddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddniijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddgomiiiljhddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddgliiiiiiiiodddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddjiiiiiiiimgdddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddhiiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddoiiiiiiiiilkddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddgliiiiiiiiiijddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddjiiiiiiiiiilgddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddhiiiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddjiiiiiiiiiiiihdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddliiiokddkmiiindddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddniiilhddkjiiijddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddoiiiiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddoiiilngddkjiiilgddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddniiihddddddmiildddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddliimddddddjiiikdddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddkliiiiiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddiiimdddddddhiiinddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddjiimdddddddkiiikddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddhiiigdddddddliiodddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddmiiiinjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddhiiigddddddddmiimddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddjminddddddddiiihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddjiimddddddddniildddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddiiilkdjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddjiimdddddddddhiiiddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddliinddddddddgiiikddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddilndddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddkhjndddddddddhiiiddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddniiidddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddiiihdddddddddiiihddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddndddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddoiilddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddhiiiodddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddgiiikdddddddddliinddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddliijddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddkhnmiiijddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddhiiiddddddddddjiijddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddoiiikddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddjiiiiindddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddhiiiddddddddddjiijddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddhiiimdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddmiiiiiioddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddhiiiddddddddddjiijddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddhiiiigdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddohhnmiiilgddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddhiiiddddddddddjiijddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddhiiiihddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddhiiijddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddhiiiddddddddddjiijddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddhiiiihdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddniiikdddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddhiiiddddddddddjiijddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddiiindddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddkiiiddddddddddmiioddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddgjiiiihdddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddjiijdddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffyzzzzzzzzzzffzzyffffffzzAffzzzzzzzzzzyfffffyBCCGAfffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIKMMMKIIIIJKJIIIIIIIIJKJIIIILPMMRJIIIIILKJIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddiiihdddddddddiiihddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddgliiilgddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddkhddddddddddjiijdddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDDDDDDDDDDffBDEyffffzDDyffDDDDDDDDDDzffffGDDDDDDCffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIKQNNNNNQLIILNNJIIIIIIJNNLIIIRNNNNNNMIIIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddiiihdddddddddiiihddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddgliiijgdddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddhiiikdddddddddmiijdddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDFzzzzzzzzfffCDCfffyEDBfffDDzzzzzzzzyfffCDFzffAEDCfffffffffccc#..................................................................................................#HHHIIIIIIIIIIIKNQPLILMNQLIIPNQLIIIILQNPIIIMNOKIIJQNMIIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddjiijddddddddhiiidddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddgliiijdddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiioddddddddkiiihdddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDCfffffffffffyEDzffCDCffffDDfffffffffffBDFfffffyEDAffffffffccc#..................................................................................................#HHHIIIIIIIIIILNNLIIIIIMNRIIIMNMIIIIMNOIIIPNOIIIIILQNJIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddniiiddddddddjiimdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddliiihddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddmiiigdddddddmiilddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDCffffffffffffzDEyBDEyffffDDfffffffffffFDAffffffGFBffffffffccc#..................................................................................................#HHHIIIIIIIIIIPNRIIIIIIJQMIIILQNKIIKNQLIIIONJIIIIIIROPIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddgiiijddddddhiiindddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddoiiihdddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkiiilkddddkmiiinddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDCfffffffffffffCDCDDzfffffDDffffffffffyDDffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIONKIIIIIIIIIIIIIKNQLLQNKIIILNNIIIIIIIIIIIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddoiiijddddhiiilddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddgiiijhhhhhhhhhhhhgdddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddoiiiiljjmiiiijdddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDFzzzzzzzyfffffyEDDCffffffDDzzzzzzzAffzDCffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIINNIIIIIIIIIIIIIIIMNMMNMIIIIKNMIIIIIIIIIIIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddgliiiijjliiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddoiiiiiiiiiiiiiiiihdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddoiiiiiiiiiioddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDDDDDDDDDzffffffBDDAffffffDDDDDDDDDCffzDCffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIINNIIIIIIIIIIIIIIILQNNQLIIIIKNMIIIIIIIIIIIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddgliiiiiiiiihdddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddliiiiiiiiiiiiiiiihdddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddkmiiiiiijkdddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDFzzzzzzzyfffffADDDFffffffDDzzzzzzzAffzDCffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIINNIIIIIIIIIIIIIIIIKNNKIIIIIKNMIIIIIIIIIIIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddgoiiiiiimkddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddiiiiiiiiiiiiiiiiihdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddhhhhddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDCfffffffffffffEDGEDGfffffDDffffffffffADFffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIQNLIIIIIIIIIIIIIIIINNIIIIIIJNOIIIIIIIIIIIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddddddkhhhdddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDCffffffffffffGDEfyDDAffffDDfffffffffffDDfffffffyECffffffffccc#..................................................................................................#HHHIIIIIIIIIIMNKIIIIIIIOMJIIIIIINNIIIIIIINNIIIIIIILQMIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDCfffffffffffADDAffBDEffffDDfffffffffffCDBffffffGDCffffffffccc#..................................................................................................#HHHIIIIIIIIIIKNOIIIIIIJNNIIIIIIINNIIIIIIIMNPIIIIIIRNMIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDCffffffffffyEDBffffFDGfffDDfffffffffffADDAffffzDDAffffffffccc#..................................................................................................#HHHIIIIIIIIIIIQNRIIIILQNRIIIIIIINNIIIIIIIJNNJIIIIKNNJIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDECCCCCCCCAfCDFfffffyDDzffDDCCCCCCCCBfffzDDCzzGDDGfffffffffccc#..................................................................................................#HHHIIIIIIIIIIILQNOPKPQNQIIIIIIIINNIIIIIIIIKNNMKKRNNRIIIKNQMMMMMMJIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDDDDDDDDDDzzDDyffffffzDEyfDDDDDDDDDDCffffzEDDDDEzffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIILONNNNNRIIIIIIIIINNIIIIIIIIIKQNNNNQKIIIIKNNNNNNNNKIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffAzzAffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIILKKKIIIIIIIIIIIIIIIIIIIIIIIIJKKJIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddgkddddddhhhhhhhkdddghdhhhhhhgdddghddddddddddddddddddddddddddaaa##aaaddddkhhhhhgddddddkojjhddddddghdhhhhhhgddddddhjjjkdddddddddddddddddddaaa##aaaddddkhhhhhgdddddhhhhhhhhddddghdhhgdddddhhgddhhhhhhhhddddddddddddddddaaa##aaadddddkkddddddhgddhgdddddddddhgkhhhhhhhddhgddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddmigdddddiiiiiiijdddomdiiiiiiioddhiddddddddddddddddddddddddddaaa##aaaddddjiiiiiioddddjimjjilgddddomdiiiiiiiodddgmimjmimgdddddddddddddddddaaa##aaaddddjiiiiiimgdddiiiiiiiiddddomdiioddddkiihddiiiiiiiiddddddddddddddddaaa##aaadddddjjddddddihddihddddddddkigjiiiiiiiddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddgijndddddihdddddddddlodihddddnikdhiddddddddddddddddddddddddddaaa##aaaddddjjddddninddolkdddglmddddlodihddddnikddllgdddklmdddddddddddddddddaaa##aaaddddjjddddklldddihddddddddddlodilmddddnlihddihddddddddddddddddddddddaaa##aaadddddjjddddddihddihddddddddoldjjddddddddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddookldddddihddddddddgikdihdddddmjdhiddddddddddddddddddddddddddaaa##aaaddddjjdddddjjdgihdddddkikddgikdihdddddmjdnigdddddginddddddddddddddddaaa##aaaddddjjdddddginddihdddddddddgikdioigdddmoihddihddddddddddddddddddddddaaa##aaadddddjjddddddihddihddddddddmodjjddddddddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddlkdlkddddihddddddddniddihdddddjjdhiddddddddddddddddddddddddddaaa##aaaddddjjdddddmodnidddddddddddniddihdddddjjdmjdddddddjjddddddddddddddddaaa##aaaddddjjddddddomddihdddddddddniddihinddgihihddihddddddddddddddddddddddaaa##aaadddddjjddddddihddihdddddddgihdjjddddddddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddhlddojddddiohhhhkdddjjddihddddgindhiddddddddddddddddddddddddddaaa##aaaddddjmhhhhmigdjjdddddddddddjjddihddddgindihdddddddhiddddddddddddddddaaa##aaaddddjjddddddhiddiohhhhhkdddjjddihjjddhidihddiohhhhhkddddddddddddddddaaa##aaadddddjljjjjjjihddihdddddddhiddjmhhhhhdddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddmoddgigdddiiiiiijdddihddimjjjjilddhiddddddddddddddddddddddddddaaa##aaaddddjiiiiiijddjjdddddddddddihddimjjjjilddihdddddddhiddddddddddddddddaaa##aaaddddjjddddddhiddiiiiiiijdddihddihhiddjjdihddiiiiiiijddddddddddddddddaaa##aaadddddjljjjjjjihddihdddddddjjddjiiiiiidddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddgimjjjindddihdddddddhigddimjjjjhdddhiddddddddddddddddddddddddddaaa##aaaddddjjddddklodjjddddddddddhigddimjjjjhdddihdddddddhiddddddddddddddddaaa##aaaddddjjddddddhiddihddddddddhigddihgihdindihddihddddddddddddddddddddddaaa##aaadddddjjddddddihddihdddddddinddjjddddddddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddoljjjjmldddihdddddddomdddihddddddddhiddddddddddddddddddddddddddaaa##aaaddddjjdddddhidhidddddddnkdomdddihddddddddmodddddddjmddddddddddddddddaaa##aaaddddjjddddddjmddihddddddddomdddihdmohigdihddihddddddddddddddddddddddaaa##aaadddddjjddddddihddihddddddkigddjjddddddddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddlnddddgikddihdddddddlodddihddddddddhiddddddddddddddddddddddddddaaa##aaaddddjjdddddnidgindddddgindlodddihddddddddnigdddddginddddddddddddddddaaa##aaaddddjjdddddginddihddddddddlodddihdololddihddihddddddddddddddddddddddaaa##aaadddddjjddddddihddihddddddoldddjjddddddddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddhiddddddjjddihddddddgikdddihddddddddhiddddddddddddddddddddddddddaaa##aaaddddjjddddkloddolkdddglldgikdddihdddddddddllgdddglldddddddddddddddddaaa##aaaddddjjddddhlldddihdddddddgikdddihdkiloddihddihddddddddddddddddddddddaaa##aaadddddjjddddddihddihddddddmodddjjddddddddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddmjddddddhigdihddddddniddddihddddddddhiddddddddddddddddddddddddddaaa##aaaddddjiiiiiimgdddjimjjilgdniddddihdddddddddgmimjmimgdddddddddddddddddaaa##aaaddddjiiiiiimgdddiiiiiiiihniddddihddiihddihddiiiiiiiihdddddddddddddddaaa##aaadddddjjddddddihddiiiiiiigihdddjjddddddddiiiiiiidddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddhgdddddddhgdhgddddddkkddddhgddddddddghddddddddddddddddddddddddddaaa##aaaddddkhhhhhgddddddkojjndddkkddddhgdddddddddddhjjjhdddddddddddddddddddaaa##aaaddddkhhhhhgdddddhhhhhhhhgkkddddhgddkhdddhgddhhhhhhhhgdddddddddddddddaaa##aaadddddkkddddddhgddhhhhhhhghddddkkddddddddhhhhhhhdddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#..................................................................................................#ccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcccc#..................................................................................................#HHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHH#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#..................................................................................................#cccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccccc#..................................................................................................#HHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHHH#..............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..................................................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#..................................................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#..............", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....................................................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#....................................................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#...............", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#......................................................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#......................................................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#................", ".................######################################################################......######################################################################......######################################################################......######################################################################........................................................................................................######################################################################........................................................................................................######################################################################.................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................STTTS....USU........USU....VWTTXU.." }; KCemu-0.5.1/src/ui/gtk/a5105_keyboard_pressed.png0000644001050700006200000001332111131675406021050 0ustar glaubitzfbedvPNG  IHDRsRGBIDATx_pSlYL-#XE^ e=h\lEt7Igg?xAEYd$kٻnCֽp$S; K-IKtϰ,",mw{7݆av% ,<~&-et:gx ,",=w7 l>4ZxxI-<=: 6erh$|sv3$,"K}(ơ琗͞Z$,*ϐ,",*7Q%q",r\,OCʇԉ"xuuƒvMd_Z ]L'U>ݟHxY@CCc "I72-6Q8p,mǏ?>8Mx">_}龁L±ӣo|>_ 0ϋH`_zV9k9rͷXBgP0 {`ɲ,/@ p P8((@G0$,"qsM? - G&vFCuEYdAơī>rh$3l(d˜;4^ H&ϐ,",YaXzp;vTMRCy,*"HUFD!:G^_VydEYd)_=أ߲TgΒF,V0P]FٛfWUs*g,",0. ]ܻ_Pf#^|0o?͑Ek G2{a{? 3ݿOW`n iqhU5,*o-ճ',",8 GI?dĢtEYdEc0"3 6Yxop|˚,"]OXzQʼnsss惩>]revvL6;2G^NO_ebǏ$Nes*6ĻEdWxp/X+"C?\6fpo}94L"7070("=O=YxKBD~R±X֮͛kѱeS'OOO#Sx<⩪E] hmRa|#>_ņ[03:[*~_3kayxR89hAti@ p s GztX?.",ٰpdrYk'4k*U,",`6LcG$u?#h$\EdjǥW"_","ky#鋏=-v(/W¡l\dEYd-:?xRnʢpp3 O}sOTjCd3gF,8 `d;a|+]w~f$vmU0c=;v1ŌdEVfUwEچflCCF:RgdEY"/('S;1 ,<~yTY8J7ŌT嬒EYdieF)gd2Ɍ#R)pK%LM\6 Rk#U9dEYzf32cž4jlԷԏkI#U9dEY:gcr^iߥb\m^ӸCY%,9J:q_D<nc{_Wxn47{į>ugsᘞO$W9}?ܳ惁@@Dfgg ϿvZ~z*tߜ9SW[UqwF,-?z@T67H[lC[DV|g}GDzŇc%±(ӣo|>_ 0ϋH`Κ hpXX{+dN^OeէsTL/;310MdAdaapһ \d̼Q0?g(y*TVV@ᰌMgͪVOO#TjVE\NMӆGZ,wTP8((@ḽ4rV",tr妽Ҟ‘ey(6|\KY%,9J~H: grPy4gph$mW(Ѹ9RJYds H&10풞cG$u?Ţ"KH25dRv+/u}Yqu*g,"KRljTgNWXKX̵0PZ GIu瑪U",Jmpӌѻp(‘Lhhh Ddvvv܅ (ebǏ$Nes*6ĻEdW$'^]|ɰ~8B'q1=[o9{ }\3SS?Ͽ#Jd>?6>k|^D:;:lP0Xx>W_?zG}<773gXE(wamoypeϊHmM͂,~?gS)P8,>~%q`,[!jP5\5↑) (7Fe yɆo3F,ٟ(۪‘# (7nYj\mCҚKL&79T(^PA|{CHݑ,s5Vv{C -KMp/IՒcGCL.Rʑ:= (7nYj\; }.]M>_bo|ICi?*G,ܸgY۫/.[ {gD:qʳsu״ O^{SS'Nmlo ڍf7 jku\Мͅczf?j\h|DbsϚ-<~~?hin7nP8ňŶGH&U^imww 緬i/Z,!E}㭷Ϝ=|^DE' oHMu˿~7O?5kXE(w7Ϗkmڼ,[6uH(,<͎o)P8hz S&j?,!駟ZZ%q`,ASx͚vu>?U魬X9)@p pP8(@@prHk~@'Y@qr9_4K`OΈy(ZQ9RGg3gY۫/.[$0ɤ p& ,\srF҅8THM.srϲ>Wc\ݴcG$%S;EĈEE$ [aNn25$"/0b1[THo\,kr5v5KpHϮf44k?dlVe#,ܸgY;.X#J=x\1 cmsjF :j\|@i(vj .. ~p P8(@ p P8((@ pP8P8((@p p09QIENDB`KCemu-0.5.1/src/ui/gtk/kcemu-remote.c0000644001050700006200000000552411345001576016747 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include void send(Display *disp, const unsigned char *cmd, int len) { Atom atom, type_ret; int a, format_ret; unsigned char *prop_ret; unsigned int nchildren_ret; unsigned long nitems_ret, bytes_after_ret; Window w, root, root_ret, parent_ret, *children_ret; atom = XInternAtom(disp, "_KCEMU_REMOTE_COMMAND", False); root = DefaultRootWindow(disp); if (!XQueryTree(disp, root, &root_ret, &parent_ret, &children_ret, &nchildren_ret)) return; for (a = 0;a < nchildren_ret;a++) { w = XmuClientWindow(disp, children_ret[a]); XGetWindowProperty(disp, w, atom, 0, (65536 / sizeof(long)), False, XA_STRING, &type_ret, &format_ret, &nitems_ret, &bytes_after_ret, &prop_ret); if (type_ret == None) continue; printf("property found! on window %x -> %s\n", (unsigned int)w, prop_ret); XChangeProperty(disp, w, atom, XA_STRING, 8, PropModeReplace, cmd, len); } } const unsigned char * pack_args(int argc, char **argv, int *len_ret) { int a, len; char *ptr; unsigned char *args; printf("argc = %d\n", argc); len = 0; for (a = 1;a < argc;a++) { printf("argv[%d] = %s\n", a, argv[a]); len += strlen(argv[a]) + 1; } if (!(args = (unsigned char *)malloc(len))) return 0; ptr = (char *)args; for (a = 1;a < argc;a++) { strcpy(ptr, argv[a]); ptr += strlen(argv[a]) + 1; } *len_ret = len; return args; } int main(int argc, char **argv) { Display *disp; int len; const unsigned char *args; if (argc < 2) return 1; disp = XOpenDisplay(""); if (disp == 0) { printf("can't open display\n"); exit(1); } args = pack_args(argc, argv, &len); if (!args) return 1; send(disp, args, len); return 0; } KCemu-0.5.1/src/ui/gtk/ui_gtk1.cc0000644001050700006200000000271311345001576016055 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "ui/generic/ui_1.h" #include "ui/gtk/ui_gtk1.h" UI_Gtk1::UI_Gtk1(void) : UI_Gtk_Base(new UI_1()) { _colors.push_back(UI_Color(false, 0x00, 0x00, 0x00)); _colors.push_back(UI_Color(false, 0xd0, 0x00, 0x00)); _colors.push_back(UI_Color(false, 0x00, 0xd0, 0x00)); _colors.push_back(UI_Color(false, 0xd0, 0xd0, 0x00)); _colors.push_back(UI_Color(false, 0x00, 0x00, 0xd0)); _colors.push_back(UI_Color(false, 0xd0, 0x00, 0xd0)); _colors.push_back(UI_Color(false, 0x00, 0xd0, 0xd0)); _colors.push_back(UI_Color(false, 0xd0, 0xd0, 0xd0)); } UI_Gtk1::~UI_Gtk1(void) { } KCemu-0.5.1/src/ui/gtk/vcs80_keyboard_pressed.xpm0000644001050700006200000134541010551016651021304 0ustar glaubitzfbedv/* XPM */ static char * vcs80_keyboard_pressed_xpm[] = { "544 340 519 2", " c None", ". c #373636", "+ c #000000", "@ c #640E00", "# c #63635C", "$ c #934012", "% c #8E877D", "& c #873F18", "* c #6D3C24", "= c #59392B", "- c #4A3830", "; c #3F3734", "> c #393636", ", c #3A3636", "' c #413733", ") c #483831", "! c #59392C", "~ c #833F1A", "{ c #793D1E", "] c #4F392F", "^ c #4A3930", "/ c #703C23", "( c #914013", "_ c #3C3735", ": c #443833", "< c #4D3930", "[ c #683C25", "} c #7B3D1D", "| c #8F3F14", "1 c #8A3F16", "2 c #53392D", "3 c #463832", "4 c #7A3D1E", "5 c #57392C", "6 c #7A3D1D", "7 c #924012", "8 c #777168", "9 c #484540", "0 c #282523", "a c #11100F", "b c #040404", "c c #0B0909", "d c #181615", "e c #2C2927", "f c #44413C", "g c #605B55", "h c #7E7870", "i c #0D0D0C", "j c #1D1B19", "k c #393633", "l c #635E58", "m c #8B847A", "n c #493831", "o c #653B27", "p c #7C3E1D", "q c #8E3F15", "r c #924013", "s c #8D3F15", "t c #813E1B", "u c #56392C", "v c #4B3930", "w c #803E1B", "x c #888178", "y c #3E3B37", "z c #22201E", "A c #7B756D", "B c #843F1A", "C c #3D3734", "D c #773D1F", "E c #8B3F16", "F c #8C3F15", "G c #7F3E1C", "H c #5A3A2B", "I c #3E3734", "J c #6B3C24", "K c #8C857B", "L c #2D2B28", "M c #1A1917", "N c #878077", "O c #51392E", "P c #8E3F14", "Q c #703C22", "R c #673B26", "S c #5C5751", "T c #302D2A", "U c #68635C", "V c #817B72", "W c #8B847B", "X c #847E75", "Y c #767068", "Z c #625C56", "` c #46423E", " . c #1D1C1A", ".. c #746E66", "+. c #3F3C37", "@. c #55514A", "#. c #5C3A2A", "$. c #904013", "%. c #613B28", "&. c #292824", "*. c #44403C", "=. c #8D867D", "-. c #2A2825", ";. c #383636", ">. c #403733", ",. c #0C0B09", "'. c #080707", "). c #8A837A", "!. c #8C847B", "~. c #050505", "{. c #8A3F17", "]. c #723C22", "^. c #1E1D1B", "/. c #7E786F", "(. c #151413", "_. c #4A4741", ":. c #080808", "<. c #4D4844", "[. c #7A746C", "}. c #47443F", "|. c #623B28", "1. c #847D74", "2. c #171614", "3. c #121110", "4. c #33312D", "5. c #4E4A45", "6. c #6A655E", "7. c #878178", "8. c #898178", "9. c #746F67", "0. c #3F3C38", "a. c #706A63", "b. c #7E776F", "c. c #2B2826", "d. c #423F3A", "e. c #807A72", "f. c #534F49", "g. c #453832", "h. c #863F18", "i. c #6D6861", "j. c #151412", "k. c #0E0D0C", "l. c #6E6862", "m. c #24221F", "n. c #6F6A62", "o. c #272523", "p. c #040202", "q. c #54504A", "r. c #726D65", "s. c #181715", "t. c #46433E", "u. c #78736B", "v. c #4F4C46", "w. c #0F0E0D", "x. c #837D74", "y. c #8C3F16", "z. c #3B3635", "A. c #242320", "B. c #46443F", "C. c #807971", "D. c #6C6760", "E. c #403C39", "F. c #2D2C28", "G. c #6F3C23", "H. c #58392C", "I. c #1B1A18", "J. c #413E39", "K. c #716C64", "L. c #8D867C", "M. c #7F7971", "N. c #645F59", "O. c #57534D", "P. c #736D65", "Q. c #5B3A2A", "R. c #6A3C24", "S. c #262422", "T. c #363330", "U. c #3A3733", "V. c #3B3834", "W. c #867F76", "X. c #78726A", "Y. c #020202", "Z. c #713C22", "`. c #433733", " + c #807A71", ".+ c #635F58", "++ c #4A4641", "@+ c #32302C", "#+ c #1D1D1B", "$+ c #090908", "%+ c #2E2C28", "&+ c #777169", "*+ c #3E3A36", "=+ c #823E1A", "-+ c #693C25", ";+ c #883F17", ">+ c #783D1F", ",+ c #3D3735", "'+ c #663B26", ")+ c #7D3E1D", "!+ c #893F17", "~+ c #6C3C24", "{+ c #52392E", "]+ c #4C3930", "^+ c #783D1E", "/+ c #4E392F", "(+ c #493830", "_+ c #50392F", ":+ c #633B28", "<+ c #55392D", "[+ c #423733", "}+ c #615C56", "|+ c #605C55", "1+ c #5E3A29", "2+ c #55392C", "3+ c #5F3A29", "4+ c #603A28", "5+ c #5F3A28", "6+ c #6A3C25", "7+ c #6E3C23", "8+ c #863F19", "9+ c #743C21", "0+ c #423F3B", "a+ c #43403B", "b+ c #723C21", "c+ c #753D20", "d+ c #34322F", "e+ c #55514C", "f+ c #55514B", "g+ c #35332F", "h+ c #898279", "i+ c #473831", "j+ c #211F1D", "k+ c #656059", "l+ c #625D57", "m+ c #23211E", "n+ c #625E57", "o+ c #89837A", "p+ c #2F2C29", "q+ c #58544E", "r+ c #7E3E1C", "s+ c #843F19", "t+ c #494641", "u+ c #633B27", "v+ c #6F6A63", "w+ c #514D47", "x+ c #373531", "y+ c #373430", "z+ c #514D48", "A+ c #753C20", "B+ c #6C675F", "C+ c #69645D", "D+ c #1B1917", "E+ c #904014", "F+ c #4D4944", "G+ c #3D3A36", "H+ c #4D4A44", "I+ c #6F6962", "J+ c #131211", "K+ c #7E3E1D", "L+ c #803E1C", "M+ c #262421", "N+ c #79736B", "O+ c #59544F", "P+ c #302E2B", "Q+ c #59554F", "R+ c #5E5A53", "S+ c #5F5A54", "T+ c #763D1F", "U+ c #853F19", "V+ c #837C74", "W+ c #2B2926", "X+ c #34312E", "Y+ c #7C766D", "Z+ c #643B27", "`+ c #0C0C0B", " @ c #161514", ".@ c #403D39", "+@ c #6B665F", "@@ c #4F4B46", "#@ c #857E75", "$@ c #070705", "%@ c #7D776E", "&@ c #5A5650", "*@ c #5B5751", "=@ c #5E5953", "-@ c #50392E", ";@ c #5D3A29", ">@ c #763D20", ",@ c #653B26", "'@ c #827C73", ")@ c #141312", "!@ c #817A72", "~@ c #6B655E", "{@ c #33302D", "]@ c #5C5852", "^@ c #524E48", "/@ c #504C47", "(@ c #4F4A46", "_@ c #67625C", ":@ c #868077", "<@ c #3C3934", "[@ c #66615A", "}@ c #282724", "|@ c #67625B", "1@ c #201E1D", "2@ c #174D1B", "3@ c #088F07", "4@ c #021E02", "5@ c #077305", "6@ c #044304", "7@ c #044404", "8@ c #088A07", "9@ c #000D00", "0@ c #056204", "a@ c #022302", "b@ c #056305", "c@ c #022F02", "d@ c #055904", "e@ c #055804", "f@ c #023002", "g@ c #077E05", "h@ c #000200", "i@ c #000500", "j@ c #088407", "k@ c #000400", "l@ c #077F05", "m@ c #045104", "n@ c #043802", "o@ c #023702", "p@ c #733C21", "q@ c #088D07", "r@ c #021A00", "s@ c #056905", "t@ c #021B00", "u@ c #076F05", "v@ c #001300", "w@ c #088C07", "x@ c #043F02", "y@ c #044A04", "z@ c #088807", "A@ c #000B00", "B@ c #077A05", "C@ c #077905", "D@ c #055F04", "E@ c #022802", "F@ c #022702", "G@ c #022B02", "H@ c #055C04", "I@ c #022C02", "J@ c #077C05", "K@ c #077D05", "L@ c #044D04", "M@ c #044E04", "N@ c #001600", "O@ c #001700", "P@ c #54392D", "Q@ c #076C05", "R@ c #021900", "S@ c #021800", "T@ c #043A02", "U@ c #044F04", "V@ c #043B02", "W@ c #088607", "X@ c #000700", "Y@ c #000800", "Z@ c #055B04", "`@ c #022D02", " # c #022602", ".# c #056004", "+# c #055E04", "@# c #078307", "## c #088707", "$# c #000C00", "%# c #023102", "&# c #056B05", "*# c #077505", "=# c #023302", "-# c #056104", ";# c #001400", "># c #078005", ",# c #056405", "'# c #023602", ")# c #078207", "!# c #001500", "~# c #045304", "{# c #088907", "]# c #001200", "^# c #056A05", "/# c #043E02", "(# c #055A04", "_# c #000900", ":# c #076D05", "<# c #078007", "[# c #000F00", "}# c #055D04", "|# c #022902", "1# c #077605", "2# c #088B07", "3# c #044804", "4# c #077205", "5# c #056805", "6# c #022002", "7# c #056705", "8# c #055404", "9# c #056505", "0# c #088E07", "a# c #021C00", "b# c #055604", "c# c #023202", "d# c #620007", "e# c #8A0705", "f# c #840705", "g# c #5E0404", "h# c #3B0202", "i# c #1F0200", "j# c #0D0000", "k# c #020000", "l# c #090000", "m# c #1A0000", "n# c #310202", "o# c #500402", "p# c #740504", "q# c #800705", "r# c #550404", "s# c #160000", "t# c #070000", "u# c #3C3936", "v# c #890705", "w# c #570404", "x# c #0F0000", "y# c #280202", "z# c #6A0504", "A# c #500404", "B# c #860705", "C# c #330202", "D# c #320202", "E# c #350202", "F# c #1B0200", "G# c #520404", "H# c #710504", "I# c #810705", "J# c #870705", "K# c #7E0705", "L# c #6D0504", "M# c #530404", "N# c #370202", "O# c #200200", "P# c #5B0404", "Q# c #7A0505", "R# c #5C0404", "S# c #210200", "T# c #380202", "U# c #393632", "V# c #5A0404", "W# c #4A0402", "X# c #470402", "Y# c #5F0404", "Z# c #150000", "`# c #450402", " $ c #180000", ".$ c #3C0202", "+$ c #880705", "@$ c #650504", "#$ c #670504", "$$ c #830705", "%$ c #0E0000", "&$ c #410402", "*$ c #4E0402", "=$ c #430402", "-$ c #480402", ";$ c #440402", ">$ c #7D776F", ",$ c #250202", "'$ c #6C0504", ")$ c #260202", "!$ c #680504", "~$ c #270202", "{$ c #110000", "]$ c #7F0705", "^$ c #130000", "/$ c #726C65", "($ c #040000", "_$ c #050000", ":$ c #100000", "<$ c #120000", "[$ c #3C3935", "}$ c #6E0504", "|$ c #690504", "1$ c #420402", "2$ c #4D0402", "3$ c #660504", "4$ c #3E0202", "5$ c #3D0202", "6$ c #600504", "7$ c #6F0504", "8$ c #820705", "9$ c #2C0202", "0$ c #360202", "a$ c #220200", "b$ c #220202", "c$ c #0C0000", "d$ c #850705", "e$ c #300202", "f$ c #3A0202", "g$ c #7B0505", "h$ c #4F0402", "i$ c #743C20", "j$ c #640504", "k$ c #400402", "l$ c #240202", "m$ c #780505", "n$ c #230202", "o$ c #720504", "p$ c #7C0705", "q$ c #590404", "r$ c #080000", "s$ c #730504", "t$ c #170000", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # # + + # # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # + + # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ & * = - ; > , ' ) ! * ~ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ { ] . . . . . . . . . . . . ^ / ( $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . > _ : < = [ } | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1 2 . . . . . . . . . . . . . . . . 3 4 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . , 5 6 7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % 8 9 0 a b c d e f g h % % % + + + + + + + + + + + + + + + + + + + % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % + + + + + + + + + + + + + + + + + + + % % + + + + + + + i j k l m % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ~ ' . . . . n o p & q r s t / u > . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . v w $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % x y + + + + + + + + + + + % % % + + + + + + + + + + + + + + + + + + + % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % + + + + + + + + + + + + + + + + + + + % % + + + + + + + + + + + z A % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ B C . . . 3 D $ $ $ $ $ $ $ $ $ $ E o , . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ r F & G * H I . . . . > J $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % K L + + + + + + + + + + + + % % % + + + + + + + + + + + + + + + + + + + % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % + + + + + + + + + + + + + + + + + + + % % + + + + + + + + + + + + M N % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s : . . . O P $ $ $ $ $ $ $ $ $ $ $ $ $ & ] . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ | Q : . . . . R $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % S + + + T U V W W X Y Z ` .% % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % % x ..+.+ + + @.% % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ #.. . . ] $.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r %.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ s 5 . . . . D $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % &.+ + *.=.% % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % % % % % 9 + + -.% % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ~ ;.. . _ & $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ 7 5 . . . >.q $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % ,.+ + V % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % % % % % h + + a % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ H . . . R $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ P 3 . . . [ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % '.+ + ).% % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % % % % % !.+ + ~.% % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | , . . > {.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ].. . . ' 7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % ^.+ + l % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % % % % % /.+ + (.% % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ D . . . 2 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $.' . . . G $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % _.+ + :.<.[.% % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % % % % % }.+ + k % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ |.. . . [ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ #.. . . [ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % 1.2.+ + + + 3.4.5.6.7.% % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % % 8.9.0.+ + + a.% % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O . . . 6 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ / . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % b.c.+ + + + + + + c d.e.% % % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + + + + + + + + + + f.% % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ g.. . . h.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ t . . . - $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % i.0.j.+ + + + + + k.l.% % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + + + + + + + + m.n.% % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _ . . . E $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ & . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % /.U 5.o.+ + + i h % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + + + + + + + + p.q.% % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ > . . . $.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s . . . , $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % r.s.+ + t.% % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % m u.f + + + Z % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ > . . . $.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r . . . ;.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % i.+ + .% % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % % % % v.+ + w.x.% % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _ . . . y.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s . . . z.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % m + + '.% % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % % % % K A.+ + B.% % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ g.. . . h.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ & . . . >.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % C.+ + ,.% % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % % % % % D.+ + '.e.% % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ O . . . 6 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ t . . . - $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % =.E.+ + 0 % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % % % % % % F.+ + d.% % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ |.. . . [ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ G.. . . H.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % I.J.S K.h 8.L.m M.N.c.+ + + O.% % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % % % % % % P.+ + b A % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ D . . . 2 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Q.. . . R.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % + + + + + + + + + + + + + S.).% % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % % % % % % % T.+ + U.% % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | , . . > 1 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $.>.. . . w $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % + + + + + + + + + + + + V.W.% % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % % % % % % % X.Y.+ + Y % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ H . . . R $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Z.. . . `.7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % +.+++@+#+k.b $+(.%+<.&+% % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % + + + % % % % % % % % % % *++ + @+% % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ =+;.. . _ & $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ P g.. . . -+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Q.. . . ] $.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r %.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 5 . . . ' | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s `.. . . O | $ $ $ $ $ $ $ $ $ $ $ $ $ ;+] . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ s 5 . . . . >+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ~ ,+. . . 3 D $ $ $ $ $ $ $ $ $ $ F '+z.. . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ | Z.: . . . . [ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ t >.. . . . n o )+& | $.!+t * 2 > . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ r F & G * H I . . . . > ~+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ {.{+. . . . . . . . . . . . . . . . 3 4 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . ]+t $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ^+/+. . . . . . . . . . . . ^ / ( $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . , 5 } $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ h.* ! (+; > > ' ) H.~+~ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . > _ : < = [ p | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # + + # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # # + + # # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # # + + # # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # + + # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ P / = 3 ; > ; 3 = / P $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | Z.H.3 ,+> >._+[ !+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 7 R._ . . . . . . . . . _ R.7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ G.>.. . . . . . . . > :+$.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ o . . . . :+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . , >.- #.].q $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ( <+. . . . . . . . . . . . . <+( $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ( #.. . . . . . . . . . . . < q $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r [+. . . . ' r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . , o | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + + + }+% % % % % % % % |++ + + + + % % % % % % % % % % % ^.+ + ^.% % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + + + + + i j k l m % % % % % % % % % + + + + + + + + + + + + + + % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1+. . . . 2+6 F ( y.4 2 . . . . 3+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 3+. . . > 4+t | | t 5+;.. . . {+7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . . . . { $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . - F $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + + + T % % % % % % % % T + + + + + % % % % % % % % % % r.+ + + + P.% % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + + + + + + + + + z A % % % % % % % % + + + + + + + + + + + + + + % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ =+;.. . . ~+$ $ $ $ $ $ $ 6+. . . ;.~ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ >+. . . , p $ $ $ $ $ $ } , . . . 7+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ = . . . . . . H.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ 7 | 8+9+2 . . . . ] 7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + b + Y.e.% % % % % % +Y.+ b + + + % % % % % % % % % % 0++ + + + a+% % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + + + + + + + + + + M N % % % % % % % + + + + + + + + + + + + + + % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ %.. . . 2+$ $ $ $ $ $ $ $ $ 2 . . . |.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 7 ) . . . Q $ $ $ $ $ $ $ $ G.. . . >.| $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s , . . . . . . > s $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ b+;.. . . c+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + d++ + e+% % % % % % f++ + g++ + + % % % % % % % % % h+i + + + + i h+% % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % % x ..+.+ + + @.% % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . 6 $ $ $ $ $ $ $ $ $ 4 . . . ) $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ } . . . i+7 $ $ $ $ $ $ $ $ 7 3 . . . ~+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ G.. . . 3 3 . . . 7+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ 4+. . . u $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + N.+ + z % % % % % % j++ + k++ + + % % % % % % % % % l++ + m+m++ + n+% % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % % % % % 9 + + -.% % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ C . . . F $ $ $ $ $ $ $ $ $ y.. . . I $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ :+. . . 6+$ $ $ $ $ $ $ $ $ $ [ . . . < $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ < . . . 6+-+. . . ]+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ t . . . `.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + o+i + + &+% % % % 8 + + i o++ + + % % % % % % % % % p++ + q+O.+ + T % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % % % % % h + + a % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ > . . . r $ $ $ $ $ $ $ $ $ ( . . . > $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ < . . . r+$ $ $ $ $ $ $ $ $ $ )+. . . ;.{.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s+. . . ;.!+!+;.. . . s+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ | . . . > $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % J.+ + ++% % % % t++ + J.% + + + % % % % % % % % /.Y.+ ~.1.x.b + Y.h % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % % % % % !.+ + ~.% % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ [+. . . F $ $ $ $ $ $ $ $ $ y.. . . `.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ [+. . . y.$ $ $ $ $ $ $ $ $ $ E . . . . 9+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ u+. . . 2 $ $ 2 . . . :+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ | . . . _ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % n.+ + j.K % % K j.+ + v+% + + + % % % % % % % % w++ + x+% % y++ + z+% % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % % % % % /.+ + (.% % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 5 . . . 6 $ $ $ $ $ $ $ $ $ 4 . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ z.. . . $.$ $ $ $ $ $ $ $ $ $ $.. . . . o $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r ' . . . A+$ $ A+. . . ' r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ =+. . . n $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % =.s.+ + D.% % B++ + s.=.% + + + % % % % % % % =.M + + C+% % U + + D+=.% % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % % % % % }.+ + k % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ D . . . 2+$ $ $ $ $ $ $ $ $ 2 . . . ^+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ , . . . ( $ $ $ $ $ $ $ $ $ $ $.. . . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 4 . . . C $.$ $ E+C . . . { $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ %.. . . %.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % % F++ + *+% % G++ + H+% % + + + % % % % % % % I++ + J+!.% % !.J++ + n.% % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % % 8.9.0.+ + + a.% % % % % % % + + + + + + + + + + + + + % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 7 ] . . . ~+$ $ $ $ $ $ $ 6+. . . O 7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ' . . . y.$ $ $ $ $ $ $ $ $ $ E . . . . n $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ H.. . . 1+$ $ $ $ 1+. . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ 9+> . . > s+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % % [.+ + c x 7.c + + [.% % + + + % % % % % % % y + + _.% % % % +++ + +.% % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + + + + + + + + + + f.% % % % % % % % + + + + + + + + + + + + + % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ E i+. . . 2+} F r F 6 2 . . . ) y.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ^ . . . r+$ $ $ $ $ $ $ $ $ $ K+. . . . : $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s > . . . L+$ $ $ $ G . . . > F $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ 7 | h.A+2 . . . . * $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % % % M++ + Z }++ + S.% % % + + + % % % % % % N c + + N+% % % % u.+ + c N % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + + + + + + + + m.n.% % % % % % % % % + + + + + + + + + + + + + % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | 4+> . . . . . . . . . > 4+| $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 4+. . . R.$ $ $ $ $ $ $ $ $ $ -+. . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 7+. . . i+$ $ $ $ $ $ 3 . . . 7+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . 3 D $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % % % O++ + P+T + + Q+% % % + + + % % % % % % R++ + 0 % % % % % % o.+ + S+% % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + + + + + + + + p.q.% % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $.Q ; . . . . . . . ; Q $.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ T+. . . ) 7 $ $ $ $ $ $ $ $ 7 i+. . . . > $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ]+. . . R.$ $ $ $ $ $ R.. . . v $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . 5 U+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % % % V+b + Y.Y.+ b x.% % % + + + % % % % % % c.+ + S % % % % % % S + + W+% % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % m u.f + + + Z % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 7 G.' . . . . . . . . . . . >.7+7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ( ' . . . Z.$ $ $ $ $ $ $ $ G.. . . . . , $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s+. . . ;.{.$ $ $ $ $ $ {.;.. . . B $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . ;.#.| $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % % % % 4.+ + + + X+% % % % + + + % % % % % A + + + + + + + + + + + + + + Y+% % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % % % % v.+ + w.x.% % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ( H.. . . C o G s r s r+Z+C . . . 5 ( $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ * . . . z.)+$ $ $ $ $ $ p , . . . . . ' $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ :+. . . 2 $ $ $ $ $ $ $ $ 2 . . . |.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ ( y.r+[ [+. . . v | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % % % % .++ + + + N.% % % % + + + % % % % % F++ + + + + + + + + + + + + + H+% % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % % % % K A.+ + B.% % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 5+. . . ]+{.$ $ $ $ $ $ $ !+^ . . . 1+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 7 {+. . . > %.t | | t 4+;.. . >.. . . i+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r ' . . . c+$ $ $ $ $ $ $ $ A+. . . >.r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ | 5 . . . = $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % % % % h+`++ + i o+% % % % + + + % % % % L. @+ + + + + + + + + + + + + + 2.L.% % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % % % % % D.+ + '.e.% % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ t . . . >.y.$ $ $ $ $ $ $ $ $ E >.. . . t $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s ] . . . . . . . . . . . ,+6 . . . ] $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ { . . . I $.$ $ $ $ $ $ $ $ $.C . . . ^+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ ( ) . . . t $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % % % % % .@+ + .@% % % % % + + + % % % % +@+ + s.L.% % % % % % % % L.d + + B+% % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % % % % % % F.+ + d.% % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ #.. . . J $ $ $ $ $ $ $ $ $ $ $ R.. . . #.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $.u+, . . . . . . . . ] 8+t . . . %.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 5 . . . 3+$ $ $ $ $ $ $ $ $ $ 3+. . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ Z.. . . 4+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % + + + % % % % U.+ + @@% % % % % % % % % % 5.+ + V.% % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % % % % % % P.+ + b A % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 3 . . . s+$ $ $ $ $ $ $ $ $ $ $ s+. . . 3 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ !+~+{+: z.,+) #.} 7 $ b+. . . 9+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ F > . . . . . . . . . . . . . . . . . . > F $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ & . . . (+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % + + + % % % #@$@+ + %@% % % % % % % % % % Y++ + '.W.% % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % % % % % % % T.+ + U.% % % % % + + + + + + + + + + + + + + % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ , . . . | $ $ $ $ $ $ $ $ $ $ $ | . . . z.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1+. . . & $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ * . . . . . . . . . . . . . . . . . . . . * $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ E+. . . ,+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % + + + % % % &@+ + L % % % % % % % % % % % % c.+ + *@% % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % % % % % % % X.Y.+ + Y % % % % + + + + + + + + + + + + + + % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ _ . . . E+$ $ $ $ $ $ $ $ $ $ $ | . . . _ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r `.. . < $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ^ . . . . . . . . . . . . . . . . . . . . ^ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ | . . . > $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % + + + % % % M++ + g % % % % % % % % % % % % =@+ + S.% % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % *++ + @+% % % % + + + + + + + + + + + + + + % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ : . . . 8+$ $ $ $ $ $ $ $ $ $ $ s+. . . g.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ^+. . . Z.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ~ . . . ;.{.$ $ $ $ $ $ $ $ $ $ $ $ {.;.. . . ~ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ & . . . [+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 2+. . . ~+$ $ $ $ $ $ $ $ $ $ $ R.. . . u $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ( n . . [+| $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ |.. . . 2 $ $ $ $ $ $ $ $ $ $ $ $ $ $ 2 . . . |.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ Z.. . . -@$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ / . . . ' F $ $ $ $ $ $ $ $ $ y.>.. . . Q $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ %.. . . D $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r >.. . . c+$ $ $ $ $ $ $ $ $ $ $ $ $ $ c+. . . >.r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $.i+. . . J $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | ' . . . < 1 $ $ $ $ $ $ $ !+v . . . ' | $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 2 =+$ $ $ $ $ $ $ $ P ;@. . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ^+. . . I $.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $.I . . . ^+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ | 5 . . . I y.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ >@;.. . . ; o L+s r s G Z+C . . . ;.T+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . /+* ~ s ( 1 r+o >.. . . ]+| $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 5 . . . 3+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 3+. . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ ( F r+[ [+. . . . ].$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 7+> . . . . . . . . . . . . . > 7+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . 2 P $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ y.> . . . w $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ w . . . > F $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . ;.~+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ w ]+. . . . . . . . . . . ]+w $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . >.G.7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ * . . . i+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ i+. . . * $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . ]+w $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ t '+2 : ,+> ,+: {+,@t $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ & Z.1+] [+, ;._ ) H A+$.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ - . . . R.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ R.. . . - $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . > I g.<+R ~ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % '@)@% % % % % % M.2.% '@)@% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % '@3.% % W M X.% % % i.I.!@% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % ~@d+% % % % % % U x+% ~@d+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % ~@{@% % % ]@*+% % A M [.% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % ^@/@% % % % % % v.f.% ^@v.% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % ^@(@% % % m D+h X j+a.% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % y+C+% % % % % % d++@% y+U % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % y+_@% % % % *@0+%+k+% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % 2.+ + + + + + + + V+% 2. +% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % 2.M.% % % % :@$@v.% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % '@)@% % % % % % e.2.% '@3.% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % '@3.% % % % 8.{@9 <@% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % ~@X+% % % % % % C+x+% ~@{@% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % ~@{@% % % N %+[@% M+A % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % ^@v.% % % % % % /@f.% ^@(@% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % ^@(@% % #@}@k+% % n+y % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % y+U % % % % % % d++@% y+|@% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % y+_@% V+A.l % % % !.M %@% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % 2.M.% % % % % % )@V+% 2.+ + + + + M % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % 2.M.e.1@l+% % % % % O.J.% % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # + + # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # # + + # # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@+ . . . . + 2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@+ . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@+ . . + 2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@+ . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@+ + 2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@2@2@+ + 2@2@2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@2@+ + 2@2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ( T+#.n ,+> z.[+] 3+].& $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ %.. . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 7 Z.' . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ K+;.. . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | <+. . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . ;.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@4@+ + 4@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@4@+ + 4@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | g.. . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | < . . . ; o )+{.( s ~ * < . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . <+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5@+ + + + 5@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@5@+ + + + 5@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 4+. . `.. . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ! . . . #.q $ $ $ $ $ $ $ $ =+2 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | _ . . . ^+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@6@+ + + + 7@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@6@+ + + + 7@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ )+;.. . } . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ >+. . . 4+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Z.. . . [+r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@8@9@+ + + + 9@8@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@8@9@+ + + + 9@8@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | : . . #.$ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | [+. . ) ( $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ]+. . . R $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@0@+ + a@a@+ + b@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@0@+ + a@a@+ + b@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 5+. . ' s $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Z.. . . ^+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ t . . . ;.!+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@c@+ + d@e@+ + f@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@c@+ + d@e@+ + f@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ p ;.. . >+$ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ < . . [+r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1+. . . 2+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@g@h@+ i@j@j@k@+ h@l@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@g@h@+ i@j@j@k@+ h@l@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | : . . = $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ & . . . 1+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | _ . . . { $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@m@+ + n@3@3@o@+ + m@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@m@+ + n@3@3@o@+ + m@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1+. . ; y.$ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ p@. . . b+$ 7 } #.) C _ : 2 ~+{.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Z.. . . `.r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@q@r@+ + s@3@3@s@+ + t@q@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@q@r@+ + s@3@3@s@+ + t@q@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ } . . . A+$ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ %.. . . t h.] . . . . . . . . z.o ( $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ]+. . . R $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@u@+ + v@w@3@3@w@v@+ + u@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@u@+ + v@w@3@3@w@v@+ + u@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ P : . . u $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . 3+]+I > ,+: O ,@K+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ] . . . } C . . . . . . . . . . . O P $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ t . . . > !+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@x@+ + y@3@3@3@3@y@+ + x@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@x@+ + y@3@3@3@3@y@+ + x@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1+. . I 1 $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . - >+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 3 . . . >.. . > 4+t | | t 4+> . . . 2+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1+. . . 2+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@z@A@+ + B@3@3@3@3@C@+ + A@z@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@z@A@+ + B@3@3@3@3@C@+ + A@z@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ } . . . ].$ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . ;@( $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ >.. . . . . , p $ $ $ $ $ $ )+z.. . . G.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | _ . . . { $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@D@+ + E@3@3@3@3@3@3@F@+ + D@3@3@3@3@3@3@3@+ + + + + + + + + + + + + + + + + + 3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@D@+ + E@3@3@3@3@3@3@F@+ + D@3@3@3@3@3@3@3@+ + + + + + + + + + + + + + + + + + 3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ q `.. . 2 $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . i+R } {.$.| !+{ %._ . . . . ! 7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ , . . . . . Z.$ $ $ $ $ $ $ $ Z.. . . `.r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Z.. . . `.r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@G@+ + H@3@3@3@3@3@3@H@+ + I@3@3@3@3@3@3@3@+ + + + + + + + + + + + + + + + + + 3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@G@+ + H@3@3@3@3@3@3@H@+ + I@3@3@3@3@3@3@3@+ + + + + + + + + + + + + + + + + + 3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ;@. . _ !+$ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ -@)+$ $ $ $ $ $ $ $ $ s ! . . . . R.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ > . . . . ) 7 $ $ $ $ $ $ $ $ 7 i+. . . D $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ v . . . [ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@J@+ + + + + + + + + + + + + + K@3@3@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@J@+ + + + + + + + + + + + + + K@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 6 . . . G.$ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1+. . . ,+y.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ I . . . . R.$ $ $ $ $ $ $ $ $ $ R.. . . %.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ t . . . > !+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@L@+ + + + + + + + + + + + + + M@3@3@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@L@+ + + + + + + + + + + + + + M@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ q [+. . _+7 $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ( 3 . . . G.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ `.. . . . r+$ $ $ $ $ $ $ $ $ $ r+. . . ]+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1+. . . u $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@q@N@+ + + + + + + + + + + + + + O@q@3@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@q@N@+ + + + + + + + + + + + + + O@q@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ #.. . z.& $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 7+. . . P@$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . . y.$ $ $ $ $ $ $ $ $ $ E . . . [+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | _ . . . 4 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@Q@+ + R@q@3@3@3@3@3@3@3@3@q@S@+ + Q@3@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@Q@+ + R@q@3@3@3@3@3@3@3@3@q@S@+ + Q@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . ~+$ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 8+. . . g.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 2+. . . . ( $ $ $ $ $ $ $ $ $ $ $.. . . , $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Z.. . . : 7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@T@+ + U@3@3@3@3@3@3@3@3@3@3@U@+ + V@3@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@T@+ + U@3@3@3@3@3@3@3@3@3@3@U@+ + V@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | . . . _ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ o . . . . $.$ $ $ $ $ $ $ $ $ $ $.. . . _ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ v . . . [ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@W@X@+ + K@3@3@3@3@3@3@3@3@3@3@K@+ + Y@W@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@W@X@+ + K@3@3@3@3@3@3@3@3@3@3@K@+ + Y@W@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | . . . _ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 9+. . . . y.$ $ $ $ $ $ $ $ $ $ E . . . `.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ t . . . > 1 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@Z@+ + `@3@3@3@3@3@3@3@3@3@3@3@3@G@+ + Z@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@Z@+ + `@3@3@3@3@3@3@3@3@3@3@3@3@G@+ + Z@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 8+. . . g.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ !+. . . . r+$ $ $ $ $ $ $ $ $ $ K+. . . /+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1+. . . u $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@ #+ + .#3@3@3@3@3@3@3@3@3@3@3@3@+#+ + F@3@3@3@3@3@3@3@3@3@3@3@3@+ + 3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@ #+ + .#3@3@3@3@3@3@3@3@3@3@3@3@+#+ + F@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ G.. . . 2 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ]+. . . 6+$ $ $ $ $ $ $ $ $ $ -+. . . Z+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | _ . . . 6 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r 3 . . . * $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ J . . . ) 7 $ $ $ $ $ $ $ $ 7 i+. . . p $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Z.. . . : 7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ |.. . . _ 1 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | >.. . . Z.$ $ $ $ $ $ $ $ Z.. . . n $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ v . . . [ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ] ^+r $ $ $ $ $ $ $ $ $ | 1+. . . . [ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ * . . . z.)+$ $ $ $ $ $ )+z.. . . ^+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ t . . . > 1 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . >.1+b+t E E+( E )+o ; . . . . u r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r O . . . > 4+t | | t 4+> . . . 4+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1+. . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . Q.$.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s < . . . . . . . . . . . . ;@r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | _ . . . } $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . ]+^+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $.|.> . . . . . . . . >.G.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Q . . . : 7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1 ^+[ H < : _ > > ; 3 u [ t $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ !+[ ] ; > _ 3 5 Z.| $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ v . . . -+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@@#+ + + i@a@Q@3@3@3@3@##m@a@$#9@%#@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@@#+ + + k@N@T@*#3@3@3@@#+ + + + + O@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@&#=#3@3@8@-#;#3@3@3@>#4@U@g@q@j@,#n@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@&#'#3@3@q@)#D@!#u@3@3@&#=#3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@~#U@3@3@3@{#]#3@3@w@F@b@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@~#m@3@3@3@3@3@^#G@3@3@~#U@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@o@s@3@q@g@/#(#3@3@-#'#3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@o@s@3@3@3@3@3@8@_#3@3@o@s@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@O@+ + + X@,#3@3@3@f@:#3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@O@<#3@3@3@3@3@{#[#3@3@O@+ + + + 9@q@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@@#]#3@3@w@}#|#3@3@3@[###3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@@#]#3@3@3@3@3@3@1#I@3@@#]#3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@&#=#3@3@3@2#Y@3@3@3@Y@w@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@&#=#3@3@3@3@3@3@3#(#3@&#=#3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@~#U@3@3@3@l@R@3@3@3@F@4#3@3@3@3@W@5#3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@~#U@3@3@3@3@3@s@6#8@3@~#U@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@o@7#3@3@>#=#8#3@3@3@5#4@u@2#z@9#t@9#3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@o@7#3@0###4#7@4@K@3@3@o@7#3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@O@+ + k@a#b#q@3@3@3@3@&#I@$#A@I@.#q@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@O@+ + Y@N@c#Z@{#3@3@3@O@+ + + + + 0@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ + 2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@2@+ + 2@2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@2@2@+ + 2@2@2@2@2@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@3@2@2@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@+ + 2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@+ . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@+ . . + 2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@+ . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + 2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@+ . . . . + 2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@2@+ . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#+ . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#+ . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#+ + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#d#d#+ + # # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#d#+ + # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ =+|.^ ,+> ,+^ |.~ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s+* H (+; > C g.u J !+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1 4 R.#.] g.,+> , ' ]+4+{ 7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ F H.. . . . . . . . . = s $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s t A+[ Q.< ; . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ B Z+: . . . . . . . . . . > H y.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . : ^+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ !+3 . . . . . . . . . . . 3 1 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . ' w $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . :+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#f#g#h#i#j#k#l#m#n#o#p#e#e#e#e#e#e#e#e#e#e#e#e#q#r#n#s#t#t#s#n#r#q#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + + + + + i #+u#U L.% % % % % % + + + + + + + + + + + + + + % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ E+(+. . . `.G.& $.& * [+. . . - $.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . (+o p !+$.q t o ,+. . . ; s+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . _ H.Z.t F r s ~ ~+g.. . . . R.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#v#w#x#+ + + + + + + + + + y#z#e#e#e#e#e#e#e#e#v#A#l#+ + + + + + + + l#A#v#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + + + + + + + + + c.V % % % % % + + + + + + + + + + + + + + % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ R . . . - y.$ $ $ $ $ E - . . . [ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ; < H R 9+w s . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . ;.= G $ $ $ $ $ $ $ $ !+(+. . . < 7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ < p@$.$ $ $ $ $ $ $ $ E+H . . . , & $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#B#C#+ + + + + + + + + + + + + + e#e#e#e#e#e#e#B#D#+ + + + + + + + + + + + D#B#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + + + + + + + + + + m.m % % % % + + + + + + + + + + + + + + % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ F _ . . z.& $ $ $ $ $ $ $ h., . . C s $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 2 ~ $ $ $ $ $ $ $ $ $ $ $ !+; . . . { $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r ]+. . . ,@$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#v#E#+ + + F#G#H#I#v#J#K#L#M#y#+ + e#e#e#e#e#e#e#N#+ + + O#P#Q#J#J#Q#R#S#+ + + T#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % 7.K.U#+ + + S % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ R . . . o $ $ $ $ $ $ $ $ $ Z+. . . [ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ -+. . . #.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ c+. . . v $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#V#+ + + W#J#e#e#e#e#e#e#e#e#e#p#C#e#e#e#e#e#e#g#+ + + X#J#e#e#e#e#e#e#J#X#+ + + Y#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % % % % d.+ + T % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . & $ $ $ $ $ $ $ $ $ h.. . . - $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s+. . . i+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1 . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#J#Z#+ + `#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#J# $+ + .$e#e#e#e#e#e#e#e#e#e#.$+ + $+$e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % % % % b.+ + J+% % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ & . . . - $ $ $ $ $ $ $ $ $ $ $ (+. . . ;+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ E+. . . C $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ( . . . > $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#@$+ + Z#B#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e##$+ + x#$$e#e#e#e#e#e#e#e#e#e#$$%$+ + #$e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % % % % W + + $@% % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ].. . . 5+$ $ $ $ $ $ $ $ $ $ $ 3+. . . b+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s . . . > $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ F . . . ' $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#&$+ + *$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#=$+ + -$e#e#e#e#e#e#e#e#e#e#e#e#X#+ + ;$e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % % % % >$+ + 3.% % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ u+. . . Z.$ $ $ $ $ $ $ $ $ $ $ Z.. . . Z+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ w . . . ,+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 4 . . . 2+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#,$+ + '$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#)$+ + z#e#e#e#e#e#e#e#e#e#e#e#e#!$+ + ~$e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % % % % a++ + T % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 2+. . . p $ $ $ $ $ $ $ $ $ $ $ } . . . 2+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Z+. . . g.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ {+. . . c+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#{$+ + ]$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#{$+ + K#e#e#e#e#e#e#e#e#e#e#e#e#K#+ + ^$e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % x /$U.+ + + *@% % % % + + + + + + + + + + + + + % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . 8+$ $ $ $ $ $ $ $ $ $ $ 8+. . . n $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | ' . . . {+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r Z+. . . /+7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#($+ + B#e#e#e#e#e#e#e#+ + + + + + + + e#e#e#e#($+ + B#e#e#e#e#e#e#e#e#e#e#e#e#B#+ + t#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + + + + + + + + + + z ).% % % % + + + + + + + + + + + + + % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ `.. . . y.$ $ $ $ $ $ $ $ $ $ $ y.. . . : $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ R . . . . '+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | 8+Z.^ . . . ) E $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#($+ + +$e#e#e#e#e#e#e#+ + + + + + + + e#e#e#e#($+ + J#e#e#e#e#e#e#e#e#e#e#e#e#B#+ + _$e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + + + + + + + + + }@e.% % % % % + + + + + + + + + + + + + % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ I . . . | $ $ $ $ $ $ $ $ $ $ $ | . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ t > . . . > & $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . , |.| $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#{$+ + q#e#e#e#e#e#e#e#+ + + + + + + + e#e#e#e#:$+ + K#e#e#e#e#e#e#e#e#e#e#e#e#K#+ + <$e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + + + + + `+ .[$|@K % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ > . . . r $ $ $ $ $ $ $ $ $ $ $ ( . . . > $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s 3 . . . . |.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . ; 7+q $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#)$+ + }$e#e#e#e#e#e#e#e#e#e#e#e#+ + + e#e#e#e#)$+ + z#e#e#e#e#e#e#e#e#e#e#e#e#|$+ + ~$e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ > . . . r $ $ $ $ $ $ $ $ $ $ $ r . . . > $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r 2 . . . . (+E+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . _ R ( $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#1$+ + 2$e#e#e#e#e#e#e#e#e#e#e#e#+ + + e#e#e#e#1$+ + -$e#e#e#e#e#e#e#e#e#e#e#e#-$+ + =$e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ I . . . | $ $ $ $ $ $ $ $ $ $ $ | . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 1+. . . . ' & $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 7 P 8+9+<+;.. . . ] P $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e##$+ + s#B#e#e#e#e#e#e#e#e#e#e#e#+ + + e#e#e#e#3$+ + :$f#e#e#e#e#e#e#e#e#e#e#$$x#+ + #$e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ `.. . . F $ $ $ $ $ $ $ $ $ $ $ y.. . . `.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ [ . . . . ; s+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ G `.. . . 5 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#J# $+ + ;$e#e#e#e#e#e#e#e#e#e#e#+ + + e#e#e#e#J#s#+ + 4$e#e#e#e#e#e#e#e#e#e#5$+ + $J#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . . h.$ $ $ $ $ $ $ $ $ $ $ 8+. . . ) $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Z.. . . . C t $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ & _ . . . } $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#6$+ + + ;$B#e#e#e#e#e#e#e#e#e#+ + + e#e#e#e#e#R#+ + + -$+$e#e#e#e#e#e#+$-$+ + + g#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 2+. . . p $ $ $ $ $ $ $ $ $ $ $ } . . . 2+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ^+> . . . _ G $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ [ . . . = $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#.$+ + + s#*$7$I#+$J#8$p#V#9$+ + + e#e#e#e#e#v#0$+ + + a$R#Q#J#J#Q#R#b$+ + + 0$e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ :+. . . Z.$ $ $ $ $ $ $ $ $ $ $ Z.. . . Z+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ r+, . . . , )+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ s+. . . `.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#J#h#+ + + + + + + + + + + + + c$6$e#e#e#e#e#e#d$e$+ + + + + + + + + + + + e$d$e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % + + + + + + + + + + + + + + % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Z.. . . 4+$ $ $ $ $ $ $ $ $ $ $ 5+. . . b+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ~ C . . . > { $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ E+. . . > $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#g#s#+ + + + + + + + + k#f$g$e#e#e#e#e#e#e#e#+$h$l#+ + + + + + + + l#h$+$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % + + + + + + + + + + + + + + % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ & . . . - $ $ $ $ $ $ $ $ $ $ $ - . . . & $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ & ' . . . ;.i$$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ q . . . ; $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#J#j$k$l$x#($t# $D#M#g$e#e#e#e#e#e#e#e#e#e#e#e#q#r#e$s#_$_$s#e$r#]$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % + + + % % % % % % % % % % % % % % % + + + + + + + + + + + + + + % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ) . . ;.& $ $ $ $ $ $ $ $ $ & . . . (+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ y.3 . . . . 7+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ t . . . ) $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ R . . . o $ $ $ $ $ $ $ $ $ Z+. . . [ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | ]+. . . . R $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ u+. . . 3+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ y._ . . z.& $ $ $ $ $ $ $ h., . . _ F $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ( 2 . . . . 1+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ Q.| $ $ $ $ $ $ $ $ $ $ $ $ B , . . . p $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ,@. . . - y.$ $ $ $ $ E - . . . R $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 7 H . . . . u r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . g.i$r $ $ $ $ $ $ $ $ $ } >.. . . 2 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ | ) . . . `.G.& $.& 7+[+. . . (+$.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ :+. . . . ] E+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . g.:+6 & | ( F t G.] . . . . : !+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ !+g.. . . . . . . . . . . 3 !+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . 8+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . (+;+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ F 5 . . . . . . . . . H.F $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . 8+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ t ;@_ . . . . . . . . . . . [+~+r $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ t %.- _ ;._ - %.t $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . 8+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $.4 |.-@[+z.> ; g.2 o } 7 $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#K#{$e#e#C#V#e#e#e#e#e#R#9$B#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#!$n#e#e#m$ $f#e#e#e#@$~$$$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#o#2$e#e#e#X#h$e#e#'$n$q#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#E#@$e#e#e#$$m#]$o$O#p$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#s#g$e#e#e#e#q$0$O#m$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#K#{$e#e#e#e#e#I#r$s$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#!$n#e#e#e#e#e#'$9$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#o#2$e#e#e#e#e#M#W#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#E#@$e#e#e#e#e#N#j$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#s#g$e#e#e#e#e#t$p$e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + + @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#+ + # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + + @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#d#+ + # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + + @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#d#d#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#e#d#d#d#d#d#+ + # # # # # % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % % # # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#+ + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#+ . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . + @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#d#+ . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}; KCemu-0.5.1/src/ui/gtk/fbrowse.cc0000644001050700006200000000542511345001576016164 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "ui/gtk/fbrowse.h" FileBrowser::FileBrowser(void) : CMD("ui-file-select") { register_cmd("ui-file-select"); } FileBrowser::~FileBrowser(void) { } void FileBrowser::execute(CMD_Args *args, CMD_Context context) { const char *title, *arg_title, *path; _args = args; title = _("Select File..."); if (_args) arg_title = _args->get_string_arg("ui-file-select-title"); if (arg_title) title = arg_title; path = NULL; if (_args) path = _args->get_string_arg("ui-file-select-path"); bool dironly = _args && _args->get_long_arg("ui-file-select-dir-only"); init(title, path, dironly); } void FileBrowser::sf_response(GtkDialog *dialog, gint response_id, gpointer user_data) { FileBrowser *self = (FileBrowser *)user_data; if (response_id == GTK_RESPONSE_ACCEPT) { char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); self->_args->set_string_arg("filename", filename); g_free(filename); self->_args->call_callbacks("ui-file-select-CB-ok"); } else { self->_args->call_callbacks("ui-file-select-CB-cancel"); } gtk_widget_destroy(GTK_WIDGET(dialog)); } void FileBrowser::init(const char *title, const char *path, bool dironly) { GtkFileChooserAction action = dironly ? GTK_FILE_CHOOSER_ACTION_SELECT_FOLDER : GTK_FILE_CHOOSER_ACTION_OPEN; GtkWidget *filechooser = gtk_file_chooser_dialog_new(title, NULL, action, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(filechooser), TRUE); if (path) gtk_file_chooser_set_filename(GTK_FILE_CHOOSER(filechooser), path); g_signal_connect(filechooser, "response", G_CALLBACK(sf_response), this); gtk_widget_show(filechooser); } KCemu-0.5.1/src/ui/gtk/kc851.key0000644001050700006200000000474610527416075015565 0ustar glaubitzfbedvkc851_keyboard.xpm kc851_keyboard_pressed.xpm ################################ # KC 85/1, KC87 Keyboard Layout ################################ # # first row # +KC_KEY_CONTROL :31,46,28,10 =31,46,28,10 +1 :73,46,28,10 =73,46,28,10 +2 :115,46,28,10 =115,46,28,10 +3 :157,46,28,10 =157,46,28,10 +4 :199,46,28,10 =199,46,28,10 +5 :241,46,28,10 =241,46,28,10 +6 :283,46,28,10 =283,46,28,10 +7 :325,46,28,10 =325,46,28,10 +8 :367,46,28,10 =367,46,28,10 +9 :409,46,28,10 =409,46,28,10 +0 :451,46,28,10 =451,46,28,10 +@ :493,46,28,10 =493,46,28,10 +KC_KEY_PAUSE :577,46,28,10 =577,46,28,10 +KC_KEY_RESET :619,46,70,10 =619,46,70,10 # # second row # +KC_KEY_COLOR :31,88,28,10 =31,88,28,10 +q :73,88,28,10 =73,88,28,10 +w :115,88,28,10 =115,88,28,10 +e :157,88,28,10 =157,88,28,10 +r :199,88,28,10 =199,88,28,10 +t :241,88,28,10 =241,88,28,10 +z :283,88,28,10 =283,88,28,10 +u :325,88,28,10 =325,88,28,10 +i :367,88,28,10 =367,88,28,10 +o :409,88,28,10 =409,88,28,10 +p :451,88,28,10 =451,88,28,10 +^ :493,88,28,10 =493,88,28,10 +KC_KEY_INSERT :577,88,28,10 =577,88,28,10 +KC_KEY_LIST :619,88,28,10 =619,88,28,10 # # third row # +KC_KEY_GRAPHIC :31,130,28,10 =31,130,28,10 +a :73,130,28,10 =73,130,28,10 +s :115,130,28,10 =115,130,28,10 +d :157,130,28,10 =157,130,28,10 +f :199,130,28,10 =199,130,28,10 +g :241,130,28,10 =241,130,28,10 +h :283,130,28,10 =283,130,28,10 +j :325,130,28,10 =325,130,28,10 +k :367,130,28,10 =367,130,28,10 +l :409,130,28,10 =409,130,28,10 +: :451,130,28,10 =451,130,28,10 +? :493,130,28,10 =493,130,28,10 +KC_KEY_ESC :577,130,28,10 =577,130,28,10 +KC_KEY_RUN :619,130,70,10 =619,130,70,10 # # fourth row # +y :73,172,28,10 =73,172,28,10 +x :115,172,28,10 =115,172,28,10 +c :157,172,28,10 =157,172,28,10 +v :199,172,28,10 =199,172,28,10 +b :241,172,28,10 =241,172,28,10 +n :283,172,28,10 =283,172,28,10 +m :325,172,28,10 =325,172,28,10 +, :367,172,28,10 =367,172,28,10 +. :409,172,28,10 =409,172,28,10 +; :451,172,28,10 =451,172,28,10 += :493,172,28,10 =493,172,28,10 +KC_KEY_HOME :577,172,28,10 =577,172,28,10 +KC_KEY_STOP :619,172,70,10 =619,172,70,10 # # fifth row # +KC_KEY_SHIFT :31,214,70,10 =31,214,70,10 +KC_KEY_LEFT :115,214,28,10 =115,214,28,10 +KC_KEY_RIGHT :157,214,28,10 =157,214,28,10 +KC_KEY_SHIFT :199,214,70,10 =199,214,70,10 +KC_KEY_SHIFT :283,214,70,10 =283,214,70,10 +KC_KEY_UP :367,214,28,10 =367,214,28,10 +KC_KEY_DOWN :409,214,28,10 =409,214,28,10 +KC_KEY_SHIFT :451,214,70,10 =451,214,70,10 +KC_KEY_SHIFT_LOCK :577,214,28,10 =577,214,28,10 +KC_KEY_ENTER :619,214,70,10 =619,214,70,10 KCemu-0.5.1/src/ui/gtk/ui_gtk6.cc0000644001050700006200000000255711345001576016070 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "ui/generic/ui_6.h" #include "ui/gtk/ui_gtk6.h" UI_Gtk6::UI_Gtk6(void) : UI_Gtk_Base(new UI_6()) { _colors.push_back(UI_Color(false, 0x00, 0x00, 0x00)); /* black */ _colors.push_back(UI_Color(false, 0x00, 0x20, 0x00)); /* really dark green */ _colors.push_back(UI_Color(false, 0x00, 0xe0, 0x00)); /* green */ _colors.push_back(UI_Color(false, 0xff, 0x8c, 0x00)); /* dark orange */ _colors.push_back(UI_Color(false, 0x9a, 0xcd, 0x32)); /* led green */ } UI_Gtk6::~UI_Gtk6(void) { } KCemu-0.5.1/src/ui/gtk/ui_gtk4.cc0000644001050700006200000000501111345001577016053 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "ui/generic/ui_4.h" #include "ui/gtk/ui_gtk4.h" UI_Gtk4::UI_Gtk4(void) : UI_Gtk_Base(new UI_4()) { _colors.push_back(UI_Color(false, 0x00, 0x00, 0x00)); /* black */ _colors.push_back(UI_Color(false, 240)); /* blue */ _colors.push_back(UI_Color(false, 0)); /* red */ _colors.push_back(UI_Color(false, 300)); /* magenta */ _colors.push_back(UI_Color(false, 120)); /* green */ _colors.push_back(UI_Color(false, 180)); /* cyan */ _colors.push_back(UI_Color(false, 60)); /* yellow */ _colors.push_back(UI_Color(false, 0xe0, 0xe0, 0xe0)); /* white */ _colors.push_back(UI_Color(false, 0x00, 0x00, 0x00)); /* black */ _colors.push_back(UI_Color(false, 260)); /* blue + 30° */ _colors.push_back(UI_Color(false, 20)); /* red + 30° */ _colors.push_back(UI_Color(false, 320)); /* magenta + 30° */ _colors.push_back(UI_Color(false, 140)); /* green + 30° */ _colors.push_back(UI_Color(false, 210)); /* cyan + 30° */ _colors.push_back(UI_Color(false, 90)); /* yellow + 30° */ _colors.push_back(UI_Color(false, 0xe0, 0xe0, 0xe0)); /* white */ _colors.push_back(UI_Color(true, 0x00, 0x00, 0x00)); /* black */ _colors.push_back(UI_Color(true, 240)); /* blue */ _colors.push_back(UI_Color(true, 0)); /* red */ _colors.push_back(UI_Color(true, 300)); /* magenta */ _colors.push_back(UI_Color(true, 120)); /* green */ _colors.push_back(UI_Color(true, 180)); /* cyan */ _colors.push_back(UI_Color(true, 60)); /* yellow */ _colors.push_back(UI_Color(true, 0xe0, 0xe0, 0xe0)); /* white */ } UI_Gtk4::~UI_Gtk4(void) { } Scanline * UI_Gtk4::get_scanline(void) { return &_scanline; } KCemu-0.5.1/src/ui/gtk/poly880.key0000644001050700006200000000206710527416075016147 0ustar glaubitzfbedvpoly880_keyboard.xpm poly880_keyboard_pressed.xpm ########################## # POLY880 Keyboard Layout ########################## # # first row # +c :14,20,76,75 =14,20,76,75 +d :90,20,76,75 =90,20,76,75 +e :166,20,76,75 =166,20,76,75 +f :242,20,76,75 =242,20,76,75 +G :378,20,76,75 =378,20,76,75 +M :454,20,76,75 =454,20,76,75 +KC_KEY_RESET :590,20,76,75 =590,20,76,75 # # second row # +8 :14,95,76,75 =14,95,76,75 +9 :90,95,76,75 =90,95,76,75 +a :166,95,76,75 =166,95,76,75 +b :242,95,76,75 =242,95,76,75 +S :378,95,76,75 =378,95,76,75 +R :454,95,76,75 =454,95,76,75 +KC_KEY_NMI :590,95,76,75 =590,95,76,75 # # third row # +4 :14,170,76,75 =14,170,76,75 +5 :90,170,76,75 =90,170,76,75 +6 :166,170,76,75 =166,170,76,75 +7 :242,170,76,75 =242,170,76,75 +F :378,170,76,75 =378,170,76,75 +B :454,170,76,75 =454,170,76,75 +_ :590,170,76,75 =590,170,76,75 # # fourth row # +0 :14,245,76,75 =14,245,76,75 +1 :90,245,76,75 =90,245,76,75 +2 :166,245,76,75 =166,245,76,75 +3 :242,245,76,75 =242,245,76,75 +KC_KEY_ENTER :416,245,76,75 =416,245,76,75 +C :590,245,76,75 =590,245,76,75 KCemu-0.5.1/src/ui/gtk/vdip.cc0000644001050700006200000001172411345001576015456 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "cmd/cmd.h" #include "ui/gtk/vdip.h" #include "ui/gtk/cmd.h" #include "libdbg/dbg.h" class CMD_ui_vdip_window_toggle : public CMD { private: VDIPWindow *_w; public: CMD_ui_vdip_window_toggle(VDIPWindow *w) : CMD("ui-vdip-window-toggle") { _w = w; register_cmd("ui-vdip-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; class CMD_ui_vdip_update : public CMD { private: VDIPWindow *_w; public: CMD_ui_vdip_update(VDIPWindow *w) : CMD("ui-vdip-update") { _w = w; register_cmd("ui-vdip-update-MSG"); } void execute(CMD_Args *args, CMD_Context context) { DBG(2, form("KCemu/VDIP/update", "got vdip-update message\n")); long slot_no = args->get_long_arg("slot"); if ((slot_no < 0) || (slot_no > 1)) return; _w->set_name(slot_no, args->get_string_arg("filename")); } }; class CMD_ui_vdip_attach : public CMD { private: VDIPWindow *_w; public: CMD_ui_vdip_attach(VDIPWindow *w) : CMD("ui-vdip-attach") { _w = w; register_cmd("ui-vdip-attach-1", 0); register_cmd("ui-vdip-attach-2", 1); register_cmd("ui-vdip-detach-1", 4); register_cmd("ui-vdip-detach-2", 5); } void execute(CMD_Args *args, CMD_Context context) { const char *filename; if (!args) args = new CMD_Args(); filename = NULL; switch (context) { case 0: case 1: case 2: case 3: args->set_long_arg("slot", context); CMD_EXEC_ARGS("vdip-attach", args); break; case 4: case 5: case 6: case 7: args->set_long_arg("slot", context & 3); CMD_EXEC_ARGS("vdip-detach", args); break; } } }; VDIPWindow::VDIPWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { init(); _cmd_attach = new CMD_ui_vdip_attach(this); _cmd_update = new CMD_ui_vdip_update(this); _cmd_window_toggle = new CMD_ui_vdip_window_toggle(this); } VDIPWindow::~VDIPWindow(void) { delete _cmd_attach; delete _cmd_update; delete _cmd_window_toggle; } void VDIPWindow::set_name(int idx, const char *name) { GtkEntry *entry = GTK_ENTRY(GTK_BIN(_w.combo[idx])->child); if (!name) name = ""; gtk_signal_handler_block(GTK_OBJECT(_w.combo[idx]), _w.combo_signal_id[idx]); gtk_entry_set_text(entry, name); gtk_signal_handler_unblock(GTK_OBJECT(_w.combo[idx]), _w.combo_signal_id[idx]); } void VDIPWindow::sf_vdip_attach(GtkWidget *widget, gpointer data) { long nr = (long)data; GtkEntry *entry = GTK_ENTRY(GTK_BIN(widget)->child); const gchar *text = gtk_entry_get_text(GTK_ENTRY(entry)); if (text == NULL) return; if (strlen(text) == 0) return; CMD_Args *args = new CMD_Args(); args->set_long_arg("slot", nr); args->set_string_arg("filename", text); CMD_EXEC_ARGS("vdip-attach", args); } void VDIPWindow::init(void) { static const char * attach_cmd[2] = { "ui-vdip-attach-1", "ui-vdip-attach-2", }; static const char * detach_cmd[2] = { "ui-vdip-detach-1", "ui-vdip-detach-2", }; /* * vdip window */ _window = get_widget("vdip_window"); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(cmd_exec_sft), (char *)"ui-vdip-window-toggle"); // FIXME: _w.combo[0] = get_widget("vdip_comboboxentry_1"); _w.combo[1] = get_widget("vdip_comboboxentry_2"); _w.browse[0] = get_widget("vdip_button_open_1"); _w.browse[1] = get_widget("vdip_button_open_2"); _w.eject[0] = get_widget("vdip_button_close_1"); _w.eject[1] = get_widget("vdip_button_close_2"); for (int a = 0;a < 2;a++) { _w.combo_signal_id[a] = gtk_signal_connect(GTK_OBJECT(GTK_COMBO_BOX(_w.combo[a])), "changed", GTK_SIGNAL_FUNC(sf_vdip_attach), (gpointer)a); gtk_signal_connect(GTK_OBJECT(_w.browse[a]), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (char *)attach_cmd[a]); // FIXME: gtk_signal_connect(GTK_OBJECT(_w.eject[a]), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (char *)detach_cmd[a]); // FIXME: } init_dialog("ui-vdip-window-toggle", "window-vdip"); } KCemu-0.5.1/src/ui/gtk/tape.cc0000644001050700006200000004413611345001576015450 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/tape.h" #include "ui/error.h" #include "ui/status.h" #include "ui/gtk/tape.h" #include "ui/gtk/cmd.h" class CMD_ui_tape_window_toggle : public CMD { private: TapeWindow *_w; public: CMD_ui_tape_window_toggle(TapeWindow *w) : CMD("ui-tape-window-toggle") { _w = w; register_cmd("ui-tape-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; class CMD_ui_tape_rename_selected : public CMD { private: TapeWindow *_w; public: CMD_ui_tape_rename_selected(TapeWindow *w) : CMD("ui-tape-rename-selected") { _w = w; register_cmd("ui-tape-rename-selected"); } void execute(CMD_Args *args, CMD_Context context) { const char *name; switch (context) { case 0: if (args == NULL) args = new CMD_Args(); name = _w->tapeGetName(_w->tapeGetSelected()); args->set_string_arg("filename", name); args->set_string_arg("tape-filename", name); args->set_string_arg("tape-rename-title", _("Please enter the new name for the file.")); args->add_callback("ui-tape-name-edit-CB-ok", this, 1); CMD_EXEC_ARGS("ui-tape-name-edit", args); break; case 1: if (args == NULL) return; /* * rename callback */ CMD_EXEC_ARGS("tape-rename-file", args); break; } } }; class CMD_ui_tape_load_selected : public CMD { private: TapeWindow *_w; public: CMD_ui_tape_load_selected(TapeWindow *w) : CMD("ui-tape-load-selected") { _w = w; register_cmd("ui-tape-load-selected", 0); register_cmd("ui-tape-run-selected", 1); register_cmd("ui-tape-export-selected", 2); register_cmd("ui-tape-export-wav-selected", 3); register_cmd("ui-tape-delete-selected", 4); register_cmd("ui-tape-play-selected", 5); register_cmd("ui-edit-header-selected", 6); } void execute(CMD_Args *args, CMD_Context context) { if (args == NULL) args = new CMD_Args(); args->set_string_arg("tape-filename", _w->tapeGetName(_w->tapeGetSelected())); switch (context) { case 0: CMD_EXEC_ARGS("tape-load", args); break; case 1: CMD_EXEC_ARGS("tape-run", args); break; case 2: CMD_EXEC_ARGS("tape-export", args); break; case 3: CMD_EXEC_ARGS("tape-export-wav", args); break; case 4: CMD_EXEC_ARGS("tape-delete", args); break; case 5: CMD_EXEC_ARGS("tape-play", args); break; case 6: CMD_EXEC_ARGS("ui-edit-header", args); break; } } }; class CMD_ui_tape_attach : public CMD { private: TapeWindow *_w; public: CMD_ui_tape_attach(TapeWindow *w) : CMD("ui-tape-attach") { _w = w; register_cmd("ui-tape-attach", 0); register_cmd("ui-tape-detach", 1); register_cmd("ui-tape-stop", 2); register_cmd("ui-tape-attached", 3); register_cmd("ui-tape-detached", 4); } void execute(CMD_Args *args, CMD_Context context) { const char *filename = NULL; switch (context) { case 0: CMD_EXEC("tape-attach"); break; case 1: CMD_EXEC("tape-detach"); break; case 2: _w->stop(); CMD_EXEC("tape-stop"); break; case 3: if (args) filename = args->get_string_arg("filename"); /* fall through */ case 4: _w->attached(filename); // filename == NULL if detached called! break; } } }; TapeWindow::TapeWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { init(); } TapeWindow::~TapeWindow(void) { } void TapeWindow::sf_tape_file_select(GtkTreeSelection *selection, gpointer data) { TapeWindow *self = (TapeWindow *)data; self->set_selected_index(selection); } void TapeWindow::sf_tape_archive_select(GtkWidget *widget, gpointer data) { CMD_Args *args; const gchar *filename; /* for some reason this is called twice */ filename = gtk_entry_get_text(GTK_ENTRY(GTK_COMBO(data)->entry)); if (strlen(filename) == 0) return; args = (new CMD_Args())->set_string_arg("filename", (const char *)filename); CMD_EXEC_ARGS("tape-attach", args); } void TapeWindow::sf_power_expose(TapeWindow *self) { int width, height; GdkColor *col; static GdkGC *gc = NULL; if (self->_w.led_power->window == NULL) return; if (gc == NULL) gc = gdk_gc_new(self->_w.led_power->window); width = self->_w.led_power->allocation.width; height = self->_w.led_power->allocation.height; if (self->_power) if (self->_play) col = &self->_col[2]; else if (self->_record) col = &self->_col[1]; else col = &self->_col[3]; else col = &self->_col[0]; gdk_gc_set_foreground(gc, col); gdk_draw_rectangle(self->_w.led_power->window, gc, TRUE, width / 2 - 6, height / 2 - 2, 12, 4); } /* * define some ungly typecasts to suppress some * compiler warnings :-( */ #define CF(func) ((GtkItemFactoryCallback)(func)) #define CD(string) ((unsigned int)(string)) void TapeWindow::init(void) { GtkItemFactory *ifactP; GtkAccelGroup *agroupP; static const char *callbacks[] = { "ui-tape-run-selected", "ui-tape-load-selected", "ui-tape-export-selected", "ui-tape-export-wav-selected", "ui-edit-header-selected", "ui-tape-rename-selected", "ui-tape-delete-selected", "tape-add-file", }; GtkItemFactoryEntry entriesP[] = { { _("/_Run File"), "R", CF(cmd_exec_mci), 0, NULL }, { _("/_Load File"), "L", CF(cmd_exec_mci), 1, NULL }, { _("/_Export File"), "E", CF(cmd_exec_mci), 2, NULL }, { _("/Export _Wav"), "W", CF(cmd_exec_mci), 3, NULL }, { _("/sep1"), NULL, NULL, 0, "" }, { _("/Edit _Header"), "H", CF(cmd_exec_mci), 4, NULL }, { _("/Re_name File"), "N", CF(cmd_exec_mci), 5, NULL }, { _("/_Delete File"), "D", CF(cmd_exec_mci), 6, NULL }, { _("/sep2"), NULL, NULL, 0, "" }, { _("/_Add File"), "A", CF(cmd_exec_mci), 7, NULL }, }; int nentriesP = sizeof(entriesP) / sizeof(entriesP[0]); static char *titles[] = { _("Name"), _("Type"), _("Load"), _("Start"), _("Size") }; _play = 0; _record = 0; _power = 0; _selected = 0; /* * popup item factory */ agroupP = gtk_accel_group_new(); ifactP = gtk_item_factory_new(GTK_TYPE_MENU, _(""), agroupP); gtk_item_factory_create_items(ifactP, nentriesP, entriesP, callbacks); /* * popup menu */ _w.menu = gtk_item_factory_get_widget(ifactP, _("")); _w.m_run = gtk_item_factory_get_widget(ifactP, _("/Run File")); _w.m_load = gtk_item_factory_get_widget(ifactP, _("/Load File")); _w.m_edit = gtk_item_factory_get_widget(ifactP, _("/Edit Header")); _w.m_delete = gtk_item_factory_get_widget(ifactP, _("/Delete File")); _w.m_rename = gtk_item_factory_get_widget(ifactP, _("/Rename File")); _w.m_export = gtk_item_factory_get_widget(ifactP, _("/Export File")); _w.m_wav = gtk_item_factory_get_widget(ifactP, _("/Export Wav")); /* * tape window */ _window = get_widget("tape_window"); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(cmd_exec_sft), (char *)"ui-tape-window-toggle"); // FIXME: _w.treeview = get_widget("main_treeview"); gtk_signal_connect(GTK_OBJECT(_w.treeview), "button_press_event", GTK_SIGNAL_FUNC(sf_tape_button_press), this); _w.b_play = get_widget("control_button_play"); gtk_signal_connect(GTK_OBJECT(_w.b_play), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sftb), (gpointer)"ui-tape-play-selected"); _w.b_stop = get_widget("control_button_stop"); gtk_signal_connect(GTK_OBJECT(_w.b_stop), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (gpointer)"ui-tape-stop"); _w.b_record = get_widget("control_button_record"); gtk_signal_connect(GTK_OBJECT(_w.b_record), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sftb), (gpointer)"tape-record"); _w.b_prev = get_widget("control_button_previous"); _w.b_next = get_widget("control_button_next"); _w.b_attach = get_widget("file_button_open"); gtk_signal_connect(GTK_OBJECT(_w.b_attach), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (gpointer)"ui-tape-attach"); _w.b_detach = get_widget("file_button_close");; gtk_signal_connect(GTK_OBJECT(_w.b_detach), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (gpointer)"ui-tape-detach"); _w.led_power = get_widget("progress_led"); gtk_signal_connect_object(GTK_OBJECT(_w.led_power), "expose_event", GTK_SIGNAL_FUNC(TapeWindow::sf_power_expose), (GtkObject *)this); _w.list_store = gtk_list_store_new(TREEVIEW_N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); for (int a = 0;a < TREEVIEW_N_COLUMNS;a++) { GtkTreeViewColumn *column = gtk_tree_view_column_new(); GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_set_title(column, titles[a]); if (a < 2) { gtk_tree_view_column_pack_start(column, renderer, FALSE); } else { gtk_tree_view_column_pack_end(column, renderer, FALSE); } gtk_tree_view_column_set_attributes(column, renderer, "text", a, NULL); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_column_set_expand(column, TRUE); gtk_tree_view_append_column(GTK_TREE_VIEW(_w.treeview), column); } gtk_tree_view_set_model(GTK_TREE_VIEW(_w.treeview), GTK_TREE_MODEL(_w.list_store)); gtk_tree_view_columns_autosize(GTK_TREE_VIEW(_w.treeview)); GtkTreeSelection *select = gtk_tree_view_get_selection(GTK_TREE_VIEW(_w.treeview)); gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE); g_signal_connect(G_OBJECT(select), "changed", G_CALLBACK(sf_tape_file_select), this); /* * Scale */ _w.scale = get_widget("progress_hscale"); _w.scale_adj = gtk_range_get_adjustment(GTK_RANGE(_w.scale)); allocate_colors(); init_dialog("ui-tape-window-toggle", "window-tape"); CMD *cmd; cmd = new CMD_ui_tape_window_toggle(this); cmd = new CMD_ui_tape_load_selected(this); cmd = new CMD_ui_tape_rename_selected(this); cmd = new CMD_ui_tape_attach(this); } void TapeWindow::stop(void) { gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(_w.b_play), FALSE); gtk_toggle_button_set_state(GTK_TOGGLE_BUTTON(_w.b_record), FALSE); } void TapeWindow::attached(const char *name) { /* * block changed signal when setting the entry field! */ // gtk_signal_handler_block_by_data(GTK_OBJECT(GTK_COMBO(_w.combo)->entry), _w.combo); // gtk_entry_set_text(GTK_ENTRY(GTK_COMBO(_w.combo)->entry), name); // gtk_signal_handler_unblock_by_data(GTK_OBJECT(GTK_COMBO(_w.combo)->entry), _w.combo); } void TapeWindow::sf_tape_scale_changed(GtkAdjustment *adjustment, gpointer data) { TapeWindow *self = (TapeWindow *)data; if (self->_scale_value != adjustment->value) tape->seek((int)adjustment->value); } int TapeWindow::sf_tape_button_press(GtkWidget */*widget*/, GdkEventButton *event, gpointer data) { TapeWindow *self = (TapeWindow *)data; GtkTreePath *path; gboolean ret = gtk_tree_view_get_path_at_pos(GTK_TREE_VIEW(self->_w.treeview), (int)event->x, (int)event->y, &path, NULL, NULL, NULL); if (ret) { gint *indices = gtk_tree_path_get_indices(path); self->_selected = indices[0]; } if ((event->button == 1) && (event->type == GDK_2BUTTON_PRESS)) { CMD_EXEC("ui-tape-run-selected"); } else if (event->button == 3) { gtk_widget_set_sensitive(self->_w.m_run, ret); gtk_widget_set_sensitive(self->_w.m_load, ret); gtk_widget_set_sensitive(self->_w.m_edit, ret); gtk_widget_set_sensitive(self->_w.m_delete, ret); gtk_widget_set_sensitive(self->_w.m_rename, ret); gtk_widget_set_sensitive(self->_w.m_export, ret); gtk_widget_set_sensitive(self->_w.m_wav, ret); gtk_menu_popup(GTK_MENU(self->_w.menu), NULL, NULL, NULL, NULL, 3, event->time); } /* * run other event handlers too... */ return false; } void TapeWindow::set_selected_index(GtkTreeSelection *selection) { GtkTreeModel *model; GList* path_list = gtk_tree_selection_get_selected_rows(selection, &model); if (path_list == NULL) return; GtkTreePath *path = (GtkTreePath *)g_list_nth_data(path_list, 0); gint *indices = gtk_tree_path_get_indices(path); if (indices == NULL) return; _selected = indices[0]; g_list_foreach(path_list, (GFunc)gtk_tree_path_free, NULL); g_list_free(path_list); } void TapeWindow::allocate_colors(void) { int a; const char *color_names[] = { "#000000", "#d00000", "#00d000", "#a0a000" }; _colormap = gdk_colormap_get_system(); for (a = 0;a < 4;a++) { gdk_color_parse(color_names[a], &_col[a]); gdk_color_alloc(_colormap, &_col[a]); } } void TapeWindow::tapeAttach(const char *name) { clear_list(); gtk_widget_set_sensitive(_w.b_stop, TRUE); gtk_widget_set_sensitive(_w.b_play, TRUE); gtk_widget_set_sensitive(_w.b_record, TRUE); gtk_widget_set_sensitive(_w.b_detach, TRUE); _play = 0; _record = 0; tapeProgress(0); } void TapeWindow::tapeDetach(void) { clear_list(); gtk_widget_set_sensitive(_w.b_stop, FALSE); gtk_widget_set_sensitive(_w.b_play, FALSE); gtk_widget_set_sensitive(_w.b_record, FALSE); gtk_widget_set_sensitive(_w.b_detach, FALSE); _play = 0; _record = 0; tapeProgress(0); } void TapeWindow::tapePower(bool power) { _power = power; sf_power_expose(this); #if 0 if (!power) { stop(); } #endif } int TapeWindow::tapeGetSelected(void) { return _selected; } const char * TapeWindow::tapeGetName(int idx) { char *name; GtkTreePath *path = gtk_tree_path_new_from_indices(idx, -1); g_assert(path != NULL); GtkTreeIter iter; gtk_tree_model_get_iter(GTK_TREE_MODEL(_w.list_store), &iter, path); gtk_tree_path_free(path); gtk_tree_model_get(GTK_TREE_MODEL(_w.list_store), &iter, 0, &name, -1); return name; } void TapeWindow::tapeProgress(int val) { _scale_value = val; GTK_ADJUSTMENT(_w.scale_adj)->value = val; gtk_signal_emit_by_name(GTK_OBJECT(_w.scale_adj), "value_changed"); } void TapeWindow::tapeNext(void) { GtkTreeModel *model; GtkTreeIter iter; GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(_w.treeview)); if (!gtk_tree_selection_get_selected(selection, &model, &iter)) return; if (gtk_tree_model_iter_next(model, &iter)) { // sets _selected via callback! (sf_tape_file_select) gtk_tree_selection_select_iter(selection, &iter); CMD_Args *a = new CMD_Args(); a->set_long_arg("tape-play-delay", 10); CMD_EXEC_ARGS("ui-tape-play-selected", a); } } void TapeWindow::clear_list(void) { _nr_of_files = 0; gtk_list_store_clear(_w.list_store); gtk_widget_set_sensitive(_w.b_stop, FALSE); gtk_widget_set_sensitive(_w.b_play, FALSE); gtk_widget_set_sensitive(_w.b_record, FALSE); } void TapeWindow::tapeAddArchive(const char *name) { } void TapeWindow::tapeAddFile(const char *name, long load, long start, long size, unsigned char type) { char buf_load[40]; char buf_start[40]; char buf_size[40]; const char *ptr_type; const char *ptr_load; const char *ptr_start; kct_file_type_t t = (kct_file_type_t)type; snprintf(buf_load, 40, "%04lxh", load); if (start != 0xffff) snprintf(buf_start, 40, "%04lxh", start); else snprintf(buf_start, 40, "-"); snprintf(buf_size, 40, "%ld", size); ptr_load = "-"; ptr_start = "-"; switch (t) { case KCT_TYPE_COM: ptr_type = "COM"; ptr_load = buf_load; ptr_start = buf_start; break; case KCT_TYPE_BAS: ptr_type = "BAS"; break; case KCT_TYPE_DATA: ptr_type = "DATA"; break; case KCT_TYPE_LIST: ptr_type = "LIST"; break; case KCT_TYPE_BAS_P: ptr_type = "BAS*"; break; case KCT_TYPE_BIN: ptr_type = "BIN"; break; case KCT_TYPE_BASICODE: ptr_type = "BAC"; break; default: ptr_type = "???"; break; } GtkTreeIter iter; gtk_list_store_append(_w.list_store, &iter); gtk_list_store_set(_w.list_store, &iter, TREEVIEW_COLUMN_NAME, name, TREEVIEW_COLUMN_TYPE, ptr_type, TREEVIEW_COLUMN_LOAD, ptr_load, TREEVIEW_COLUMN_START, ptr_start, TREEVIEW_COLUMN_SIZE, buf_size, -1); _nr_of_files++; if (_nr_of_files == 1) { gtk_widget_set_sensitive(_w.b_stop, TRUE); gtk_widget_set_sensitive(_w.b_play, TRUE); gtk_widget_set_sensitive(_w.b_record, TRUE); } } void TapeWindow::tapeRemoveFile(int idx) { if (_nr_of_files == 1) clear_list(); else { GtkTreePath *path = gtk_tree_path_new_from_indices(idx, -1); g_assert(path != NULL); GtkTreeIter iter; gtk_tree_model_get_iter(GTK_TREE_MODEL(_w.list_store), &iter, path); gtk_tree_path_free(path); gtk_list_store_remove(_w.list_store, &iter); _nr_of_files--; } } KCemu-0.5.1/src/ui/gtk/ui_gtk_muglerpc.cc0000644001050700006200000000224511345001576017672 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "ui/generic/ui_muglerpc.h" #include "ui/gtk/ui_gtk_muglerpc.h" UI_Gtk_MuglerPC::UI_Gtk_MuglerPC(void) : UI_Gtk_Base(new UI_MuglerPC()) { _colors.push_back(UI_Color(true, 0x00, 0x00, 0x00)); _colors.push_back(UI_Color(false, 0xd0, 0xd0, 0xd0)); } UI_Gtk_MuglerPC::~UI_Gtk_MuglerPC(void) { } KCemu-0.5.1/src/ui/gtk/lc80.key0000644001050700006200000000216511131675406015466 0ustar glaubitzfbedvlc80_keyboard.xpm lc80_keyboard_pressed.xpm ####################### # LC80 Keyboard Layout ####################### # # first row # +KC_KEY_RESET :26,260,30,20 =26,260,30,20 ?Key: Escape +KC_KEY_F1 :70,260,30,20 =70,260,30,20 ?Key: F1 +KC_KEY_F2 :114,260,30,20 =114,260,30,20 ?Key: F2 ++ :158,260,30,20 =158,260,30,20 +- :202,260,30,20 =202,260,30,20 # # second row # +KC_KEY_NMI :26,298,30,20 =26,298,30,20 ?Key: F8 +c :70,298,30,20 =70,298,30,20 +d :114,298,30,20 =114,298,30,20 +e :158,298,30,20 =158,298,30,20 +f :202,298,30,20 =202,298,30,20 # # third row # +KC_KEY_F4 :26,336,30,20 =26,336,30,20 ?Key: F4 +8 :70,336,30,20 =70,336,30,20 +9 :114,336,30,20 =114,336,30,20 +a :158,336,30,20 =158,336,30,20 +b :202,336,30,20 =202,336,30,20 # # fourth row # +KC_KEY_F3 :26,374,30,20 =26,374,30,20 ?Key: F3 +4 :70,374,30,20 =70,374,30,20 +5 :114,374,30,20 =114,374,30,20 +6 :158,374,30,20 =158,374,30,20 +7 :202,374,30,20 =202,374,30,20 # # fifth row # +KC_KEY_ENTER :26,412,30,20 =26,412,30,20 ?Key: Enter +0 :70,412,30,20 =70,412,30,20 +1 :114,412,30,20 =114,412,30,20 +2 :158,412,30,20 =158,412,30,20 +3 :202,412,30,20 =202,412,30,20 KCemu-0.5.1/src/ui/gtk/info.cc0000644001050700006200000003604011345001576015445 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/z80.h" #include "kc/pio.h" #include "kc/ctc.h" #include "kc/memory.h" #include "ui/gtk/cmd.h" #include "ui/gtk/info.h" #include "libgtkex/libgtkex.h" class CMD_info_window_toggle : public CMD { private: InfoWindow *_w; public: CMD_info_window_toggle(InfoWindow *w) : CMD("ui-info-window-toggle") { _w = w; register_cmd("ui-info-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; void InfoWindow::update(GtkWidget *w, InfoWindow *self) { int p; p = gtk_notebook_current_page(GTK_NOTEBOOK(self->_w.notebook)); self->do_update(p); } void InfoWindow::switch_page(GtkWidget *w, GtkNotebookPage *page, gint page_num, InfoWindow *self) { self->do_update(page_num); } void InfoWindow::do_update_cpu(void) { word_t b, m; char buf[20]; unsigned int a; word_t af, bc, de, hl, ix, iy, sp, pc; struct { int reg; const char *fmt, *name; word_t *val; int shift, mask; } r[] = { { A, "%02xh", "A", &af, 8, 0xff }, { F, "%02xh", "F", &af, 0, 0xff }, { B, "%02xh", "B", &bc, 8, 0xff }, { C, "%02xh", "C", &bc, 0, 0xff }, { D, "%02xh", "D", &de, 8, 0xff }, { E, "%02xh", "E", &de, 0, 0xff }, { H, "%02xh", "H", &hl, 8, 0xff }, { L, "%02xh", "L", &hl, 0, 0xff }, { IX, "%04xh", "IX", &ix, 0, 0xffff }, { IY, "%04xh", "IY", &iy, 0, 0xffff }, { SP, "%04xh", "SP", &sp, 0, 0xffff }, { BC, "%04xh", "BC", &bc, 0, 0xffff }, { DE, "%04xh", "DE", &de, 0, 0xffff }, { HL, "%04xh", "HL", &hl, 0, 0xffff }, { PC, "%04xh", "PC", &pc, 0, 0xffff }, }; af = z80->getAF(); bc = z80->getBC(); de = z80->getDE(); hl = z80->getHL(); ix = z80->getIX(); iy = z80->getIY(); sp = z80->getSP(); pc = z80->getPC(); for (a = 0;a < (sizeof(r) / sizeof(r[0]));a++) { b = (*(r[a].val) >> r[a].shift) & r[a].mask; sprintf(buf, r[a].fmt, b); gtk_label_set(GTK_LABEL(_cpu.reg_lh[r[a].reg]), buf); sprintf(buf, "%d", b); gtk_label_set(GTK_LABEL(_cpu.reg_ld[r[a].reg]), buf); if (r[a].mask == 0xffff) { m = ((memory->memRead8(b)) | (memory->memRead8(b + 1) << 8)); sprintf(buf, "(%s) = %04xh", r[a].name, m); gtk_label_set(GTK_LABEL(_cpu.reg_lp[r[a].reg]), buf); } else { //gtk_led_line_set_value(GTK_LED_LINE(_cpu.reg_led[r[a].reg]), b); } } } void InfoWindow::do_update_pio(void) { byte_t a; char buf[10]; const char *mode[] = { _("byte output"), _("byte input"), _("byte input/output"), _("bit input/output") }; /* * channel a */ gtk_label_set(GTK_LABEL(_pio.mode_v[A]), mode[pio->getModeA()]); gtk_label_set(GTK_LABEL(_pio.irq_v[A]), (pio->getIRQA() ? "enabled" : "disabled")); a = pio->getIRQVectorA(); sprintf(buf, "%02xh (%d)", a, a); gtk_label_set(GTK_LABEL(_pio.irqvec_v[A]), buf); /* * channel b */ gtk_label_set(GTK_LABEL(_pio.mode_v[B]), mode[pio->getModeB()]); gtk_label_set(GTK_LABEL(_pio.irq_v[B]), (pio->getIRQB() ? "enabled" : "disabled")); a = pio->getIRQVectorB(); sprintf(buf, "%02xh (%d)", a, a); gtk_label_set(GTK_LABEL(_pio.irqvec_v[B]), buf); } void InfoWindow::do_update_ctc(void) { int a, c; char buf[20]; for (c = 0;c < 4;c++) { gtk_label_set(GTK_LABEL(_ctc.irq_v[c]), (ctc->getIRQ(c) ? "enabled" : "disabled")); a = ctc->getIRQVector(c); sprintf(buf, "%02xh (%d)", a, a); gtk_label_set(GTK_LABEL(_ctc.irqvec_v[c]), buf); } } void InfoWindow::do_update(int page) { switch (page) { case 0: do_update_cpu(); break; case 1: do_update_pio(); break; case 2: do_update_ctc(); break; } } InfoWindow::InfoWindow(void) { _cmd = new CMD_info_window_toggle(this); } InfoWindow::~InfoWindow(void) { delete _cmd; } GtkWidget * InfoWindow::create_reg(int reg, const char *frame_title, int led) { _cpu.reg_f[reg] = gtk_frame_new(frame_title); /* * vbox */ _cpu.reg_v[reg] = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(_cpu.reg_f[reg]), _cpu.reg_v[reg]); gtk_widget_show(_cpu.reg_v[reg]); if (led) { /* * led line */ _cpu.reg_lp[reg] = NULL; _cpu.reg_led[reg] = gtk_led_line_new(8); gtk_box_pack_start(GTK_BOX(_cpu.reg_v[reg]), _cpu.reg_led[reg], TRUE, TRUE, 0); gtk_widget_show(_cpu.reg_led[reg]); } else { /* * label */ _cpu.reg_led[reg] = NULL; _cpu.reg_lp[reg] = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(_cpu.reg_lp[reg]), 1, 0.5); gtk_misc_set_padding(GTK_MISC(_cpu.reg_lp[reg]), 4, 2); gtk_box_pack_start(GTK_BOX(_cpu.reg_v[reg]), _cpu.reg_lp[reg], TRUE, TRUE, 0); gtk_widget_show(_cpu.reg_lp[reg]); } /* * hbox */ _cpu.reg_h[reg] = gtk_hbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(_cpu.reg_v[reg]), _cpu.reg_h[reg]); gtk_widget_show(_cpu.reg_h[reg]); _cpu.reg_lh[reg] = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(_cpu.reg_lh[reg]), 0, 0.5); gtk_misc_set_padding(GTK_MISC(_cpu.reg_lh[reg]), 4, 2); gtk_box_pack_start(GTK_BOX(_cpu.reg_h[reg]), _cpu.reg_lh[reg], TRUE, TRUE, 0); gtk_widget_show(_cpu.reg_lh[reg]); _cpu.reg_ld[reg] = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(_cpu.reg_ld[reg]), 1, 0.5); gtk_misc_set_padding(GTK_MISC(_cpu.reg_ld[reg]), 4, 2); gtk_box_pack_start(GTK_BOX(_cpu.reg_h[reg]), _cpu.reg_ld[reg], TRUE, TRUE, 0); gtk_widget_show(_cpu.reg_ld[reg]); return _cpu.reg_f[reg]; } GtkWidget * InfoWindow::create_page_cpu(void) { GtkWidget *w; unsigned int a; struct { int reg; const char *name; int r1, c1, r2, c2, led; } r[] = { { A, "A", 0, 1, 0, 1, TRUE }, { F, "F", 1, 2, 0, 1, TRUE }, { PC, "PC", 2, 3, 0, 1, FALSE }, { B, "B", 0, 1, 1, 2, TRUE }, { C, "C", 1, 2, 1, 2, TRUE }, { BC, "BC", 2, 3, 1, 2, FALSE }, { D, "D", 0, 1, 2, 3, TRUE }, { E, "E", 1, 2, 2, 3, TRUE }, { DE, "DE", 2, 3, 2, 3, FALSE }, { H, "H", 0, 1, 3, 4, TRUE }, { L, "L", 1, 2, 3, 4, TRUE }, { HL, "HL", 2, 3, 3, 4, FALSE }, { IX, "IX", 0, 1, 4, 5, FALSE }, { IY, "IY", 1, 2, 4, 5, FALSE }, { SP, "SP", 2, 3, 4, 5, FALSE }, }; _cpu.table = gtk_table_new(5, 3, FALSE); gtk_container_border_width(GTK_CONTAINER(_cpu.table), 4); gtk_table_set_row_spacings(GTK_TABLE(_cpu.table), 2); gtk_table_set_col_spacings(GTK_TABLE(_cpu.table), 4); gtk_widget_show(_cpu.table); for (a = 0;a < (sizeof(r) / sizeof(r[0]));a++) { w = create_reg(r[a].reg, r[a].name, r[a].led); gtk_table_attach(GTK_TABLE(_cpu.table), w, r[a].r1, r[a].c1, r[a].r2, r[a].c2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), 0, 0); gtk_widget_show(w); } return _cpu.table; } GtkWidget * InfoWindow::create_channel_pio(int c, const char *frame_title) { /* * channel frame */ _pio.frame[c] = gtk_frame_new(frame_title); _pio.table[c] = gtk_table_new(1, 2, FALSE); gtk_container_border_width(GTK_CONTAINER(_pio.table[c]), 4); gtk_table_set_row_spacings(GTK_TABLE(_pio.table[c]), 2); gtk_table_set_col_spacings(GTK_TABLE(_pio.table[c]), 4); gtk_container_add(GTK_CONTAINER(_pio.frame[c]), _pio.table[c]); gtk_widget_show(_pio.table[c]); /* * mode */ _pio.mode_l[c] = gtk_label_new(_("Mode:")); gtk_misc_set_alignment(GTK_MISC(_pio.mode_l[c]), 0, 0.5); gtk_table_attach(GTK_TABLE(_pio.table[c]), _pio.mode_l[c], 0, 1, 0, 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); gtk_widget_show(_pio.mode_l[c]); _pio.mode_v[c] = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(_pio.mode_v[c]), 0, 0.5); gtk_table_attach(GTK_TABLE(_pio.table[c]), _pio.mode_v[c], 1, 2, 0, 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); gtk_widget_show(_pio.mode_v[c]); /* * irq */ _pio.irq_l[c] = gtk_label_new(_("IRQ:")); gtk_misc_set_alignment(GTK_MISC(_pio.irq_l[c]), 0, 0.5); gtk_table_attach(GTK_TABLE(_pio.table[c]), _pio.irq_l[c], 0, 1, 1, 2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); gtk_widget_show(_pio.irq_l[c]); _pio.irq_v[c] = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(_pio.irq_v[c]), 0, 0.5); gtk_table_attach(GTK_TABLE(_pio.table[c]), _pio.irq_v[c], 1, 2, 1, 2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); gtk_widget_show(_pio.irq_v[c]); /* * irq vector */ _pio.irqvec_l[c] = gtk_label_new(_("IRQ Vector:")); gtk_misc_set_alignment(GTK_MISC(_pio.irqvec_l[c]), 0, 0.5); gtk_table_attach(GTK_TABLE(_pio.table[c]), _pio.irqvec_l[c], 0, 1, 2, 3, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); gtk_widget_show(_pio.irqvec_l[c]); _pio.irqvec_v[c] = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(_pio.irqvec_v[c]), 0, 0.5); gtk_table_attach(GTK_TABLE(_pio.table[c]), _pio.irqvec_v[c], 1, 2, 2, 3, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); gtk_widget_show(_pio.irqvec_v[c]); return _pio.frame[c]; } GtkWidget * InfoWindow::create_page_pio() { GtkWidget *w; _pio.hbox = gtk_hbox_new(TRUE, 0); gtk_widget_show(_pio.hbox); w = create_channel_pio(A, _("Channel A")); gtk_box_pack_start(GTK_BOX(_pio.hbox), w, TRUE, TRUE, 0); gtk_widget_show(w); w = create_channel_pio(B, _("Channel B")); gtk_box_pack_start(GTK_BOX(_pio.hbox), w, TRUE, TRUE, 0); gtk_widget_show(w); return _pio.hbox; } GtkWidget * InfoWindow::create_channel_ctc(int c, const char *frame_title) { /* * channel frame */ _ctc.frame[c] = gtk_frame_new(frame_title); _ctc.table[c] = gtk_table_new(1, 2, FALSE); gtk_container_border_width(GTK_CONTAINER(_ctc.table[c]), 4); gtk_table_set_row_spacings(GTK_TABLE(_ctc.table[c]), 2); gtk_table_set_col_spacings(GTK_TABLE(_ctc.table[c]), 4); gtk_container_add(GTK_CONTAINER(_ctc.frame[c]), _ctc.table[c]); gtk_widget_show(_ctc.table[c]); /* * irq */ _ctc.irq_l[c] = gtk_label_new(_("IRQ:")); gtk_misc_set_alignment(GTK_MISC(_ctc.irq_l[c]), 0, 0.5); gtk_table_attach(GTK_TABLE(_ctc.table[c]), _ctc.irq_l[c], 0, 1, 1, 2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); gtk_widget_show(_ctc.irq_l[c]); _ctc.irq_v[c] = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(_ctc.irq_v[c]), 0, 0.5); gtk_table_attach(GTK_TABLE(_ctc.table[c]), _ctc.irq_v[c], 1, 2, 1, 2, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); gtk_widget_show(_ctc.irq_v[c]); /* * irq vector */ _ctc.irqvec_l[c] = gtk_label_new(_("IRQ Vector:")); gtk_misc_set_alignment(GTK_MISC(_ctc.irqvec_l[c]), 0, 0.5); gtk_table_attach(GTK_TABLE(_ctc.table[c]), _ctc.irqvec_l[c], 0, 1, 2, 3, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); gtk_widget_show(_ctc.irqvec_l[c]); _ctc.irqvec_v[c] = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(_ctc.irqvec_v[c]), 0, 0.5); gtk_table_attach(GTK_TABLE(_ctc.table[c]), _ctc.irqvec_v[c], 1, 2, 2, 3, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), (GtkAttachOptions)0, 0, 0); gtk_widget_show(_ctc.irqvec_v[c]); return _ctc.frame[c]; } GtkWidget * InfoWindow::create_page_ctc() { GtkWidget *w; _ctc.hbox = gtk_hbox_new(TRUE, 0); gtk_widget_show(_ctc.hbox); w = create_channel_ctc(0, _("Channel 0")); gtk_box_pack_start(GTK_BOX(_ctc.hbox), w, TRUE, TRUE, 0); gtk_widget_show(w); w = create_channel_ctc(1, _("Channel 1")); gtk_box_pack_start(GTK_BOX(_ctc.hbox), w, TRUE, TRUE, 0); gtk_widget_show(w); w = create_channel_ctc(2, _("Channel 2")); gtk_box_pack_start(GTK_BOX(_ctc.hbox), w, TRUE, TRUE, 0); gtk_widget_show(w); w = create_channel_ctc(3, _("Channel 3")); gtk_box_pack_start(GTK_BOX(_ctc.hbox), w, TRUE, TRUE, 0); gtk_widget_show(w); return _ctc.hbox; } void InfoWindow::init(void) { /* * window */ _window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_name(_window, "InfoWindow"); gtk_window_set_title(GTK_WINDOW(_window), _("KCemu: Info")); gtk_widget_set_uposition(_window, 650, 50); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(cmd_exec_sft), (char *)"ui-info-window-toggle"); // FIXME: /* * vbox */ _w.vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(_window), _w.vbox); gtk_widget_show(_w.vbox); /* * notebook */ _w.notebook = gtk_notebook_new(); gtk_box_pack_start(GTK_BOX(_w.vbox), _w.notebook, TRUE, TRUE, 0); gtk_signal_connect(GTK_OBJECT(_w.notebook), "switch_page", GTK_SIGNAL_FUNC(switch_page), this); gtk_widget_show(_w.notebook); gtk_notebook_append_page(GTK_NOTEBOOK(_w.notebook), create_page_cpu(), gtk_label_new(_("CPU"))); gtk_notebook_append_page(GTK_NOTEBOOK(_w.notebook), create_page_pio(), gtk_label_new(_("PIO"))); gtk_notebook_append_page(GTK_NOTEBOOK(_w.notebook), create_page_ctc(), gtk_label_new(_("CTC"))); /* * separator */ _w.separator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(_w.vbox), _w.separator, FALSE, FALSE, 5); gtk_widget_show(_w.separator); /* * button box */ _w.bbox = gtk_hbutton_box_new(); gtk_button_box_set_layout(GTK_BUTTON_BOX(_w.bbox), GTK_BUTTONBOX_END); gtk_box_pack_start(GTK_BOX(_w.vbox), _w.bbox, FALSE, FALSE, 5); gtk_widget_show(_w.bbox); /* * update button */ _w.b_update = gtk_button_new_with_label(_("Update")); gtk_container_add(GTK_CONTAINER(_w.bbox), _w.b_update); gtk_signal_connect(GTK_OBJECT(_w.b_update), "clicked", GTK_SIGNAL_FUNC(update), this); GTK_WIDGET_SET_FLAGS(_w.b_update, GTK_CAN_DEFAULT); gtk_widget_show(_w.b_update); /* * close button */ _w.b_close = gtk_button_new_with_label(_("Close")); gtk_container_add(GTK_CONTAINER(_w.bbox), _w.b_close); gtk_signal_connect(GTK_OBJECT(_w.b_close), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (char *)"ui-info-window-toggle"); // FIXME: GTK_WIDGET_SET_FLAGS(_w.b_close, GTK_CAN_DEFAULT); gtk_widget_grab_default(_w.b_close); gtk_widget_show(_w.b_close); } KCemu-0.5.1/src/ui/gtk/dirac.cc0000644001050700006200000001055011345001577015573 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/config.h" #ifdef HAVE_LIBDIRAC #include "kc/system.h" #include "ui/gtk/dirac.h" DiracVideoEncoder::DiracVideoEncoder(void) { _f = NULL; _buf = NULL; _image = NULL; } DiracVideoEncoder::~DiracVideoEncoder(void) { close(); } bool DiracVideoEncoder::init(const char *filename, int width, int height, int fps_den, double quality) { if (filename == NULL) return false; if (quality < 0) quality = 0; if (quality > 1) quality = 1; _f = fopen(filename, "wb+"); if (_f == NULL) return false; dirac_encoder_context_init(&_context, VIDEO_FORMAT_CUSTOM); dirac_frame_rate_t frame_rate; frame_rate.numerator = 50; frame_rate.denominator = fps_den; dirac_pix_asr_t pix_asr; pix_asr.numerator = 1; pix_asr.denominator = 1; dirac_signal_range_t signal_range; signal_range.chroma_offset = 128; signal_range.chroma_excursion = 255; signal_range.luma_offset = 0; signal_range.luma_excursion = 255; _context.src_params.width = width; _context.src_params.height = height; _context.src_params.chroma_width = width; _context.src_params.chroma_height = height; _context.src_params.chroma = format444; _context.src_params.pix_asr = pix_asr; _context.src_params.signal_range = signal_range; _context.src_params.source_sampling = 0; _context.src_params.topfieldfirst = 0; _context.src_params.frame_rate = frame_rate; if (quality == 1.0) _context.enc_params.lossless = 1; _context.enc_params.qf = 10.0 * quality; _context.enc_params.full_search = 0; _context.enc_params.combined_me = 0; _context.enc_params.num_L1 = fps_den < 5 ? 0 : 2 * fps_den; _context.instr_flag = 0; _context.decode_flag = 0; _encoder = dirac_encoder_init(&_context, 0); if (_encoder == NULL) { close(); return false; } _image_size = 3 * width * height; _buf = new byte_t[_image_size]; _image = new byte_t[_image_size]; return true; } void DiracVideoEncoder::allocate_color_rgb(int idx, int r, int g, int b) { _col[idx].y = (0.257 * r) + (0.504 * g) + (0.098 * b) + 16; _col[idx].u = -(0.148 * r) - (0.291 * g) + (0.439 * b) + 128; _col[idx].v = (0.439 * r) - (0.368 * g) - (0.071 * b) + 128; } bool DiracVideoEncoder::encode_loop() { dirac_encoder_state_t state; do { _encoder->enc_buf.buffer = _buf; _encoder->enc_buf.size = _image_size; state = dirac_encoder_output(_encoder); switch (state) { case ENC_STATE_BUFFER: break; case ENC_STATE_EOS: case ENC_STATE_AVAIL: fwrite(_encoder->enc_buf.buffer, _encoder->enc_buf.size, 1, _f); break; default: case ENC_STATE_INVALID: close(); return false; } } while (state == ENC_STATE_AVAIL); return true; } bool DiracVideoEncoder::encode(byte_t *image, byte_t *dirty) { const int count = _context.src_params.width * _context.src_params.height; for (int idx = 0;idx < count;idx++) { color_t *col = &_col[image[idx]]; _image[idx] = col->y; _image[idx + count] = col->u; _image[idx + 2 * count] = col->v; } if (dirac_encoder_load(_encoder, _image, _image_size) < 0) return false; return encode_loop(); } void DiracVideoEncoder::close(void) { if (_f != NULL) { dirac_encoder_end_sequence(_encoder); encode_loop(); dirac_encoder_close(_encoder); fclose(_f); } if (_buf != NULL) delete _buf; if (_image != NULL) delete _image; _f = NULL; _buf = NULL; _image = NULL; } #endif /* HAVE_LIBDIRAC */ KCemu-0.5.1/src/ui/gtk/ui_gtk_vcs80.cc0000644001050700006200000000364611345001576017025 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "ui/generic/ui_vcs80.h" #include "ui/gtk/ui_gtk_vcs80.h" UI_Gtk_VCS80::UI_Gtk_VCS80(void) : UI_Gtk_Base(new UI_VCS80()) { _colors.push_back(UI_Color(false, 0x00, 0x00, 0x00)); /* black */ _colors.push_back(UI_Color(false, 0x00, 0x20, 0x00)); /* really dark green */ _colors.push_back(UI_Color(false, 0x00, 0xe0, 0x00)); /* green */ _colors.push_back(UI_Color(false, 0xff, 0x8c, 0x00)); /* dark orange */ _colors.push_back(UI_Color(false, 0x9a, 0xcd, 0x32)); /* led green */ } UI_Gtk_VCS80::~UI_Gtk_VCS80(void) { } //void //UI_Gtk_VCS80::callback(void *data) //{ // int val = (int)data; // // switch (val) // { // case 0: // z80->addCallback(VCS80_CB_OFFSET, this, 0); // update(); // break; // case 1: // //VCS80_LED_CB_OFFSET = 4000, // z80->addCallback(VCS80_LED_CB_OFFSET, this, (void *)1); // led_update(); // break; // default: // DBG(0, form("KCemu/internal_error", // "UI_Gtk_VCS80: called callback() with invalid data %p\n", // data)); // break; // } //} KCemu-0.5.1/src/ui/gtk/plotter.cc0000644001050700006200000002432411345001576016205 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/kc.h" #include "kc/system.h" #include "kc/plotter.h" #include "cmd/cmd.h" #include "ui/gtk/cmd.h" #include "ui/gtk/plotter.h" class CMD_ui_plotter_window_toggle : public CMD { private: PlotterWindow *_w; public: CMD_ui_plotter_window_toggle(PlotterWindow *w) : CMD("ui-plotter-window-toggle") { _w = w; register_cmd("ui-plotter-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; void PlotterWindow::sf_expose(GtkWidget *widget, GdkEventExpose *event, gpointer data) { PlotterWindow *self = (PlotterWindow *)data; self->expose(event); } void PlotterWindow::sf_next_page(GtkWidget *widget, gpointer data) { PlotterWindow *self = (PlotterWindow *)data; plotter->show_page(); gtk_widget_queue_draw(self->_w.canvas); } void PlotterWindow::sf_save_as_png(GtkWidget *widget, gpointer data) { PlotterWindow *self = (PlotterWindow *)data; GtkWidget *filechooser = gtk_file_chooser_dialog_new(_("Save As PNG..."), GTK_WINDOW(self->_window), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(filechooser), TRUE); char *filename = NULL; if (gtk_dialog_run(GTK_DIALOG(filechooser)) == GTK_RESPONSE_ACCEPT) { filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filechooser)); } gtk_widget_destroy (filechooser); if (filename == NULL) return; plotter->save_as_png(filename); g_free(filename); } void PlotterWindow::sf_open_pdf(GtkWidget *widget, gpointer data) { PlotterWindow *self = (PlotterWindow *)data; GtkWidget *filechooser = gtk_file_chooser_dialog_new(_("Plot to PDF..."), GTK_WINDOW(self->_window), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(filechooser), TRUE); char *filename = NULL; if (gtk_dialog_run(GTK_DIALOG(filechooser)) == GTK_RESPONSE_ACCEPT) { filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filechooser)); } gtk_widget_destroy (filechooser); if (filename == NULL) return; plotter->open_pdf(filename); gtk_widget_set_sensitive(self->_w.close, TRUE); GtkEntry *entry = GTK_ENTRY(GTK_BIN(self->_w.comboboxentry)->child); gtk_entry_set_text(GTK_ENTRY(entry), filename); g_free(filename); } void PlotterWindow::sf_close_pdf(GtkWidget *widget, gpointer data) { PlotterWindow *self = (PlotterWindow *)data; plotter->close_pdf(); gtk_widget_set_sensitive(self->_w.close, FALSE); GtkEntry *entry = GTK_ENTRY(GTK_BIN(self->_w.comboboxentry)->child); gtk_entry_set_text(GTK_ENTRY(entry), ""); } void PlotterWindow::sf_bg_color(GtkColorButton *widget, gpointer data) { const double f = 65536.0; GdkColor color; gtk_color_button_get_color(widget, &color); plotter->set_bg_color((double)color.red / f, (double)color.green / f, (double)color.blue / f); } void PlotterWindow::sf_pen_color(GtkColorButton *widget, gpointer data) { const double f = 65536.0; GdkColor color; gtk_color_button_get_color(widget, &color); plotter->set_pen_color((double)color.red / f, (double)color.green / f, (double)color.blue / f); } void PlotterWindow::sf_line_width(GtkSpinButton *widget, gpointer data) { gdouble line_width = gtk_spin_button_get_value(widget); plotter->set_line_width(line_width); } void PlotterWindow::sf_origin_x(GtkSpinButton *widget, gpointer data) { gdouble origin_x = gtk_spin_button_get_value(widget); plotter->set_origin_x(origin_x); } void PlotterWindow::sf_origin_y(GtkSpinButton *widget, gpointer data) { gdouble origin_y = gtk_spin_button_get_value(widget); plotter->set_origin_y(origin_y); } void PlotterWindow::sf_display_refresh(GtkSpinButton *widget, gpointer data) { PlotterWindow *self = (PlotterWindow *)data; self->_display_refresh = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(self->_w.display_refresh)); self->init_timeout(); } void PlotterWindow::sf_show_pen(GtkToggleButton *widget, gpointer data) { plotter->set_show_pen(gtk_toggle_button_get_active(widget)); } void PlotterWindow::sf_show_plot_area(GtkToggleButton *widget, gpointer data) { plotter->set_show_plot_area(gtk_toggle_button_get_active(widget)); } PlotterWindow::PlotterWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { _display_refresh = 20; _cmd_plotter_toggle = new CMD_ui_plotter_window_toggle(this); } PlotterWindow::~PlotterWindow(void) { delete _cmd_plotter_toggle; } gboolean PlotterWindow::timeout_handler(PlotterWindow *self) { if (self->_window->window == NULL) return FALSE; if (!self->is_visible()) return FALSE; if (plotter->is_dirty()) { cairo_rectangle_t *rect = plotter->get_dirty_rectangle(); if (rect != NULL) gtk_widget_queue_draw_area(self->_w.canvas, rect->x, rect->y, rect->width, rect->height); } return TRUE; } void PlotterWindow::toggle(void) { UI_Gtk_Window::toggle(); init_timeout(); } void PlotterWindow::init_timeout() { if (_w.timeout_id != 0) g_source_remove(_w.timeout_id); if (is_visible()) _w.timeout_id = g_timeout_add(_display_refresh, (GSourceFunc)timeout_handler, this); } void PlotterWindow::init(void) { _w.timeout_id = 0; /* * plotter window */ _window = get_widget("plotter_window"); g_signal_connect(_window, "delete_event", G_CALLBACK(cmd_exec_sft), (char *)"ui-plotter-window-toggle"); // FIXME: /* * canvas, needs GDK_EXPOSURE_MASK to be set! */ _w.canvas = get_widget("main_drawingarea"); g_signal_connect(_w.canvas, "expose_event", G_CALLBACK(sf_expose), this); /* * comboboxentry */ _w.comboboxentry = get_widget("file_comboboxentry"); /* * bg color */ GdkColor bg_color; _w.bg_color = get_widget("colorbutton_bg_color"); bg_color.red = plotter->get_bg_red() * 65535; bg_color.green = plotter->get_bg_green() * 65535; bg_color.blue = plotter->get_bg_blue() * 65535; gtk_color_button_set_color(GTK_COLOR_BUTTON(_w.bg_color), &bg_color); g_signal_connect(_w.bg_color, "color-set", G_CALLBACK(sf_bg_color), this); /* * pen color */ GdkColor color; _w.pen_color = get_widget("colorbutton_pen_color"); color.red = plotter->get_pen_red() * 65535; color.green = plotter->get_pen_green() * 65535; color.blue = plotter->get_pen_blue() * 65535; gtk_color_button_set_color(GTK_COLOR_BUTTON(_w.pen_color), &color); g_signal_connect(_w.pen_color, "color-set", G_CALLBACK(sf_pen_color), this); /* * check boxes */ _w.show_pen = get_widget("checkbutton_show_pen"); g_signal_connect(_w.show_pen, "toggled", G_CALLBACK(sf_show_pen), this); _w.show_plot_area = get_widget("checkbutton_show_plot_area"); g_signal_connect(_w.show_plot_area, "toggled", G_CALLBACK(sf_show_plot_area), this); /* * buttons */ _w.open = get_widget("file_button_open"); g_signal_connect(_w.open, "clicked", G_CALLBACK(sf_open_pdf), this); _w.close = get_widget("file_button_close"); g_signal_connect(_w.close, "clicked", G_CALLBACK(sf_close_pdf), this); _w.next_page = get_widget("button_next_page"); g_signal_connect(_w.next_page, "clicked", G_CALLBACK(sf_next_page), this); _w.save_as_png = get_widget("button_save_as_png"); g_signal_connect(_w.save_as_png, "clicked", G_CALLBACK(sf_save_as_png), this); /* * spin buttons */ _w.line_width = get_widget("spinbutton_line_width"); gtk_spin_button_set_value(GTK_SPIN_BUTTON(_w.line_width), plotter->get_line_width()); g_signal_connect(_w.line_width, "value-changed", G_CALLBACK(sf_line_width), this); _w.origin_x = get_widget("spinbutton_origin_x"); gtk_spin_button_set_value(GTK_SPIN_BUTTON(_w.origin_x), plotter->get_origin_x()); g_signal_connect(_w.origin_x, "value-changed", G_CALLBACK(sf_origin_x), this); _w.origin_y = get_widget("spinbutton_origin_y"); gtk_spin_button_set_value(GTK_SPIN_BUTTON(_w.origin_y), plotter->get_origin_y()); g_signal_connect(_w.origin_y, "value-changed", G_CALLBACK(sf_origin_y), this); _w.display_refresh = get_widget("spinbutton_display_refresh"); g_signal_connect(_w.display_refresh, "value-changed", G_CALLBACK(sf_display_refresh), this); gtk_spin_button_set_value(GTK_SPIN_BUTTON(_w.display_refresh), _display_refresh); init_dialog("ui-plotter-window-toggle", "window-plotter"); } void PlotterWindow::expose(GdkEventExpose *event) { cairo_t *cr = gdk_cairo_create(_w.canvas->window); /* set a clip region for the expose event */ GdkRectangle *area = &event->area; cairo_rectangle(cr, area->x, area->y, area->width, area->height); cairo_clip(cr); cairo_surface_t *surface = plotter->get_onscreen_surface(); if (surface != NULL) { cairo_set_source_surface(cr, surface, 0, 0); cairo_paint(cr); } cairo_destroy(cr); } KCemu-0.5.1/src/ui/gtk/hedit.cc0000644001050700006200000002044711345001576015613 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "ui/error.h" #include "ui/gtk/hedit.h" EditHeaderWindow::EditHeaderWindow(void) : CMD("ui-tape-header-edit") { register_cmd("ui-tape-header-edit"); } EditHeaderWindow::~EditHeaderWindow(void) { } void EditHeaderWindow::execute(CMD_Args *args, CMD_Context context) { int a; char buf[10]; const char *name, *ptr; if (args == NULL) return; _args = args; name = args->get_string_arg("filename"); if (name == NULL) return; ptr = strrchr(name, '/'); if (ptr) { ptr++; if (*ptr != '\0') name = ptr; } if (!name) name = ""; a = 0; ptr = name; while (242) { buf[a++] = toupper(*ptr++); if (*ptr == '\0') break; if (a == 8) break; } buf[a] = '\0'; init(name, buf); } bool EditHeaderWindow::check_values(CMD_Args *args) { const char *load, *start; char *l_endptr, *s_endptr; if (!args) return false; _tape_filename = get_tape_filename(); _kc_filename = get_kc_filename(); load = get_load_address(); start = get_start_address(); _load_address = strtoul(load, &l_endptr, 0); _start_address = strtoul(start, &s_endptr, 0); if (strlen(_tape_filename) < 1) { Error::instance()->info(_("no tape-filename given!")); return false; } if (strlen(_kc_filename) < 1) { Error::instance()->info(_("no KC-filename given!")); return false; } if (!((*load != '\0') && (*l_endptr == '\0'))) { Error::instance()->info(_("error in given load address!\n\n" "valid addresses have to be in the " "range from 0 to 65535\n" "hexadecimal values need to be " "prefixed with 0x (e.g. 0x1234),\n" "octal values require a leading 0 " "(e.g. 0444)")); return false; } if (!_autostart) return true; if (!((*start != '\0') && (*s_endptr == '\0'))) { Error::instance()->info(_("error in given start address!")); return false; } return true; } void EditHeaderWindow::ok(GtkWidget * /* widget */, gpointer data) { EditHeaderWindow *self = (EditHeaderWindow *)data; if (!self->check_values(self->_args)) return; self->_args->set_string_arg("tape-filename", self->_tape_filename); self->_args->set_string_arg("kc-filename", self->_kc_filename); self->_args->set_long_arg("load-address", self->_load_address); self->_args->set_long_arg("start-address", self->_start_address); gtk_widget_destroy(self->_w.window); self->_args->call_callbacks("ui-edit-header-CB"); } void EditHeaderWindow::cancel(GtkWidget * /* widget */, gpointer data) { EditHeaderWindow *self = (EditHeaderWindow *)data; gtk_widget_destroy(self->_w.window); self->_args->call_callbacks("ui-edit-header-CB"); } int EditHeaderWindow::delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) { cancel(widget, data); return true; } void EditHeaderWindow::sf_toggle_autostart(GtkWidget *w, gpointer data) { EditHeaderWindow *self = (EditHeaderWindow *)data; self->_autostart = GTK_TOGGLE_BUTTON(w)->active; gtk_widget_set_sensitive(self->_w.start_addr, self->_autostart); } void EditHeaderWindow::init(const char *tapename, const char *kcname) { GtkWidget *w; /* * window */ _w.window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_window_set_title(GTK_WINDOW(_w.window), _("File Properties")); gtk_window_position(GTK_WINDOW(_w.window), GTK_WIN_POS_MOUSE); gtk_signal_connect(GTK_OBJECT(_w.window), "delete_event", GTK_SIGNAL_FUNC(delete_event), this); /* * vbox */ _w.vbox = gtk_vbox_new(FALSE, 0); gtk_container_border_width(GTK_CONTAINER(_w.vbox), 6); gtk_container_add(GTK_CONTAINER(_w.window), _w.vbox); gtk_widget_show(_w.vbox); /* * table */ _w.table = gtk_table_new(5, 3, FALSE); gtk_table_set_row_spacings(GTK_TABLE(_w.table), 2); gtk_table_set_col_spacings(GTK_TABLE(_w.table), 4); gtk_box_pack_start(GTK_BOX(_w.vbox), _w.table, FALSE, TRUE, 0); gtk_widget_show(_w.table); /* * tapename */ w = gtk_label_new(_("Name in tape-directory:")); gtk_table_attach_defaults(GTK_TABLE(_w.table), w, 0, 1, 1, 2); gtk_widget_show(w); _w.tapename = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(_w.tapename), tapename); gtk_table_attach_defaults(GTK_TABLE(_w.table), _w.tapename, 1, 3, 1, 2); gtk_widget_show(_w.tapename); /* * kc name */ w = gtk_label_new(_("Name in KC file-header:")); gtk_table_attach_defaults(GTK_TABLE(_w.table), w, 0, 1, 2, 3); gtk_widget_show(w); _w.kcname = gtk_entry_new(); gtk_entry_set_text(GTK_ENTRY(_w.kcname), kcname); gtk_table_attach_defaults(GTK_TABLE(_w.table), _w.kcname, 1, 3, 2, 3); gtk_widget_show(_w.kcname); /* * load addr */ w = gtk_label_new(_("Load address:")); gtk_misc_set_alignment(GTK_MISC(w), 1.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(_w.table), w, 0, 1, 3, 4); gtk_widget_show(w); _w.load_addr = gtk_entry_new(); gtk_table_attach_defaults(GTK_TABLE(_w.table), _w.load_addr, 1, 3, 3, 4); gtk_widget_show(_w.load_addr); /* * start addr */ w = gtk_label_new(_("Start address:")); gtk_misc_set_alignment(GTK_MISC(w), 1.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(_w.table), w, 0, 1, 4, 5); gtk_widget_show(w); _w.start_addr = gtk_entry_new(); gtk_table_attach_defaults(GTK_TABLE(_w.table), _w.start_addr, 1, 3, 4, 5); gtk_widget_show(_w.start_addr); /* * autostart */ w = gtk_check_button_new_with_label(_("autostart")); gtk_table_attach_defaults(GTK_TABLE(_w.table), w, 1, 3, 5, 6); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(w), TRUE); gtk_signal_connect(GTK_OBJECT(w), "toggled", GTK_SIGNAL_FUNC(sf_toggle_autostart), this); gtk_widget_show(w); /* * separator */ _w.separator = gtk_hseparator_new(); gtk_box_pack_start(GTK_BOX(_w.vbox), _w.separator, FALSE, FALSE, 5); gtk_widget_show(_w.separator); /* * button box */ _w.bbox = gtk_hbutton_box_new(); //gtk_button_box_set_spacing(GTK_BUTTON_BOX(_w.bbox), 0); gtk_button_box_set_layout(GTK_BUTTON_BOX(_w.bbox), GTK_BUTTONBOX_SPREAD); //gtk_button_box_set_child_size(GTK_BUTTON_BOX(_w.bbox), 0, 0); gtk_box_pack_start(GTK_BOX(_w.vbox), _w.bbox, FALSE, TRUE, 0); gtk_widget_show(_w.bbox); /* * ok button */ _w.b_ok = gtk_button_new_with_label("ok"); gtk_container_add(GTK_CONTAINER(_w.bbox), _w.b_ok); gtk_signal_connect(GTK_OBJECT(_w.b_ok), "clicked", GTK_SIGNAL_FUNC(ok), this); GTK_WIDGET_SET_FLAGS(_w.b_ok, GTK_CAN_DEFAULT); gtk_widget_grab_default(_w.b_ok); gtk_widget_show(_w.b_ok); /* * close button */ _w.b_close = gtk_button_new_with_label("close"); gtk_container_add(GTK_CONTAINER(_w.bbox), _w.b_close); gtk_signal_connect(GTK_OBJECT(_w.b_close), "clicked", GTK_SIGNAL_FUNC(cancel), this); GTK_WIDGET_SET_FLAGS(_w.b_close, GTK_CAN_DEFAULT); gtk_widget_show(_w.b_close); gtk_widget_show(_w.window); } KCemu-0.5.1/src/ui/gtk/screenshot.cc0000644001050700006200000002425611345001576016675 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/kc.h" #include "kc/system.h" #include "cmd/cmd.h" #include "ui/gtk/cmd.h" #include "ui/gtk/screenshot.h" #include "libgtkex/libgtkex.h" class CMD_ui_screenshot_window_toggle : public CMD { private: ScreenshotWindow *_w; public: CMD_ui_screenshot_window_toggle(ScreenshotWindow *w) : CMD("ui-screenshot-window-toggle") { _w = w; register_cmd("ui-screenshot-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; void ScreenshotWindow::on_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { ScreenshotWindow *self = (ScreenshotWindow *)user_data; self->expose(event); } void ScreenshotWindow::on_save_clicked(GtkButton *button, gpointer user_data) { ScreenshotWindow *self = (ScreenshotWindow *) user_data; self->save(); } void ScreenshotWindow::on_screenshot_clicked(GtkButton *button, gpointer user_data) { ScreenshotWindow *self = (ScreenshotWindow *) user_data; self->screenshot(); } void ScreenshotWindow::configure_spinbutton(GtkWidget *spinbutton1, GtkWidget *spinbutton2, double range) { GtkAdjustment *adj1 = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(spinbutton1)); GtkAdjustment *adj2 = gtk_spin_button_get_adjustment(GTK_SPIN_BUTTON(spinbutton2)); gtk_adjustment_set_upper(adj2, range - gtk_adjustment_get_value(adj1) - 1); gtk_widget_queue_draw(_w.canvas); } void ScreenshotWindow::on_spinbutton_left_changed(GtkSpinButton *spinbutton, gpointer user_data) { ScreenshotWindow *self = (ScreenshotWindow *)user_data; self->configure_spinbutton(self->_w.crop_left_spinbutton, self->_w.crop_right_spinbutton, self->_width); } void ScreenshotWindow::on_spinbutton_right_changed(GtkSpinButton *spinbutton, gpointer user_data) { ScreenshotWindow *self = (ScreenshotWindow *)user_data; self->configure_spinbutton(self->_w.crop_right_spinbutton, self->_w.crop_left_spinbutton, self->_width); } void ScreenshotWindow::on_spinbutton_top_changed(GtkSpinButton *spinbutton, gpointer user_data) { ScreenshotWindow *self = (ScreenshotWindow *)user_data; self->configure_spinbutton(self->_w.crop_top_spinbutton, self->_w.crop_bottom_spinbutton, self->_height); } void ScreenshotWindow::on_spinbutton_bottom_changed(GtkSpinButton *spinbutton, gpointer user_data) { ScreenshotWindow *self = (ScreenshotWindow *)user_data; self->configure_spinbutton(self->_w.crop_bottom_spinbutton, self->_w.crop_top_spinbutton, self->_height); } gboolean ScreenshotWindow::timeout_handler(ScreenshotWindow *self) { if (self->_window->window == NULL) return FALSE; if (!self->is_visible()) return FALSE; self->_offset += 1; if (self->_offset > 16) self->_offset = 0; gtk_widget_queue_draw(self->_w.canvas); return TRUE; } ScreenshotWindow::ScreenshotWindow(const char *ui_xml_file, UI_Gtk *ui) : UI_Gtk_Window(ui_xml_file) { _ui = ui; _width = 0; _height = 0; _pixbuf = NULL; _cmd_screenshot_toggle = new CMD_ui_screenshot_window_toggle(this); } ScreenshotWindow::~ScreenshotWindow(void) { delete _cmd_screenshot_toggle; } void ScreenshotWindow::init(void) { /* * screenshot window */ _window = get_widget("screenshot_window"); g_signal_connect(_window, "delete_event", G_CALLBACK(cmd_exec_sft), (char *)"ui-screenshot-window-toggle"); // FIXME: /* * canvas, needs GDK_EXPOSURE_MASK to be set! */ _w.canvas = get_widget("drawingarea"); g_signal_connect(_w.canvas, "expose_event", G_CALLBACK(on_expose_event), this); _w.button_screenshot = get_widget("dialog_button_screenshot"); g_signal_connect(_w.button_screenshot, "clicked", G_CALLBACK(on_screenshot_clicked), this); _w.button_save = get_widget("dialog_button_save"); g_signal_connect(_w.button_save, "clicked", G_CALLBACK(on_save_clicked), this); _w.format_combobox = get_widget("format_combobox"); _w.store = get_pixbuf_formats(); gtk_combo_box_set_model(GTK_COMBO_BOX(_w.format_combobox), GTK_TREE_MODEL(_w.store)); gtk_combo_box_set_active(GTK_COMBO_BOX(_w.format_combobox), 0); bind_list_model_column(GTK_COMBO_BOX(_w.format_combobox), 0, "xalign", 1, NULL); _w.filebutton = gtk_filebutton_new("Image"); GtkWidget *c = get_widget("image_file_container"); gtk_container_add(GTK_CONTAINER(c), _w.filebutton); gtk_widget_show(_w.filebutton); _w.crop_left_spinbutton = get_widget("crop_left_spinbutton"); _w.crop_right_spinbutton = get_widget("crop_right_spinbutton"); _w.crop_top_spinbutton = get_widget("crop_top_spinbutton"); _w.crop_bottom_spinbutton = get_widget("crop_bottom_spinbutton"); g_signal_connect(_w.crop_left_spinbutton, "value-changed", G_CALLBACK(on_spinbutton_left_changed), this); g_signal_connect(_w.crop_right_spinbutton, "value-changed", G_CALLBACK(on_spinbutton_right_changed), this); g_signal_connect(_w.crop_top_spinbutton, "value-changed", G_CALLBACK(on_spinbutton_top_changed), this); g_signal_connect(_w.crop_bottom_spinbutton, "value-changed", G_CALLBACK(on_spinbutton_bottom_changed), this); init_dialog("ui-screenshot-window-toggle", "window-screenshot"); } GtkListStore * ScreenshotWindow::get_pixbuf_formats(void) { GtkListStore *store = gtk_list_store_new(4, G_TYPE_STRING, G_TYPE_FLOAT, G_TYPE_STRING, G_TYPE_STRING); GtkTreeIter iter; GSList *formats = gdk_pixbuf_get_formats(); for (GSList *ptr = formats;ptr != NULL;ptr = ptr->next) { GdkPixbufFormat *format = (GdkPixbufFormat *)ptr->data; if (!gdk_pixbuf_format_is_writable(format)) continue; gchar *name = gdk_pixbuf_format_get_name(format); if (strcmp(name, "ico") == 0) continue; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, name, 1, 1.0, 2, NULL, 3, NULL, -1); if (strcmp(name, "png") == 0) gtk_list_store_set(store, &iter, 2, "compression", 3, "9", -1); if (strcmp(name, "jpeg") == 0) gtk_list_store_set(store, &iter, 2, "quality", 3, "90", -1); } g_slist_free(formats); return store; } void ScreenshotWindow::toggle(void) { UI_Gtk_Window::toggle(); if (_w.timeout_id != 0) g_source_remove(_w.timeout_id); if (!is_visible()) return; screenshot(); _w.timeout_id = g_timeout_add(200, (GSourceFunc)timeout_handler, this); } void ScreenshotWindow::screenshot(void) { if (_pixbuf != NULL) gdk_pixbuf_unref(_pixbuf); _pixbuf = _ui->get_screenshot(); int width = gdk_pixbuf_get_width(_pixbuf); int height = gdk_pixbuf_get_height(_pixbuf); if ((_width != width) || (_height != height)) { _width = width; _height = height; gtk_widget_set_size_request(_w.canvas, width, height); gtk_spin_button_set_value(GTK_SPIN_BUTTON(_w.crop_left_spinbutton), 0.0); gtk_spin_button_set_value(GTK_SPIN_BUTTON(_w.crop_right_spinbutton), 0.0); gtk_spin_button_set_value(GTK_SPIN_BUTTON(_w.crop_top_spinbutton), 0.0); gtk_spin_button_set_value(GTK_SPIN_BUTTON(_w.crop_bottom_spinbutton), 0.0); } gtk_widget_queue_draw(_w.canvas); } void ScreenshotWindow::expose(GdkEventExpose *event) { if (_pixbuf == NULL) return; GtkStyle *style = gtk_widget_get_style(_w.canvas); gdk_pixbuf_render_to_drawable(_pixbuf, _w.canvas->window, style->black_gc, 0, 0, 0, 0, _width, _height, GDK_RGB_DITHER_NONE, 0, 0); cairo_t *cr = gdk_cairo_create(_w.canvas->window); double x1 = gtk_spin_button_get_value(GTK_SPIN_BUTTON(_w.crop_left_spinbutton)); double y1 = gtk_spin_button_get_value(GTK_SPIN_BUTTON(_w.crop_top_spinbutton)); double x2 = gtk_spin_button_get_value(GTK_SPIN_BUTTON(_w.crop_right_spinbutton)); double y2 = gtk_spin_button_get_value(GTK_SPIN_BUTTON(_w.crop_bottom_spinbutton)); if (x1 + x2 + y1 + y2 < 0.5) return; // align on pixel x1 += 0.5; y1 += 0.5; x2 += 0.5; y2 += 0.5; double dash[2] = { 4.0, 12.0 }; cairo_set_line_width(cr, 1); cairo_set_source_rgb(cr, 1.0, 1.0, 1.0); cairo_move_to(cr, x1, y1); cairo_line_to(cr, _width - x2, y1); cairo_line_to(cr, _width - x2, _height - y2); cairo_line_to(cr, x1, _height - y2); cairo_line_to(cr, x1, y1); cairo_set_dash(cr, dash, 2, _offset); cairo_stroke(cr); cairo_set_source_rgb(cr, 0.0, 0.0, 0.0); cairo_move_to(cr, x1, y1); cairo_line_to(cr, _width - x2, y1); cairo_line_to(cr, _width - x2, _height - y2); cairo_line_to(cr, x1, _height - y2); cairo_line_to(cr, x1, y1); cairo_set_dash(cr, dash, 2, _offset + 8.0); cairo_stroke(cr); cairo_destroy(cr); } void ScreenshotWindow::save(void) { gchar *filename = gtk_filebutton_get_filename(GTK_FILEBUTTON(_w.filebutton)); if (filename == NULL) return; int x1 = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(_w.crop_left_spinbutton)); int y1 = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(_w.crop_top_spinbutton)); int x2 = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(_w.crop_right_spinbutton)); int y2 = gtk_spin_button_get_value_as_int(GTK_SPIN_BUTTON(_w.crop_bottom_spinbutton)); GdkPixbuf *pixbuf = gdk_pixbuf_new_subpixbuf(_pixbuf, x1, y1, _width - x2 - x1, _height - y2 - y1); if (pixbuf == NULL) return; GtkTreeIter iter; if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(_w.format_combobox), &iter)) return; gchar *type, *option, *value; gtk_tree_model_get(GTK_TREE_MODEL(_w.store), &iter, 0, &type, 2, &option, 3, &value, -1); gdk_pixbuf_save(pixbuf, filename, type, NULL, option, value, NULL); g_free(type); g_free(option); g_free(value); g_free(filename); } KCemu-0.5.1/src/ui/gtk/savemem.cc0000644001050700006200000004100411345001576016143 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "cmd/cmd.h" #include "kc/kc.h" #include "kc/memory.h" #include "ui/gtk/savemem.h" #include "ui/gtk/cmd.h" #include "libdbg/dbg.h" class CMD_ui_save_memory_window_toggle : public CMD { private: SaveMemoryWindow *_w; public: CMD_ui_save_memory_window_toggle(SaveMemoryWindow *w) : CMD("ui-save-memory-window-toggle") { _w = w; register_cmd("ui-save-memory-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; SaveMemoryWindow::SaveMemoryWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { init(); _cmd_window_toggle = new CMD_ui_save_memory_window_toggle(this); } SaveMemoryWindow::~SaveMemoryWindow(void) { delete _cmd_window_toggle; } gboolean SaveMemoryWindow::on_output(GtkSpinButton *spin_button, gpointer user_data) { GtkAdjustment *adj = gtk_spin_button_get_adjustment(spin_button); int value = (int)gtk_adjustment_get_value(adj); gchar *text = g_strdup_printf("%04X", value); gtk_entry_set_text(GTK_ENTRY(spin_button), text); g_free(text); return TRUE; } gboolean SaveMemoryWindow::on_input(GtkSpinButton *spin_button, gdouble *new_value, gpointer user_data) { const gchar *text = gtk_entry_get_text(GTK_ENTRY(spin_button)); gchar *err = NULL; unsigned long value = strtoul(text, &err, 16); if (*err) return GTK_INPUT_ERROR; *new_value = (gdouble)value; return TRUE; } void SaveMemoryWindow::on_adjustment_start_value_changed(GtkAdjustment *adjustment, gpointer user_data) { SaveMemoryWindow *self = (SaveMemoryWindow *)user_data; gdouble value_start = gtk_adjustment_get_value(adjustment); gdouble value_end = gtk_adjustment_get_value(self->_w.adjustment_end); if (value_end < value_start) { value_end = value_start; self->set_adjustment_value_with_blocked_handler(self->_w.adjustment_end, value_end, self->_w.on_adjustment_end_value_changed_id); } self->set_length_adjustment(); self->apply_selection((int)gtk_adjustment_get_value(self->_w.adjustment_start), (int)gtk_adjustment_get_value(self->_w.adjustment_end)); on_jump_to_start(self->_w.toggle_button_jump_to_start, self); } void SaveMemoryWindow::on_adjustment_end_value_changed(GtkAdjustment *adjustment, gpointer user_data) { SaveMemoryWindow *self = (SaveMemoryWindow *)user_data; gdouble value_start = gtk_adjustment_get_value(self->_w.adjustment_start); gdouble value_end = gtk_adjustment_get_value(adjustment); if (value_end < value_start) { value_start = value_end; self->set_adjustment_value_with_blocked_handler(self->_w.adjustment_start, value_start, self->_w.on_adjustment_start_value_changed_id); } self->set_length_adjustment(); self->apply_selection((int)gtk_adjustment_get_value(self->_w.adjustment_start), (int)gtk_adjustment_get_value(self->_w.adjustment_end)); on_jump_to_end(self->_w.toggle_button_jump_to_end, self); } void SaveMemoryWindow::on_adjustment_length_value_changed(GtkAdjustment *adjustment, gpointer user_data) { SaveMemoryWindow *self = (SaveMemoryWindow *)user_data; gdouble value_start = gtk_adjustment_get_value(self->_w.adjustment_start); gdouble value_length = gtk_adjustment_get_value(adjustment); gdouble value_end = value_start + value_length - 1; self->set_adjustment_value_with_blocked_handler(self->_w.adjustment_end, value_end, self->_w.on_adjustment_end_value_changed_id); self->apply_selection((int)gtk_adjustment_get_value(self->_w.adjustment_start), (int)gtk_adjustment_get_value(self->_w.adjustment_end)); on_jump_to_end(self->_w.toggle_button_jump_to_end, self); } void SaveMemoryWindow::set_length_adjustment(void) { gdouble value_start = gtk_adjustment_get_value(_w.adjustment_start); gdouble value_end = gtk_adjustment_get_value(_w.adjustment_end); // adjust upper bound before setting the new length value to prevent constraint problems _w.adjustment_length->upper = _w.adjustment_start->upper + 1 - value_start; g_signal_emit_by_name(G_OBJECT(_w.adjustment_length), "changed"); gdouble value_length = value_end - value_start + 1; set_adjustment_value_with_blocked_handler(_w.adjustment_length, value_length, _w.on_adjustment_length_value_changed_id); } void SaveMemoryWindow::set_adjustment_value_with_blocked_handler(GtkAdjustment *adjustment, gdouble value, gint handler_id) { g_signal_handler_block(adjustment, handler_id); gtk_adjustment_set_value(adjustment, value); g_signal_handler_unblock(adjustment, handler_id); } void SaveMemoryWindow::on_populate_popup(GtkTextView *textview, GtkMenu *menu, gpointer user_data) { #if 0 GtkWidget *separator = gtk_separator_menu_item_new(); gtk_menu_shell_prepend(GTK_MENU_SHELL(menu), separator); gtk_widget_show(separator); GtkWidget *bottom = gtk_image_menu_item_new_from_stock(GTK_STOCK_GOTO_BOTTOM, NULL); gtk_menu_shell_prepend(GTK_MENU_SHELL(menu), bottom); gtk_widget_show(bottom); GtkWidget *top = gtk_image_menu_item_new_from_stock(GTK_STOCK_GOTO_TOP, NULL); gtk_menu_shell_prepend(GTK_MENU_SHELL(menu), top); gtk_widget_show(top); #endif } void SaveMemoryWindow::jump_to(int line, gdouble within_margin, gboolean use_align, gdouble yalign) { GtkTextIter iter; gtk_text_buffer_get_iter_at_line(_w.text_buffer, &iter, line); gtk_text_view_scroll_to_iter(_w.text_view, &iter, within_margin, use_align, 0.0, yalign); } void SaveMemoryWindow::on_jump_to_start(GtkToggleButton *button, gpointer user_data) { SaveMemoryWindow *self = (SaveMemoryWindow *)user_data; if (gtk_toggle_button_get_active(button)) { int start_addr = (int)gtk_adjustment_get_value(self->_w.adjustment_start); self->jump_to(start_addr / 16, 0.0, TRUE, 0.1); } } void SaveMemoryWindow::on_jump_to_end(GtkToggleButton *button, gpointer user_data) { SaveMemoryWindow *self = (SaveMemoryWindow *)user_data; if (gtk_toggle_button_get_active(button)) { int end_addr = (int)gtk_adjustment_get_value(self->_w.adjustment_end); self->jump_to(end_addr / 16, 0.05, FALSE, 0.0); } } void SaveMemoryWindow::on_refresh(GtkButton *button, gpointer user_data) { SaveMemoryWindow *self = (SaveMemoryWindow *)user_data; self->refresh(); } void SaveMemoryWindow::on_save(GtkButton *button, gpointer user_data) { SaveMemoryWindow *self = (SaveMemoryWindow *)user_data; GtkWidget *filechooser = gtk_file_chooser_dialog_new(_("Save As..."), GTK_WINDOW(self->_window), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(filechooser), TRUE); char buf[1024]; int start_addr = (int)gtk_adjustment_get_value(self->_w.adjustment_start); snprintf(buf, sizeof(buf), _("memorydump_0x%04x.img"), start_addr); gtk_file_chooser_set_current_name(GTK_FILE_CHOOSER(filechooser), buf); char *filename = NULL; if (gtk_dialog_run(GTK_DIALOG(filechooser)) == GTK_RESPONSE_ACCEPT) { filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filechooser)); } gtk_widget_destroy (filechooser); if (filename == NULL) return; int end_addr = (int)gtk_adjustment_get_value(self->_w.adjustment_end); self->save(filename, start_addr, end_addr); self->hide(); g_free(filename); } void SaveMemoryWindow::save(const char *filename, int start_addr, int end_addr) { CMD_Args *args = new CMD_Args(); args->set_string_arg("filename", filename); args->set_long_arg("start-address", start_addr); args->set_long_arg("end-address", end_addr); CMD_EXEC_ARGS("kc-image-save", args); delete args; } void SaveMemoryWindow::remove_selection(int start_line, int end_line) { if (start_line == end_line) return; for (int a = start_line;a < end_line;a++) line_selected[a] = false; GtkTextIter iter, iter2; gtk_text_buffer_get_iter_at_line(_w.text_buffer, &iter, start_line); gtk_text_buffer_get_iter_at_line(_w.text_buffer, &iter2, end_line); gtk_text_buffer_remove_tag(_w.text_buffer, _w.text_tag_bold, &iter, &iter2); } void SaveMemoryWindow::apply_line_selection(int line, int bytes, int line_offset, int line_offset2, int separator_offset, int chars_per_byte, bool add) { if (bytes == 0) return; GtkTextIter iter; gtk_text_buffer_get_iter_at_line(_w.text_buffer, &iter, line); if (!gtk_text_iter_forward_chars(&iter, line_offset)) return; int chars = chars_per_byte * bytes + line_offset2; if (bytes > 7) chars += separator_offset; GtkTextIter iter2 = iter; if (!gtk_text_iter_forward_chars(&iter2, chars)) return; if (add) { gtk_text_buffer_apply_tag(_w.text_buffer, _w.text_tag_bold, &iter, &iter2); } else { line_selected[line] = false; gtk_text_buffer_remove_tag(_w.text_buffer, _w.text_tag_bold, &iter, &iter2); } } void SaveMemoryWindow::apply_selection(int start_addr, int end_addr) { int start_line = start_addr / 16; int end_line = end_addr / 16; // Remove bold tag from all lines before and after the selection // _including_ the line that contains the last byte but _not_ the // line that contains the first byte. remove_selection(0, start_line); remove_selection(end_line, NR_OF_LINES); GtkTextIter iter, iter2; for (int line = start_line;line < end_line;line++) { if (line_selected[line]) continue; line_selected[line] = true; gtk_text_buffer_get_iter_at_line(_w.text_buffer, &iter, line); if (gtk_text_iter_forward_chars(&iter, 7)) { gtk_text_buffer_get_iter_at_line(_w.text_buffer, &iter2, line + 1); gtk_text_buffer_apply_tag(_w.text_buffer, _w.text_tag_bold, &iter, &iter2); } } // order is important in case of start_line == end_line apply_line_selection(end_line, end_addr % 16 + 1, 7, 0, 2, 3, true); apply_line_selection(end_line, end_addr % 16 + 1, 56, 3, 3, 1, true); apply_line_selection(start_line, start_addr % 16, 7, 0, 2, 3, false); apply_line_selection(start_line, start_addr % 16, 56, 3, 3, 1, false); } void SaveMemoryWindow::load_memory(int start_addr, int end_addr) { char buf[20]; GtkTextIter iter, iter2; for (int line_addr = 0;line_addr < 0x10000;line_addr += 16) { snprintf(buf, sizeof(buf), "%04xh: ", line_addr); gtk_text_buffer_get_end_iter(_w.text_buffer, &iter); gtk_text_buffer_insert_with_tags(_w.text_buffer, &iter, buf, -1, _w.text_tag_italic, NULL); string line; for (int idx = 0;idx < 16;idx++) { int addr = line_addr + idx; snprintf(buf, sizeof(buf), "%02x%s", memory->memRead8(addr), (idx == 7) ? " | " : " "); line += buf; } line += " "; for (int idx = 0;idx < 16;idx++) { int addr = line_addr + idx; byte_t b = memory->memRead8(addr); int c = ((b >= 0x20) && (b < 0x7f)) ? b : '.'; snprintf(buf, sizeof(buf), "%c%s", c, (idx == 7) ? " | " : ""); line += buf; } line += "\n"; gtk_text_buffer_get_end_iter(_w.text_buffer, &iter); gtk_text_buffer_insert(_w.text_buffer, &iter, line.c_str(), -1); } gtk_text_buffer_get_start_iter(_w.text_buffer, &iter); gtk_text_buffer_get_end_iter(_w.text_buffer, &iter2); gtk_text_buffer_apply_tag(_w.text_buffer, _w.text_tag_monospace, &iter, &iter2); apply_selection(start_addr, end_addr); } void SaveMemoryWindow::refresh(void) { gtk_text_buffer_set_text(_w.text_buffer, "", 0); for (int a = 0;a < NR_OF_LINES;a++) line_selected[a] = false; if (is_visible()) { int start_addr = (int)gtk_adjustment_get_value(_w.adjustment_start); int end_addr = (int)gtk_adjustment_get_value(_w.adjustment_end); load_memory(start_addr, end_addr); } } void SaveMemoryWindow::show(void) { UI_Gtk_Window::show(); refresh(); } void SaveMemoryWindow::init(void) { _window = get_widget("save_memory_window"); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(cmd_exec_sft), (char *)"ui-save-memory-window-toggle"); // FIXME: _w.button_save = GTK_BUTTON(get_widget("dialog_button_save")); g_signal_connect(_w.button_save, "clicked", G_CALLBACK(on_save), this); _w.button_refresh = GTK_BUTTON(get_widget("dialog_button_refresh")); g_signal_connect(_w.button_refresh, "clicked", G_CALLBACK(on_refresh), this); _w.toggle_button_jump_to_start = GTK_TOGGLE_BUTTON(get_widget("toggle_button_jump_to_start")); g_signal_connect(_w.toggle_button_jump_to_start, "toggled", G_CALLBACK(on_jump_to_start), this); _w.toggle_button_jump_to_end = GTK_TOGGLE_BUTTON(get_widget("toggle_button_jump_to_end")); g_signal_connect(_w.toggle_button_jump_to_end, "toggled", G_CALLBACK(on_jump_to_end), this); _w.spin_button_start_hex = GTK_SPIN_BUTTON(get_widget("spin_button_start_hex")); _w.spin_button_start_dec = GTK_SPIN_BUTTON(get_widget("spin_button_start_dec")); _w.spin_button_end_hex = GTK_SPIN_BUTTON(get_widget("spin_button_end_hex")); _w.spin_button_end_dec = GTK_SPIN_BUTTON(get_widget("spin_button_end_dec")); _w.spin_button_length_hex = GTK_SPIN_BUTTON(get_widget("spin_button_length_hex")); _w.spin_button_length_dec = GTK_SPIN_BUTTON(get_widget("spin_button_length_dec")); _w.adjustment_start = gtk_spin_button_get_adjustment(_w.spin_button_start_hex); _w.adjustment_end = gtk_spin_button_get_adjustment(_w.spin_button_end_hex); _w.adjustment_length = gtk_spin_button_get_adjustment(_w.spin_button_length_hex); gtk_spin_button_set_adjustment(_w.spin_button_start_dec, _w.adjustment_start); gtk_spin_button_set_adjustment(_w.spin_button_end_dec, _w.adjustment_end); gtk_spin_button_set_adjustment(_w.spin_button_length_dec, _w.adjustment_length); g_signal_connect(_w.spin_button_start_hex, "output", G_CALLBACK(on_output), NULL); g_signal_connect(_w.spin_button_end_hex, "output", G_CALLBACK(on_output), NULL); g_signal_connect(_w.spin_button_length_hex, "output", G_CALLBACK(on_output), NULL); g_signal_connect(_w.spin_button_start_hex, "input", G_CALLBACK(on_input), NULL); g_signal_connect(_w.spin_button_end_hex, "input", G_CALLBACK(on_input), NULL); g_signal_connect(_w.spin_button_length_hex, "input", G_CALLBACK(on_input), NULL); _w.on_adjustment_start_value_changed_id = g_signal_connect(_w.adjustment_start, "value-changed", G_CALLBACK(on_adjustment_start_value_changed), this); _w.on_adjustment_end_value_changed_id = g_signal_connect(_w.adjustment_end, "value-changed", G_CALLBACK(on_adjustment_end_value_changed), this); _w.on_adjustment_length_value_changed_id = g_signal_connect(_w.adjustment_length, "value-changed", G_CALLBACK(on_adjustment_length_value_changed), this); _w.text_view = GTK_TEXT_VIEW(get_widget("textview")); _w.text_buffer = gtk_text_view_get_buffer(_w.text_view); _w.text_tag_bold = gtk_text_buffer_create_tag(_w.text_buffer, "bold", "weight", PANGO_WEIGHT_BOLD, "background", "#D0D0D0", "background-set", TRUE, NULL); _w.text_tag_italic = gtk_text_buffer_create_tag(_w.text_buffer, "italic", "style", PANGO_STYLE_ITALIC, NULL); _w.text_tag_monospace = gtk_text_buffer_create_tag(_w.text_buffer, "monospace", "family", "Monospace", NULL); g_signal_connect(_w.text_view, "populate-popup", G_CALLBACK(on_populate_popup), this); init_dialog("ui-save-memory-window-toggle", "window-save-memory"); } KCemu-0.5.1/src/ui/gtk/ui_gtk9.cc0000644001050700006200000000403611345001576016065 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "ui/generic/ui_9.h" #include "ui/gtk/ui_gtk9.h" UI_Gtk9::UI_Gtk9(void) : UI_Gtk_Base(new UI_9()) { _colors.push_back(UI_Color(false, 0x00, 0x00, 0x00)); /* black */ _colors.push_back(UI_Color(false, 240)); /* blue */ _colors.push_back(UI_Color(false, 120)); /* green */ _colors.push_back(UI_Color(false, 180)); /* cyan */ _colors.push_back(UI_Color(false, 0)); /* red */ _colors.push_back(UI_Color(false, 300)); /* magenta */ _colors.push_back(UI_Color(false, 60)); /* yellow */ _colors.push_back(UI_Color(false, 0xd0, 0xd0, 0xd0)); /* white */ // saturation_fg *= 0.80; // brightness_fg = 1.0; // black_level = 0.40; // white_level = 1.0; _colors.push_back(UI_Color(true, 0x20, 0x20, 0x20)); /* black */ _colors.push_back(UI_Color(true, 240)); /* blue */ _colors.push_back(UI_Color(true, 120)); /* green */ _colors.push_back(UI_Color(true, 180)); /* cyan */ _colors.push_back(UI_Color(true, 0)); /* red */ _colors.push_back(UI_Color(true, 300)); /* magenta */ _colors.push_back(UI_Color(true, 60)); /* yellow */ _colors.push_back(UI_Color(true, 0xff, 0xff, 0xff)); /* white */ } UI_Gtk9::~UI_Gtk9(void) { } KCemu-0.5.1/src/ui/gtk/Makefile.am0000644001050700006200000000324011345001577016234 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in noinst_LIBRARIES = libui_gtk.a keymapdir = $(pkgdatadir)/keymaps KEYMAPS = \ kc851.key \ kc851_keyboard.xpm \ kc851_keyboard_pressed.xpm \ kc854.key \ kc854_keyboard.xpm \ kc854_keyboard_pressed.xpm \ poly880.key \ poly880_keyboard.xpm \ poly880_keyboard_pressed.xpm \ lc80.key \ lc80_keyboard.xpm \ lc80_keyboard_pressed.xpm \ vcs80.key \ vcs80_keyboard_pressed.xpm \ vcs80_keyboard.xpm \ a5105.key \ a5105_keyboard.png \ a5105_keyboard_pressed.png keymap_DATA = $(KEYMAPS) EXTRA_DIST = $(KEYMAPS) INCLUDES = \ -I../../../include \ $(LIBTHEORA_CFLAGS) \ $(XVIDCORE_CFLAGS) \ $(LIBDIRAC_CFLAGS) \ $(LIBSCHROEDINGER_CFLAGS) \ $(LIBAVFORMAT_CFLAGS) \ $(VNCSERVER_CFLAGS) \ $(GTK_CFLAGS) \ $(SDL_CFLAGS) AM_CPPFLAGS = \ $(X11_CFLAGS) \ $(XMU_CFLAGS) libui_gtk_a_SOURCES = \ ui_gtk.cc \ ui_gtk_base.cc \ ui_gtk0.cc \ ui_gtk1.cc \ ui_gtk3.cc \ ui_gtk4.cc \ ui_gtk6.cc \ ui_gtk8.cc \ ui_gtk9.cc \ ui_gtk_kramermc.cc \ ui_gtk_muglerpc.cc \ ui_gtk_vcs80.cc \ ui_gtk_c80.cc \ cmd.cc \ window.cc \ main.cc \ disk.cc \ vdip.cc \ tape.cc \ tapeadd.cc \ info.cc \ help.cc \ about.cc \ thanks.cc \ color.cc \ module.cc \ keyboard.cc \ options.cc \ screenshot.cc \ selector.cc \ debug.cc \ copying.cc \ savemem.cc \ fbrowse.cc \ dialog.cc \ image.cc \ wav.cc \ plotter.cc \ video.cc \ theora.cc \ xvid.cc \ dirac.cc \ schro.cc \ ffmpeg.cc \ vnc.cc \ gif.cc \ hedit.cc if TARGET_LINUX bin_PROGRAMS = kcemu-remote kcemu_remote_SOURCES = kcemu-remote.c kcemu_remote_LDADD = $(X11_LIBS) $(XMU_LIBS) $(INTLLIBS) endif KCemu-0.5.1/src/ui/gtk/vnc.cc0000644001050700006200000000712611345001577015304 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/config.h" #ifdef HAVE_LIBVNCSERVER #include #include #include #include "kc/system.h" #include "ui/gtk/vnc.h" using namespace std; VncVideoEncoder::VncVideoEncoder(void) { _width = -1; _height = -1; _rfbScreen = NULL; rfbLogEnable(FALSE); } VncVideoEncoder::~VncVideoEncoder(void) { close(); } bool VncVideoEncoder::init(const char *filename, int width, int height, int fps_den, double quality) { if ((_width == width) && (_height == height) && (_rfbScreen != NULL)) { rfbMarkRectAsModified(_rfbScreen, 0, 0, _width, _height); return true; } _width = width; _height = height; char *framebuffer = (char *)new byte_t[width * height * 4]; if (_rfbScreen == NULL) { int argc[] = { 1 }; char *argv[] = { "KCemu", NULL }; _rfbScreen = rfbGetScreen(argc, argv, width, height, 8, 3, 4); _rfbScreen->desktopName = "KCemu " KCEMU_VERSION; _rfbScreen->alwaysShared = TRUE; _rfbScreen->serverFormat.trueColour = TRUE; _rfbScreen->frameBuffer = framebuffer; rfbInitServer(_rfbScreen); } else { char *oldfb = _rfbScreen->frameBuffer; rfbNewFramebuffer(_rfbScreen, framebuffer, width, height, 8, 3, 4); delete[] oldfb; rfbInitServer(_rfbScreen); } return true; } void VncVideoEncoder::allocate_color_rgb(int idx, int r, int g, int b) { _col[idx].r = r; _col[idx].g = g; _col[idx].b = b; } bool VncVideoEncoder::encode(byte_t *image, byte_t *dirty) { int x_min = _width; int x_max = -1; int y_min = _height; int y_max = -1; int d = -1; for (int y = 0;y < _height;y += 8) { for (int x = 0;x < _width;x += 8) { d++; if (dirty && !dirty[d]) continue; if (x < x_min) x_min = x; if (x > x_max) x_max = x; if (y < y_min) y_min = y; if (y > y_max) y_max = y; int z = y * _width + x; for (int yy = 0;yy < 8;yy++) { for (int xx = 0;xx < 8;xx++) { int s = 4 * (z + xx); _rfbScreen->frameBuffer[s] = _col[image[z + xx]].r; _rfbScreen->frameBuffer[s + 1] = _col[image[z + xx]].g; _rfbScreen->frameBuffer[s + 2] = _col[image[z + xx]].b; } z += _width; } } } if (x_max >= 0) { rfbMarkRectAsModified(_rfbScreen, x_min, y_min, x_max + 8, y_max + 8); } while (rfbProcessEvents(_rfbScreen, 0)); return true; } void VncVideoEncoder::close(void) { if (_rfbScreen != NULL) { rfbShutdownServer(_rfbScreen, TRUE); _rfbScreen = NULL; } } #endif /* HAVE_LIBVNCSERVER */ KCemu-0.5.1/src/ui/gtk/lc80_keyboard.xpm0000644001050700006200000077367310527416075017410 0ustar glaubitzfbedv/* XPM */ static char *lc80_keyboard[] = { /* width height num_colors chars_per_pixel */ " 256 500 117 2", /* colors */ ".. c #303030", ".# c #2f2f2f", ".a c #2e2e2e", ".b c #2d2d2d", ".c c #2c2c2c", ".d c #2b2b2b", ".e c #2a2a2a", ".f c #292929", ".g c #282828", ".h c #272727", ".i c #262626", ".j c #242424", ".k c #212121", ".l c #202020", ".m c #1f1f1f", ".n c #1e1e1e", ".o c #1d1d1d", ".p c #1c1c1c", ".q c #232323", ".r c #252525", ".s c #1a1a1a", ".t c #151515", ".u c #131313", ".v c #141414", ".w c #161616", ".x c #191919", ".y c #181818", ".z c #121212", ".A c #1b1b1b", ".B c #222222", ".C c #171717", ".D c #313131", ".E c #323232", ".F c #333333", ".G c #343434", ".H c #353535", ".I c #363636", ".J c #373737", ".K c #383838", ".L c #393939", ".M c #535251", ".N c #8d8c88", ".O c #a4a29f", ".P c #aaa8a4", ".Q c #515150", ".R c #93928e", ".S c #93918e", ".T c #494847", ".U c #464645", ".V c #93928f", ".W c #545352", ".X c #504f4e", ".Y c #8d8c89", ".Z c #a9a7a3", ".0 c #7a7976", ".1 c #555452", ".2 c #817f7c", ".3 c #4b4a48", ".4 c #444342", ".5 c #434341", ".6 c #000000", ".7 c #959490", ".8 c #71706d", ".9 c #484745", "#. c #262625", "## c #212120", "#a c #a8a6a2", "#b c #454442", "#c c #0b0b0a", "#d c #575654", "#e c #4a4947", "#f c #454543", "#g c #8e8c89", "#h c #777673", "#i c #6a6966", "#j c #333231", "#k c #474644", "#l c #95938f", "#m c #595856", "#n c #0d0d0c", "#o c #464544", "#p c #9b9a96", "#q c #4f4e4d", "#r c #4c4b49", "#s c #020202", "#t c #292827", "#u c #1e1e1d", "#v c #686764", "#w c #7b7976", "#x c #8c8b88", "#y c #a4a29e", "#z c #484747", "#A c #454544", "#B c #8d8b88", "#C c #3a3a3a", "#D c #3c3c3c", "#E c #3b3b3b", "#F c #3d3d3d", "#G c #3e3e3e", "#H c #3f3f3f", "#I c #686866", "#J c #92908d", "#K c #797876", "#L c #62615f", "#M c #8b8986", "#N c #a5a39f", "#O c #9b9995", "#P c #9e9c99", "#Q c #434342", "#R c #81807d", "#S c #a2a09d", "#T c #a6a4a0", "#U c #6d6c6a", "#V c #5d5c5b", "#W c #9d2e23", "#X c #2d2a25", "#Y c #efdeb3", /* pixels */ "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "...........................................#.#.a.a.a.a.a.a.a.a.a.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.a.a.a.a.a.a.a.a.#.#.#..........................................", ".....................................#.a.b.c.d.e.f.f.g.g.g.g.g.g.h.h.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.f.e.d.c.b.a.#......................................", "...................................a.c.e.g.i.j.k.l.m.m.n.o.n.n.n.o.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.o.n.n.n.n.m.l.k.q.r.h.e.c.a.#..................................", ".................................a.d.h.q.m.s.t.u.u.v.t.t.t.w.w.w.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.w.w.w.w.w.w.w.w.w.x.n.q.g.c.a..................................", "...............................a.d.i.l.y.v.z.u.w.x.s.A.p.n.n.n.n.n.n.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.n.n.n.n.o.n.p.o.o.n.B.g.b.#................................", ".............................#.c.h.k.C.u.v.s.m.r.h.g.f.g.g.g.g.g.g.g.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.f.g.g.f.f.f.e.d.d.f.r.j.h.d.#.D.D............................", ".............................a.e.q.x.u.t.n.r.g.g.g.f.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.d.d.d.d.c.b.b.c.d.c.a.D.E.D..........................", ".............................b.h.n.u.v.n.i.h.f.e.e.d.d.d.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.b.b.b.#.#.a.#...E.E.E..........................", "...........................#.c.r.s.u.s.i.f.f.e.c.c.c.d.d.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.b.a.a.a.......D.E.F.G.G.E.D........................", "...........................#.d.B.t.v.m.g.f.f.d.c.d.d.c.e.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.d.b.a.a.#.#.D.D.D.E.E.G.G.H.F.D........................", "...........................a.e.k.u.w.j.g.f.e.d.d.c.e.e.e.e.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.b.b.a.#.a...D.D.E.F.F.I.I.I.F.D........................", "...........................a.f.m.u.x.g.g.e.e.d.c.d.e.e.c.b.................................................................................................................................................................................................................................................................................................................................................................................................................a.b.........D.F.F.G.J.J.J.G.E........................", "...........................a.g.n.v.A.g.f.d.d.d.d.e.e.b...............................................................................................................................................................................................................................................................................................................................................................................................................................E.E.F.G.G.J.K.J.H.E........................", "...........................a.g.o.v.p.g.f.d.d.b.c.e.b.............................................................................................................................................................................................................................................................................................................................................................................................................................E.D.F.G.F.G.H.K.K.K.H.E........................", "...........................a.g.o.t.o.g.f.d.d.b.c.c...........................................D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.................................................G.G.F.G.F.G.I.L.L.K.I.E........................", "...........................b.h.p.t.n.g.e.c.c.e.e.c.........................................D.E.F.E.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D...#.#...........................................D.E.F.G.F.H.I.K.L.K.I.E........................", "...........................b.h.p.w.n.g.e.c.c.g.e.b.....................................D.D.F.G.F...a.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.c.e.c.#...........................................E.G.G.F.H.I.K.L.L.I.E........................", "...........................b.h.p.w.m.g.e.c.c.g.c.....................................D.E.F.F.F.E...a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b.d.h.h.d.a.#.......................................G.I.G.F.H.I.L.L.L.I.F.D......................", "...........................b.h.p.w.m.g.e.c.c.g.c...................................D.E.G.F.E.F.G.F.E.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D...a.f.h.g.f.d.#.....................................G.I.G.F.H.I.L.L.L.I.F.D......................", "...........................b.h.p.t.n.g.e.c.c.g.c...................................D.G.H.G.F.G.G.F.M.N.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.N.Q.#.b.d.g.j.r.c.....................................G.I.G.F.H.H.K.L.L.I.F.D......................", "...........................b.h.p.t.n.g.e.c.c.g.c.................................D.F.H.G.H.G.F.E.R.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.S...a.d.j.k.g.a...................................G.I.G.F.H.H.K.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.E.H.G.G.H.G.T.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.U.a.g.B.j.e.#.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.H.G.H.G.F.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.a.d.i.k.j.b.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.G.G.H.F.V.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.S.a.f.l.l.e.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.G.G.G.W.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.X.e.m.o.f.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.0.1.0.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.2.3.4.3.3.3.3.3.4.3.2.P.P.P.Z.P.P.P.P.P.P.P.Z.P.P.P.2.3.4.3.3.3.3.3.4.3.2.P.P.P.Z.P.P.P.P.P.P.P.Z.P.P.P.2.3.4.3.3.3.3.3.4.3.2.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.5.6.5.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.7.8.9#.###.#.#.#.#.###..9.8.7.P.P.P.Z.P.Z.P.P.P.P.P.7.8.9#.###.#.#.#.#.###..9.8.7.P.P.P.Z.P.P.P.Z.P.P.P.7.8.9#.###.#.#.#.#.###..9.8.7.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#a.7#b#c#d.P.P.P.P.P.P.P.P.P#d#c#b.7#a.P.P.P.P.P.P.P#a.7#b#c#d.P.P.P.P.P.P.P.P.P#d#c#b.7#a.P.P.P.P.P.P.P#a.7#b#c#d.P.P.P.P.P.P.P.P.P#d#c#b.7#a.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P#e.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.T.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P#f.6.4.P.P.P.P.P.P.P.T.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.T.P.P.P.P.P.P.P.T.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P#g#h#g.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.Z.P.P.P.P.P.4.6.3.P.P.P.Z.P.P.P.P.P.Z.P.P.P.3.6.4.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#i#j#k.8#l.P.P.P.P.P.P.P.P.P#l.8#k#j#i.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P#m#n#o.R#p.R.R.R.R.R#p.R#o#n#m.P.P.P.Z.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P#e.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.1.6.6.6.6.6.6.6.6.6.1.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P#m#n#o.R#p.R.R.R.R.R#p.R#o#n#m.P.P.P.Z.P.P.P.P.P.3.6#e.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#i#j#k.8#l.P.P.P.P.P.P.P.P.P#l.8#k#j#i.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.Z.P.P.P.P.P.4.6.3.P.P.P.Z.P.P.P.P.P.Z.P.P.P.3.6.4.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P#g#h#g.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.Z.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.T.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P#f.6.4.P.P.P.P.P.P.P.T.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.T.P.P.P.P.P.P.P.3.6.3.P.P.P.Z.P.P.P.P.P.P.P.P.P.3.6.T.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.3.6#e.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#e.6#q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P#a.7#b#c#d.P.P.P.P.P.P.P.P.P#d#c#b.7#a.P.P.P.P.P.P.P#a.7#b#c#d.P.P.P.P.P.P.P.P.P#d#c#b.7#a.P.P.P.P.P.P.P#a.7#b#c#d.P.P.P.P.P.P.P.P.P#d#c#b.7#a.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#r.6#s#.#t#.#.#.#.#.#.#.#.#.#.#.#u#.#v.P.P.Z.P.P.P.7.8.9#.###.#.#.#.#.###..9.8.7.P.P.P.Z.P.Z.P.P.P.P.P.7.8.9#.###.#.#.#.#.###..9.8.7.P.P.P.Z.P.P.P.Z.P.P.P.7.8.9#.###.#.#.#.#.###..9.8.7.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2.1.3.3#e.3.3.3.3.3.3.3.3.3.3.3#b.3#w.P.P.P.P.Z.P.P.P.2.3.4.3.3.3.3.3.4.3.2.P.P.P.Z.P.P.P.P.P.P.P.Z.P.P.P.2.3.4.3.3.3.3.3.4.3.2.P.P.P.Z.P.P.P.P.P.P.P.Z.P.P.P.2.3.4.3.3.3.3.3.4.3.2.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#x.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.F.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.X.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.F.F.E.F.E.R.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.S.c.h.n.n.f.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.E.E...D.E.E.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#y.b.f.B.o.k.d.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c.................................D.D.#.#.D.D#z.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#y#A.d.j.o.m.h.a.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c.................................D.D.E.......D...S.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.S.a.d.h.l.o.j.b...................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...................................D.E...b.c.a.....Q#B#y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#y#B.X.b.f.r.k.n.k.e.#...................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c.....................................D...b.e.d.b.a.b.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.d.g.q.m.m.B.g.a.....................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c.......................................D...a.c.e.h.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.j.B.m.l.i.d.a.......................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.w.m.f.e.c.c.g.c...........................................D...c.h.j.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.h.b.#.........................................G.I.G.F.H.I.L.L.L.I.F.D......................", "...........................b.h.p.w.m.f.e.c.c.g.c.............................................D...a.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.a.............................................G.I.G.F.H.I.L.L.L.I.F.D......................", "...........................b.h.p.w.m.g.e.c.c.g.c...................................................................................................................................................................................................................................................................................................................................................................................................................................G.I.G.F.H.I.L.L.L.I.F.D......................", "...........................b.h.p.w.m.g.e.c.c.g.c...................................................................................................................................................................................................................................................................................................................................................................................................................................G.I.G.F.H.I.L.L.L.I.F.D......................", "...........................a.g.o.w.m.g.e.c.c.d.b.................................................................................................................................................................................................................................................................................................................................................................................................................................F.H.I.G.F.H.I.L.L.L.I.F.D......................", "...........................a.g.n.w.n.f.e.c.c.b.b.a...............................................................................................................................................................................................................................................................................................................................................................................................................................G.H.H.G.G.I.I.L#C#C.I.F.D......................", "...........................a.f.m.w.n.f.d.c.d.b.a.b.............................................................................................................................................................................................................................................................................................................................................................................................................................F.H.G.F.G.G.I.I#C#C#C.I.E........................", "...........................a.f.k.w.n.e.d.c.b.a...............................................................................................................................................................................................................................................................................................................................................................................................................................F.H.H.G.G.H.G.I.I#C#C#C.I.E........................", "...........................#.e.B.w.p.e.d.b.a.........E.D.................................................................................................................................................................................................................................................................................................................................................................................................................F.G.H.H.G.G.H.H.I.J.J#C#C#C.I.E........................", "...........................#.d.r.x.p.e.d.c.a.#.......D.E.E.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.H.H.G.G.G.G.G.G.I.J.K#D#D.L.H.E........................", "...........................#.c.h.n.p.f.b.b.a.D.D...E.F.E.F.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.H.F.G.H.G.G.I.J.J#E#F#F.L.H.E........................", ".............................b.e.q.n.r.b.a...D.D.D.E.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.H.H.G.I.J.J.L#F#G#F.K.G.D........................", ".............................a.c.g.B.j.c.#...D.E.E.F.G.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.G.G.G.G.I.I.J.J.K#D#H#H#D.J.F.D........................", "...............................a.d.g.i.e.a.D.E.F.F.G.G.G.H.H.H.H.H.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.H.H.H.H.H.H.H.I.I.J.J.L#D#H#H#G#C.I.E.D........................", "...............................#.a.c.e.d.#.D.E.F.F.G.H.H.H.I.I.I.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.I.I.I.I.I.I.I.I.J.K#E#F#G#H#H#E.J.G.D..........................", "...................................#.#.a...E.F.I.J.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.L.L.K.K.L.L.L#C#C#D#F#F#G#G#E.K.H.E.D..........................", ".....................................D.D.E.F.F.H.J.K.K.K.K.L.L.L.K.K.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L#C#C#D#F#F#D#C.J.H.E.D............................", ".....................................D.E.E.F.G.H.I.J.J.K.K.L.L.L.K.K.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.K.J.H.F.E.D..............................", ".......................................D.D.E.F.F.G.G.H.H.H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.H.G.G.F.E.D.D................................", "...........................................D.D.D.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.D.D.D.D....................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".......................................................I#q#I#J#K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#K#J#I#q.I..................................................", "............................................#D#L#M#N#O.P#P#P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#P#P.P#O#N#M#L#D........................................", "......................................#Q#R#S#T#N.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#N#T#S#R#Q..................................", "..................................#U.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#U..............................", "................................#V.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#V............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.6.6.6.6.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.P.P.P.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.6.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.6.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.6.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.6.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.6.6.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.6.P.P.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.6.6.6.6.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.6.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.6.P.P.6.6.P.P.P.6.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.6.P.P.6.P.P.6.P.6.P.6.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.6.P.P.6.P.P.6.P.6.P.6.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.6.P.P.6.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.6.P.P.6.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.6.P.P.6.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.6.6.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.6.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.6.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.6.6.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", "................................#V.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#V............................", "..................................#U.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#U..............................", "......................................#Q#R#S#T#N.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#N#T#S#R#Q..................................", "............................................#D#L#M#N#O.P#P#P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#P#P.P#O#N#M#L#D........................................", ".......................................................I#q#I#J#K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#K#J#I#q.I..................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................" }; KCemu-0.5.1/src/ui/gtk/kc854.key0000644001050700006200000000473610527416075015567 0ustar glaubitzfbedvkc854_keyboard.xpm kc854_keyboard_pressed.xpm ############################ # KC 85/4 Keyboard Layout ############################ # # first row # +KC_KEY_F1 :37,86,46,32 =42,91,36,22 +KC_KEY_F2 :86,86,46,32 =91,91,36,22 +KC_KEY_F3 :135,86,46,32 =140,91,36,22 +KC_KEY_F4 :184,86,46,32 =189,91,36,22 +KC_KEY_F5 :233,86,46,32 =238,91,36,22 +KC_KEY_F6 :282,86,46,32 =287,91,36,22 +KC_KEY_BREAK :331,86,46,32 =336,91,36,22 +KC_KEY_STOP :380,86,46,32 =385,91,36,22 +KC_KEY_INSERT :429,86,46,32 =434,91,36,22 +KC_KEY_DEL :478,86,46,32 =483,91,36,22 +KC_KEY_CLEAR :527,86,46,32 =532,91,36,22 +KC_KEY_HOME :576,86,46,32 =581,91,36,22 # # second row # +1 :37,138,46,32 =42,143,36,22 +2 :86,138,46,32 =91,143,36,22 +3 :135,138,46,32 =140,143,36,22 +4 :184,138,46,32 =189,143,36,22 +5 :233,138,46,32 =238,143,36,22 +6 :282,138,46,32 =287,143,36,22 +7 :331,138,46,32 =336,143,36,22 +8 :380,138,46,32 =385,143,36,22 +9 :429,138,46,32 =434,143,36,22 +0 :478,138,46,32 =483,143,36,22 +: :527,138,46,32 =532,143,36,22 +- :576,138,46,32 =581,143,36,22 # # third row # +q :62,190,46,32 =67,195,36,22 +w :111,190,46,32 =116,195,36,22 +e :160,190,46,32 =165,195,36,22 +r :209,190,46,32 =214,195,36,22 +t :258,190,46,32 =263,195,36,22 +z :307,190,46,32 =312,195,36,22 +u :356,190,46,32 =361,195,36,22 +i :405,190,46,32 =410,195,36,22 +o :454,190,46,32 =459,195,36,22 +p :503,190,46,32 =508,195,36,22 +^ :552,190,46,32 =557,195,36,22 # # fourth row # +KC_KEY_SHIFT_LOCK :29,242,46,32 =34,247,36,22 +a :78,242,46,32 =83,247,36,22 +s :127,242,46,32 =132,247,36,22 +d :176,242,46,32 =181,247,36,22 +f :225,242,46,32 =230,247,36,22 +g :274,242,46,32 =279,247,36,22 +h :323,242,46,32 =328,247,36,22 +j :372,242,46,32 =377,247,36,22 +k :421,242,46,32 =426,247,36,22 +l :470,242,46,32 =475,247,36,22 ++ :519,242,46,32 =524,247,36,22 +_ :568,242,46,32 =573,247,36,22 # # fifth row # +KC_KEY_SHIFT :45,294,46,32 =50,299,36,22 +y :94,294,46,32 =99,299,36,22 +x :143,294,46,32 =148,299,36,22 +c :192,294,46,32 =197,299,36,22 +v :241,294,46,32 =246,299,36,22 +b :290,294,46,32 =295,299,36,22 +n :339,294,46,32 =344,299,36,22 +m :388,294,46,32 =393,299,36,22 +, :437,294,46,32 =442,299,36,22 +. :486,294,46,32 =491,299,36,22 +/ :535,294,46,32 =540,299,36,22 # # cursor block # +KC_KEY_UP :669,143,36,22 =669,143,36,22 +KC_KEY_LEFT :644,195,36,22 =644,195,36,22 +KC_KEY_RIGHT :696,195,36,22 =696,195,36,22 +KC_KEY_DOWN :669,247,36,22 =669,247,36,22 +KC_KEY_ENTER :669,299,36,22 =669,299,36,22 # # space bar # +KC_KEY_SPACE :157,353,321,25 =157,353,321,25 KCemu-0.5.1/src/ui/gtk/a5105_keyboard.png0000644001050700006200000001343611131675406017332 0ustar glaubitzfbedvPNG  IHDRsRGBIDATxmpT}@$`$$KZ7:B,%"pI4I t16A"ESyDhK6Z$ꋛnP${^s{~L^P8(@ p P8(@ p P8((@ pAP8a[(ȆalXQ^Գjwpơ`c9rp ULjk6jQzsI+I8|͛͜t>DdEYd`ơېu/p~~#;SܸuX;3L","KލC!;p0qI|%e?Iqt:gx(YdEYz6nyԽi4Vg,9xGg, 4gHYdE,klԍC!=|ICY+U!YdEYNTn#KEYd唋&Y.t{c/#"^7/7wCj^_TdxxnܩSYB(088ش}4loj>8h ]HO^Wu:R8pVueu<F'dfHUeEݲ"21;; yoS,N{8wv6PkkvVVQaKVZrՉ. GپXWɹsf/~d䜜XLDjytaJKY'(j~[oӿʚ1mu_+{,"_?|G,!զݣy0X6/@p pP8(@@ptldEYd9bIED{PawdEYd9ewPq?1IW #_I cNn[{Ǹ`F(R|dEYd2 -C7ϑ$U.2P]`*#"8֡ܳ> ",R_:r(_.'Cnܺ(/O_dHG8pU՜ ,"0YX8D8nsȍ7eQ8|%e?+M x|H 76ls0 cÚ't!Cs7V^^ơUհpA7Q>YKEdEYdݤơ MdOj>.",wX/8wsyHw_IO9* qEYd5¡l(fK*H'Wq8e\dEYd9aF-,",`6ƿKyOYdEYNlX˻]{c۽iiVVV~|6k>s慗wԥKM7;4t!S=oS<` П_U]YzE356D "RUYQlLΎ?>D#wOvhΫIl|qǡ쬬B]{\d]]gȥK[Z⁏O;gb]'ΙEsrb1}х"+-M|sWN@+7~ |_,/}ϯ{b222 f`pXdOߟo|_Do떯2V JK_m=Mf(;yWD &[0iֵ﮵>-""o05aZ(^ _zYD8b3tжm\ykov""p8}r:LycsWGddDF._ 1f4-mmaf׵6f¡w5m]z|yӧpo#eP8#L.NOH|$=-`r13zInKFphނyLx6oo BglÚ'rŹm Bp?WR6Ꭺ{ zhFʍY"+e*иyS"mM3a[fFi}-G*,"Kqd/{(_sXHA_IO9* G5U",m H?> 1cɆTg?+`1;:}%ehO0CGrV",J{,en=4jl*ٷԏkL#U9dEY:gcr^iߥbm^ӸIY%,9J?yzy TS]K\za3ラ>wv/@{6}-%we{VE3EdhB?xn`β_O_{-wԹ"[XZZ"L[TD&fgǟԺϊHΤIovw{ Ǩl|qǡ쬬¾XLDv5ռWD|O :?49@}s^Ȣ99f}х"+-M|wCziO|V ǭTW^qOϿzkFfΜYP "XB(7ڵk"Y_r{ ǭJK_m=M~ L8id<3"90wC 8dfd̘>]A<۾bߩEē{9+/Sabߩ"#"##W/:[f eϘ6F^6_^@p)G1T嬒EYde{ 4 #_Ih`[{]m#IHU*YdEY3 # r PKzܯ&vꊠdl"rhc=;|%enHU*YdEYBpuƭ[r<&Cj).IGrV",tJҦVz&f0͛|CqP8ap$mj ذ e7-&5?l卛7vv?zM7M',Ȳʖ1'Fxܳ>/ny[dEYj(xӨ[w=yYxď?֡/=7:u:wjm**,4ռwUKV:fԺfddx8w8źOΝ3{#&b"Rpͣ kEWZ殦ӧuyK.YE(VS]zEuNϿާL22"~w;{ix([K|ۡp+Om` p܂զݣy:_X< pP8P8(@@p pP8&::9`M',rVʻ; G$cd23ԷTWoʑ# H5n]jmCҚK B79TH\_IOSn#uGjX .-&79lÑ$YK+)D{>JV9Rgƭz^xߺυ%%|ӨKbJV9RGgƭ^xwxđ:: HΑR׍T^<yzy TS]˕+WߟeKsNl.MZJ(.ڷ@sK3 fЅ/_Ҵ(/+WP8FbgkljiD23EnR}|O|w|yu8㝝/8ښUTXh>y\u+ɓsr:O5k;~w%@Z8>9wŏ,H5._iiY&ޘv2QV ǭTW^Qw݃ofh\G+-"&Mb pXl…mEcOb -JK_m=M{ssrX?(IxX9 pP8P8(@@p p8pttk~@'Y@qr*_4K`OD{ParRsgrﲶWc'^]ʒ B" #_I cNn[{G<ή9U #include "kc/system.h" #include "kc/prefs/types.h" #include "kc/prefs/prefs.h" #include "kc/mod_list.h" #include "cmd/cmd.h" #include "ui/gtk/cmd.h" #include "ui/gtk/module.h" #include "libgtkex/libgtkex.h" class CMD_ui_module_window_toggle : public CMD { private: ModuleWindow *_w; public: CMD_ui_module_window_toggle(ModuleWindow *w) : CMD("ui-module-window-toggle") { _w = w; register_cmd("ui-module-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; ModuleWindow::ModuleWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { _cmd = new CMD_ui_module_window_toggle(this); init2(); // FIXME: can't use delayed init() } ModuleWindow::~ModuleWindow(void) { delete _cmd; } void ModuleWindow::sf_color_expansion(GtkWidget *widget, gpointer data) { if (GTK_TOGGLE_BUTTON(widget)->active) module_list->insert(61, module_list->get_color_expansion()); else module_list->insert(61, NULL); } void ModuleWindow::sf_activate(GtkWidget *widget, gpointer data) { long slot = (long)data; if (GTK_CHECK_MENU_ITEM(widget)->active) { ModuleListEntry *e; e = (ModuleListEntry *)gtk_object_get_user_data(GTK_OBJECT(widget)); module_list->insert(slot, e); } } GtkWidget * ModuleWindow::create_menu(int slot) { kc_type_t type = Preferences::instance()->get_kc_type(); GtkWidget *menu = gtk_menu_new(); GSList *group = NULL; for (ModuleList::iterator it = module_list->begin();it != module_list->end();it++) { if (((*it)->get_kc_type() & type) == 0) continue; GtkWidget *menuitem = gtk_radio_menu_item_new_with_label(group, (*it)->get_name()); if ((*it)->get_mod() != NULL) gtk_widget_set_sensitive(menuitem, (*it)->get_mod()->is_valid()); gtk_object_set_user_data(GTK_OBJECT(menuitem), (*it)); gtk_signal_connect(GTK_OBJECT(menuitem), "activate", GTK_SIGNAL_FUNC(sf_activate), (gpointer)slot); group = gtk_radio_menu_item_group(GTK_RADIO_MENU_ITEM(menuitem)); gtk_menu_append(GTK_MENU(menu), menuitem); gtk_widget_show(menuitem); } _w.g[slot] = group; return menu; } void ModuleWindow::init_device(const char *name, int base, int active_slots) { char buf[10]; int a, b, c, idx, slot; a = base / 16; /* * frame */ _w.frame[a] = gtk_frame_new(name); gtk_box_pack_start(GTK_BOX(_w.vbox), _w.frame[a], FALSE, FALSE, 0); gtk_widget_show(_w.frame[a]); /* * table */ _w.table[a] = gtk_table_new(2, 6, 0); gtk_container_border_width(GTK_CONTAINER(_w.table[a]), 4); gtk_table_set_row_spacings(GTK_TABLE(_w.table[a]), 2); gtk_table_set_col_spacings(GTK_TABLE(_w.table[a]), 4); gtk_table_set_col_spacing(GTK_TABLE(_w.table[a]), 2, 16); gtk_container_add(GTK_CONTAINER(_w.frame[a]), _w.table[a]); gtk_widget_show(_w.table[a]); for (b = 0;b < 4;b++) { /* * skip slots that are not active for the * current device (e.g. slot 0 and 4 for the * basis device) */ if ((active_slots & (1 << b)) == 0) continue; c = b ^ 3; slot = 16 * a + 4 * b; idx = slot / 4 - 2; sprintf(buf, "%X", 4 * b); _w.l[idx] = gtk_label_new(buf); gtk_misc_set_alignment(GTK_MISC(_w.l[idx]), 0, 0.5); gtk_table_attach(GTK_TABLE(_w.table[a]), _w.l[idx], 3 * (c & 1), 3 * (c & 1) + 1, (c & 2) / 2, (c & 2) / 2 + 1, GTK_FILL, GTK_FILL, 0, 0); gtk_widget_show(_w.l[idx]); _w.m[idx] = gtk_option_menu_new(); gtk_option_menu_set_menu(GTK_OPTION_MENU(_w.m[idx]), create_menu(idx)); gtk_table_attach(GTK_TABLE(_w.table[a]), _w.m[idx], 3 * (c & 1) + 1, 3 * (c & 1) + 2, (c & 2) / 2, (c & 2) / 2 + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, 0, 0); gtk_widget_show(_w.m[idx]); _w.led[idx] = gtk_led_line_new(1); gtk_table_attach(GTK_TABLE(_w.table[a]), _w.led[idx], 3 * (c & 1) + 2, 3 * (c & 1) + 3, (c & 2) / 2, (c & 2) / 2 + 1, (GtkAttachOptions)0, GTK_FILL, 0, 0); gtk_widget_show(_w.led[idx]); } } void ModuleWindow::init_device_1(const char *name, int nr_of_slots) { int a; char buf[10]; gboolean color_expansion_active; /* * frame */ _w.frame[0] = gtk_frame_new(name); gtk_box_pack_start(GTK_BOX(_w.vbox), _w.frame[0], FALSE, FALSE, 0); gtk_widget_show(_w.frame[0]); /* * table */ _w.table[0] = gtk_table_new(5, 3, 0); gtk_container_border_width(GTK_CONTAINER(_w.table[0]), 4); gtk_table_set_row_spacings(GTK_TABLE(_w.table[0]), 2); gtk_table_set_col_spacings(GTK_TABLE(_w.table[0]), 4); gtk_table_set_col_spacing(GTK_TABLE(_w.table[0]), 2, 16); gtk_container_add(GTK_CONTAINER(_w.frame[0]), _w.table[0]); gtk_widget_show(_w.table[0]); if (nr_of_slots == 0) { _w.l[0] = gtk_label_new(_("No module slots available for this computer.")); gtk_misc_set_alignment(GTK_MISC(_w.l[0]), 0, 0.5); gtk_table_attach(GTK_TABLE(_w.table[0]), _w.l[0], 0, 2, 0, 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, 0, 0); gtk_widget_show(_w.l[0]); } for (a = 0;a < nr_of_slots;a++) { snprintf(buf, 10, _("Slot %d"), nr_of_slots - a); _w.l[a] = gtk_label_new(buf); gtk_misc_set_alignment(GTK_MISC(_w.l[a]), 0, 0.5); gtk_table_attach(GTK_TABLE(_w.table[0]), _w.l[a], 0, 1, a, a + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, 0, 0); gtk_widget_show(_w.l[a]); _w.m[a] = gtk_option_menu_new(); gtk_option_menu_set_menu(GTK_OPTION_MENU(_w.m[a]), create_menu(a)); gtk_table_attach(GTK_TABLE(_w.table[0]), _w.m[a], 1, 2, a, a + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, 0, 0); gtk_widget_show(_w.m[a]); _w.led[a] = gtk_led_line_new(1); #if 0 gtk_table_attach(GTK_TABLE(_w.table[0]), _w.led[a], 2, 3, a, a + 1, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, 0, 0); #endif gtk_widget_show(_w.led[a]); } kc_type_t type = Preferences::instance()->get_kc_type(); kc_variant_t variant = Preferences::instance()->get_kc_variant(); if (type & KC_TYPE_85_1_CLASS) { color_expansion_active = false; if (type == KC_TYPE_85_1) if (variant == KC_VARIANT_85_1_11) color_expansion_active = true; if (type == KC_TYPE_87) if (variant != KC_VARIANT_87_10) color_expansion_active = true; _w.color_exp = gtk_check_button_new_with_label(_("IRM Color Expansion")); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(_w.color_exp), color_expansion_active); gtk_table_attach(GTK_TABLE(_w.table[0]), _w.color_exp, 1, 2, 4, 5, (GtkAttachOptions)(GTK_EXPAND | GTK_FILL), GTK_FILL, 0, 0); gtk_signal_connect(GTK_OBJECT(_w.color_exp), "toggled", GTK_SIGNAL_FUNC(sf_color_expansion), NULL); gtk_widget_show(_w.color_exp); } } void ModuleWindow::init(void) { /* * can't use delayed init, need to fix the insert() and * activate() methods for this */ } void ModuleWindow::init2(void) { int a; char buf[100]; memset(_w.l, 0, sizeof(GtkWidget *) * NR_OF_SLOTS); memset(_w.m, 0, sizeof(GtkWidget *) * NR_OF_SLOTS); memset(_w.led, 0, sizeof(GtkWidget *) * NR_OF_SLOTS); memset(_w.g, 0, sizeof(GSList *) * NR_OF_SLOTS); _nr_of_bd = module_list->get_nr_of_busdrivers(); /* * window */ _window = get_widget("module_window"); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(cmd_exec_sft), (char *)"ui-module-window-toggle"); // FIXME: /* * vbox */ _w.vbox = get_widget("main_vbox"); kc_type_t type = Preferences::instance()->get_kc_type(); if (Preferences::instance()->get_int_value("d004", 0) && (type & KC_TYPE_85_2_CLASS)) init_device(_("Floppy Disk Basis [F0]"), 0xf0, 3); if (type & KC_TYPE_85_2_CLASS) for (a = _nr_of_bd;a > 0;a--) { sprintf(buf, _("D002: Busdriver [%02X]"), 16 * a); init_device(buf, 16 * a, 15); } const EmulationType &emulation_type = Preferences::instance()->get_system_type()->get_emulation_type(); int module_slots = emulation_type.get_module_slots(); if (module_slots >= 0) init_device_1(_("Basis Device"), module_slots); else init_device(_("Basis Device"), 0, -module_slots); const char *help_topic_module = emulation_type.get_help_topic_module(); if (help_topic_module != NULL) g_object_set_data(G_OBJECT(_w.vbox), "help-topic", (gpointer)help_topic_module); init_dialog("ui-module-window-toggle", "window-module"); } /* * UI_ModuleInterface */ void ModuleWindow::insert(int slot, ModuleInterface *m) { int a; GSList *e; GtkObject *o; ModuleInterface *m2; e = _w.g[slot]; /* * FIXME: This depends on the fact that the GSList used for * radio_option_menu_items has the items stored in * reverse order! */ a = g_slist_length(e) - 1; while (e != 0) { o = GTK_OBJECT(e->data); m2 = ((ModuleListEntry *)gtk_object_get_user_data(o))->get_mod(); if (m2 == m) { gtk_option_menu_set_history(GTK_OPTION_MENU(_w.m[slot]), a); return; } a--; e = e->next; } } void ModuleWindow::activate(int slot, byte_t value) { if (_w.m[slot]) { gtk_widget_set_sensitive(_w.m[slot], !(value & 1)); //gtk_led_line_set_led(GTK_LED_LINE(_w.led[slot]), 0, value & 1); } } KCemu-0.5.1/src/ui/gtk/ui_gtk0.cc0000644001050700006200000000215711345001576016056 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "ui/generic/ui_0.h" #include "ui/gtk/ui_gtk0.h" UI_Gtk0::UI_Gtk0(void) : UI_Gtk_Base(new UI_0()) { _colors.push_back(UI_Color(true, 0x00, 0x00, 0x00)); _colors.push_back(UI_Color(false, 0xd0, 0xd0, 0xd0)); } UI_Gtk0::~UI_Gtk0(void) { } KCemu-0.5.1/src/ui/gtk/lc80_keyboard_pressed.xpm0000644001050700006200000077370310527416075021127 0ustar glaubitzfbedv/* XPM */ static char *lc80_keyboard_pressed[] = { /* width height num_colors chars_per_pixel */ " 256 500 117 2", /* colors */ ".. c #303030", ".# c #2f2f2f", ".a c #2e2e2e", ".b c #2d2d2d", ".c c #2c2c2c", ".d c #2b2b2b", ".e c #2a2a2a", ".f c #292929", ".g c #282828", ".h c #272727", ".i c #262626", ".j c #242424", ".k c #212121", ".l c #202020", ".m c #1f1f1f", ".n c #1e1e1e", ".o c #1d1d1d", ".p c #1c1c1c", ".q c #232323", ".r c #252525", ".s c #1a1a1a", ".t c #151515", ".u c #131313", ".v c #141414", ".w c #161616", ".x c #191919", ".y c #181818", ".z c #121212", ".A c #1b1b1b", ".B c #222222", ".C c #171717", ".D c #313131", ".E c #323232", ".F c #333333", ".G c #343434", ".H c #353535", ".I c #363636", ".J c #373737", ".K c #383838", ".L c #393939", ".M c #535251", ".N c #8d8c88", ".O c #a4a29f", ".P c #aaa8a4", ".Q c #515150", ".R c #93928e", ".S c #93918e", ".T c #494847", ".U c #464645", ".V c #93928f", ".W c #545352", ".X c #504f4e", ".Y c #8d8c89", ".Z c #a9a7a3", ".0 c #7a7976", ".1 c #555452", ".2 c #817f7c", ".3 c #4b4a48", ".4 c #444342", ".5 c #434341", ".6 c #000000", ".7 c #959490", ".8 c #71706d", ".9 c #484745", "#. c #262625", "## c #212120", "#a c #a8a6a2", "#b c #454442", "#c c #0b0b0a", "#d c #575654", "#e c #4a4947", "#f c #454543", "#g c #8e8c89", "#h c #777673", "#i c #6a6966", "#j c #333231", "#k c #474644", "#l c #95938f", "#m c #595856", "#n c #0d0d0c", "#o c #464544", "#p c #9b9a96", "#q c #4f4e4d", "#r c #4c4b49", "#s c #020202", "#t c #292827", "#u c #1e1e1d", "#v c #686764", "#w c #7b7976", "#x c #8c8b88", "#y c #a4a29e", "#z c #484747", "#A c #454544", "#B c #8d8b88", "#C c #3a3a3a", "#D c #3c3c3c", "#E c #3b3b3b", "#F c #3d3d3d", "#G c #3e3e3e", "#H c #3f3f3f", "#I c #686866", "#J c #92908d", "#K c #797876", "#L c #62615f", "#M c #8b8986", "#N c #a5a39f", "#O c #9b9995", "#P c #9e9c99", "#Q c #434342", "#R c #81807d", "#S c #a2a09d", "#T c #a6a4a0", "#U c #6d6c6a", "#V c #5d5c5b", "#W c #91493f", "#X c #484540", "#Y c #d6c29f", /* pixels */ "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "...........................................#.#.a.a.a.a.a.a.a.a.a.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.a.a.a.a.a.a.a.a.#.#.#..........................................", ".....................................#.a.b.c.d.e.f.f.g.g.g.g.g.g.h.h.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.f.e.d.c.b.a.#......................................", "...................................a.c.e.g.i.j.k.l.m.m.n.o.n.n.n.o.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.p.o.n.n.n.n.m.l.k.q.r.h.e.c.a.#..................................", ".................................a.d.h.q.m.s.t.u.u.v.t.t.t.w.w.w.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.t.w.w.w.w.w.w.w.w.w.x.n.q.g.c.a..................................", "...............................a.d.i.l.y.v.z.u.w.x.s.A.p.n.n.n.n.n.n.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.m.n.n.n.n.o.n.p.o.o.n.B.g.b.#................................", ".............................#.c.h.k.C.u.v.s.m.r.h.g.f.g.g.g.g.g.g.g.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.f.g.g.f.f.f.e.d.d.f.r.j.h.d.#.D.D............................", ".............................a.e.q.x.u.t.n.r.g.g.g.f.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.e.d.d.d.d.c.b.b.c.d.c.a.D.E.D..........................", ".............................b.h.n.u.v.n.i.h.f.e.e.d.d.d.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.b.b.b.#.#.a.#...E.E.E..........................", "...........................#.c.r.s.u.s.i.f.f.e.c.c.c.d.d.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.b.a.a.a.......D.E.F.G.G.E.D........................", "...........................#.d.B.t.v.m.g.f.f.d.c.d.d.c.e.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.g.d.b.a.a.#.#.D.D.D.E.E.G.G.H.F.D........................", "...........................a.e.k.u.w.j.g.f.e.d.d.c.e.e.e.e.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.b.b.a.#.a...D.D.E.F.F.I.I.I.F.D........................", "...........................a.f.m.u.x.g.g.e.e.d.c.d.e.e.c.b.................................................................................................................................................................................................................................................................................................................................................................................................................a.b.........D.F.F.G.J.J.J.G.E........................", "...........................a.g.n.v.A.g.f.d.d.d.d.e.e.b...............................................................................................................................................................................................................................................................................................................................................................................................................................E.E.F.G.G.J.K.J.H.E........................", "...........................a.g.o.v.p.g.f.d.d.b.c.e.b.............................................................................................................................................................................................................................................................................................................................................................................................................................E.D.F.G.F.G.H.K.K.K.H.E........................", "...........................a.g.o.t.o.g.f.d.d.b.c.c...........................................D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.................................................G.G.F.G.F.G.I.L.L.K.I.E........................", "...........................b.h.p.t.n.g.e.c.c.e.e.c.........................................D.E.F.E.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D...#.#...........................................D.E.F.G.F.H.I.K.L.K.I.E........................", "...........................b.h.p.w.n.g.e.c.c.g.e.b.....................................D.D.F.G.F...a.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.b.c.e.c.#...........................................E.G.G.F.H.I.K.L.L.I.E........................", "...........................b.h.p.w.m.g.e.c.c.g.c.....................................D.E.F.F.F.E...a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.a.b.d.h.h.d.a.#.......................................G.I.G.F.H.I.L.L.L.I.F.D......................", "...........................b.h.p.w.m.g.e.c.c.g.c...................................D.E.G.F.E.F.G.F.E.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D.D...a.f.h.g.f.d.#.....................................G.I.G.F.H.I.L.L.L.I.F.D......................", "...........................b.h.p.t.n.g.e.c.c.g.c...................................D.G.H.G.F.G.G.F.M.N.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.N.Q.#.b.d.g.j.r.c.....................................G.I.G.F.H.H.K.L.L.I.F.D......................", "...........................b.h.p.t.n.g.e.c.c.g.c.................................D.F.H.G.H.G.F.E.R.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.S...a.d.j.k.g.a...................................G.I.G.F.H.H.K.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.E.H.G.G.H.G.T.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.U.a.g.B.j.e.#.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.H.G.H.G.F.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.O.a.d.i.k.j.b.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.G.G.H.F.V.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.S.a.f.l.l.e.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.G.G.G.W.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.X.e.m.o.f.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.0.1.0.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.2.3.4.3.3.3.3.3.4.3.2.P.P.P.Z.P.P.P.P.P.P.P.Z.P.P.P.2.3.4.3.3.3.3.3.4.3.2.P.P.P.Z.P.P.P.P.P.P.P.Z.P.P.P.2.3.4.3.3.3.3.3.4.3.2.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.5.6.5.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.7.8.9#.###.#.#.#.#.###..9.8.7.P.P.P.Z.P.Z.P.P.P.P.P.7.8.9#.###.#.#.#.#.###..9.8.7.P.P.P.Z.P.P.P.Z.P.P.P.7.8.9#.###.#.#.#.#.###..9.8.7.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#a.7#b#c#d.P.P.P.P.P.P.P.P.P#d#c#b.7#a.P.P.P.P.P.P.P#a.7#b#c#d.P.P.P.P.P.P.P.P.P#d#c#b.7#a.P.P.P.P.P.P.P#a.7#b#c#d.P.P.P.P.P.P.P.P.P#d#c#b.7#a.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P#e.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.T.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P#f.6.4.P.P.P.P.P.P.P.T.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.T.P.P.P.P.P.P.P.T.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P#g#h#g.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.Z.P.P.P.P.P.4.6.3.P.P.P.Z.P.P.P.P.P.Z.P.P.P.3.6.4.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#i#j#k.8#l.P.P.P.P.P.P.P.P.P#l.8#k#j#i.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P#m#n#o.R#p.R.R.R.R.R#p.R#o#n#m.P.P.P.Z.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P#e.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.1.6.6.6.6.6.6.6.6.6.1.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P#m#n#o.R#p.R.R.R.R.R#p.R#o#n#m.P.P.P.Z.P.P.P.P.P.3.6#e.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#i#j#k.8#l.P.P.P.P.P.P.P.P.P#l.8#k#j#i.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.Z.P.P.P.P.P.4.6.3.P.P.P.Z.P.P.P.P.P.Z.P.P.P.3.6.4.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P#g#h#g.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.Z.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.T.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P#f.6.4.P.P.P.P.P.P.P.T.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.T.P.P.P.P.P.P.P.3.6.3.P.P.P.Z.P.P.P.P.P.P.P.P.P.3.6.T.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.3.6#e.P.P.P.P.P.P.P.P.P.P.P.P.P.3.6.3.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#e.6#q.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P#a.7#b#c#d.P.P.P.P.P.P.P.P.P#d#c#b.7#a.P.P.P.P.P.P.P#a.7#b#c#d.P.P.P.P.P.P.P.P.P#d#c#b.7#a.P.P.P.P.P.P.P#a.7#b#c#d.P.P.P.P.P.P.P.P.P#d#c#b.7#a.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#r.6#s#.#t#.#.#.#.#.#.#.#.#.#.#.#u#.#v.P.P.Z.P.P.P.7.8.9#.###.#.#.#.#.###..9.8.7.P.P.P.Z.P.Z.P.P.P.P.P.7.8.9#.###.#.#.#.#.###..9.8.7.P.P.P.Z.P.P.P.Z.P.P.P.7.8.9#.###.#.#.#.#.###..9.8.7.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.2.1.3.3#e.3.3.3.3.3.3.3.3.3.3.3#b.3#w.P.P.P.P.Z.P.P.P.2.3.4.3.3.3.3.3.4.3.2.P.P.P.Z.P.P.P.P.P.P.P.Z.P.P.P.2.3.4.3.3.3.3.3.4.3.2.P.P.P.Z.P.P.P.P.P.P.P.Z.P.P.P.2.3.4.3.3.3.3.3.4.3.2.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.Z.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.G.Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#x.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.G.F.G.F.M.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.X.f.m.o.g.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.F.F.E.F.E.R.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.S.c.h.n.n.f.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...............................D.E.E...D.E.E.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#y.b.f.B.o.k.d.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c.................................D.D.#.#.D.D#z.O.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#y#A.d.j.o.m.h.a.................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c.................................D.D.E.......D...S.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.S.a.d.h.l.o.j.b...................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c...................................D.E...b.c.a.....Q#B#y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#y#B.X.b.f.r.k.n.k.e.#...................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c.....................................D...b.e.d.b.a.b.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.d.g.q.m.m.B.g.a.....................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.t.n.f.e.c.c.g.c.......................................D...a.c.e.h.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.r.j.B.m.l.i.d.a.......................................G.I.G.F.H.H.L.L.L.I.F.D......................", "...........................b.h.p.w.m.f.e.c.c.g.c...........................................D...c.h.j.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.q.h.b.#.........................................G.I.G.F.H.I.L.L.L.I.F.D......................", "...........................b.h.p.w.m.f.e.c.c.g.c.............................................D...a.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.c.a.............................................G.I.G.F.H.I.L.L.L.I.F.D......................", "...........................b.h.p.w.m.g.e.c.c.g.c...................................................................................................................................................................................................................................................................................................................................................................................................................................G.I.G.F.H.I.L.L.L.I.F.D......................", "...........................b.h.p.w.m.g.e.c.c.g.c...................................................................................................................................................................................................................................................................................................................................................................................................................................G.I.G.F.H.I.L.L.L.I.F.D......................", "...........................a.g.o.w.m.g.e.c.c.d.b.................................................................................................................................................................................................................................................................................................................................................................................................................................F.H.I.G.F.H.I.L.L.L.I.F.D......................", "...........................a.g.n.w.n.f.e.c.c.b.b.a...............................................................................................................................................................................................................................................................................................................................................................................................................................G.H.H.G.G.I.I.L#C#C.I.F.D......................", "...........................a.f.m.w.n.f.d.c.d.b.a.b.............................................................................................................................................................................................................................................................................................................................................................................................................................F.H.G.F.G.G.I.I#C#C#C.I.E........................", "...........................a.f.k.w.n.e.d.c.b.a...............................................................................................................................................................................................................................................................................................................................................................................................................................F.H.H.G.G.H.G.I.I#C#C#C.I.E........................", "...........................#.e.B.w.p.e.d.b.a.........E.D.................................................................................................................................................................................................................................................................................................................................................................................................................F.G.H.H.G.G.H.H.I.J.J#C#C#C.I.E........................", "...........................#.d.r.x.p.e.d.c.a.#.......D.E.E.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.H.H.G.G.G.G.G.G.I.J.K#D#D.L.H.E........................", "...........................#.c.h.n.p.f.b.b.a.D.D...E.F.E.F.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.H.F.G.H.G.G.I.J.J#E#F#F.L.H.E........................", ".............................b.e.q.n.r.b.a...D.D.D.E.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.H.H.G.I.J.J.L#F#G#F.K.G.D........................", ".............................a.c.g.B.j.c.#...D.E.E.F.G.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.F.G.G.G.G.I.I.J.J.K#D#H#H#D.J.F.D........................", "...............................a.d.g.i.e.a.D.E.F.F.G.G.G.H.H.H.H.H.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.G.H.H.H.H.H.H.H.I.I.J.J.L#D#H#H#G#C.I.E.D........................", "...............................#.a.c.e.d.#.D.E.F.F.G.H.H.H.I.I.I.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.H.I.I.I.I.I.I.I.I.J.K#E#F#G#H#H#E.J.G.D..........................", "...................................#.#.a...E.F.I.J.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.K.L.L.K.K.L.L.L#C#C#D#F#F#G#G#E.K.H.E.D..........................", ".....................................D.D.E.F.F.H.J.K.K.K.K.L.L.L.K.K.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L#C#C#D#F#F#D#C.J.H.E.D............................", ".....................................D.E.E.F.G.H.I.J.J.K.K.L.L.L.K.K.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.L.K.J.H.F.E.D..............................", ".......................................D.D.E.F.F.G.G.H.H.H.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.I.H.G.G.F.E.D.D................................", "...........................................D.D.D.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.E.D.D.D.D....................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".......................................................I#q#I#J#K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#K#J#I#q.I..................................................", "............................................#D#L#M#N#O.P#P#P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#P#P.P#O#N#M#L#D........................................", "......................................#Q#R#S#T#N.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#N#T#S#R#Q..................................", "..................................#U.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#U..............................", "................................#V.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#V............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.6.6.6.6.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.P.P.P.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.6.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.6.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.6.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.6.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.6.6.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.6.P.P.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.6.6.6.6.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.6.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.6.6.6.6.6.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.6.P.P.6.6.P.P.P.6.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.6.P.P.6.P.P.6.P.6.P.6.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.6.P.P.6.P.P.6.P.6.P.6.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.6.P.P.6.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.6.P.P.6.P.P.6.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.6.P.P.6.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.6.P.P.P.P.P.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W#W.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.6.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.6.6.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.6.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.6.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.P.P.P.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.6.6.P.P.P.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.6.6.6.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X#X.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y#Y.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.6.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", ".................................P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P............................", "................................#V.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#V............................", "..................................#U.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#U..............................", "......................................#Q#R#S#T#N.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#N#T#S#R#Q..................................", "............................................#D#L#M#N#O.P#P#P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#P#P.P#O#N#M#L#D........................................", ".......................................................I#q#I#J#K.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P.P#K#J#I#q.I..................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................" }; KCemu-0.5.1/src/ui/gtk/vcs80.key0000644001050700006200000000176310551015720015656 0ustar glaubitzfbedvvcs80_keyboard.xpm vcs80_keyboard_pressed.xpm ########################## # VCS80 Keyboard Layout ########################## # # first row # +c :14,20,76,75 =14,20,76,75 +d :90,20,76,75 =90,20,76,75 +e :166,20,76,75 =166,20,76,75 +f :242,20,76,75 =242,20,76,75 +KC_KEY_F2 :378,20,76,75 =378,20,76,75 +KC_KEY_F3 :454,20,76,75 =454,20,76,75 # # second row # +8 :14,95,76,75 =14,95,76,75 +9 :90,95,76,75 =90,95,76,75 +a :166,95,76,75 =166,95,76,75 +b :242,95,76,75 =242,95,76,75 +KC_KEY_F6 :378,95,76,75 =378,95,76,75 +KC_KEY_F5 :454,95,76,75 =454,95,76,75 # # third row # +4 :14,170,76,75 =14,170,76,75 +5 :90,170,76,75 =90,170,76,75 +6 :166,170,76,75 =166,170,76,75 +7 :242,170,76,75 =242,170,76,75 +KC_KEY_F8 :378,170,76,75 =378,170,76,75 +KC_KEY_F7 :454,170,76,75 =454,170,76,75 # # fourth row # +0 :14,245,76,75 =14,245,76,75 +1 :90,245,76,75 =90,245,76,75 +2 :166,245,76,75 =166,245,76,75 +3 :242,245,76,75 =242,245,76,75 +KC_KEY_F4 :378,245,76,75 =378,245,76,75 +KC_KEY_F1 :454,245,76,75 =454,245,76,75 KCemu-0.5.1/src/ui/gtk/xvid.cc0000644001050700006200000001031711345001577015464 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/config.h" #ifdef HAVE_LIBXVIDCORE #include #include #include #include "kc/system.h" #include "ui/gtk/xvid.h" using namespace std; XvidVideoEncoder::XvidVideoEncoder(void) { _f = NULL; _buf = NULL; _image = NULL; } XvidVideoEncoder::~XvidVideoEncoder(void) { close(); } bool XvidVideoEncoder::init(const char *filename, int width, int height, int fps_den, double quality) { if (filename == NULL) return false; if (quality < 0) quality = 0; if (quality > 1) quality = 1; _quality = quality; _f = fopen(filename, "wb+"); if (_f == NULL) return false; memset(&_gbl_init, 0, sizeof (xvid_gbl_init_t)); _gbl_init.version = XVID_VERSION; xvid_global(NULL, XVID_GBL_INIT, &_gbl_init, NULL); memset(&_enc_create, 0, sizeof (xvid_enc_create_t)); _enc_create.version = XVID_VERSION; _enc_create.width = width; _enc_create.height = height; _enc_create.zones = NULL; _enc_create.fincr = fps_den; _enc_create.fbase = 50; _enc_create.max_key_interval = 500 / fps_den; _enc_create.bquant_ratio = 150; _enc_create.bquant_offset = 100; memset(&_plugin_single, 0, sizeof(xvid_plugin_single_t)); _plugin_single.version = XVID_VERSION; _plugins[0].func = xvid_plugin_single; _plugins[0].param = &_plugin_single; _enc_create.plugins = _plugins; _enc_create.num_plugins = 1; xvid_encore(NULL, XVID_ENC_CREATE, &_enc_create, NULL); _buf = new byte_t[3 * width * height]; _image = new byte_t[3 * width * height]; return true; } void XvidVideoEncoder::allocate_color_rgb(int idx, int r, int g, int b) { _col[idx].r = r; _col[idx].g = g; _col[idx].b = b; } bool XvidVideoEncoder::encode(byte_t *image, byte_t *dirty) { int d = -1; for (int y = 0;y < _enc_create.height;y += 8) { for (int x = 0;x < _enc_create.width;x += 8) { d++; if (dirty && !dirty[d]) continue; int z = y * _enc_create.width + x; for (int yy = 0;yy < 8;yy++) { for (int xx = 0;xx < 8;xx++) { int s = 3 * (z + xx); _image[s] = _col[image[z + xx]].b; _image[s + 1] = _col[image[z + xx]].g; _image[s + 2] = _col[image[z + xx]].r; } z += _enc_create.width; } } } xvid_enc_frame_t frame; memset(&frame, 0, sizeof(xvid_enc_frame_t)); frame.version = XVID_VERSION; frame.bitstream = _buf; frame.length = -1; frame.input.plane[0] = _image; frame.input.csp = XVID_CSP_BGR; frame.input.stride[0] = 3 * _enc_create.width; frame.vol_flags = 0; frame.vop_flags = XVID_VOP_HALFPEL | XVID_VOP_TRELLISQUANT | XVID_VOP_HQACPRED; frame.type = XVID_TYPE_AUTO; frame.quant = _quality; frame.motion = XVID_ME_ADVANCEDDIAMOND16 | XVID_ME_HALFPELREFINE16 | XVID_ME_EXTSEARCH16 | XVID_ME_ADVANCEDDIAMOND8 | XVID_ME_HALFPELREFINE8 | XVID_ME_EXTSEARCH8; int size = xvid_encore(_enc_create.handle, XVID_ENC_ENCODE, &frame, NULL); return fwrite(_buf, 1, size, _f) == (size_t)size; } void XvidVideoEncoder::close(void) { if (_f != NULL) { xvid_encore(_enc_create.handle, XVID_ENC_DESTROY, NULL, NULL); fclose(_f); } if (_buf != NULL) delete _buf; if (_image != NULL) delete _image; _f = NULL; _buf = NULL; _image = NULL; } #endif /* HAVE_LIBXVIDCORE */ KCemu-0.5.1/src/ui/gtk/kc854_keyboard_pressed.xpm0000644001050700006200000233722010543272144021202 0ustar glaubitzfbedv/* XPM */ static char * kc854_keyboard_pressed_xpm[] = { "762 412 505 2", " c None", ". c #E6E6E6", "+ c #C2CAC2", "@ c #AAB6AA", "# c #A2AEA2", "$ c #E00000", "% c #CA3D39", "& c #C64742", "* c #DADADA", "= c #D2D2D2", "- c #BAC2BA", "; c #A1ADA2", "> c #98A3A6", ", c #97A3A6", "' c #9EAAA3", ") c #9FABA3", "! c #BE5E58", "~ c #DC0A09", "{ c #A4A79B", "] c #A5A398", "^ c #D81514", "/ c #C44D47", "( c #D81513", "_ c #A2ABA0", ": c #AC9187", "< c #A3AA9E", "[ c #A2AB9F", "} c #DC0808", "| c #C2534D", "1 c #A79D92", "2 c #DE0303", "3 c #A89C91", "4 c #DD0807", "5 c #C44C47", "6 c #D6D6D6", "7 c #A6B2A6", "8 c #0000EA", "9 c #575DC3", "0 c #0708E6", "a c #0809E6", "b c #090AE5", "c c #939EA8", "d c #2D31D5", "e c #0404E8", "f c #5258C5", "g c #DA100F", "h c #D32321", "i c #C05851", "j c #D32421", "k c #B18178", "l c #B1837A", "m c #B0857B", "n c #D4201E", "o c #BE5C56", "p c #DD0605", "q c #BE5D57", "r c #B47870", "s c #B47A72", "t c #AA948A", "u c #DF0201", "v c #AE8B82", "w c #D91211", "x c #BD615A", "y c #AF897F", "z c #DE0404", "A c #BC625C", "B c #DF0000", "C c #AE8A80", "D c #0506E7", "E c #8792AD", "F c #3235D3", "G c #464BCA", "H c #9CA8A4", "I c #9EA9A3", "J c #5359C5", "K c #CE322F", "L c #BE5E57", "M c #C1544E", "N c #C1554F", "O c #B96D65", "P c #C2534E", "Q c #C3514B", "R c #DD0606", "S c #AB9489", "T c #DD0706", "U c #D41F1D", "V c #B27F76", "W c #B27E76", "X c #B37C74", "Y c #DA0E0D", "Z c #B5766D", "` c #D22623", " . c #D22422", ".. c #DF0101", "+. c #B7716A", "@. c #E2E2E2", "#. c #3437D2", "$. c #1415E0", "%. c #4146CC", "&. c #99A5A5", "*. c #C05852", "=. c #B37D74", "-. c #B0857C", ";. c #A9998E", ">. c #DB0D0C", ",. c #B6746C", "'. c #DA0F0D", "). c #A79E93", "!. c #B18279", "~. c #B28078", "{. c #D32220", "]. c #A3A99E", "^. c #DE0403", "/. c #AC9086", "(. c #DA0F0E", "_. c #B0867D", ":. c #AA978D", "<. c #A3A99D", "[. c #AA968C", "}. c #A2ACA0", "|. c #CC3532", "1. c #848DAF", "2. c #4D53C7", "3. c #1618DF", "4. c #0808E6", "5. c #95A0A7", "6. c #A79F94", "7. c #A5A397", "8. c #C93E39", "9. c #A99A8F", "0. c #000000", "a. c #121312", "b. c #676F67", "c. c #6C746C", "d. c #585F58", "e. c #A2ADA1", "f. c #D61B19", "g. c #CD3531", "h. c #C05953", "i. c #CB3834", "j. c #A6A095", "k. c #DC0908", "l. c #B77169", "m. c #B7726A", "n. c #DE0505", "o. c #A3A89C", "p. c #A4A79C", "q. c #D4201D", "r. c #BF5A54", "s. c #D81312", "t. c #97A2A6", "u. c #7780B4", "v. c #0607E6", "w. c #3B40CF", "x. c #363AD1", "y. c #8B95AC", "z. c #8D98AB", "A. c #3F44CD", "B. c #DB0C0C", "C. c #AD8D83", "D. c #C8413C", "E. c #BD605A", "F. c #D51E1C", "G. c #AF877D", "H. c #BA6A63", "I. c #CD332F", "J. c #A0ACA0", "K. c #788078", "L. c #080908", "M. c #262826", "N. c #9EAA9E", "O. c #1E201E", "P. c #BC645E", "Q. c #B77068", "R. c #CD3430", "S. c #D22522", "T. c #B86D66", "U. c #D22624", "V. c #C15550", "W. c #D51E1B", "X. c #BA6962", "Y. c #CF2D2A", "Z. c #0A0AE5", "`. c #1416E0", " + c #6168BE", ".+ c #4045CD", "++ c #1112E2", "@+ c #666DBC", "#+ c #CF2D29", "$+ c #A89B90", "%+ c #C93E3A", "&+ c #C54A45", "*+ c #DC0A0A", "=+ c #B6736B", "-+ c #DB0C0B", ";+ c #B86F67", ">+ c #BF5A53", ",+ c #C54944", "'+ c #161716", ")+ c #444944", "!+ c #717971", "~+ c #666D66", "{+ c #4C514C", "]+ c #C9403B", "^+ c #BB655E", "/+ c #D81413", "(+ c #D61A18", "_+ c #AF877E", ":+ c #C15650", "<+ c #020202", "[+ c #A89C92", "}+ c #A4A69B", "|+ c #DB0B0A", "1+ c #BC645D", "2+ c #B28077", "3+ c #AF887F", "4+ c #030303", "5+ c #707870", "6+ c #8B958B", "7+ c #242624", "8+ c #A1ADA1", "9+ c #8F9A8F", "0+ c #8892AD", "a+ c #9CA7A4", "b+ c #CF2E2B", "c+ c #9DA9A3", "d+ c #A0ABA2", "e+ c #C93F3B", "f+ c #A6A297", "g+ c #A6A195", "h+ c #798379", "i+ c #313531", "j+ c #474D47", "k+ c #343834", "l+ c #3E42CE", "m+ c #474CCA", "n+ c #8993AD", "o+ c #1A1CDE", "p+ c #0505E7", "q+ c #1A1BDE", "r+ c #929DA8", "s+ c #0303E8", "t+ c #919CA9", "u+ c #292DD7", "v+ c #0304E8", "w+ c #0A0BE5", "x+ c #535AC4", "y+ c #AD8C82", "z+ c #CC3734", "A+ c #D02A28", "B+ c #D12926", "C+ c #B5776F", "D+ c #CF2F2B", "E+ c #7B847B", "F+ c #798279", "G+ c #7A837A", "H+ c #5960C2", "I+ c #7880B4", "J+ c #7881B4", "K+ c #5A60C1", "L+ c #2A2DD7", "M+ c #555CC3", "N+ c #565CC3", "O+ c #828BB0", "P+ c #5A61C1", "Q+ c #8A94AC", "R+ c #3337D3", "S+ c #5055C6", "T+ c #7F89B1", "U+ c #5C62C1", "V+ c #0000E9", "W+ c #2F33D4", "X+ c #494FC9", "Y+ c #484DC9", "Z+ c #D61B1A", "`+ c #D12724", " @ c #C64641", ".@ c #0F110F", "+@ c #99A4A5", "@@ c #747CB6", "#@ c #0D0EE4", "$@ c #6D76B9", "%@ c #2B2FD6", "&@ c #6C74B9", "*@ c #2326DA", "=@ c #474DCA", "-@ c #2224DA", ";@ c #9AA5A5", ">@ c #D02B28", ",@ c #B37E75", "'@ c #BA6861", ")@ c #B37C73", "!@ c #D4211F", "~@ c #B0847B", "{@ c #95A1A7", "]@ c #0C0DE4", "^@ c #7D86B2", "/@ c #5F67BF", "(@ c #6067BF", "_@ c #8D97AB", ":@ c #0E0FE3", "<@ c #8C96AB", "[@ c #1D20DC", "}@ c #4F55C6", "|@ c #545AC4", "1@ c #858FAE", "2@ c #929CA9", "3@ c #3034D4", "4@ c #1D1FDD", "5@ c #3438D2", "6@ c #1B1EDD", "7@ c #7A83B3", "8@ c #7B85B2", "9@ c #96A1A7", "0@ c #393DD0", "a@ c #0F10E3", "b@ c #686FBB", "c@ c #7F88B1", "d@ c #1719DF", "e@ c #949FA7", "f@ c #1C1EDD", "g@ c #5056C6", "h@ c #2E31D5", "i@ c #2F32D5", "j@ c #AD8E84", "k@ c #D71715", "l@ c #A9988D", "m@ c #B5786F", "n@ c #D12825", "o@ c #AB9287", "p@ c #CE312D", "q@ c #868FAE", "r@ c #BD6059", "s@ c #A5A599", "t@ c #A5A499", "u@ c #CE302D", "v@ c #BB665F", "w@ c #4349CB", "x@ c #4348CC", "y@ c #CB3A36", "z@ c #C54943", "A@ c #0102E9", "B@ c #0202E8", "C@ c #B86E66", "D@ c #4A50C8", "E@ c #5D64C0", "F@ c #1E20DC", "G@ c #0101E9", "H@ c #282AD8", "I@ c #8089B0", "J@ c #C6CAC2", "K@ c #DADEDA", "L@ c #EEEEEE", "M@ c #F2F2F2", "N@ c #EAEAEA", "O@ c #D6DAD6", "P@ c #AEB6AA", "Q@ c #CACACA", "R@ c #DEDEDE", "S@ c #DEE2DE", "T@ c #AEBAAE", "U@ c #A6B2A2", "V@ c #BEC2BE", "W@ c #E2E6E2", "X@ c #CAD2CA", "Y@ c #AAB6A6", "Z@ c #AAB2A6", "`@ c #E6EAE6", " # c #B2BEB2", ".# c #AAB2AA", "+# c #EAEEEA", "@# c #AEBAAA", "## c #CACECA", "$# c #CECECE", "%# c #C2C6C2", "&# c #CED6CE", "*# c #A6AEA2", "=# c #E2E2DE", "-# c #EAEAE6", ";# c #6E6E6E", "># c #2E2E2E", ",# c #121212", "'# c #2A2A2A", ")# c #5A5A5A", "!# c #BABABA", "~# c #969696", "{# c #222222", "]# c #3A3A3A", "^# c #8A8A8A", "/# c #A2A2A2", "(# c #AAAAAA", "_# c #3E3E3E", ":# c #D2D6CE", "<# c #464646", "[# c #DADAD6", "}# c #323232", "|# c #A6A6A6", "1# c #B2BAAE", "2# c #C6CAC6", "3# c #262626", "4# c #BEC6BE", "5# c #1E1E1E", "6# c #4A4A4A", "7# c #868686", "8# c #9A9A9A", "9# c #CED2CE", "0# c #B6BEB2", "a# c #AEB6AE", "b# c #C2C6BE", "c# c #B2B6AE", "d# c #BAC2B6", "e# c #7A7A7A", "f# c #B6C2B6", "g# c #B96B64", "h# c #BB675F", "i# c #B96B63", "j# c #D71716", "k# c #B47971", "l# c #B6756D", "m# c #CA3C37", "n# c #6A716A", "o# c #484D48", "p# c #D91311", "q# c #D02A27", "r# c #AA968B", "s# c #5B625B", "t# c #1B1E1B", "u# c #585E58", "v# c #5C625C", "w# c #BB6760", "x# c #BC635C", "y# c #BF5B55", "z# c #C34F49", "A# c #D71614", "B# c #C7443F", "C# c #D51C1A", "D# c #C44E49", "E# c #C64843", "F# c #7F887F", "G# c #161816", "H# c #060606", "I# c #4A504A", "J# c #1A1B1A", "K# c #818B81", "L# c #C54B46", "M# c #A79E94", "N# c #D51D1B", "O# c #1C1E1C", "P# c #5E655E", "Q# c #9BA79B", "R# c #5C635C", "S# c #030403", "T# c #A9988E", "U# c #BD5F58", "V# c #C8423D", "W# c #CE312E", "X# c #B96C65", "Y# c #9CA79C", "Z# c #050505", "`# c #9CA89C", " $ c #050605", ".$ c #D3221F", "+$ c #DF0202", "@$ c #CC3733", "#$ c #C05751", "$$ c #B37B72", "%$ c #B47A71", "&$ c #5F675F", "*$ c #5E645E", "=$ c #1F221F", "-$ c #778077", ";$ c #202220", ">$ c #AB9288", ",$ c #AA958B", "'$ c #494F49", ")$ c #6A726A", "!$ c #0F100F", "~$ c #3E433E", "{$ c #6B736B", "]$ c #BF5C55", "^$ c #616861", "/$ c #828B82", "($ c #CE2F2C", "_$ c #D71816", ":$ c #7E7E7E", "<$ c #565656", "[$ c #AEB2AE", "}$ c #C6CEC6", "|$ c #B6BAB2", "1$ c #5E5E5E", "2$ c #828282", "3$ c #A6AEA6", "4$ c #B2B6B2", "5$ c #C2CABE", "6$ c #8E8E8E", "7$ c #626262", "8$ c #929292", "9$ c #9E9E9E", "0$ c #666666", "a$ c #BEC6BA", "b$ c #727272", "c$ c #B2B2B2", "d$ c #B6BEB6", "e$ c #1A1A1A", "f$ c #363636", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # $ # # $ $ $ $ % & # & % # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . - # # # # # # # # # # # # # # # # # # # # # # # # # ; > , # # # ' ) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ ! # $ # # $ ~ { ~ $ # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # $ # # $ # # # ] ^ / ( ] # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # _ : # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # < < # # # [ [ # # _ : # # # # # # # [ [ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ } | 1 2 3 # # $ $ } | # $ $ $ $ # $ $ 4 5 # # # # # # # # # # # # - . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . 7 # # # # # # # # # # # # # # # # # # # # 8 8 8 8 # 9 0 a b # c d e b f # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ g { $ # # $ h i j $ # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # $ # # $ # # # # k $ l # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ } | # $ $ 4 5 # # m n $ $ $ $ $ % & # & % # # # # # # # # # # # # # # # # # # # # # # # # # o p p q # r ~ ~ s # m n # # t u # # r ~ ~ s # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # $ ! # $ # # $ # v w x # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # y z A B x # # $ # y z # $ # # # # $ # C 4 # # # # # # # # # # # # # 7 . . . . . . . . . . . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . * # # # # # # # # # # # # # # # # # # # # # # 8 # # # # D E # # # F G H I J # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ K L $ # # $ M 4 N $ # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ $ $ # # $ $ $ $ # ! $ O # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # y z # $ # C 4 # # P Q # # $ # # ] ^ / ( ] # # # # # # # # # # # # # # # # # # # # # # # # # R t S T # U V W n # P Q # # % $ # # U V W n # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # $ g { $ # # $ X Y Z # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ } | ` / .# # $ $ } | # $ # # # # $ $ ..+.# # # # # # # # # # # # # # # * . . . . . . . . . . . . . . . . . . . . . . @.= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = @.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # 8 # # # # #.$.%.E # D &.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # *.2 $ # *.2 $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ =.Y $ # # $ m $ -.$ # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # $ # # $ # # # ;.>.,.'.).# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ } | # $ $ ..+.# # h !.# # $ # # # k $ l # # # # # # # # # # # # # # # # # # # # # # # # # # n ~.V {.# 2 ].].^.# h !.# /.(.$ # # 2 ].].^.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # $ K L $ # # $ 4 _.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # :.Y <.(.[.# $ # # # # $ $ $ $ # $ }.| |.# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . 7 # # # # # # # # # # # # # # # # # # # # # # # 8 8 8 8 # # 1.2.3.# 4.5.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ $ $ # # $ $ $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 6.A / x 7.# # # # # $ $ $ $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 6.A / x 7.# # # # # # # # # # # # # # # # # 6.8.# # # # # # # # >.9.# # >.9.# # # # # # # # # # # # # # # # # # # 0.# # 0.0.0.a.b.# # 0.c.# # # d.0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ e.f.$ # # $ [ ^ _ $ # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # $ # # $ $ $ $ g.h.# M i.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ }.| |.# j.k.< # # $ # # # ! $ O # # # # # # # # # # # # # # # # # # # # # # # # # # l.T T m.# n.o.p.p j.k.< # i.L $ # # n.o.p.p # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # $ =.Y $ # # $ q.N # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # r.$ $ $ r.# $ # # # # $ # # # # $ # o.s.y # # # # # # # # # # # # # # # 7 . . . . . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . - # # # # # # # # # # # # # # # # # # # # # # # # 8 # # # # , t.u.v.# w.x.y.z.A.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ $ $ # # $ $ $ $ B.# # # # # # # # # # # # # # # # # # # # # # # # # # # C.(.D.E.5 F.# # # # # $ # # # # # # G.H.G.# # # # # # # # # # # # # # # # # # # # # # # # # # C.(.D.E.5 F.# # # # # # G.H.G.# # # # # # # # ,.I.# # G.H.G.# # # $ # # # $ # # # # # # # # # # # # # # # # # # # # 0.# # 0.# J.K.L.# # 0.M.# # N.O.0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # P.$ # # $ # # # $ # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # o.s.y Q.R.# # # $ # # ;.>.,.'.).# # # # # # # # # # # # # # # # # # # # # # # # # 4 G.G.} # S.T.T.U.Q.R.# # B $ $ $ # S.T.T.U.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # $ e.f.$ # # $ j.U V.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # W.l # m W.# $ # # # # $ $ $ $ # $ # # X.Y.# # # # # # # # # # # # # # # # - . . . . . . . . . . . . . . . . . . 6 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # 8 8 8 8 # b Z.`. +# &..+++3.@+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # # G.P # # # # # # # # # # # # # # # # # # # # # # # # # # # #+H.# # # $+# # # # # $ # # # # # i w %+w r.# $ &+2 # $ r.*+'.=+P *+-+;+# # # # # # # # # # # #+H.# # # $+# # # # # i w %+w r.# $ >+~ B.T.# ,+q # i w %+w r.# $ $ $ # $ $ $ # # # # # # # # # # # # # # # # # # # 0.# # 0.# J.K.'+# # 0.)+!+# ~+{+0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # # X.Y.]+^+# # # $ # # g.h.# M i.# # # # # # # # # # # # # # # # # # # # # # # # # h./+/+>+# _.(+(+_+]+^+# # # # $ # # _.(+(+_+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # $ # P.$ # # $ # j.F.:+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . = = = = = = = = = = = <+= = <+<+<+<+<+= = <+<+<+<+= = = = = <+<+<+= = = = <+<+<+= = = <+<+<+<+<+<+<+= = = = = = <+<+<+<+<+<+<+<+= = = <+<+<+<+<+<+<+<+<+= = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ $ $ # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # # I.[+# # # # # # # # # # # # # # # # # # # # # # # # # # # n.}+# # # # # # # # # $ $ $ $ # # |+S # S -+# $ O _ # $ 1+p.W 2 1+p.2+'.# # # # # # # # # # # n.}+# # # # # # # # # |+S # S -+# $ 1+p.X Y # F.3+# |+S # S -+# # $ # # # $ # # # # # # # # # # # # # # # # # # # # 0.# # 0.0.0.4+5+# # 0.6+7+8+O.9+0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0+# # # # # # a+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # b+[.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # b+[.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # c+d+# # # # # # # # # # # # # # # # # # # # # # # # # # + . . . . . . . . . . . . . . . . * = = = = = = = = = = = <+= = <+<+<+<+<+= <+<+<+<+<+= = = = = <+<+<+= = = <+<+<+= = = <+<+<+<+<+<+<+<+<+= = = = <+<+<+<+<+<+<+<+<+<+= = <+<+<+<+<+<+<+<+<+= = = = = = = = * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . @ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ $ $ # # # # -.e+# # # # # # # # # # # # # # # # # # # # # # # # # # # # } f+# # # # # # # # # $ # # # # # R j.# 6.T # $ [ # # $ }.# # $ }.# # $ # # # # # # # # # # # } f+# # # # # # # # # R j.# 6.T # $ }.# # $ g+} [ # R j.# 6.T # # $ # # # $ # # # # # # # # # # # # # # # # # # # # 0.# # 0.# 8+h+'+# # 0.# i+j+k+# 0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0+# # # # # # ' ) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; G l+m+; # # n+o+p+q+n+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ' ) # # # # # # # # # # ' ) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ' ) # # # # a+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 8 4.2.r+s+t+# # t+u+v+w+x+# 8 8 8 8 # # # # # # # # # # # # # # # # # # # # @ . . . . . . . . . . . . . . . . = = = = = = = = = = = <+<+= = <+<+<+<+= = <+<+<+<+<+= = = = = <+<+<+= = <+<+<+= = = <+<+<+<+= = = = <+<+= = = = <+<+<+= = = = <+<+<+= = <+<+= = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # Y.y+# # # # # # # # # # # # # # # # # # # # # # # # # # # # z+i # # # C # # # # # $ # # # # # e+A+E.B+D.# $ # # # $ # # # $ # # # $ # # # # # # # # # # # z+i # # # C # # # # # e+A+E.B+D.# $ # # # $ C+D+# # e+A+E.B+D.# # $ # # # $ # # # # # # # # # # # # # # # # # # # # 0.# # 0.# 8+E+L.# # 0.# F+0.G+# 0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; G l+m+; # # c d e b f # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H+I+# J+K+# # L+M+# N+u+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # c d e b f # 8 # # # 8 # c d e b f # 8 # O+++P+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # c d e b f # n+o+p+o+Q+# 8 8 4.2.R+S+# S+R+# # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # T+e U+V+P+# # W+X+c+c Y+# 8 # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = = = <+<+= = <+<+<+= = <+<+<+<+<+<+= = = = = <+<+<+<+<+<+<+= = = = <+<+<+= = = = = = = = = = = <+<+<+= = = = <+<+<+= = <+<+<+<+<+<+<+<+= = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # $ $ $ $ $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # l A+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # 9.Z+`+ @I.U.# # # # # $ # # # # # <.P.,+^+].# $ # # # $ # # # $ # # # $ # # # # # # # # # # # 9.Z+`+ @I.U.# # # # # <.P.,+^+].# $ # # # $ 5 h.# # <.P.,+^+].# # $ # # # $ # # # # # # # # # # # # # # # # # # # # 0.# # 0.0.0..@~+# # 0.# # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H+I+# J+K+# # F G H I J # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # p++@# +@p+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # F G H I J # 8 # # # 8 # F G H I J # 8 @@#@$@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # F G H I J # L+M+# N+%@# 8 # T+e t+#@&@#@t+# # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 8 4.2.*@=@-@# # D ;@# b 8 # 8 # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = = <+<+<+= = <+<+<+= = <+<+<+<+<+<+= = = = = <+<+<+<+<+<+= = = = = <+<+<+= = = = = = = = = = = = <+<+<+<+<+<+<+<+= = = <+<+<+<+<+<+<+<+<+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # >@C+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # [ ,@'@)@_ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # [ ,@'@)@_ # # # # # # # # # # # # # # # # !@~@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # D &.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # v.{@# 5.]@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # D &.# # # # 8 # # # 8 # D &.# # # # 8 0 ^@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; G l+m+; # R+S+# S+R+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # D &.# # # # p++@# +@D # 8 8 4.2.# /@8 (@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # _@#@c+:@<@# 4.5.# # 8 # 8 8 8 8 # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = = <+<+<+= = <+<+= = <+<+<+<+<+<+<+= = = = = <+<+<+<+<+<+= = = = = <+<+<+= = = = = = = = = = = = <+<+<+<+<+<+<+<+= = = = = = = = = <+<+<+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # )@].# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 4.5.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # R+G c m+G # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 4.5.# # # # 8 # # # 8 # 4.5.# # # # 8 [@}@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H+I+# J+K+# t+#@&@#@t+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 4.5.# # # # v.{@# 5.4.# 8 # # # # ; 8 ; # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # |@8 8 8 |@# x.%.t+1@8 # 8 # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = <+<+<+<+= = <+<+= = <+<+<+<+<+<+<+= = = = = <+<+<+= <+<+<+= = = = <+<+<+= = = = = = = = = = = <+<+<+= = = = <+<+<+= = = = = = = = <+<+<+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # w.x.y.z.A.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 2@d D 3@c+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # w.x.y.z.A.# 8 # # # 8 # w.x.y.z.A.# 8 5.4@S+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # /@8 (@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # w.x.y.z.A.# R+G c m+5@# 8 # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # 6@7@# 8@6@# 9@0@a@q+b@# 8 8 8 8 # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = <+<+<+<+= = <+= = <+<+<+<+<+<+<+<+= = = = = <+<+<+= = <+<+<+= = = <+<+<+<+= = = = <+<+= = = = <+<+<+= = = = <+<+<+= = <+<+= = = = <+<+<+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # &..+++3.@+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # c@d@e@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # &..+++3.@+# 8 8 8 8 8 # &..+++3.@+# 8 # 5.f@g@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; 8 ; # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # &..+++3.@+# 2@h@#@i@c # 8 # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = <+<+<+<+<+= = <+= <+<+<+<+<+<+<+<+<+= = = = = <+<+<+= = = <+<+<+= = = <+<+<+<+<+<+<+<+<+= = = = <+<+<+<+<+<+<+<+<+<+= = <+<+<+<+<+<+<+<+<+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # 6.A / x 7.# # # j@P P j@# # # $ H.# # # $ # $ $ $ $ $ # $ $ ..k@=+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+<+<+<+<+<+= = = = <+<+<+<+<+<+<+<+<+= = = = = <+<+<+= = = = <+<+<+= = = <+<+<+<+<+<+<+= = = = = = <+<+<+<+<+<+<+<+= = = = <+<+<+<+<+<+<+= = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # C.(.D.E.5 F.# # 2+Y N M Y k # # $ #+l@# # $ # # # $ # # # $ # [ s |+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # #+H.# # # $+# # U.m@# # Z n@# # $ o@p@e.# $ # # # $ # # # $ # [ s /+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0+# # # # # ; > , # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # q@# # q@# # # # # # # # # a+# # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # n.}+# # # # # # z o.# # p.n.# # $ # E.r@# $ # # # $ # # # $ $ $ q./.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0+# # # # # # ' ) # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; G l+m+; # # 9 0 a b # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # r+s+t+# # 8 # # 8 # 8 8 8 8 8 # n+o+p+o+Q+# # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # } f+# # # # # # T s@# # t@4 # # $ # e.u@o@$ # # # $ # # # $ # }+&+,@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; G l+m+; # # c d e b f # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H+I+# J+K+# # D E # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; G l+m+; # 6@8@# 8@6@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ; G l+m+; # # 8 8 4.2.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # U+V+P+# # 8 # # 8 # # # 8 # # # L+M+# N+%@# # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # z+i # # # C # # D+'@# # v@p@# # $ # # l@>@$ # # # $ # # # $ # # o.!@f+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H+I+# J+K+# # F G H I J # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #.$.%.E # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H+I+# J+K+# |@w@# x@|@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H+I+# J+K+# # 8 # T+e # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # *@=@-@# # 8 # # 8 # # # 8 # # # p++@# +@D # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+= = = = = <+= = <+<+<+<+<+<+<+= = <+= = = = = <+= = <+<+<+<+<+= = = = = <+<+<+<+<+= = = = = = <+= = = = = <+<+<+<+<+<+= = = <+<+<+<+<+= = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # 9.Z+`+ @I.U.# # C.Y y@y@(./.# # $ # # # X.$ # # # $ # # # $ # # # X.z@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # D &.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1.2.3.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # _@a@I :@<@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 8 4.2.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # _@#@c+:@<@# A@' ' B@# # # 8 # # # v.{@# 5.4.# # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+= = = = <+= = = <+= = = = = = = = <+= = = = = <+= = <+= = = = <+= = = <+= = = = = <+= = = = <+= <+= = = = <+= = = = = <+= = <+= = = = <+= = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # [ ,@'@)@_ # # # j.C@;+g+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 4.5.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # , t.u.v.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # *@D@-@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |@8 8 8 |@# 4@E@E@F@# # # 8 # # # R+G c m+5@# # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+= = = <+= = = = <+= = = = = = = = = <+= = = <+= = = <+= = = = = <+= = <+= = = = = <+= = = <+= = = <+= = = <+= = = = = <+= = <+= = = = = <+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # w.x.y.z.A.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # b Z.`. +# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # U+G@P+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 6@7@# 8@6@# c@H@H@I@# # # 8 # # # 2@h@#@i@c # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+= = <+= = = = = <+= = = = = = = = = = <+= <+= = = = <+= = = = <+= = = <+= = = = = <+= = <+= = = = = <+= = <+= = = = = <+= = <+= = = = = <+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # &..+++3.@+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # r+s+t+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+<+<+= = = = = = <+<+<+<+<+= = = = = = = <+= = = = = <+<+<+<+<+= = = = <+= = = = = <+= = <+= = = = = <+= = <+<+<+<+<+<+= = = <+= = = = = <+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+= <+= = = = = = <+= = = = = = = = = = = <+= = = = = <+= = = = <+= = = <+= = = = = <+= = <+= = = = = <+= = <+= = <+= = = = = <+= = = = = <+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # 7 J@K@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@N@O@P@# # # # # # # # # # # # # # # # # # # # # # # 7 J@K@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@N@O@P@# # # # # # # # # # # # # # # # # # # # # # # 7 J@K@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@N@O@P@# # # # # # # # # # # # # # # # # # # # # # # 7 J@K@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@N@O@P@# # # # # # # # # # # # # # # # # # # # # # # 7 J@K@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@N@O@P@# # # # # # # # # # # # # # # # # # # # # # # 7 J@K@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@N@O@P@# # # # # # # # # # # # # # # # # # # # # # # 7 J@K@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@N@O@P@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 J@K@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@N@O@P@# # # # # # # # # # # # # # # # # # # # # # # 7 J@K@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@N@O@P@# # # # # # # # # # # # # # # # # # # # # # # 7 J@K@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@N@O@P@# # # # # # # # # # # # # # # # # # # # # # # U@V@O@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@L@W@X@Y@# # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+= = <+= = = = = <+= = = = = = = = = = = <+= = = = = <+= = = = = <+= = <+= = = = = <+= = <+<+<+<+<+<+<+= = <+= = = <+= = = = <+= = = = = <+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # Z@O@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@`@ ## # # # # # # # # # # # # # # # # # # Z@O@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@`@ ## # # # # # # # # # # # # # # # # # # Z@O@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@`@ ## # # # # # # # # # # # # # # # # # # Z@O@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@`@ ## # # # # # # # # # # # # # # # # # # Z@O@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@`@ ## # # # # # # # # # # # # # # # # # # Z@O@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@`@ ## # # # # # # # # # # # # # # # # # # Z@O@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@`@ ## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+# ## # # # # # # # # # # # # # # # # # # Z@O@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@`@ ## # # # # # # # # # # # # # # # # # # Z@O@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@`@ ## # # # # # # # # # # # # # # # # # # Z@O@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@`@ ## # # # # # # # # # # # # # # # # # # 7 = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@R@@## # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . = = = = = = = <+= = = <+= = = = <+= = = = = = = = = = = <+= = = = = <+= = = = = <+= = <+= = = = = <+= = <+= = = = = <+= = <+= = = = <+= = = <+= = = = = <+= = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # ##N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@K@# # # # # # # # # # # # # # # # # ##N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@K@# # # # # # # # # # # # # # # # # ##N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@K@# # # # # # # # # # # # # # # # # ##N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@K@# # # # # # # # # # # # # # # # # ##N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@K@# # # # # # # # # # # # # # # # # ##N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@K@# # # # # # # # # # # # # # # # # ##N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@K@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@K@# # # # # # # # # # # # # # # # # ##N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@K@# # # # # # # # # # # # # # # # # ##N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@K@# # # # # # # # # # # # # # # # # ##N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@K@# # # # # # # # # # # # # # # # # %#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@&## # # # # # # # # # # # # # . . . . . . . . . . . . . . . . * = = = = = = <+= = = = <+= = = <+= = = = = = = = = = = <+= = = = = <+= = = = <+= = = <+= = = = = <+= = <+= = = = = <+= = <+= = = = = <+= = <+= = = = <+= = = = = = = = = * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # *#K@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@Y@# # # # # # # # # # # # # *#K@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@Y@# # # # # # # # # # # # # *#K@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@Y@# # # # # # # # # # # # # *#K@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@Y@# # # # # # # # # # # # # *#K@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@Y@# # # # # # # # # # # # # *#K@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@Y@# # # # # # # # # # # # # *#K@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@Y@# # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@Y@# # # # # # # # # # # # # *#K@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@Y@# # # # # # # # # # # # # *#K@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@Y@# # # # # # # # # # # # # *#K@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@Y@# # # # # # # # # # # # # *#O@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@7 # # # # # # # # # # # # . . . . . . . . . . . . . . . . . = = = = = = <+= = = = = <+= = <+<+<+<+<+<+<+= = = = = <+= = = = = <+<+<+<+<+= = = = = <+<+<+<+<+= = = <+= = = = = <+= = <+= = = = = <+= = <+<+<+<+<+= = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # *#=#M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@Y@# # # # # # # # # # # *#=#M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@Y@# # # # # # # # # # # *#=#M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@Y@# # # # # # # # # # # *#=#M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@Y@# # # # # # # # # # # *#=#M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@Y@# # # # # # # # # # # *#=#M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@Y@# # # # # # # # # # # *#=#M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@Y@# # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@Y@# # # # # # # # # # # *#=#M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@Y@# # # # # # # # # # # *#=#M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@Y@# # # # # # # # # # # *#=#M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@Y@# # # # # # # # # # # # R@M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@-#7 # # # # # # # # # # # . . . . . . . . . . . . . . . . . 6 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # K@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@N@# # # # # # # # # # # K@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@N@# # # # # # # # # # # K@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@N@# # # # # # # # # # # K@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@N@# # # # # # # # # # # K@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@N@# # # # # # # # # # # K@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@N@# # # # # # # # # # # K@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@N@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@N@# # # # # # # # # # # K@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@N@# # # # # # # # # # # K@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@N@# # # # # # # # # # # K@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@N@# # # # # # # # # # # O@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@W@# # # # # # # # # # # . . . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # ##M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@K@# # # # # # # # # ##M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@K@# # # # # # # # # ##M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@K@# # # # # # # # # ##M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@K@# # # # # # # # # ##M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@K@# # # # # # # # # ##M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@K@# # # # # # # # # ##M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@K@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@K@# # # # # # # # # ##M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@K@# # # # # # # # # ##M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@K@# # # # # # # # # ##M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@K@# # # # # # # # # %#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@:## # # # # # # # # # . . . . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # Z@N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@ ## # # # # # # Z@N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@ ## # # # # # # Z@N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@ ## # # # # # # Z@N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@ ## # # # # # # Z@N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@ ## # # # # # # Z@N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@ ## # # # # # # Z@N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@ ## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@ ## # # # # # # Z@N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@ ## # # # # # # Z@N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@ ## # # # # # # Z@N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@ ## # # # # # # Z@N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@L@T@# # # # # # # # # . . . . . . . . . . . . . . . . . . . @.= = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = @.. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # [#M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@`@# # # # # # # [#M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@`@# # # # # # # [#M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@`@# # # # # # # [#M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@`@# # # # # # # [#M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@`@# # # # # # # [#M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@`@# # # # # # # [#M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@`@# # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@`@# # # # # # # [#M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@`@# # # # # # # [#M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@`@# # # # # # # [#M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@`@# # # # # # # = M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@S@# # # # # # # # # . . . . . . . . . . . . . . . . . . . . . = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@P@# # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@P@# # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@ ## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # U@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@L@Y@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . 6 = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # 2#M@M@M@M@* 3#~#(#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@O@# # # # # 2#M@M@M@M@* 3#~#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#~#3#^#M@M@M@M@O@# # # # # 2#M@M@M@M@* 3#~#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#~#3#^#M@M@M@M@S@# # # # # 2#M@M@M@M@* 3#~#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#~#3#^#M@M@M@M@S@# # # # # 2#M@M@M@M@* 3#~#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#~#3#^#M@M@M@M@S@# # # # # 2#M@M@M@M@* 3#~#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#<+<+<+<+(#(#(#(#(#(#(#~#3#^#M@M@M@M@S@# # # # # 2#M@M@M@M@* 3#~#(#(#<+<+<+<+<+(#(#(#(#<+<+<+<+<+<+(#(#(#<+(#(#(#(#(#<+(#~#3#^#M@M@M@M@W@# # # # # ##M@M@M@M@* 3#~#(#(#<+<+<+<+(#(#<+<+<+<+<+<+<+(#(#<+<+<+<+(#(#<+<+<+<+(#~#3#^#M@M@M@M@S@# # # # # 2#M@M@M@M@* 3#~#(#(#<+<+<+<+<+(#(#(#<+(#(#(#(#(#<+(#(#(#<+<+<+<+<+(#(#(#~#3#^#M@M@M@M@S@# # # # # 2#M@M@M@M@* 3#~#(#(#<+<+<+<+<+(#(#(#(#<+<+<+<+<+<+<+(#(#<+(#(#(#(#(#(#(#~#3#^#M@M@M@M@S@# # # # # 2#M@M@M@M@* 3#~#(#(#(#<+<+<+<+<+(#(#(#<+(#(#(#(#(#(#(#(#<+<+<+<+<+<+(#(#~#3#^#M@M@M@M@S@# # # # # 4#M@M@M@M@* 3#~#(#<+(#(#(#(#<+(#(#<+<+<+<+(#(#<+(#(#(#(#(#<+(#<+<+<+<+<+~#3#^#M@M@M@M@X@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . * = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = = * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#(#]#5#. M@M@M@N@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#]#5#. M@M@M@N@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#(#<+(#(#(#(#<+(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#(#<+(#(#(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#<+(#(#(#(#<+(#(#(#(#<+(#(#(#(#<+(#(#(#(#<+(#<+(#(#(#<+(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#(#(#<+(#(#(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#(#<+(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#]#5#. M@M@M@L@# # # # # O@M@M@M@M@^#]#(#(#<+(#(#(#(#<+(#<+(#(#(#(#<+(#<+(#(#(#(#(#<+(#<+(#(#(#(#(#]#5#. M@M@M@W@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@L@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#7#6#!#M@M@M@L@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#<+(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#<+(#(#(#(#<+(#(#(#(#<+(#(#(#(#<+(#(#(#(#<+(#<+(#(#(#<+(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#<+(#(#(#(#(#<+<+(#(#(#(#<+(#(#<+(#(#(#(#(#<+(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#<+(#(#(#(#<+(#<+(#(#(#(#<+(#<+<+(#(#(#<+<+(#<+(#(#(#(#(#7#6#!#M@M@M@L@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#<+<+<+<+(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#<+(#(#(#(#<+(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#<+(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#<+(#(#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#<+(#<+(#(#(#<+(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#<+(#(#(#(#(#<+(#<+(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#<+(#(#(#(#<+(#<+(#(#(#(#<+(#<+(#<+(#<+(#<+(#<+(#(#(#(#(#/#3#8#M@M@M@L@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#<+<+(#(#(#(#<+(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#<+(#<+<+<+<+(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#<+<+<+<+<+(#(#(#(#<+<+<+<+<+<+(#(#(#<+<+<+(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#<+<+(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#<+(#<+<+<+<+(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#<+(#(#(#<+<+<+(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#<+(#(#(#(#(#<+(#(#<+<+<+<+<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+<+<+<+<+<+(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#<+<+<+<+<+<+(#<+(#(#(#(#<+(#<+(#<+(#<+(#<+(#<+<+<+(#(#(#(#3#8#M@M@M@M@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+<+(#(#(#(#<+(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#<+(#(#(#(#<+(#(#(#<+(#(#<+(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#<+<+(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#<+(#<+(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#<+(#<+(#(#(#(#(#(#<+<+(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#<+(#(#(#(#<+(#<+(#(#(#(#<+(#<+(#(#<+(#(#<+(#<+(#(#(#(#(#(#3#8#M@M@M@M@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#<+(#(#(#(#<+(#(#<+(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#<+(#(#(#(#<+(#<+(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#<+<+(#(#(#(#(#(#(#(#<+(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#<+(#(#(#(#<+(#<+(#(#(#(#<+(#<+(#(#<+(#(#<+(#<+(#(#(#(#(#/#3#8#M@M@M@M@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#(#<+(#(#(#<+(#(#(#<+(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#<+(#(#(#(#<+(#(#(#(#<+(#(#(#(#<+(#(#(#(#<+(#<+(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#(#(#<+(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#<+(#(#(#(#<+(#<+(#(#(#(#<+(#<+(#(#(#(#(#<+(#<+(#(#(#(#(#7#6#!#M@M@M@M@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#<+(#(#(#(#<+(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#(#<+(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#<+(#(#(#(#<+(#(#(#(#<+(#(#(#(#<+(#(#(#(#<+(#<+(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#(#(#<+(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#<+(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#<+(#(#(#(#<+(#<+(#(#(#(#<+(#<+(#(#(#(#(#<+(#<+(#(#(#(#(#]#5#. M@M@M@L@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # 9#M@M@M@M@* 3#~#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#~#3#;#M@M@M@M@`@# # # # # 9#M@M@M@M@* 3#~#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#~#3#;#M@M@M@M@`@# # # # # 9#M@M@M@M@* 3#~#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # 9#M@M@M@M@* 3#~#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # 9#M@M@M@M@* 3#~#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # 9#M@M@M@M@* 3#~#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # 9#M@M@M@M@* 3#~#(#(#<+<+<+<+<+(#(#(#(#<+(#(#(#(#(#<+(#(#<+(#(#(#(#(#<+(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#<+<+<+<+(#(#(#(#(#<+(#(#(#(#(#<+<+<+<+(#(#<+(#(#(#(#~#3#;#M@M@M@M@L@# # # # # 9#M@M@M@M@* 3#~#(#(#<+<+<+<+<+(#(#(#<+(#(#(#(#(#<+(#(#(#<+<+<+<+<+(#(#(#~#3#;#M@M@M@M@L@# # # # # 9#M@M@M@M@* 3#~#(#(#<+<+<+<+<+(#(#(#(#<+<+<+<+<+<+<+(#(#<+<+<+<+<+<+<+(#~#3#;#M@M@M@M@L@# # # # # 9#M@M@M@M@* 3#~#(#(#(#<+<+<+<+<+(#(#(#<+<+<+<+<+<+<+(#(#<+(#(#(#(#(#<+(#~#3#;#M@M@M@M@L@# # # # # ##M@M@M@M@* 3#~#(#<+(#(#(#(#<+(#(#<+<+<+<+(#(#<+(#(#(#(#(#<+(#<+<+<+<+<+~#3#;#M@M@M@M@S@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@4## # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@L@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@L@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@L@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@L@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@L@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@L@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@L@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@L@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@L@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@L@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@L@# # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@b## # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@b## # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@b## # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@b## # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@b## # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@b## # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@b## # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@b## # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@b## # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@b## # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@b## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@N@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@N@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@N@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@N@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@N@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@N@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@N@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@N@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@N@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@N@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@N@# # # # # # # # # $#M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@W@# # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@4## # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@4## # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@4## # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@4## # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@4## # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@4## # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@4## # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@4## # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@4## # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@4## # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@4## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # :.g## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |.# |.# # # # # # h#h## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |.# |.# # # # # # # h#h## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1+# 1+# # # # # # # # k@z+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ;+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # i#:.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # C+# C+# # # # # # $ @# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |.# |.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # C+# C+# # # # # # # @$ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # z@# z@# # # # # # # # B }.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1+# 1+# # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1+# 1+# # # # # z+j## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # k#$ k## # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # C+# C+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # I.# # # # I.# # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.# 0.# # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.# 0.# # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ,.'.-+l## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # < ..# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # z@# z@# # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # z@# z@# # # # # }.B # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # u@m#p@# # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j@P P j@# # # # # 8.).# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.0.0.a.b.# # # # 0.# # # # # 0.# # # # # n#o#n## # # # # # # # # # # # # # # # # # # # # # # # 0.0.0.a.b.# # # # 0.# # # # # 0.# # # # 0.0.0.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # p#!.G.j## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ $ w k## # # # v@]+q## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # G.H.G.# # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ..[ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # r#U _ U [.# # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 2+Y N M Y k # # # # I.=+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.# J.K.L.# # # # 0.# # # # # 0.# # # # s#t#u#t#v## # # # # # # # # # # # # # # # # # # # # # # 0.# J.K.L.# # # # 0.# # # # # 0.# # # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # I.# # # # I.# # { w#/ x#s@# # 6.8.# $ $ z Z+y#_ # $ $ $ $ $ # # # # # # # # # # # # # # # # # # # # # # # # # # $ e.z#g.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # }.k A## # # # B#C#5 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # i w %+w r.# # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # $ # # # # # q#]+v@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # D#,.# ,.z## # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # U.m@# # Z n@# # # # L E## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.# J.K.'+# # 0.# 0.# F#G#H#I#0.# # # # J#K## K#J## # # # # # # # # # # # # # # # # # # # # # # 0.# J.K.'+# # 0.# 0.# F#G#H#I#0.# # # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # # >@q#! L#W.# # ,.I.# $ # < v ` P # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # p <.# # # # # # # # # # e.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # x#s...$ B # # # # # M#2 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |+S # S -+# # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # $ # # # # # 5 N#B## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # p.-+$ $ $ -+o.# # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # z o.# # p.n.# # # # y W.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ..[ # # [ u # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.0.0.4+5+# # 0.# 0.# O#P#Q#R#0.# # # # 4+N.# N.S## # # # # # # # # # # # # # # # # # # # # # # 0.0.0.4+5+# # 0.# 0.# O#P#Q#R#0.# # # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # # T T## # T## # ,+q # $ # # # o@p## # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # y@V.< # # # # U#} !@m@j.V## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # n.W p.k#$ # # # # # # $ e.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # R j.# 6.T # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # }.$ # # # # # 2 j.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # g#W## # # W#X## # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # T s@# # t@4 # # # # [ k.g+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # f.,@# # ,@C## # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.# 8+h+'+# # 0.# 0.# <+Y## Q#0.# # # # Z#`## Y# $# # # # # # # # # # # # # # # # # # # # # # # 0.# 8+h+'+# # 0.# 0.# <+Y## Q#0.# # # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # $ # # # # $ # # q k..$,+[+# # F.3+# $ # # # < +$# # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # e.x#@$# # # # w#o.V S.-+E.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # V.~ *+#$$ # # # # # # >.i # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # e+A+E.B+D.# # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # >.W o.v@$ # # # # e.$ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # h $$# # # $$j # # # # $ h## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # D+'@# # v@p@# # # # # u@C+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # %$|+A+A+-+)@# # # # # h#$ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.# 8+E+L.# # 0.# 0.# O#&$Y#*$0.# # # # =$K.# -$;$# # # # # # # # # # # # # # # # # # # # # # # 0.# 8+E+L.# # 0.# 0.# O#&$Y#*$0.# # # # # # 0.# # # # # # # # # # # # # # # # # # # # # # # # ..[ # # [ u # # # }+G.z@j # g+} [ # $ # # # >$p## # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # ,$4 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # W &+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # <.P.,+^+].# # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # O B.k.*.$ # # # # i Y # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # @ @# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # C.Y y@y@(./.# # # # # y#5 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7.~.~.] # # # # # # @ @# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0.0.0..@~+# # 0.# 0.# F#G# $'$0.# # # # )$!$~$!${$# # # # # # # # # # # # # # # # # # # # # # # 0.0.0..@~+# # 0.# 0.# F#G# $'$0.# # # # 0.0.0.0.0.# # # # # # # # # # # # # # # # # # # # # # f.,@# # ,@C## # _.# # j.+$# C+D+# # $ # < C.n@| # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # $ 4 ]$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # &+,@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # j.C@;+g+# # # # # # _..$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # K#^$/$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # %$|+A+A+-+)@# # B+($B#_$@$# 5 h.# # $ $ ^.f.r.[ # # # $ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # < )@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7.~.~.] # # # e.V w#W _ # !@~@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # )@].# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 J@K@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@N@O@P@# # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # Z@O@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@`@ ## # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # ##N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@K@# # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#K@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@Y@# # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#=#M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@Y@# # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # K@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@N@# # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ^#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#:$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # = M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # ##M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@K@# # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ~#{#]#^#/#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#/#^#]#{#<$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # Z@N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@ ## # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <#{#~#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#~#{#<$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # [#M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@`@# # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <#}#|#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#|#}#<$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#<+(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@P@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . {#|#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#|#{#{#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@S@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#~#3#^#M@M@M@M@S@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#~#3#^#M@M@M@M@L@# # # # # 9#M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # 2#M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+(#(#(#(#~#3#^#M@M@M@M@O@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#~#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+<+<+(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@N@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#<+(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@L@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+(#<+<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#<+<+<+<+<+<+(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#<+<+<+<+(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#<+<+<+<+<+<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#<+(#(#<+(#<+(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#<+<+<+<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#<+(#<+(#<+<+(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+(#(#(#(#(#/#3#8#M@M@M@M@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#/#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#/#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#<+(#(#<+(#<+(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#<+(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#<+(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#<+(#<+<+<+(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#<+(#(#(#<+<+(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#<+<+<+<+(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#<+<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#<+(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#<+<+<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#<+<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@M@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # 9#M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@`@# # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@X@# # # # # [$N@M@M@M@M@~#{#|#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . {#|#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#|#{#{#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@L@# # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <#}#|#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#|#}#)#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # |$N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@b## # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1${#~#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#~#{#)#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # 6 M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@N@# # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ~#{#]#^#/#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#/#^#]#{#2$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ^#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#:$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # 3$R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # 6 N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@# # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # 4$R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@4## # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # a#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@5$# # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . 6$>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#:$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6$>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#:$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # = M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . ~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#<$. . . . . . . . . . . . . . . . . . . . . . . . . . ~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#<$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . <#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#<$. . . . . . . . . . . . . . . . . . . . . . . . <#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#<$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+<+<+(#(#|#}#_#Q@M@M@M@M@+## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . <#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#<$. . . . . . . . . . . . . . . . . . . . . . <#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#<$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#|#{#{#N@M@M@M@M@0## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . {#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#. . . . . . . . . . . . . . . . . . . . . {#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@S@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@S@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@L@# # # # # 9#M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#~#3#^#M@M@M@M@`@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#. . . . . . . . . . . . . . . . . . . . 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#]#5#. M@M@M@M@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . ]#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. . . . . . . . . . . . . . . . . . . ]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . 6#7#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#. . . . . . . . . . . . . . . . . . 6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#7#6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . 3#/#(#(#(#(#(#(#(#<+<+<+(#(#<+<+<+<+<+<+<+<+<+<+<+<+(#(#(#(#(#(#/#3#. . . . . . . . . . . . . . . . . . 3#/#(#(#(#(#(#(#<+<+<+<+<+<+<+<+<+<+<+<+(#(#<+<+<+(#(#(#(#(#(#(#/#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . 3#(#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#3#. . . . . . . . . . . . . . . . . . 3#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . 3#(#(#(#(#(#(#(#(#<+<+<+(#(#<+<+<+<+<+<+<+<+<+<+<+<+(#(#(#(#(#(#(#3#. . . . . . . . . . . . . . . . . . 3#(#(#(#(#(#(#(#<+<+<+<+<+<+<+<+<+<+<+<+(#(#<+<+<+(#(#(#(#(#(#(#(#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#<+(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . 3#/#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#. . . . . . . . . . . . . . . . . . 3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#/#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#<+(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . 6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#. . . . . . . . . . . . . . . . . . 6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . ]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. . . . . . . . . . . . . . . . . . . ]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@M@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#. . . . . . . . . . . . . . . . . . . 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@X@# # # # # [$N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . {#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#. . . . . . . . . . . . . . . . . . . . . {#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . <#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#)#. . . . . . . . . . . . . . . . . . . . . . <#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#)#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # |$N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . 7${#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#)#. . . . . . . . . . . . . . . . . . . . . . . . 7${#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#)#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # 6 M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . 8#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#2$. . . . . . . . . . . . . . . . . . . . . . . . . . 8#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#2$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . 6$>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#:$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6$>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#:$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # 3$R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # 6 N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # 4$R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # a#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@5$# # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 J@K@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@N@O@P@# # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # Z@O@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@`@ ## # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # ##N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@K@# # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#K@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@Y@# # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#=#M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@Y@# # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # K@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@N@# # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8$>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#:$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # = M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # ##M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@K@# # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ~#{#]#^#/#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#/#^#]#{#<$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # Z@N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#~#{#_#!#M@M@M@M@M@ ## # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <#{#~#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#~#{#<$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # * M@M@M@M@L@<#}#|#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # [#M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#|#}#_#Q@M@M@M@M@`@# # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <#}#|#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#|#}#<$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#|#{#{#N@M@M@M@M@P@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . {#|#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#|#{#{#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#~#3#^#M@M@M@M@S@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@S@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@L@# # # # # 9#M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # 2#M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#~#3#^#M@M@M@M@O@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#]#5#. M@M@M@N@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#7#6#!#M@M@M@L@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # . M@M@M@N@3#/#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#/#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#/#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+(#<+<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@M@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # 9#M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@`@# # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#~#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#8$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@X@# # # # # [$N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . {#|#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#|#{#{#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#<+<+<+<+<+<+<+(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#<+<+<+<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@L@# # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <#}#|#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#|#}#)#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # |$N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@b## # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7${#~#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#~#{#)#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # 6 M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@N@# # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9${#]#^#/#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#/#^#]#{#2$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8$>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#:$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # 3$R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@T@# # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # 6 N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@N@# # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # 4$R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@4## # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # a#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@5$# # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # Z@$#R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@`@0## # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # # # # # # # # # # # # # # # # U@V@O@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@L@W@X@Y@# # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # P@R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # # # # # # # # # # # # # # 7 = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@R@@## # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # # # # # # # # # # # # %#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@&## # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # # *#O@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@7 # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # # # # # # # # # # R@M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@-#7 # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@L@# # # # # # # # # # # O@M@M@M@M@M@M@* ;#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#)#!#L@M@M@M@M@M@W@# # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |#>#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#,#'#2$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # = M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@`@# # # # # # # # # $#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@W@# # # # # # # # # %#M@M@M@M@M@L@~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#_#* M@M@M@M@M@:## # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#0$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # a#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#~#{#_#!#M@M@M@M@M@a$# # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#~#{#_#!#M@M@M@M@M@d## # # # # # # Z@N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@L@T@# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#<$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#|#}#_#Q@M@M@M@M@+## # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#|#}#_#Q@M@M@M@M@L@# # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#|#}#_#Q@M@M@M@M@+## # # # # # # = M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@S@# . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#<$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # Z@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#|#{#{#N@M@M@M@M@0## # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#|#{#{#N@M@M@M@M@0## # # # # U@N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@L@Y@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . {#|#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@S@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@S@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@L@# # # # # 9#M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@`@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#~#3#^#M@M@M@M@L@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#~#3#^#M@M@M@M@`@# # # # # 4#M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#^#M@M@M@M@X@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#~#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#~#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@L@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # O@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@W@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#]#5#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+<+(#(#(#<+<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@L@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#7#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#7#6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@L@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#/#(#(#(#(#(#<+(#(#(#(#(#(#<+<+<+<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#/#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#(#(#(#(#(#(#<+(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@# # # # # L@M@M@M@N@3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#8#M@M@M@M@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#(#(#(#(#(#(#<+(#<+<+<+<+<+<+<+<+<+<+<+<+<+<+<+<+<+<+(#(#(#(#(#(#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#<+<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#<+(#(#<+(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@# # # # # . M@M@M@N@3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#8#M@M@M@M@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#/#(#(#(#(#(#<+(#(#(#<+<+<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@# # # # # . M@M@M@L@6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#!#M@M@M@M@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#7#(#(#(#(#(#<+(#(#(#(#(#(#<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@M@# # # # # R@M@M@M@M@^#]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. M@M@M@L@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#5#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#<+<+<+<+<+(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@M@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@M@# # # # # = M@M@M@M@* 3#~#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@L@# # # # # ##M@M@M@M@* 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#;#M@M@M@M@S@. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#~#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#/#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#<+<+<+(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@- # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@X@# # # # # [$N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@X@# # # # # .#N@M@M@M@M@~#{#|#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@+ # # # # # 7 N@M@M@M@M@~#{#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#N@M@M@M@M@1#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . {#|#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#{#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#(#<+<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # R@M@M@M@M@L@<#}#|#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@M@# # # # # # # * M@M@M@M@L@<#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#_#Q@M@M@M@M@+## . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#)#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#<+(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # |$N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#<+(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@9## # # # # # # c#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@}$# # # # # # # .#N@M@M@M@M@N@<#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#_#!#M@M@M@M@M@d## . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b${#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#)#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # 6 M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # = M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@L@# # # # # # # # # $#M@M@M@M@M@L@e#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#)#* M@M@M@M@M@W@# # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c${#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@M@# # # # # # # # # # # R@M@M@M@M@M@M@* ;#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#)#!#L@M@M@M@M@M@L@# # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |#>#{#5#,#,#,#,#,#,#,#,#,#,#,#,#,#,#5#{#>#2$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@d$# # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # *#@.M@M@M@M@M@M@M@L@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@M@M@M@M@M@M@M@L@@ # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # 3$R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@ ## # # # # # # # # # # # # *#R@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@@ # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # 6 N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # = N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@# # # # # # # # # # # # # # # # # $#N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@W@# # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . @ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # 4$R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # a#R@N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@}$# # # # # # # # # # # # # # # # # # # .#* N@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#f## # # # # # @ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # a#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@5$# # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # .#= R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@+#d## # # # # # # # # # # # # # # # # # # # # # # 7 Q@R@. . L@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@M@L@S@T@# # # # # # # # + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . - # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . 7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . * # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # * . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . 7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . - # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # - . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . + @ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # @ + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |#>#,#,#,#,#,#,#e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$,#,#,#,#>#7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ~#{#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#~#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <#{#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#<#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#<#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . {#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#f$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#'#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#3#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6#7#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#7#6#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ]#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#]#'#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#3#/#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . {#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#{#f$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . <#}#|#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#|#}#<#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . b${#~#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#~#{#1$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . c${#]#^#/#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#(#/#^#]#{#6$. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . |#>#{#5#,#,#e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$e$>#,#,#5#{#>#7#. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . "}; KCemu-0.5.1/src/ui/gtk/schro.cc0000644001050700006200000001011711345001577015626 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/config.h" #ifdef HAVE_LIBSCHROEDINGER #include #include "kc/system.h" #include "ui/gtk/schro.h" void SchroedingerVideoEncoder::image_free(SchroFrame *frame, void *priv) { delete[] (byte_t *)priv; } SchroedingerVideoEncoder::SchroedingerVideoEncoder(void) { _f = NULL; _buf = NULL; _image = NULL; } SchroedingerVideoEncoder::~SchroedingerVideoEncoder(void) { close(); } bool SchroedingerVideoEncoder::init(const char *filename, int width, int height, int fps_den, double quality) { if (filename == NULL) return false; if (quality < 0) quality = 0; if (quality > 1) quality = 1; _f = fopen(filename, "wb+"); if (_f == NULL) return false; _width = width; _height = height; schro_init(); _encoder = schro_encoder_new(); SchroVideoFormat *format = schro_encoder_get_video_format(_encoder); format->width = width; format->height = height; format->clean_width = width; format->clean_height = height; format->top_offset = 0; format->left_offset = 0; format->aspect_ratio_numerator = 1; format->aspect_ratio_denominator = 1; format->frame_rate_numerator = 50; format->frame_rate_denominator = fps_den; format->chroma_format = SCHRO_CHROMA_444; format->interlaced = FALSE; schro_encoder_set_video_format(_encoder, format); free(format); schro_encoder_setting_set_double(_encoder, "quality", 10 * quality); schro_encoder_start(_encoder); return true; } void SchroedingerVideoEncoder::allocate_color_rgb(int idx, int r, int g, int b) { _col[idx].y = (0.257 * r) + (0.504 * g) + (0.098 * b) + 16; _col[idx].u = -(0.148 * r) - (0.291 * g) + (0.439 * b) + 128; _col[idx].v = (0.439 * r) - (0.368 * g) - (0.071 * b) + 128; } bool SchroedingerVideoEncoder::encode_loop() { while (242) { switch (schro_encoder_wait(_encoder)) { case SCHRO_STATE_AGAIN: break; case SCHRO_STATE_NEED_FRAME: case SCHRO_STATE_END_OF_STREAM: return true; case SCHRO_STATE_HAVE_BUFFER: { SchroBuffer *buffer = schro_encoder_pull(_encoder, NULL); if (fwrite(buffer->data, buffer->length, 1, _f) != 1) return false; schro_buffer_unref(buffer); return true; } default: return false; } } } bool SchroedingerVideoEncoder::encode(byte_t *image, byte_t *dirty) { int count = _width * _height; byte_t *buf = new byte_t[4 * count]; for (int src = 0, dst = 0;src < count;src++, dst += 4) { color_t *col = &_col[image[src]]; buf[dst] = 0; buf[dst + 1] = col->y; buf[dst + 2] = col->u; buf[dst + 3] = col->v; } if (!encode_loop()) return false; SchroFrame *frame = schro_frame_new_from_data_AYUV(buf, _width, _height); schro_frame_set_free_callback(frame, image_free, buf); schro_encoder_push_frame(_encoder, frame); return encode_loop(); } void SchroedingerVideoEncoder::close(void) { if (_f != NULL) { schro_encoder_end_of_stream(_encoder); encode_loop(); schro_encoder_free(_encoder); fclose(_f); } if (_buf != NULL) delete _buf; if (_image != NULL) delete _image; _f = NULL; _buf = NULL; _image = NULL; } #endif /* HAVE_LIBSCHROEDINGER */ KCemu-0.5.1/src/ui/gtk/options.cc0000644001050700006200000016773411345001576016224 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* * Enable Sound * Joystick Device * Enable V24-Module * Custom ROM Module * Custom ROM Module (Name) * Custom ROM Module (Id) * Custom ROM Module (File) * Custom ROM Module (Size) * V24-Baudrate * V24-Device * Flash Offset * Foreground Saturation * Foreground Brightness * Background Saturation * Background Brightness * Black Value * White Value * Max Auto Skip * DEBUG UI_Gtk Color Add * DEBUG UI_Gtk Frame Delay */ #include #include #include #include "kc/system.h" #include "kc/prefs/types.h" #include "kc/prefs/prefs.h" #include "kc/prefs/strlist.h" #include "kc/kc.h" #include "kc/mod_list.h" #include "sys/sysdep.h" #include "ui/gtk/cmd.h" #include "ui/gtk/dialog.h" #include "ui/gtk/options.h" class CMD_options_window_toggle : public CMD { private: OptionsWindow *_w; public: CMD_options_window_toggle(OptionsWindow *w) : CMD("ui-options-window-toggle") { _w = w; register_cmd("ui-options-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; class CMD_options_window_dialog : public CMD { private: OptionsWindow *_w; public: CMD_options_window_dialog(OptionsWindow *w) : CMD("ui-options-window-dialog") { _w = w; register_cmd("ui-options-window-dialog"); } void execute(CMD_Args *args, CMD_Context context) { if (args == NULL) args = new CMD_Args(); switch (context) { case 0: args->set_string_arg("ui-dialog-title", _("Save profiles?")); args->set_string_arg("ui-dialog-text", _("Some profiles were changed!\n\n" "'Yes' will save changes to disk, 'No' will reject all changes.\n" "'Cancel': will allow to continue editing.")); args->set_string_arg("ui-dialog-text-arg", "filename"); args->add_callback("ui-dialog-cancel-CB", this, 1); args->add_callback("ui-dialog-yes-no-CB-no", this, 2); args->add_callback("ui-dialog-yes-no-CB-yes", this, 3); CMD_EXEC_ARGS("ui-dialog-yes-no-cancel", args); break; case 1: // cancel break; case 2: // no _w->reject(); break; case 3: // yes _w->save(); break; } } }; const char * OptionsWindow::FILE_CHOOSER_BUTTON_KEY = "filechooser_button"; const char * OptionsWindow::FILE_CHOOSER_CLEAR_BUTTON_KEY = "filechooser_clear_button"; const char * OptionsWindow::DATA_KEY_CHECK_BUTTON = "key_check_button"; const char * OptionsWindow::PREFERENCES_KEY = "preferences_key"; const char * OptionsWindow::DEFAULT_DIR_KEY = "default_dir_key"; const char * OptionsWindow::TARGET_WIDGET1_KEY = "target_widget1_key"; const char * OptionsWindow::TARGET_WIDGET2_KEY = "target_widget2_key"; const char * OptionsWindow::TARGET_WIDGET3_KEY = "target_widget3_key"; OptionsWindow::OptionsWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { _current_profile = NULL; _current_kc_type = KC_TYPE_NONE; _open_rom_last_path = NULL; _w.liststore_modules = NULL; _cmd = new CMD_options_window_toggle(this); _cmd_dialog = new CMD_options_window_dialog(this); } OptionsWindow::~OptionsWindow(void) { delete _cmd; delete _cmd_dialog; } void OptionsWindow::on_button_up_clicked(GtkButton *button, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; self->move_row((GtkPathMoveFunc)gtk_tree_path_prev, gtk_tree_store_move_before); } void OptionsWindow::on_button_down_clicked(GtkButton *button, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; self->move_row(gtk_tree_path_next, gtk_tree_store_move_after); } void OptionsWindow::on_button_expand_clicked(GtkButton *button, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; self->expand_tree(); } void OptionsWindow::on_button_collapse_clicked(GtkButton *button, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; self->collapse_tree(); } void OptionsWindow::expand_tree(void) { gtk_tree_view_expand_all(GTK_TREE_VIEW(_w.treeview)); } void OptionsWindow::collapse_tree(void) { gtk_tree_view_collapse_all(GTK_TREE_VIEW(_w.treeview)); GtkTreeSelection *select = gtk_tree_view_get_selection(GTK_TREE_VIEW(_w.treeview)); GtkTreePath *path = gtk_tree_path_new_first(); gtk_tree_view_expand_to_path(GTK_TREE_VIEW(_w.treeview), path); gtk_tree_selection_select_path(select, path); gtk_tree_path_free(path); } void OptionsWindow::on_button_new_clicked(GtkButton *button, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; Profile *profile = Preferences::instance()->create_user_profile(self->_current_profile); if (profile == NULL) return; GtkTreeIter iter; GtkTreeModel *model = self->get_selected_tree_iter(&iter); if (model == NULL) return; GtkTreeIter iter_child; gtk_tree_store_append(GTK_TREE_STORE(model), &iter_child, &iter); gtk_tree_store_set(GTK_TREE_STORE(model), &iter_child, TREE_INT_COLUMN, 2, TREE_TEXT_COLUMN, profile->get_name(), TREE_CONFIG_NAME_COLUMN, profile->get_config_name(), TREE_ICON_COLUMN, self->_w.pixbuf_default, -1); self->expand_and_select(GTK_TREE_VIEW(self->_w.treeview), model, &iter_child); gtk_notebook_set_current_page(self->_w.notebook, 0); } void OptionsWindow::expand_and_select(GtkTreeView *treeview, GtkTreeModel *model, GtkTreeIter *iter) { GtkTreePath *path = gtk_tree_model_get_path(model, iter); gtk_tree_view_expand_to_path(treeview, path); gtk_tree_path_free(path); gtk_tree_selection_select_iter(gtk_tree_view_get_selection(treeview), iter); } void OptionsWindow::on_button_copy_clicked(GtkButton *button, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; Profile *profile = Preferences::instance()->copy_user_profile(self->_current_profile); if (profile == NULL) return; GtkTreeIter iter; GtkTreeModel *model = self->get_selected_tree_iter(&iter); if (model == NULL) return; GtkTreeIter parent; if (!gtk_tree_model_iter_parent(model, &parent, &iter)) return; GtkTreeIter copy; gtk_tree_store_insert_after(GTK_TREE_STORE(model), ©, &parent, &iter); gtk_tree_store_set(GTK_TREE_STORE(model), ©, TREE_INT_COLUMN, 2, TREE_TEXT_COLUMN, profile->get_name(), TREE_CONFIG_NAME_COLUMN, profile->get_config_name(), TREE_ICON_COLUMN, self->_w.pixbuf_default, -1); self->expand_and_select(GTK_TREE_VIEW(self->_w.treeview), model, ©); gtk_notebook_set_current_page(self->_w.notebook, 0); } void OptionsWindow::on_button_delete_clicked(GtkButton *button, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; GtkTreeIter iter; GtkTreeModel *model = self->get_selected_tree_iter(&iter); if (model == NULL) return; gtk_tree_store_set(GTK_TREE_STORE(model), &iter, TREE_ICON_COLUMN, self->_w.pixbuf_deleted, -1); self->_current_profile->set_deleted(true); } gboolean OptionsWindow::tree_model_foreach_func_delete(GtkTreeModel *model, GtkTreePath *path, GtkTreeIter *iter, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; gchar *config_name; gtk_tree_model_get(model, iter, TREE_CONFIG_NAME_COLUMN, &config_name, -1); if (Preferences::instance()->find_profile(config_name) == NULL) { gchar *path_string = gtk_tree_path_to_string(path); self->_delete_path.push_back(path_string); g_free(path_string); } g_free(config_name); return FALSE; } void OptionsWindow::on_button_ok_clicked(GtkButton *button, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; self->save(); } void OptionsWindow::on_button_close_clicked(GtkButton *button, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; if (Preferences::instance()->has_changed_profiles()) { CMD_EXEC("ui-options-window-dialog"); } else { self->hide(); } } void OptionsWindow::on_tree_selection_changed(GtkTreeSelection *selection, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; GtkTreeIter iter; GtkTreeModel *model; if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gchar *key; gtk_tree_model_get(model, &iter, TREE_CONFIG_NAME_COLUMN, &key, -1); self->_current_profile = Preferences::instance()->find_profile(key); self->apply_profile(); g_free(key); profile_level_t level = self->_current_profile->get_level(); gtk_widget_set_sensitive(self->_w.b_new, level == PROFILE_LEVEL_SYSTEM_USER); gtk_widget_set_sensitive(self->_w.b_copy, level == PROFILE_LEVEL_USER); gtk_widget_set_sensitive(self->_w.b_delete, level == PROFILE_LEVEL_USER); gtk_widget_set_sensitive(self->_w.b_up, level == PROFILE_LEVEL_USER); gtk_widget_set_sensitive(self->_w.b_down, level == PROFILE_LEVEL_USER); } } void OptionsWindow::on_media_check_button_toggled(GtkToggleButton *togglebutton, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; GtkWidget *filechooser_button = GTK_WIDGET(g_object_get_data(G_OBJECT(togglebutton), FILE_CHOOSER_BUTTON_KEY)); GtkWidget *filechooser_clear_button = GTK_WIDGET(g_object_get_data(G_OBJECT(togglebutton), FILE_CHOOSER_CLEAR_BUTTON_KEY)); gtk_widget_set_sensitive(filechooser_button, togglebutton->active); gtk_widget_set_sensitive(filechooser_clear_button, togglebutton->active); if (!togglebutton->active) { const char * key = (const char *)g_object_get_data(G_OBJECT(filechooser_button), PREFERENCES_KEY); self->_current_profile->remove_value(key); self->apply_filechooserbutton(GTK_FILE_CHOOSER(filechooser_button)); // apply parent value } } void OptionsWindow::on_media_clear_button_clicked(GtkButton *button, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; GtkFileChooser *filechooser = GTK_FILE_CHOOSER(g_object_get_data(G_OBJECT(button), FILE_CHOOSER_BUTTON_KEY)); gtk_file_chooser_unselect_all(filechooser); const char * key = (const char *)g_object_get_data(G_OBJECT(filechooser), PREFERENCES_KEY); self->_current_profile->set_null_value(key); } void OptionsWindow::on_media_filechooser_file_set(GtkFileChooserButton *filechooserbutton, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; const char * key = (const char *)g_object_get_data(G_OBJECT(filechooserbutton), PREFERENCES_KEY); gchar *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filechooserbutton)); if (filename == NULL) { self->_current_profile->set_null_value(key); } else { self->_current_profile->set_string_value(key, filename); } g_free(filename); } void OptionsWindow::set_widget_sensitive_by_key(GObject *object, const gchar *key, bool sensitive) { gpointer widget = g_object_get_data(object, key); if (widget == NULL) return; gtk_widget_set_sensitive(GTK_WIDGET(widget), sensitive); } /** * Returns true if the profile value was removed. In this case the display value * need to be applied again to fetch the now valid parent value. */ bool OptionsWindow::check_button_toggled(GtkToggleButton *togglebutton) { set_widget_sensitive_by_key(G_OBJECT(togglebutton), TARGET_WIDGET1_KEY, togglebutton->active); set_widget_sensitive_by_key(G_OBJECT(togglebutton), TARGET_WIDGET2_KEY, togglebutton->active); set_widget_sensitive_by_key(G_OBJECT(togglebutton), TARGET_WIDGET3_KEY, togglebutton->active); const char * key = (const char *)g_object_get_data(G_OBJECT(togglebutton), PREFERENCES_KEY); if (togglebutton->active) { ProfileValue *value = _current_profile->get_value(key); if (value != NULL) _current_profile->set_value(key, new ProfileValue(value)); //_current_profile->set_int_value(key, _current_profile->get_int_value(key, 0)); } else { _current_profile->remove_value(key); } return !togglebutton->active; } void OptionsWindow::on_display_check_button_toggled(GtkToggleButton *togglebutton, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; if (self->check_button_toggled(togglebutton)) self->apply_display_settings(); } void OptionsWindow::on_display_scale_value_changed(GtkSpinButton *spin_button, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; int display_scale = gtk_spin_button_get_value_as_int(spin_button); self->_current_profile->set_int_value("display_scale", display_scale); } void OptionsWindow::on_display_effects_changed(GtkComboBox *combobox, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; int display_effects = gtk_combo_box_get_active(combobox); self->_current_profile->set_int_value("display_effects", display_effects); } void OptionsWindow::on_display_debug_changed(GtkComboBox *combobox, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; int display_debug = gtk_combo_box_get_active(combobox); self->_current_profile->set_int_value("display_debug", display_debug); } void OptionsWindow::on_display_mem_access_changed(GtkComboBox *combobox, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; int display_mem_access = gtk_combo_box_get_active(combobox); self->_current_profile->set_int_value("display_mem_access", display_mem_access); } void OptionsWindow::on_profile_name_changed(GtkEditable *editable, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; const char *name = gtk_entry_get_text(GTK_ENTRY(editable)); GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(self->_w.treeview)); if (gtk_tree_selection_get_selected(selection, &model, &iter)) { gtk_tree_store_set(self->_w.treestore, &iter, TREE_TEXT_COLUMN, name, -1); } self->_current_profile->set_name(name); self->_current_profile->set_string_value("name", name); } void OptionsWindow::on_comment_changed(GtkTextBuffer *textbuffer, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; GtkTextIter start, end; gtk_text_buffer_get_iter_at_offset(textbuffer, &start, 0); gtk_text_buffer_get_iter_at_offset(textbuffer, &end, 0); gtk_text_iter_forward_to_end(&end); gchar *text = gtk_text_buffer_get_text(textbuffer, &start, &end, FALSE); const char *key = "comment"; if (strlen(text) == 0) { self->_current_profile->remove_value(key); } else { self->_current_profile->set_string_value(key, text); } g_free(text); } void OptionsWindow::on_system_type_changed(GtkComboBox *combobox, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; GtkTreeIter iter; if (!gtk_combo_box_get_active_iter(self->_w.combobox_system_type, &iter)) return; int kc_type; gtk_tree_model_get(GTK_TREE_MODEL(self->_w.liststore_system), &iter, 1, &kc_type, -1); self->_current_profile->set_int_value("system", kc_type); self->apply_system_variant((kc_type_t)kc_type, KC_VARIANT_NONE); self->apply_modules_settings((kc_type_t)kc_type); self->apply_roms_settings((kc_type_t)kc_type, KC_VARIANT_NONE); } void OptionsWindow::on_system_variant_check_button_toggled(GtkToggleButton *togglebutton, gpointer user_data) { const char *key = "variant"; OptionsWindow *self = (OptionsWindow *)user_data; gtk_widget_set_sensitive(GTK_WIDGET(self->_w.combobox_system_variant), togglebutton->active); if (togglebutton->active) { self->_current_profile->set_int_value(key, self->_current_profile->get_int_value(key, KC_VARIANT_NONE)); } else { self->_current_profile->remove_value(key); self->apply_system_variant(self->_current_kc_type, (kc_variant_t)self->_current_profile->get_int_value(key, KC_VARIANT_NONE)); } } void OptionsWindow::on_system_variant_changed(GtkComboBox *combobox, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; GtkTreeIter iter; if (!gtk_combo_box_get_active_iter(self->_w.combobox_system_variant, &iter)) return; int kc_variant; GtkTreeModel *model = gtk_combo_box_get_model(self->_w.combobox_system_variant); gtk_tree_model_get(model, &iter, 1, &kc_variant, -1); self->_current_profile->set_int_value("variant", kc_variant); self->apply_roms_settings(self->_current_kc_type, (kc_variant_t)kc_variant); } void OptionsWindow::on_module_changed(GtkComboBox *combobox, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; string list; const char *ptr = ""; for (int a = 0;a < NR_OF_MODULES;a++) { GtkTreeIter iter; if (gtk_combo_box_get_active_iter(self->_w.combobox_module[a], &iter)) { gchar *modif; GtkTreeModel *model = gtk_combo_box_get_model(self->_w.combobox_module[a]); gtk_tree_model_get(model, &iter, MODULES_MODIF_COLUMN, &modif, -1); if (modif != NULL) { list += ptr; list += modif; ptr = ","; g_free(modif); } } } self->_current_profile->set_string_value("modules", list.c_str()); } void OptionsWindow::on_modules_check_button_toggled(GtkToggleButton *togglebutton, gpointer user_data) { const char *key = "modules"; OptionsWindow *self = (OptionsWindow *)user_data; for (int a = 0;a < NR_OF_MODULES;a++) { gtk_widget_set_sensitive(GTK_WIDGET(self->_w.combobox_module[a]), togglebutton->active); } if (togglebutton->active) { self->_current_profile->set_string_value(key, self->_current_profile->get_string_value(key, "")); } else { self->_current_profile->remove_value(key); self->apply_modules_settings(self->_current_kc_type); } } void OptionsWindow::on_kc85_settings_check_button_toggled(GtkToggleButton *togglebutton, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; if (self->check_button_toggled(togglebutton)) self->apply_kc85_settings(); } void OptionsWindow::on_kc85_d004_changed(GtkComboBox *combobox, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; int d004 = gtk_combo_box_get_active(combobox); self->_current_profile->set_int_value("d004", d004); } void OptionsWindow::on_kc85_f8_rom_changed(GtkComboBox *combobox, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; int d004_f8 = gtk_combo_box_get_active(combobox); self->_current_profile->set_int_value("d004_f8", d004_f8); } void OptionsWindow::on_kc85_busdrivers_changed(GtkSpinButton *spin_button, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; int busdrivers = gtk_spin_button_get_value_as_int(spin_button); self->_current_profile->set_int_value("busdrivers", busdrivers); } void OptionsWindow::on_roms_settings_check_button_toggled(GtkToggleButton *togglebutton, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; if (self->check_button_toggled(togglebutton)) self->apply_system_type(); } void OptionsWindow::on_rom_changed(GtkComboBoxEntry *comboboxentry, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; GtkTreeIter iter; if (!gtk_combo_box_get_active_iter(GTK_COMBO_BOX(comboboxentry), &iter)) return; gchar *rom; GtkTreeModel *model = gtk_combo_box_get_model(GTK_COMBO_BOX(comboboxentry)); gtk_tree_model_get(model, &iter, 1, &rom, -1); const char *key = self->get_preferences_key(G_OBJECT(g_object_get_data(G_OBJECT(comboboxentry), DATA_KEY_CHECK_BUTTON))); self->_current_profile->set_string_value(key, rom); self->apply_system_type(); // let apply_roms_settings change the tooltip text for the combobox! } void OptionsWindow::on_rom_open_clicked(GtkButton *button, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; GtkWidget *filechooser = gtk_file_chooser_dialog_new(_("Open ROM Image..."), GTK_WINDOW(self->_window), GTK_FILE_CHOOSER_ACTION_OPEN, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_OPEN, GTK_RESPONSE_ACCEPT, NULL); if (self->_open_rom_last_path == NULL) self->_open_rom_last_path = sys_gethome(); gtk_file_chooser_set_current_folder(GTK_FILE_CHOOSER(filechooser), self->_open_rom_last_path); free(self->_open_rom_last_path); const char *key = self->get_preferences_key(G_OBJECT(g_object_get_data(G_OBJECT(button), DATA_KEY_CHECK_BUTTON))); if (gtk_dialog_run(GTK_DIALOG(filechooser)) == GTK_RESPONSE_ACCEPT) { char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(filechooser)); self->_current_profile->set_string_value(key, filename); g_free(filename); } self->_open_rom_last_path = gtk_file_chooser_get_current_folder(GTK_FILE_CHOOSER(filechooser)); gtk_widget_destroy(filechooser); self->apply_system_type(); // let apply_roms_settings add the filename from profile to combobox model! } void OptionsWindow::apply_entry_value(GtkEntry *entry, gint signal_id) { const char * key = get_preferences_key(G_OBJECT(entry)); ProfileValue *value = get_current_profile_value(key); g_signal_handler_block(entry, signal_id); gtk_entry_set_text(entry, value == NULL ? "" : value->get_string_value()); g_signal_handler_unblock(entry, signal_id); GtkToggleButton *toggle_button = GTK_TOGGLE_BUTTON(g_object_get_data(G_OBJECT(entry), DATA_KEY_CHECK_BUTTON)); gtk_toggle_button_set_active(toggle_button, _current_profile->contains_key(key)); } void OptionsWindow::apply_network_settings(void) { apply_entry_value(_w.entry_network_ip_address, _w.on_network_changed_id[0]); apply_entry_value(_w.entry_network_netmask, _w.on_network_changed_id[1]); apply_entry_value(_w.entry_network_gateway, _w.on_network_changed_id[2]); apply_entry_value(_w.entry_network_dns_server, _w.on_network_changed_id[3]); } void OptionsWindow::on_network_settings_check_button_toggled(GtkToggleButton *togglebutton, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; if (self->check_button_toggled(togglebutton)) self->apply_network_settings(); } void OptionsWindow::on_network_changed(GtkEntry *entry, gpointer user_data) { OptionsWindow *self = (OptionsWindow *)user_data; const char * key = self->get_preferences_key(G_OBJECT(entry)); gchar *text = pango_trim_string(gtk_entry_get_text(entry)); gtk_entry_set_icon_from_stock(entry, GTK_ENTRY_ICON_PRIMARY, *text && !self->is_ip_address(text) ? GTK_STOCK_DIALOG_WARNING : NULL); gtk_entry_set_icon_activatable(entry, GTK_ENTRY_ICON_PRIMARY, FALSE); self->_current_profile->set_string_value(key, text); g_free(text); } GtkTreeModel * OptionsWindow::get_selected_tree_iter(GtkTreeIter *iter) { GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(_w.treeview)); GtkTreeModel *model; if (gtk_tree_selection_get_selected(selection, &model, iter)) return model; return NULL; } /** * FreeBSD 8 still uses glib 2.20 as default version. That does * not include g_hostname_is_ip_address() which has the good point * to be available in MinGW environment too. * I'm not going to to create a wrapper just for the GUI check, so * there's no nice warning icon until glib is upgraded to at least 2.22. */ bool OptionsWindow::is_ip_address(const char *addr) { #if GLIB_CHECK_VERSION(2, 22, 0) return g_hostname_is_ip_address(addr); #else return true; #endif } ProfileValue * OptionsWindow::get_current_profile_value(const char *key) { if (_current_profile == NULL) return NULL; return _current_profile->get_value(key); } const char * OptionsWindow::get_preferences_key(GObject *object) { const char * key = (const char *)g_object_get_data(object, PREFERENCES_KEY); g_assert(key != NULL); return key; } void OptionsWindow::set_preferences_key(GObject *object, const char *key) { g_assert(object != NULL); g_assert(key != NULL); g_object_set_data(object, PREFERENCES_KEY, strdup(key)); } /** * Apply the profile value to the given spinbutton. The key of the value to apply will * be fetched from the data set on the checkbutton that enables/disables this spinbutton. * * While setting the value the signal handler is blocked to prevent loops with the * handler writing changes back to the profile. */ void OptionsWindow::apply_spin_button_value(GtkCheckButton *check_button, GtkSpinButton *spin_button, gint signal_id, int default_value) { const char *key = get_preferences_key(G_OBJECT(check_button)); ProfileValue *value = get_current_profile_value(key); int spin_value = value == NULL ? default_value : value->get_int_value(); g_signal_handler_block(spin_button, signal_id); gtk_spin_button_set_value(spin_button, spin_value); g_signal_handler_unblock(spin_button, signal_id); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button), _current_profile->contains_key(key)); } /** * Apply the profile value to the given combobox. The key of the value to apply will * be fetched from the data set on the checkbutton that enables/disables this combobox. * * While setting the value the signal handler is blocked to prevent loops with the * handler writing changes back to the profile. * * The value for the combobox is currently limited to be 0 or 1. */ void OptionsWindow::apply_combobox_value(GtkCheckButton *check_button, GtkComboBox *combobox, gint handler_id) { const char *key = get_preferences_key(G_OBJECT(check_button)); ProfileValue *value = get_current_profile_value(key); int val = value == NULL ? 0 : value->get_int_value(); g_signal_handler_block(combobox, handler_id); gtk_combo_box_set_active(combobox, val ? 1 : 0); g_signal_handler_unblock(combobox, handler_id); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(check_button), _current_profile->contains_key(key)); } void OptionsWindow::apply_profile(void) { g_signal_handler_block(_w.entry_profile_name, _w.on_profile_name_changed_id); gtk_entry_set_text(_w.entry_profile_name, _current_profile->get_name()); g_signal_handler_unblock(_w.entry_profile_name, _w.on_profile_name_changed_id); gtk_widget_set_sensitive(GTK_WIDGET(_w.entry_profile_name), _current_profile->get_level() == PROFILE_LEVEL_USER); apply_comment(); apply_system_type(); apply_display_settings(); apply_kc85_settings(); apply_network_settings(); apply_filechooserbutton(GTK_FILE_CHOOSER(get_widget("media_filechooserbutton_tape"))); apply_filechooserbutton(GTK_FILE_CHOOSER(get_widget("media_filechooserbutton_audio"))); apply_filechooserbutton(GTK_FILE_CHOOSER(get_widget("media_filechooserbutton_disk1"))); apply_filechooserbutton(GTK_FILE_CHOOSER(get_widget("media_filechooserbutton_disk2"))); apply_filechooserbutton(GTK_FILE_CHOOSER(get_widget("media_filechooserbutton_disk3"))); apply_filechooserbutton(GTK_FILE_CHOOSER(get_widget("media_filechooserbutton_disk4"))); apply_filechooserbutton(GTK_FILE_CHOOSER(get_widget("media_filechooserbutton_hd1"))); apply_filechooserbutton(GTK_FILE_CHOOSER(get_widget("media_filechooserbutton_hd2"))); } void OptionsWindow::apply_comment(void) { g_signal_handler_block(_w.textbuffer_comment, _w.on_comment_changed_id); gtk_text_buffer_set_text(_w.textbuffer_comment, _current_profile->get_comment(), -1); g_signal_handler_unblock(_w.textbuffer_comment, _w.on_comment_changed_id); gtk_widget_set_sensitive(GTK_WIDGET(_w.textview_comment), _current_profile->get_level() == PROFILE_LEVEL_USER); } void OptionsWindow::apply_system_type(void) { gtk_widget_set_sensitive(GTK_WIDGET(_w.combobox_system_type), _current_profile->get_level() == PROFILE_LEVEL_DEFAULT); ProfileValue *system = get_current_profile_value("system"); ProfileValue *variant = get_current_profile_value("variant"); g_signal_handler_block(_w.combobox_system_type, _w.on_system_type_changed_id); GtkTreeIter iter; bool valid = system != NULL; if (valid) valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(_w.liststore_system), &iter); while (valid) { int kc_type; gtk_tree_model_get(GTK_TREE_MODEL(_w.liststore_system), &iter, 1, &kc_type, -1); if (system->get_int_value() == kc_type) { gtk_combo_box_set_active_iter(_w.combobox_system_type, &iter); apply_system_variant((kc_type_t)kc_type, variant == NULL ? KC_VARIANT_NONE : (kc_variant_t)variant->get_int_value()); apply_roms_settings((kc_type_t)kc_type, variant == NULL ? KC_VARIANT_NONE : (kc_variant_t)variant->get_int_value()); apply_modules_settings((kc_type_t)kc_type); break; } valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(_w.liststore_system), &iter); } if (!valid) { gtk_combo_box_set_active(_w.combobox_system_type, -1); apply_system_variant(KC_TYPE_NONE, KC_VARIANT_NONE); apply_roms_settings(KC_TYPE_NONE, KC_VARIANT_NONE); apply_modules_settings(KC_TYPE_NONE); } g_signal_handler_unblock(_w.combobox_system_type, _w.on_system_type_changed_id); } void OptionsWindow::set_roms_liststore(int idx, const char *rom_key, SystemROM *rom) { ProfileValue *profile_value = get_current_profile_value(rom_key); const char *profile_rom_filename = (profile_value == NULL) ? NULL : profile_value->get_string_value(); GtkListStore *store = GTK_LIST_STORE(gtk_combo_box_get_model(GTK_COMBO_BOX(_w.roms_comboboxentry[idx]))); gtk_list_store_clear(store); int active = -1; int list_entry = 0; ROMEntry *active_entry = NULL; const rom_entry_list_t roms = rom->get_roms(); for (rom_entry_list_t::const_iterator it2 = roms.begin();it2 != roms.end();it2++) { ROMEntry *entry = (*it2); GtkTreeIter iter; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, ROMS_DESCRIPTION_COLUMN, entry->get_description().c_str(), ROMS_FILENAME_COLUMN, entry->get_filename().c_str(), ROMS_TYPE_COLUMN, 1, -1); if ((profile_rom_filename != NULL) && (entry->get_filename().compare(profile_rom_filename) == 0)) { active = list_entry; active_entry = entry; } list_entry++; } if ((active < 0) && (profile_rom_filename != NULL)) { GtkTreeIter iter; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, ROMS_DESCRIPTION_COLUMN, sys_basename(profile_rom_filename), ROMS_FILENAME_COLUMN, profile_rom_filename, ROMS_TYPE_COLUMN, 2, -1); active = list_entry; } if (active < 0) { active = 0; active_entry = *roms.begin(); int idx = 0; for (rom_entry_list_t::const_iterator it = roms.begin();it != roms.end();it++) { ROMEntry *entry = (*it); if (entry->is_default()) { active = idx; active_entry = entry; break; } idx++; } } char tooltip[128]; snprintf(tooltip, sizeof(tooltip), _("ROM image is '%s'. The ROM size needs to be %04xh (%d) bytes."), active_entry != NULL ? active_entry->get_filename().c_str() : profile_rom_filename, rom->get_size(), rom->get_size()); gtk_widget_set_tooltip_text(GTK_WIDGET(_w.roms_comboboxentry[idx]), tooltip); g_signal_handler_block(_w.roms_comboboxentry[idx], _w.on_rom_changed_id[idx]); gtk_combo_box_set_model(GTK_COMBO_BOX(_w.roms_comboboxentry[idx]), GTK_TREE_MODEL(store)); gtk_combo_box_set_active(GTK_COMBO_BOX(_w.roms_comboboxentry[idx]), active); g_signal_handler_unblock(_w.roms_comboboxentry[idx], _w.on_rom_changed_id[idx]); } void OptionsWindow::apply_roms_settings(kc_type_t kc_type, kc_variant_t kc_variant) { const SystemType *type = SystemInformation::instance()->get_system_type(kc_type, kc_variant); if (type == NULL) return; system_rom_list_t rom_list = type->get_rom_list(); int idx = 0; for (system_rom_list_t::const_iterator it = rom_list.begin();(it != rom_list.end()) && (idx < NR_OF_ROMS);it++) { SystemROM *rom = (*it); const char *rom_key = rom->get_name().c_str(); set_roms_liststore(idx, rom_key, rom); string text = string(gettext(rom_key)) + ":"; gtk_label_set_text(_w.roms_label[idx], text.c_str()); gpointer val = g_object_get_data(G_OBJECT(_w.roms_check_button[idx]), PREFERENCES_KEY); g_object_set_data(G_OBJECT(_w.roms_check_button[idx]), PREFERENCES_KEY, strdup(rom_key)); free(val); gtk_widget_show(GTK_WIDGET(_w.roms_label[idx])); gtk_widget_show(GTK_WIDGET(_w.roms_comboboxentry[idx])); gtk_widget_show(GTK_WIDGET(_w.roms_open_button[idx])); gtk_widget_show(GTK_WIDGET(_w.roms_check_button[idx])); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(_w.roms_check_button[idx]), _current_profile->contains_key(rom_key)); gtk_widget_set_sensitive(GTK_WIDGET(_w.roms_check_button[idx]), _current_profile->get_level() != PROFILE_LEVEL_DEFAULT); idx++; } for (;idx < NR_OF_ROMS;idx++) { gtk_widget_hide(GTK_WIDGET(_w.roms_label[idx])); gtk_widget_hide(GTK_WIDGET(_w.roms_comboboxentry[idx])); gtk_widget_hide(GTK_WIDGET(_w.roms_open_button[idx])); gtk_widget_hide(GTK_WIDGET(_w.roms_check_button[idx])); } } void OptionsWindow::apply_system_variant(kc_type_t kc_type, kc_variant_t kc_variant) { _current_kc_type = kc_type; system_type_list_t list = SystemInformation::instance()->get_system_types(); GtkListStore *store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT); for (system_type_list_t::iterator it = list.begin();it != list.end();it++) { SystemType *type = (*it); if (type->get_kc_type() != kc_type) continue; GtkTreeIter iter; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, type->get_display_name(), 1, type->get_kc_variant(), -1); } g_signal_handler_block(_w.combobox_system_variant, _w.on_system_variant_changed_id); gtk_combo_box_set_model(_w.combobox_system_variant, GTK_TREE_MODEL(store)); g_object_unref(store); if (kc_variant == KC_VARIANT_NONE) { gtk_combo_box_set_active(_w.combobox_system_variant, 0); } else { GtkTreeIter iter; bool valid = gtk_tree_model_get_iter_first(GTK_TREE_MODEL(store), &iter); while (valid) { int v; gtk_tree_model_get(GTK_TREE_MODEL(store), &iter, 1, &v, -1); if (kc_variant == v) { gtk_combo_box_set_active_iter(_w.combobox_system_variant, &iter); break; } valid = gtk_tree_model_iter_next(GTK_TREE_MODEL(store), &iter); } if (!valid) { gtk_combo_box_set_active(_w.combobox_system_variant, 0); } } g_signal_handler_unblock(_w.combobox_system_variant, _w.on_system_variant_changed_id); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(_w.check_button_system_variant), _current_profile->contains_key("variant")); } void OptionsWindow::apply_display_settings(void) { apply_spin_button_value(_w.check_button_display_scale, _w.spin_button_display_scale, _w.on_display_scale_value_changed_id, 1); apply_combobox_value(_w.check_button_display_effects, _w.combobox_display_effects, _w.on_display_effects_changed_id); apply_combobox_value(_w.check_button_display_mem_access, _w.combobox_display_mem_access, _w.on_display_mem_access_changed_id); apply_combobox_value(_w.check_button_display_debug, _w.combobox_display_debug, _w.on_display_debug_changed_id); } void OptionsWindow::apply_kc85_settings(void) { apply_spin_button_value(_w.check_button_busdrivers, _w.spin_button_busdrivers, _w.on_kc85_busdrivers_changed_id, 0); apply_combobox_value(_w.check_button_d004, _w.combobox_d004, _w.on_kc85_d004_changed_id); apply_combobox_value(_w.check_button_f8_rom, _w.combobox_f8_rom, _w.on_kc85_f8_rom_changed_id); } void OptionsWindow::apply_modules_settings(kc_type_t kc_type) { const char *key = "modules"; ProfileValue *modules = get_current_profile_value(key); string modules_list = modules == NULL ? "" : modules->get_string_value(); StringList list(modules == NULL ? "" : modules->get_string_value()); for (int a = 0;a < NR_OF_MODULES;a++) { g_signal_handler_block(_w.combobox_module[a], _w.on_module_changed_id[a]); } if (_w.liststore_modules != NULL) { gtk_list_store_clear(_w.liststore_modules); // FIXME: gtk_list_store_free() ??? } _w.liststore_modules = get_modules_list_model(kc_type); for (int a = 0;a < NR_OF_MODULES;a++) { gtk_combo_box_set_model(_w.combobox_module[a], GTK_TREE_MODEL(_w.liststore_modules)); gtk_combo_box_set_active(_w.combobox_module[a], 0); } int a = 0; for (StringList::iterator it = list.begin();(it != list.end()) && (a < NR_OF_MODULES);it++) { GtkTreeIter iter; GtkTreeModel *model = gtk_combo_box_get_model(_w.combobox_module[a]); bool valid = gtk_tree_model_get_iter_first(model, &iter); while (valid) { gchar *modif; gtk_tree_model_get(model, &iter, MODULES_MODIF_COLUMN, &modif, -1); if ((modif != NULL) && (strcmp((*it).c_str(), modif) == 0)) { gtk_combo_box_set_active_iter(_w.combobox_module[a], &iter); break; } g_free(modif); valid = gtk_tree_model_iter_next(model, &iter); } a++; } for (int a = 0;a < NR_OF_MODULES;a++) { g_signal_handler_unblock(_w.combobox_module[a], _w.on_module_changed_id[a]); } gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(_w.check_button_modules), _current_profile->contains_key(key)); } void OptionsWindow::apply_filechooserbutton(GtkFileChooser *filechooser) { const char * key = (const char *)g_object_get_data(G_OBJECT(filechooser), PREFERENCES_KEY); const char * dir = (const char *)g_object_get_data(G_OBJECT(filechooser), DEFAULT_DIR_KEY); ProfileValue *value = get_current_profile_value(key); const char *filename = value == NULL ? NULL : value->get_string_value(); if (filename == NULL) { gtk_file_chooser_unselect_all(filechooser); } else { if (!sys_isabsolutepath(filename) && (dir != NULL)) { string path = string(kcemu_datadir) + dir + filename; gtk_file_chooser_select_filename(filechooser, path.c_str()); } else { gtk_file_chooser_select_filename(filechooser, filename); } } GtkToggleButton *toggle_button = GTK_TOGGLE_BUTTON(g_object_get_data(G_OBJECT(filechooser), DATA_KEY_CHECK_BUTTON)); gtk_toggle_button_set_active(toggle_button, _current_profile->contains_key(key)); } void OptionsWindow::move_row(GtkPathMoveFunc path_func, GtkIterMoveFunc move_func) { GtkTreeIter iter; GtkTreeModel *model; GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(_w.treeview)); if (!gtk_tree_selection_get_selected(selection, &model, &iter)) return; GtkTreePath *path = gtk_tree_model_get_path(model, &iter); path_func(path); GtkTreeIter position; if (gtk_tree_model_get_iter(model, &position, path)) { move_func(_w.treestore, &iter, &position); } gtk_tree_path_free(path); } void OptionsWindow::add_system(GtkTreeStore *store, GtkTreeIter *iter, const char *name, const char *config_name, const char *icon_name) { GtkTreeIter iter_system; GdkPixbuf *pixbuf = get_icon(icon_name); gtk_tree_store_append(store, &iter_system, iter); gtk_tree_store_set(store, &iter_system, TREE_INT_COLUMN, 2, TREE_TEXT_COLUMN, name, TREE_CONFIG_NAME_COLUMN, config_name, TREE_ICON_COLUMN, pixbuf, -1); list children = Preferences::instance()->find_child_profiles(config_name); for (list::iterator it = children.begin();it != children.end();it++) { GtkTreeIter iter_child; gtk_tree_store_append(store, &iter_child, &iter_system); gtk_tree_store_set(store, &iter_child, TREE_INT_COLUMN, 2, TREE_TEXT_COLUMN, (*it)->get_name(), TREE_CONFIG_NAME_COLUMN, (*it)->get_config_name(), TREE_ICON_COLUMN, _w.pixbuf_default, -1); } } GtkTreeStore * OptionsWindow::get_tree_model(void) { GtkTreeStore *store = gtk_tree_store_new(TREE_N_COLUMNS, G_TYPE_INT, G_TYPE_STRING, GDK_TYPE_PIXBUF, G_TYPE_STRING); GtkTreeIter iter_root; gtk_tree_store_append(store, &iter_root, NULL); gtk_tree_store_set(store, &iter_root, TREE_INT_COLUMN, 1, TREE_TEXT_COLUMN, "Default", TREE_ICON_COLUMN, _w.pixbuf_root, TREE_CONFIG_NAME_COLUMN, "default", -1); emulation_type_list_t list = EmulationType::get_emulation_types(); for (emulation_type_list_t::iterator it = list.begin();it != list.end();it++) { add_system(store, &iter_root, (*it)->get_name(), (*it)->get_config_name(), (*it)->get_icon_name()); } return store; } GtkListStore * OptionsWindow::get_system_list_model(void) { GtkListStore *store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT); emulation_type_list_t list = EmulationType::get_emulation_types(); for (emulation_type_list_t::iterator it = list.begin();it != list.end();it++) { GtkTreeIter iter; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, (*it)->get_name(), 1, (*it)->get_kc_type(), -1); } return store; } GtkListStore * OptionsWindow::get_variant_list_model(kc_variant_t kc_variant, const char *name, ...) { GtkListStore *store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT); va_list ap; va_start(ap, name); while (242) { GtkTreeIter iter; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, name, 1, kc_variant, -1); kc_variant = (kc_variant_t)va_arg(ap, int); if (kc_variant < 0) break; name = va_arg(ap, const char *); } va_end(ap); return store; } GtkListStore * OptionsWindow::get_modules_list_model(kc_type_t kc_type) { GtkListStore *store = gtk_list_store_new(MODULES_N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_POINTER); for (ModuleList::iterator it = module_list->begin();it != module_list->end();it++) { kc_type_t mod_kc_type = (*it)->get_kc_type(); if ((mod_kc_type & kc_type) == 0) continue; const char *name = (*it)->get_name(); const char *modif_name = (*it)->get_mod() == NULL ? NULL : (*it)->get_mod()->get_name(); GtkTreeIter iter; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, MODULES_NAME_COLUMN, name, MODULES_MODIF_COLUMN, modif_name, MODULES_POINTER_COLUMN, (*it), -1); } return store; } void OptionsWindow::wire_check_button(const char *preferences_key, const char *default_dir, const char *check_button_name, const char *filechooser_button_name, const char *button_clear_name) { GtkWidget *check_button = get_widget(check_button_name); GtkWidget *filechooser_button = get_widget(filechooser_button_name); GtkWidget *button_clear = get_widget(button_clear_name); g_object_set_data(G_OBJECT(check_button), FILE_CHOOSER_BUTTON_KEY, filechooser_button); g_object_set_data(G_OBJECT(check_button), FILE_CHOOSER_CLEAR_BUTTON_KEY, button_clear); g_object_set_data(G_OBJECT(button_clear), FILE_CHOOSER_BUTTON_KEY, filechooser_button); g_object_set_data(G_OBJECT(filechooser_button), DATA_KEY_CHECK_BUTTON, check_button); g_object_set_data(G_OBJECT(filechooser_button), PREFERENCES_KEY, strdup(preferences_key)); if (default_dir != NULL) g_object_set_data(G_OBJECT(filechooser_button), DEFAULT_DIR_KEY, strdup(default_dir)); g_signal_connect(check_button, "toggled", G_CALLBACK(on_media_check_button_toggled), this); g_signal_connect(button_clear, "clicked", G_CALLBACK(on_media_clear_button_clicked), this); g_signal_connect(filechooser_button, "file-set", G_CALLBACK(on_media_filechooser_file_set), this); } void OptionsWindow::wire_check_button(const char *preferences_key, GtkCheckButton *check_button, GCallback callback, GtkWidget *target1, GtkWidget *target2, GtkWidget *target3) { g_object_set_data(G_OBJECT(check_button), PREFERENCES_KEY, strdup(preferences_key)); g_object_set_data(G_OBJECT(check_button), TARGET_WIDGET1_KEY, target1); g_object_set_data(G_OBJECT(target1), DATA_KEY_CHECK_BUTTON, check_button); if (target2 != NULL) { g_object_set_data(G_OBJECT(check_button), TARGET_WIDGET2_KEY, target2); g_object_set_data(G_OBJECT(target2), DATA_KEY_CHECK_BUTTON, check_button); } if (target3 != NULL) { g_object_set_data(G_OBJECT(check_button), TARGET_WIDGET3_KEY, target3); g_object_set_data(G_OBJECT(target3), DATA_KEY_CHECK_BUTTON, check_button); } g_signal_connect(check_button, "toggled", callback, this); } void OptionsWindow::init(void) { _window = get_widget("options_window"); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(cmd_exec_sft), (char *)"ui-options-window-toggle"); // FIXME: _w.pixbuf_root = get_icon("icon-root.png"); _w.pixbuf_default = get_icon("icon-default.png"); _w.pixbuf_deleted = get_icon("icon-deleted.png"); _w.treestore = get_tree_model(); _w.treeview = get_widget("tree_treeview"); gtk_tree_view_set_model(GTK_TREE_VIEW(_w.treeview), GTK_TREE_MODEL(_w.treestore)); gtk_tree_view_columns_autosize(GTK_TREE_VIEW(_w.treeview)); GtkTreeViewColumn *column1 = gtk_tree_view_column_new(); add_icon_renderer(GTK_TREE_VIEW(_w.treeview), column1, "", "pixbuf", TREE_ICON_COLUMN, NULL); add_text_renderer(GTK_TREE_VIEW(_w.treeview), column1, "Profile", "text", TREE_TEXT_COLUMN, NULL); gtk_tree_view_append_column(GTK_TREE_VIEW(_w.treeview), column1); //add_text_column(GTK_TREE_VIEW(_w.treeview), "Comment", "text", TOOLTIP_COLUMN, NULL); _w.notebook = GTK_NOTEBOOK(get_widget("notebook")); _w.b_new = get_widget("tree_button_new"); g_signal_connect(_w.b_new, "clicked", G_CALLBACK(on_button_new_clicked), this); _w.b_copy = get_widget("tree_button_copy"); g_signal_connect(_w.b_copy, "clicked", G_CALLBACK(on_button_copy_clicked), this); _w.b_delete = get_widget("tree_button_delete"); g_signal_connect(_w.b_delete, "clicked", G_CALLBACK(on_button_delete_clicked), this); _w.b_up = get_widget("tree_button_up"); g_signal_connect(_w.b_up, "clicked", G_CALLBACK(on_button_up_clicked), this); _w.b_down = get_widget("tree_button_down"); g_signal_connect(_w.b_down, "clicked", G_CALLBACK(on_button_down_clicked), this); _w.b_expand = get_widget("tree_button_expand"); g_signal_connect(_w.b_expand, "clicked", G_CALLBACK(on_button_expand_clicked), this); _w.b_collapse = get_widget("tree_button_collapse"); g_signal_connect(_w.b_collapse, "clicked", G_CALLBACK(on_button_collapse_clicked), this); _w.b_ok = get_widget("dialog_button_ok"); g_signal_connect(_w.b_ok, "clicked", G_CALLBACK(on_button_ok_clicked), this); _w.b_close = get_widget("dialog_button_close"); g_signal_connect(_w.b_close, "clicked", G_CALLBACK(on_button_close_clicked), this); /* setup the selection handler */ GtkTreeSelection *select = gtk_tree_view_get_selection(GTK_TREE_VIEW(_w.treeview)); gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE); g_signal_connect(G_OBJECT(select), "changed", G_CALLBACK(on_tree_selection_changed), this); _w.entry_profile_name = GTK_ENTRY(get_widget("system_entry_profile_name")); _w.on_profile_name_changed_id = g_signal_connect(_w.entry_profile_name, "changed", G_CALLBACK(on_profile_name_changed), this); _w.textview_comment = GTK_TEXT_VIEW(get_widget("system_textview_comment")); _w.textbuffer_comment = gtk_text_view_get_buffer(_w.textview_comment); _w.on_comment_changed_id = g_signal_connect(_w.textbuffer_comment, "changed", G_CALLBACK(on_comment_changed), this); wire_check_button("tape_file", "/tapes/", "media_check_button_tape", "media_filechooserbutton_tape", "media_button_tape_clear"); wire_check_button("audio_file", NULL, "media_check_button_audio", "media_filechooserbutton_audio", "media_button_audio_clear"); wire_check_button("disk_1", "/disks/", "media_check_button_disk1", "media_filechooserbutton_disk1", "media_button_disk1_clear"); wire_check_button("disk_2", "/disks/", "media_check_button_disk2", "media_filechooserbutton_disk2", "media_button_disk2_clear"); wire_check_button("disk_3", "/disks/", "media_check_button_disk3", "media_filechooserbutton_disk3", "media_button_disk3_clear"); wire_check_button("disk_4", "/disks/", "media_check_button_disk4", "media_filechooserbutton_disk4", "media_button_disk4_clear"); wire_check_button("hard_disk_1", NULL, "media_check_button_hd1", "media_filechooserbutton_hd1", "media_button_hd1_clear"); wire_check_button("hard_disk_2", NULL, "media_check_button_hd2", "media_filechooserbutton_hd2", "media_button_hd2_clear"); _w.check_button_display_scale = GTK_CHECK_BUTTON(get_widget("display_check_button_scale")); _w.check_button_display_effects = GTK_CHECK_BUTTON(get_widget("display_check_button_effects")); _w.check_button_display_mem_access = GTK_CHECK_BUTTON(get_widget("display_check_button_mem_access")); _w.check_button_display_debug = GTK_CHECK_BUTTON(get_widget("display_check_button_debug")); _w.spin_button_display_scale = GTK_SPIN_BUTTON(get_widget("display_spin_button_scale")); _w.combobox_display_effects = GTK_COMBO_BOX(get_widget("display_combobox_effects")); _w.combobox_display_mem_access = GTK_COMBO_BOX(get_widget("display_combobox_mem_access")); _w.combobox_display_debug = GTK_COMBO_BOX(get_widget("display_combobox_debug")); wire_check_button("display_scale", _w.check_button_display_scale, G_CALLBACK(on_display_check_button_toggled), GTK_WIDGET(_w.spin_button_display_scale)); wire_check_button("display_effects", _w.check_button_display_effects, G_CALLBACK(on_display_check_button_toggled), GTK_WIDGET(_w.combobox_display_effects)); wire_check_button("display_mem_access", _w.check_button_display_mem_access, G_CALLBACK(on_display_check_button_toggled), GTK_WIDGET(_w.combobox_display_mem_access)); wire_check_button("display_debug", _w.check_button_display_debug, G_CALLBACK(on_display_check_button_toggled), GTK_WIDGET(_w.combobox_display_debug)); _w.on_display_scale_value_changed_id = g_signal_connect(_w.spin_button_display_scale, "value-changed", G_CALLBACK(on_display_scale_value_changed), this); _w.on_display_effects_changed_id = g_signal_connect(_w.combobox_display_effects, "changed", G_CALLBACK(on_display_effects_changed), this); _w.on_display_mem_access_changed_id = g_signal_connect(_w.combobox_display_mem_access, "changed", G_CALLBACK(on_display_mem_access_changed), this); _w.on_display_debug_changed_id = g_signal_connect(_w.combobox_display_debug, "changed", G_CALLBACK(on_display_debug_changed), this); _w.check_button_d004 = GTK_CHECK_BUTTON(get_widget("kc85_checkbutton_d004")); _w.check_button_f8_rom = GTK_CHECK_BUTTON(get_widget("kc85_checkbutton_f8_rom")); _w.check_button_busdrivers = GTK_CHECK_BUTTON(get_widget("kc85_checkbutton_busdrivers")); _w.combobox_d004 = GTK_COMBO_BOX(get_widget("kc85_combobox_d004")); _w.combobox_f8_rom = GTK_COMBO_BOX(get_widget("kc85_combobox_f8_rom")); _w.spin_button_busdrivers = GTK_SPIN_BUTTON(get_widget("kc85_spinbutton_busdrivers")); wire_check_button("d004", _w.check_button_d004, G_CALLBACK(on_kc85_settings_check_button_toggled), GTK_WIDGET(_w.combobox_d004)); wire_check_button("d004_f8", _w.check_button_f8_rom, G_CALLBACK(on_kc85_settings_check_button_toggled), GTK_WIDGET(_w.combobox_f8_rom)); wire_check_button("busdrivers", _w.check_button_busdrivers, G_CALLBACK(on_kc85_settings_check_button_toggled), GTK_WIDGET(_w.spin_button_busdrivers)); _w.on_kc85_d004_changed_id = g_signal_connect(_w.combobox_d004, "changed", G_CALLBACK(on_kc85_d004_changed), this); _w.on_kc85_f8_rom_changed_id = g_signal_connect(_w.combobox_f8_rom, "changed", G_CALLBACK(on_kc85_f8_rom_changed), this); _w.on_kc85_busdrivers_changed_id = g_signal_connect(_w.spin_button_busdrivers, "value-changed", G_CALLBACK(on_kc85_busdrivers_changed), this); for (int a = 0;a < NR_OF_MODULES;a++) { _w.combobox_module[a] = GTK_COMBO_BOX(get_widget("modules_combobox_module", a + 1)); _w.on_module_changed_id[a] = g_signal_connect(_w.combobox_module[a], "changed", G_CALLBACK(on_module_changed), this); bind_list_model_column(_w.combobox_module[a], MODULES_NAME_COLUMN, NULL); } _w.check_button_modules = GTK_CHECK_BUTTON(get_widget("modules_check_button")); g_signal_connect(_w.check_button_modules, "toggled", G_CALLBACK(on_modules_check_button_toggled), this); _w.liststore_system = get_system_list_model(); _w.combobox_system_type = GTK_COMBO_BOX(get_widget("system_combobox_system_type")); gtk_combo_box_set_model(_w.combobox_system_type, GTK_TREE_MODEL(_w.liststore_system)); bind_list_model_column(_w.combobox_system_type, 0, NULL); _w.on_system_type_changed_id = g_signal_connect(_w.combobox_system_type, "changed", G_CALLBACK(on_system_type_changed), this); _w.combobox_system_variant = GTK_COMBO_BOX(get_widget("system_combobox_system_variant")); bind_list_model_column(_w.combobox_system_variant, 0, NULL); _w.on_system_variant_changed_id = g_signal_connect(_w.combobox_system_variant, "changed", G_CALLBACK(on_system_variant_changed), this); _w.check_button_system_variant = GTK_CHECK_BUTTON(get_widget("system_check_button_system_variant")); g_signal_connect(_w.check_button_system_variant, "toggled", G_CALLBACK(on_system_variant_check_button_toggled), this); for (int a = 0;a < NR_OF_ROMS;a++) { _w.roms_label[a] = GTK_LABEL(get_widget("roms_label_rom", a + 1)); _w.roms_comboboxentry[a] = GTK_COMBO_BOX_ENTRY(get_widget("roms_comboboxentry_rom", a + 1)); _w.roms_open_button[a] = GTK_BUTTON(get_widget("roms_open_button_rom", a + 1)); _w.roms_check_button[a] = GTK_CHECK_BUTTON(get_widget("roms_check_button_rom", a + 1)); wire_check_button("rom_dummy", _w.roms_check_button[a], G_CALLBACK(on_roms_settings_check_button_toggled), GTK_WIDGET(_w.roms_comboboxentry[a]), GTK_WIDGET(_w.roms_open_button[a])); g_signal_connect(_w.roms_open_button[a], "clicked", G_CALLBACK(on_rom_open_clicked), this); _w.on_rom_changed_id[a] = g_signal_connect(_w.roms_comboboxentry[a], "changed", G_CALLBACK(on_rom_changed), this); GtkListStore *store = gtk_list_store_new(ROMS_N_COLUMNS, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_INT); gtk_combo_box_set_model(GTK_COMBO_BOX(_w.roms_comboboxentry[a]), GTK_TREE_MODEL(store)); gtk_combo_box_entry_set_text_column(_w.roms_comboboxentry[a], 0); g_object_unref(store); } _w.entry_network_ip_address = GTK_ENTRY(get_widget("ip_address_entry")); set_preferences_key(G_OBJECT(_w.entry_network_ip_address), "network_ip_address"); _w.on_network_changed_id[0] = g_signal_connect(_w.entry_network_ip_address, "changed", G_CALLBACK(on_network_changed), this); wire_check_button("network_ip_address", GTK_CHECK_BUTTON(get_widget("ip_address_checkbutton")), G_CALLBACK(on_network_settings_check_button_toggled), GTK_WIDGET(_w.entry_network_ip_address)); _w.entry_network_netmask = GTK_ENTRY(get_widget("netmask_entry")); set_preferences_key(G_OBJECT(_w.entry_network_netmask), "network_netmask"); _w.on_network_changed_id[1] = g_signal_connect(_w.entry_network_netmask, "changed", G_CALLBACK(on_network_changed), this); wire_check_button("network_netmask", GTK_CHECK_BUTTON(get_widget("netmask_checkbutton")), G_CALLBACK(on_network_settings_check_button_toggled), GTK_WIDGET(_w.entry_network_netmask)); _w.entry_network_gateway = GTK_ENTRY(get_widget("gateway_entry")); set_preferences_key(G_OBJECT(_w.entry_network_gateway), "network_gateway"); _w.on_network_changed_id[2] = g_signal_connect(_w.entry_network_gateway, "changed", G_CALLBACK(on_network_changed), this); wire_check_button("network_gateway", GTK_CHECK_BUTTON(get_widget("gateway_checkbutton")), G_CALLBACK(on_network_settings_check_button_toggled), GTK_WIDGET(_w.entry_network_gateway)); _w.entry_network_dns_server = GTK_ENTRY(get_widget("dns_server_entry")); set_preferences_key(G_OBJECT(_w.entry_network_dns_server), "network_dns_server"); _w.on_network_changed_id[3] = g_signal_connect(_w.entry_network_dns_server, "changed", G_CALLBACK(on_network_changed), this); wire_check_button("network_dns_server", GTK_CHECK_BUTTON(get_widget("dns_server_checkbutton")), G_CALLBACK(on_network_settings_check_button_toggled), GTK_WIDGET(_w.entry_network_dns_server)); collapse_tree(); init_dialog(NULL, NULL); } void OptionsWindow::save(void) { string config_name = _current_profile->get_config_name(); Preferences::instance()->save(); GtkTreeModel *model = gtk_tree_view_get_model(GTK_TREE_VIEW(_w.treeview)); gtk_tree_model_foreach(model, tree_model_foreach_func_delete, this); /* select parent if we have deleted the currently selected profile */ if (Preferences::instance()->find_profile(config_name.c_str()) == NULL) { GtkTreeIter iter; GtkTreeModel *model = get_selected_tree_iter(&iter); if (model != NULL) { GtkTreeIter parent; if (gtk_tree_model_iter_parent(model, &parent, &iter)) { GtkTreeSelection *selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(_w.treeview)); gtk_tree_selection_select_iter(selection, &parent); } } } // delete in reverse order. otherwise we invalidate the collected path strings for (list::reverse_iterator it = _delete_path.rbegin();it != _delete_path.rend();it++) { GtkTreeIter iter; if (gtk_tree_model_get_iter_from_string(model, &iter, (*it).c_str())) { gtk_tree_store_remove(GTK_TREE_STORE(model), &iter); } } _delete_path.clear(); hide(); } void OptionsWindow::reject(void) { Preferences::instance()->reject(); apply_profile(); hide(); } KCemu-0.5.1/src/ui/gtk/dialog.cc0000644001050700006200000001526211345001576015754 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "ui/gtk/dialog.h" DialogWindow::DialogWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file), CMD("ui-dialog-yes-no") { _args = NULL; _delete_handler_id = 0; register_cmd("ui-dialog-ok", 0); register_cmd("ui-dialog-yes-no", 1); register_cmd("ui-dialog-yes-no-cancel", 2); init(); } DialogWindow::~DialogWindow(void) { } void DialogWindow::execute(CMD_Args *args, CMD_Context context) { char *text; const char *title; const char *text_arg; const char *text_val; const char *text_arg_val; _args = args; text = NULL; text_val = NULL; text_arg = NULL; title = _("???"); if (_args) { text_val = _args->get_string_arg("ui-dialog-text"); text_arg = _args->get_string_arg("ui-dialog-text-arg"); title = _args->get_string_arg("ui-dialog-title"); if (text_arg) { text_arg_val = _args->get_string_arg(text_arg); if (text_arg_val) { text = new char[strlen(text_val) + strlen(text_arg_val) + 1]; sprintf(text, text_val, text_arg_val); } } if (text == NULL) text = (char *)text_val; // FIXME: } if (text == NULL) text = ""; switch (context) { case 0: init_ok(title, text); break; case 1: init_yes_no(title, text); break; case 2: init_yes_no_cancel(title, text); break; default: break; } } void DialogWindow::ok(GtkWidget */*widget*/, gpointer data) { DialogWindow *self = (DialogWindow *)data; self->_dialog_result = GTK_RESPONSE_OK; if (self->_args != NULL) self->_args->call_callbacks("ui-dialog-ok-CB"); self->hide(); } void DialogWindow::cancel(GtkWidget */*widget*/, gpointer data) { DialogWindow *self = (DialogWindow *)data; self->_dialog_result = GTK_RESPONSE_CANCEL; if (self->_args != NULL) self->_args->call_callbacks("ui-dialog-cancel-CB"); self->hide(); } void DialogWindow::yes(GtkWidget */*widget*/, gpointer data) { DialogWindow *self = (DialogWindow *)data; self->_dialog_result = GTK_RESPONSE_YES; if (self->_args != NULL) self->_args->call_callbacks("ui-dialog-yes-no-CB-yes"); self->hide(); } void DialogWindow::no(GtkWidget */*widget*/, gpointer data) { DialogWindow *self = (DialogWindow *)data; self->_dialog_result = GTK_RESPONSE_NO; if (self->_args != NULL) self->_args->call_callbacks("ui-dialog-yes-no-CB-no"); self->hide(); } int DialogWindow::delete_event_yes_no(GtkWidget *widget, GdkEvent *event, gpointer data) { no(widget, data); return true; } int DialogWindow::delete_event_yes_no_cancel(GtkWidget *widget, GdkEvent *event, gpointer data) { cancel(widget, data); return true; } int DialogWindow::delete_event_ok(GtkWidget *widget, GdkEvent *event, gpointer data) { ok(widget, data); return true; } void DialogWindow::init(void) { _w.button_ok = get_widget("dialog_button_ok"); _w.button_cancel = get_widget("dialog_button_cancel"); _w.button_yes = get_widget("dialog_button_yes"); _w.button_no = get_widget("dialog_button_no"); _w.image_info = get_widget("header_image_info"); _w.image_question = get_widget("header_image_question"); g_signal_connect(_w.button_ok, "clicked", G_CALLBACK(ok), this); g_signal_connect(_w.button_cancel, "clicked", G_CALLBACK(cancel), this); g_signal_connect(_w.button_yes, "clicked", G_CALLBACK(yes), this); g_signal_connect(_w.button_no, "clicked", G_CALLBACK(no), this); gtk_widget_hide(_w.button_ok); gtk_widget_hide(_w.button_cancel); gtk_widget_hide(_w.button_yes); gtk_widget_hide(_w.button_no); gtk_widget_hide(_w.image_info); gtk_widget_hide(_w.image_question); } void DialogWindow::show_buttons(bool button_ok, bool button_cancel, bool button_yes, bool button_no) { if (button_ok) gtk_widget_show(_w.button_ok); if (button_cancel) gtk_widget_show(_w.button_cancel); if (button_yes) gtk_widget_show(_w.button_yes); if (button_no) gtk_widget_show(_w.button_no); } void DialogWindow::init_misc(const char *title, const char *text, GCallback callback) { _dialog_result = GTK_RESPONSE_NONE; _window = get_widget("dialog_window"); if (_delete_handler_id != 0) { g_signal_handler_disconnect(_window, _delete_handler_id); } _delete_handler_id = g_signal_connect(_window, "delete_event", callback, this); gtk_window_set_title(GTK_WINDOW(_window), title); GtkWidget *header_label = get_widget("header_label"); g_assert(GTK_IS_LABEL(header_label)); gtk_label_set_text(GTK_LABEL(header_label), title); GtkWidget *main_textview = get_widget("main_textview"); g_assert(GTK_IS_TEXT_VIEW(main_textview)); GtkTextBuffer *buf = gtk_text_view_get_buffer(GTK_TEXT_VIEW(main_textview)); gtk_text_buffer_set_text(buf, text, -1); init_dialog(NULL, NULL); } void DialogWindow::init_ok(const char *title, const char *text) { init_misc(title, text, G_CALLBACK(delete_event_ok)); show_buttons(true, false, false, false); gtk_widget_show(_w.image_info); show(); } void DialogWindow::init_yes_no(const char *title, const char *text) { init_misc(title, text, G_CALLBACK(delete_event_yes_no)); show_buttons(false, false, true, true); gtk_widget_show(_w.image_question); show(); } void DialogWindow::init_yes_no_cancel(const char *title, const char *text) { init_misc(title, text, G_CALLBACK(delete_event_yes_no_cancel)); show_buttons(false, true, true, true); gtk_widget_show(_w.image_question); show(); } void DialogWindow::show_dialog_ok(const char *title, const char *text) { _args = NULL; init_ok(title, text); } void DialogWindow::show_dialog_yes_no(const char *title, const char *text) { _args = NULL; init_yes_no(title, text); } void DialogWindow::show_dialog_yes_no_cancel(const char *title, const char *text) { _args = NULL; init_yes_no_cancel(title, text); } int DialogWindow::get_dialog_result(void) { return _dialog_result; } KCemu-0.5.1/src/ui/gtk/disk.cc0000644001050700006200000001456311345001576015452 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "cmd/cmd.h" #include "ui/gtk/disk.h" #include "ui/gtk/cmd.h" #include "libdbg/dbg.h" class CMD_ui_disk_window_toggle : public CMD { private: DiskWindow *_w; public: CMD_ui_disk_window_toggle(DiskWindow *w) : CMD("ui-disk-window-toggle") { _w = w; register_cmd("ui-disk-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; class CMD_ui_disk_update : public CMD { private: DiskWindow *_w; public: CMD_ui_disk_update(DiskWindow *w) : CMD("ui-disk-update") { _w = w; register_cmd("ui-disk-update-MSG"); } void execute(CMD_Args *args, CMD_Context context) { int disk_no; DBG(2, form("KCemu/Disk/update", "got disk-update message\n")); disk_no = args->get_long_arg("disk"); if ((disk_no < 0) || (disk_no > 3)) return; _w->set_name(disk_no, args->get_string_arg("filename")); } }; class CMD_ui_disk_attach : public CMD { private: DiskWindow *_w; public: CMD_ui_disk_attach(DiskWindow *w) : CMD("ui-disk-attach") { _w = w; register_cmd("ui-disk-attach-1", 0); register_cmd("ui-disk-attach-2", 1); register_cmd("ui-disk-attach-3", 2); register_cmd("ui-disk-attach-4", 3); register_cmd("ui-disk-detach-1", 4); register_cmd("ui-disk-detach-2", 5); register_cmd("ui-disk-detach-3", 6); register_cmd("ui-disk-detach-4", 7); } void execute(CMD_Args *args, CMD_Context context) { const char *filename; if (!args) args = new CMD_Args(); filename = NULL; switch (context) { case 0: case 1: case 2: case 3: args->set_long_arg("disk", context); CMD_EXEC_ARGS("disk-attach", args); break; case 4: case 5: case 6: case 7: args->set_long_arg("disk", context & 3); CMD_EXEC_ARGS("disk-detach", args); break; } } }; DiskWindow::DiskWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { init(); _cmd_attach = new CMD_ui_disk_attach(this); _cmd_update = new CMD_ui_disk_update(this); _cmd_window_toggle = new CMD_ui_disk_window_toggle(this); } DiskWindow::~DiskWindow(void) { delete _cmd_attach; delete _cmd_update; delete _cmd_window_toggle; } void DiskWindow::set_name(int idx, const char *name) { GtkEntry *entry = GTK_ENTRY(GTK_BIN(_w.combo[idx])->child); if (!name) name = ""; gtk_signal_handler_block(GTK_OBJECT(_w.combo[idx]), _w.combo_signal_id[idx]); gtk_entry_set_text(entry, name); gtk_signal_handler_unblock(GTK_OBJECT(_w.combo[idx]), _w.combo_signal_id[idx]); } void DiskWindow::sf_disk_attach(GtkWidget *widget, gpointer data) { long nr = (long)data; GtkEntry *entry = GTK_ENTRY(GTK_BIN(widget)->child); const gchar *text = gtk_entry_get_text(GTK_ENTRY(entry)); if (text == NULL) return; if (strlen(text) == 0) return; CMD_Args *args = new CMD_Args(); args->set_long_arg("disk", nr); args->set_string_arg("filename", text); CMD_EXEC_ARGS("disk-attach", args); } void DiskWindow::init(void) { static const char * attach_cmd[4] = { "ui-disk-attach-1", "ui-disk-attach-2", "ui-disk-attach-3", "ui-disk-attach-4", }; static const char * detach_cmd[4] = { "ui-disk-detach-1", "ui-disk-detach-2", "ui-disk-detach-3", "ui-disk-detach-4", }; static const char * disk_files[] = { "a5105sys.dump", "caos.dump", "cpmz9.dump", "microdos.dump", "tools.dump", "z1013cpm.dump", "z1013gdc.dump", NULL }; GtkTreeIter iter; GtkListStore *store = gtk_list_store_new(1, G_TYPE_STRING); // for (int a = 0;disk_files[a] != NULL;a++) // { // gtk_list_store_append(store, &iter); // gtk_list_store_set(store, &iter, 0, disk_files[a], -1); // } /* * disk window */ _window = get_widget("disk_window"); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(cmd_exec_sft), (char *)"ui-disk-window-toggle"); // FIXME: _w.combo[0] = get_widget("disk_comboboxentry_1"); _w.combo[1] = get_widget("disk_comboboxentry_2"); _w.combo[2] = get_widget("disk_comboboxentry_3"); _w.combo[3] = get_widget("disk_comboboxentry_4"); for (int a = 0;a < 4;a++) { gtk_combo_box_set_model(GTK_COMBO_BOX(_w.combo[a]), GTK_TREE_MODEL(store)); GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(_w.combo[a]), renderer, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(_w.combo[a]), renderer, "text", 0, NULL); } _w.browse[0] = get_widget("disk_button_open_1"); _w.browse[1] = get_widget("disk_button_open_2"); _w.browse[2] = get_widget("disk_button_open_3"); _w.browse[3] = get_widget("disk_button_open_4"); _w.eject[0] = get_widget("disk_button_close_1"); _w.eject[1] = get_widget("disk_button_close_2"); _w.eject[2] = get_widget("disk_button_close_3"); _w.eject[3] = get_widget("disk_button_close_4"); for (int a = 0;a < NR_OF_DISKS;a++) { _w.combo_signal_id[a] = gtk_signal_connect(GTK_OBJECT(GTK_COMBO_BOX(_w.combo[a])), "changed", GTK_SIGNAL_FUNC(sf_disk_attach), (gpointer)a); gtk_signal_connect(GTK_OBJECT(_w.browse[a]), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (char *)attach_cmd[a]); // FIXME: gtk_signal_connect(GTK_OBJECT(_w.eject[a]), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (char *)detach_cmd[a]); // FIXME: } init_dialog("ui-disk-window-toggle", "window-disk"); } KCemu-0.5.1/src/ui/gtk/gif.cc0000644001050700006200000001503711345001576015262 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/config.h" #ifdef HAVE_LIBGIF #include "kc/system.h" #include "ui/gtk/gif.h" using namespace std; GifVideoEncoder::GifVideoEncoder(void) { _width = -1; _height = -1; _cmap = NULL; _gif = NULL; _buf = NULL; } GifVideoEncoder::~GifVideoEncoder(void) { close(); } bool GifVideoEncoder::init(const char *filename, int width, int height, int fps_den, double quality) { /* * Netscape Application Extension * (see: http://www.let.rug.nl/~kleiweg/gif/netscape.html) * * byte 1 : 33 (hex 0x21) GIF Extension code * byte 2 : 255 (hex 0xFF) Application Extension Label * byte 3 : 11 (hex 0x0B) Length of Application Block * (eleven bytes of data to follow) * bytes 4 to 11 : "NETSCAPE" * bytes 12 to 14 : "2.0" * byte 15 : 3 (hex 0x03) Length of Data Sub-Block * (three bytes of data to follow) * byte 16 : 1 (hex 0x01) * bytes 17 to 18 : 0 to 65535, an unsigned integer in * lo-hi byte format. This indicate the * number of iterations the loop should * be executed. * byte 19 : 0 (hex 0x00) a Data Sub-Block Terminator. */ static unsigned char EXT_NETSCAPE[] = {'N','E','T','S', 'C','A','P','E', '2','.','0' }; static unsigned char EXT_NETSCAPE_LOOP[] = { 1, 0, 0 }; // loop counter = 0 if ((_width == width) && (_height == height) && (_gif != NULL)) { return false; } _width = width; _height = height; _fps_den = fps_den; _frame_delay = 0; EGifSetGifVersion(&GIF89_STAMP[GIF_VERSION_POS]); _gif = EGifOpenFileName(filename, 0); if (_gif == NULL) return false; _cmap = MakeMapObject(256, NULL); for (int a = 0;a < 256;a++) { _cmap->Colors[a].Red = 0; _cmap->Colors[a].Green = 0; _cmap->Colors[a].Blue = 0; } if (EGifPutScreenDesc(_gif, _width, _height, 256, 0, _cmap) != GIF_OK) return false; string comment = "Created by KCemu " KCEMU_VERSION; if (EGifPutComment(_gif, comment.c_str()) != GIF_OK) return false; if (EGifPutExtensionFirst(_gif, 0xFF, 11, EXT_NETSCAPE) != GIF_OK) return false; if (EGifPutExtensionLast(_gif, 0, 3, EXT_NETSCAPE_LOOP) != GIF_OK) return false; return true; } void GifVideoEncoder::allocate_color_rgb(int idx, int r, int g, int b) { if (_cmap == NULL) return; _cmap->Colors[idx].Red = r; _cmap->Colors[idx].Green = g; _cmap->Colors[idx].Blue = b; } bool GifVideoEncoder::encode(byte_t *image, byte_t *dirty) { _frame_delay += 2 * _fps_den; if (_frame_delay > MAX_FRAME_DELAY) _frame_delay = MAX_FRAME_DELAY; if (dirty) { if (_buf == NULL) { _buf = new byte_t[_width * _height]; memcpy(_buf, image, _width * _height); return true; } bool changed = false; for (int a = 0;a < (_width * _height) / 64;a++) { if (dirty[a]) { changed = true; break; } } if (!changed) return true; } bool ret; if (_buf) { ret = flush_buffer(_buf, _frame_delay); memcpy(_buf, image, _width * _height); } else { ret = flush_buffer(image, _frame_delay); } _frame_delay = 0; return ret; } bool GifVideoEncoder::flush_buffer(byte_t *buf, int delay) { /* * Graphic Control Extension * (see: http://local.wasp.uwa.edu.au/~pbourke/dataformats/gif/) * * byte 1: | 3 bit Reserved | 3 bit Disposal Method | User Input | Transparent | * Disposal Method: * 0 - No disposal specified. The decoder is * not required to take any action. * 1 - Do not dispose. The graphic is to be left * in place. * 2 - Restore to background color. The area used by the * graphic must be restored to the background color. * 3 - Restore to previous. The decoder is required to * restore the area overwritten by the graphic with * what was there prior to rendering the graphic. * 4-7 - To be defined. * User Input: * 0 - User input is not expected. * 1 - User input is expected. * Transparent: * 0 - Transparent Index is not given. * 1 - Transparent Index is given. * byte 2 & 3: * Delay Time - If not 0, this field specifies the number of * hundredths (1/100) of a second to wait before continuing with the * processing of the Data Stream. The clock starts ticking immediately * after the graphic is rendered. This field may be used in * conjunction with the User Input Flag field. * byte 4: * Transparency Index - The Transparency Index is such that when * encountered, the corresponding pixel of the display device is not * modified and processing goes on to the next pixel. The index is * present if and only if the Transparency Flag is set to 1. */ unsigned char EXT_GCE[] = {0, delay, delay >> 8, 0}; if (EGifPutExtension(_gif, 0xF9, 4, EXT_GCE) != GIF_OK) return false; if (EGifPutImageDesc(_gif, 0, 0, _width, _height, 0, _cmap) != GIF_OK) return false; if (EGifPutLine(_gif, buf, _width * _height) != GIF_OK) return false; } void GifVideoEncoder::close(void) { if (_gif != NULL) { if (_buf) flush_buffer(_buf, _frame_delay); EGifCloseFile(_gif); _gif = NULL; } if (_cmap != NULL) { FreeMapObject(_cmap); _cmap = NULL; } if (_buf != NULL) { delete[] _buf; _buf = NULL; } } #endif /* HAVE_LIBGIF */ KCemu-0.5.1/src/ui/gtk/about.cc0000644001050700006200000000420111345001576015616 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "ui/gtk/cmd.h" #include "ui/gtk/about.h" using namespace std; char AboutWindow::APP_NAME[] = ("KCemu v" KCEMU_VERSION); class CMD_about_window_toggle : public CMD { private: AboutWindow *_w; public: CMD_about_window_toggle(AboutWindow *w) : CMD("ui-about-window-toggle") { _w = w; register_cmd("ui-about-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; AboutWindow::AboutWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { _cmd = new CMD_about_window_toggle(this); } AboutWindow::~AboutWindow(void) { delete _cmd; } void AboutWindow::init(void) { string version_text(string("") + APP_NAME + ""); _window = get_widget("about_window"); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(cmd_exec_sft), (char *)"ui-about-window-toggle"); // FIXME: GtkWidget *version = get_widget("main_label_version"); gtk_label_set_text(GTK_LABEL(version), version_text.c_str()); gtk_label_set_use_markup(GTK_LABEL(version), TRUE); GtkWidget *build = get_widget("main_label_build"); gtk_label_set_text(GTK_LABEL(build), "build: " __DATE__ " / " __TIME__); init_dialog("ui-about-window-toggle", NULL); } KCemu-0.5.1/src/ui/gtk/thanks.cc0000644001050700006200000000325711345001576016006 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "ui/gtk/cmd.h" #include "ui/gtk/thanks.h" class CMD_thanks_window_toggle : public CMD { private: ThanksWindow *_w; public: CMD_thanks_window_toggle(ThanksWindow *w) : CMD("ui-thanks-window-toggle") { _w = w; register_cmd("ui-thanks-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; ThanksWindow::ThanksWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { _cmd = new CMD_thanks_window_toggle(this); } ThanksWindow::~ThanksWindow(void) { delete _cmd; } void ThanksWindow::init(void) { _window = get_widget("thanks_window"); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(cmd_exec_sft), (char *)"ui-thanks-window-toggle"); // FIXME: init_dialog("ui-thanks-window-toggle", NULL); } KCemu-0.5.1/src/ui/gtk/cmd.cc0000644001050700006200000000311011345001576015245 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "ui/gtk/cmd.h" void cmd_exec_sf(GtkWidget *widget, gpointer data) { const char *name = (const char *)data; CMD_EXEC(name); } int cmd_exec_sft(GtkWidget *widget, GdkEvent *event, gpointer data) { const char *name = (const char *)data; CMD_EXEC(name); return true; } void cmd_exec_sftb(GtkWidget *widget, gpointer data) { const char *name = (const char *)data; if (GTK_TOGGLE_BUTTON(widget)->active) CMD_EXEC(name); } void cmd_exec_mc(gpointer data, guint action, GtkWidget *widget) { const char *name = (const char *)action; CMD_EXEC(name); } void cmd_exec_mci(gpointer data, guint action, GtkWidget *widget) { const char **callbacks = (const char **)data; const char *name = callbacks[action]; CMD_EXEC(name); } KCemu-0.5.1/src/ui/gtk/ui_gtk8.cc0000644001050700006200000000255711345001576016072 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "ui/generic/ui_8.h" #include "ui/gtk/ui_gtk8.h" UI_Gtk8::UI_Gtk8(void) : UI_Gtk_Base(new UI_8()) { _colors.push_back(UI_Color(false, 0x00, 0x00, 0x00)); /* black */ _colors.push_back(UI_Color(false, 0x00, 0x20, 0x00)); /* really dark green */ _colors.push_back(UI_Color(false, 0x00, 0xe0, 0x00)); /* green */ _colors.push_back(UI_Color(false, 0xff, 0x8c, 0x00)); /* dark orange */ _colors.push_back(UI_Color(false, 0x9a, 0xcd, 0x32)); /* led green */ } UI_Gtk8::~UI_Gtk8(void) { } KCemu-0.5.1/src/ui/gtk/vcs80_keyboard.xpm0000644001050700006200000135026310551015300017547 0ustar glaubitzfbedv/* XPM */ static char * vcs80_keyboard_xpm[] = { "544 340 610 2", " c #3A3939", ". c #000000", "+ c #7C0A00", "@ c #7A7A70", "# c #C9460E", "$ c #C1B5A5", "% c #B54414", "& c #8A4021", "* c #6A3D2A", "= c #543B31", "- c #453A36", "; c #3D3938", "> c #3E3938", ", c #473A35", "' c #523B32", ") c #6A3D2B", "! c #AE4416", "~ c #9E421B", "{ c #5B3C2F", "] c #553C31", "^ c #8F4120", "/ c #C6460F", "( c #413A37", "_ c #4B3B34", ": c #583C30", "< c #6B3D2A", "[ c #834023", "} c #A2421A", "| c #C34510", "1 c #BB4512", "2 c #623D2D", "3 c #4F3B33", "4 c #9F421B", "5 c #673D2C", "6 c #A0421A", "7 c #C8460E", "8 c #9A9083", "9 c #524D46", "0 c #262320", "a c #0D0C0B", "b c #020202", "c c #070606", "d c #141211", "e c #2B2825", "f c #4C4841", "g c #756E64", "h c #A79D8F", "i c #090908", "j c #191715", "k c #3D3934", "l c #7B7369", "m c #BCB0A0", "n c #533B32", "o c #7D3F25", "p c #A34319", "q c #C14511", "r c #C7460F", "s c #BF4511", "t c #AC4317", "u c #663D2C", "v c #563C31", "w c #AA4317", "x c #B7AC9D", "y c #433F3A", "z c #1F1D1B", "A c #A2988A", "B c #B04416", "C c #423A36", "D c #4E3B33", "E c #9A421C", "F c #BC4512", "G c #BE4511", "H c #A84318", "I c #6C3E2A", "J c #433A36", "K c #3C3938", "L c #874022", "M c #BEB2A2", "N c #2D2A26", "O c #161513", "P c #B6AA9B", "Q c #C04511", "R c #5E3C2E", "S c #C14510", "T c #B64414", "U c #5C3C2F", "V c #8F411F", "W c #803F24", "X c #6F685F", "Y c #302D29", "Z c #827A6F", "` c #ACA193", " . c #BCB1A1", ".. c #B1A697", "+. c #998F83", "@. c #787066", "#. c #4E4943", "$. c #1A1816", "%. c #958C7F", "&. c #44403A", "*. c #645E55", "=. c #6F3E29", "-. c #C5460F", ";. c #773F27", ">. c #673D2B", ",. c #282622", "'. c #4B4640", "). c #C0B4A4", "!. c #292623", "~. c #3B3939", "{. c #403A37", "]. c #463A35", "^. c #080706", "/. c #6D3E2A", "(. c #813F24", "_. c #824023", ":. c #050404", "<. c #BAAF9F", "[. c #BDB1A2", "}. c #030303", "|. c #C24510", "1. c #BA4513", "2. c #92411F", "3. c #483A35", "4. c #1B1A17", "5. c #A79C8E", "6. c #11100F", "7. c #9B421C", "8. c #613D2D", "9. c #555048", "0. c #050505", "a. c #58524B", "b. c #9F9588", "c. c #504B45", "d. c #793F26", "e. c #B0A596", "f. c #131210", "g. c #0E0D0C", "h. c #35322D", "i. c #5A544D", "j. c #867E73", "k. c #B6AB9C", "l. c #B8AC9D", "m. c #968D80", "n. c #45413B", "o. c #8F867A", "p. c #5F3C2E", "q. c #A69B8E", "r. c #2A2724", "s. c #49443E", "t. c #AAA092", "u. c #615B53", "v. c #4D3B33", "w. c #B44414", "x. c #AB4317", "y. c #8B8377", "z. c #11100E", "A. c #0A0908", "B. c #8C8378", "C. c #211F1C", "D. c #8E8579", "E. c #252320", "F. c #020101", "G. c #635D55", "H. c #938A7E", "I. c #141311", "J. c #4F4A43", "K. c #9D9487", "L. c #5C574F", "M. c #0B0A09", "N. c #AFA495", "O. c #BD4512", "P. c #3F3937", "Q. c #22201D", "R. c #4F4B44", "S. c #A99E90", "T. c #898075", "U. c #553B31", "V. c #BFB4A4", "W. c #46413C", "X. c #2D2B27", "Y. c #8E4120", "Z. c #693D2B", "`. c #171614", " + c #48433D", ".+ c #91887C", "++ c #BFB3A3", "@+ c #A89E90", "#+ c #7C746A", "$+ c #686259", "%+ c #948A7E", "&+ c #6E3E29", "*+ c #854022", "=+ c #24221F", "-+ c #BBAFA0", ";+ c #383530", ">+ c #3E3A35", ",+ c #BA4512", "'+ c #3F3B36", ")+ c #B3A899", "!+ c #9D9386", "~+ c #010101", "{+ c #91411F", "]+ c #4A3A34", "^+ c #AA9F91", "/+ c #7B7469", "(+ c #544F48", "_+ c #33302B", ":+ c #1A1917", "<+ c #060605", "[+ c #2E2B27", "}+ c #9A9184", "|+ c #433E39", "1+ c #AD4316", "2+ c #844023", "3+ c #B74413", "4+ c #9C421C", "5+ c #AF4416", "6+ c #423A37", "7+ c #7F3F24", "8+ c #90411F", "9+ c #7E3F25", "0+ c #A54319", "a+ c #B84413", "b+ c #8B4021", "c+ c #894021", "d+ c #603C2E", "e+ c #573C30", "f+ c #9D421B", "g+ c #5A3C2F", "h+ c #A1421A", "i+ c #533B31", "j+ c #443A36", "k+ c #513B32", "l+ c #5D3C2F", "m+ c #864022", "n+ c #7A3F26", "o+ c #643D2D", "p+ c #703E29", "q+ c #593C30", "r+ c #493A35", "s+ c #776F66", "t+ c #766F65", "u+ c #733E28", "v+ c #653D2C", "w+ c #743E28", "x+ c #753E27", "y+ c #743E27", "z+ c #854023", "A+ c #8C4020", "B+ c #B34415", "C+ c #95411E", "D+ c #49453F", "E+ c #4A463F", "F+ c #783F26", "G+ c #8D4120", "H+ c #93411E", "I+ c #98421D", "J+ c #36332F", "K+ c #655F57", "L+ c #655E56", "M+ c #37342F", "N+ c #B9AD9E", "O+ c #503B32", "P+ c #1E1C1A", "Q+ c #7D756B", "R+ c #787167", "S+ c #201E1B", "T+ c #797268", "U+ c #B9AE9F", "V+ c #2F2C28", "W+ c #69635A", "X+ c #A64318", "Y+ c #B14415", "Z+ c #B94513", "`+ c #B04415", " @ c #47433D", ".@ c #534E47", "+@ c #493A34", "@@ c #7B3F25", "#@ c #8E857A", "$@ c #5E5850", "%@ c #3A3732", "&@ c #3A3631", "*@ c #5F5951", "=@ c #683D2B", "-@ c #97411D", ";@ c #888074", ">@ c #847C71", ",@ c #837B70", "'@ c #171513", ")@ c #C44610", "!@ c #59534C", "~@ c #423E38", "{@ c #59544C", "]@ c #8D8478", "^@ c #0F0E0D", "/@ c #A09689", "(@ c #A74318", "_@ c #A64319", ":@ c #A94318", "<@ c #24211E", "[@ c #9E9487", "}@ c #763E27", "|@ c #6A635B", "1@ c #312E2A", "2@ c #6B645B", "3@ c #736C62", "4@ c #746D63", "5@ c #99421C", "6@ c #B24415", "7@ c #AEA395", "8@ c #6F685E", "9@ c #2A2824", "0@ c #36322E", "a@ c #A3998B", "b@ c #7C3F25", "c@ c #080807", "d@ c #121110", "e@ c #46423C", "f@ c #877F74", "g@ c #5C564E", "h@ c #884022", "i@ c #B2A798", "j@ c #040403", "k@ c #A49A8C", "l@ c #723E28", "m@ c #6D665D", "n@ c #6E675E", "o@ c #726B62", "p@ c #5D3C2E", "q@ c #713E28", "r@ c #99421D", "s@ c #7E3F24", "t@ c #ADA394", "u@ c #100F0E", "v@ c #ABA092", "w@ c #877E73", "x@ c #34312D", "y@ c #706960", "z@ c #A1978A", "A@ c #605A52", "B@ c #5D5750", "C@ c #5B554E", "D@ c #1E1C19", "E@ c #81796F", "F@ c #7E766B", "G@ c #B4A99A", "H@ c #403C36", "I@ c #7F776D", "J@ c #272522", "K@ c #81796E", "L@ c #1D1B19", "M@ c #686159", "N@ c #135817", "O@ c #05C204", "P@ c #011B01", "Q@ c #049403", "R@ c #024A02", "S@ c #024B02", "T@ c #05BA04", "U@ c #000900", "V@ c #4C3B34", "W@ c #037902", "X@ c #012001", "Y@ c #037A03", "Z@ c #012F01", "`@ c #036A02", " # c #036902", ".# c #013001", "+# c #643D2C", "@# c #04A703", "## c #000100", "$# c #000300", "%# c #05B104", "&# c #05B004", "*# c #000200", "=# c #04A803", "-# c #025E02", ";# c #023B01", "># c #013A01", ",# c #025F02", "'# c #94411E", ")# c #05C004", "!# c #011600", "~# c #038403", "{# c #011700", "]# c #048E03", "^# c #000F00", "/# c #05BE04", "(# c #024401", "_# c #025502", ":# c #025402", "<# c #05B704", "[# c #000700", "}# c #049F03", "|# c #049E03", "1# c #A44319", "2# c #037402", "3# c #012601", "4# c #012501", "5# c #012A01", "6# c #037002", "7# c #036F02", "8# c #012B01", "9# c #04A303", "0# c #04A403", "a# c #025902", "b# c #025A02", "c# c #001200", "d# c #001300", "e# c #633D2D", "f# c #048803", "g# c #011500", "h# c #011400", "i# c #048903", "j# c #023E01", "k# c #025C02", "l# c #025B02", "m# c #023F01", "n# c #05B304", "o# c #000400", "p# c #04A503", "q# c #000500", "r# c #05B404", "s# c #036E02", "t# c #012D01", "u# c #012401", "v# c #037602", "w# c #037302", "x# c #04AE04", "y# c #05B604", "z# c #000800", "A# c #013201", "B# c #038703", "C# c #049703", "D# c #013401", "E# c #037702", "F# c #001000", "G# c #04A903", "H# c #05BF04", "I# c #037C03", "J# c #013801", "K# c #04AD04", "L# c #001100", "M# c #048D03", "N# c #026102", "O# c #05B804", "P# c #000E00", "Q# c #038603", "R# c #024301", "S# c #036D02", "T# c #013901", "U# c #05BB04", "V# c #000600", "W# c #048A03", "X# c #04AA04", "Y# c #000B00", "Z# c #037102", "`# c #012801", " $ c #049903", ".$ c #05BC04", "+$ c #025102", "@$ c #036C02", "#$ c #049303", "$$ c #038303", "%$ c #011D01", "&$ c #038103", "*$ c #036302", "=$ c #037E03", "-$ c #05C104", ";$ c #011800", ">$ c #036602", ",$ c #012C01", "'$ c #037502", ")$ c #013301", "!$ c #05B904", "~$ c #780004", "{$ c #BA0403", "]$ c #B10403", "^$ c #730202", "/$ c #3F0101", "($ c #1C0100", "_$ c #090000", ":$ c #010000", "<$ c #060000", "[$ c #160000", "}$ c #320101", "|$ c #5D0201", "1$ c #960302", "2$ c #AA0403", "3$ c #650202", "4$ c #120000", "5$ c #040000", "6$ c #A90403", "7$ c #413D38", "8$ c #B90403", "9$ c #670202", "0$ c #0B0000", "a$ c #260101", "b$ c #850302", "c$ c #B80403", "d$ c #5D0202", "e$ c #B30403", "f$ c #350101", "g$ c #330101", "h$ c #370101", "i$ c #170100", "j$ c #600202", "k$ c #910302", "l$ c #AC0403", "m$ c #B60403", "n$ c #A70403", "o$ c #8B0302", "p$ c #610202", "q$ c #3A0101", "r$ c #1D0100", "s$ c #6E0202", "t$ c #9F0303", "u$ c #A00303", "v$ c #700202", "w$ c #1E0100", "x$ c #3B0101", "y$ c #3C3833", "z$ c #6D0202", "A$ c #540201", "B$ c #950302", "C$ c #500201", "D$ c #740202", "E$ c #B50403", "F$ c #110000", "G$ c #4D0201", "H$ c #140000", "I$ c #410101", "J$ c #400101", "K$ c #B70403", "L$ c #7D0302", "M$ c #B40403", "N$ c #800302", "O$ c #AE0403", "P$ c #0A0000", "Q$ c #810302", "R$ c #470201", "S$ c #5A0201", "T$ c #4A0201", "U$ c #510201", "V$ c #4B0201", "W$ c #A59B8D", "X$ c #230101", "Y$ c #890302", "Z$ c #240101", "`$ c #830302", " % c #250101", ".% c #0D0000", "+% c #A80403", "@% c #A60403", "#% c #0F0000", "$% c #92897D", "%% c #020000", "&% c #030000", "*% c #0C0000", "=% c #0E0000", "-% c #403C37", ";% c #8C0302", ">% c #840302", ",% c #490201", "'% c #590201", ")% c #520201", "!% c #7F0302", "~% c #B00403", "{% c #AF0403", "]% c #4C0201", "^% c #430101", "/% c #420101", "(% c #750302", "_% c #9C421B", ":% c #8D0302", "<% c #AB0403", "[% c #AD0403", "}% c #2C0101", "|% c #380101", "1% c #1F0100", "2% c #1F0101", "3% c #390101", "4% c #080000", "5% c #B20403", "6% c #300101", "7% c #310101", "8% c #720202", "9% c #3E0101", "0% c #A20303", "a% c #5B0201", "b% c #96411D", "c% c #7C0302", "d% c #460201", "e% c #220101", "f% c #620202", "g% c #640202", "h% c #820302", "i% c #9C0303", "j% c #580201", "k% c #5C0201", "l% c #200101", "m% c #930302", "n% c #A30403", "o% c #6B0202", "p% c #050000", "q% c #940302", "r% c #880302", "s% c #130000", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ . . @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ . ", " . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ . . @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # % & * = - ; > , ' ) & ! # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # ~ { ] ^ / # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # ; ( _ : < [ } | # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # 1 2 3 4 # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # > 5 6 7 # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 8 9 0 a b c d e f g h $ $ $ . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . $ $ . . . . . . . i j k l m $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # ! , n o p % q r s t ^ u ; # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # v w # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ x y . . . . . . . . . . . $ $ $ . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . $ $ . . . . . . . . . . . z A $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # B C D E # # # # # # # # # # F o > # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # r G % H & I J K L # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ M N . . . . . . . . . . . . $ $ $ . . . . . . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . . . . . . $ $ . . . . . . . . . . . . O P $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # Q _ R S # # # # # # # # # # # # # T U # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # | V _ W # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ X . . . Y Z ` . ...+.@.#.$.$ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ x %.&.. . . *.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # =. U -.# # # # # # # # # # # # # # # r ;.# # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Q >. E # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ,.. . '.).$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ 9 . . !.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # ! ~. {.% # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7 5 ].q # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ^.. . ` $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ h . . a $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # /. (.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # S D _.# # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ :.. . <.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ [.. . }.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # |.> K 1.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 2. 3.7 # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 4.. . l $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ 5.. . 6.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # 7. 8.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # -., H # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 9.. . 0.a.b.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ c.. . k $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # d. _.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # =. [ # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ e.f.. . . . g.h.i.j.k.$ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ l.m.n.. . . o.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # p. 6 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ^ >.# # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ q.r.. . . . . . . c s.t.$ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . u.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # v. w.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # x. = # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ y.n.z.. . . . . . A.B.$ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . C.D.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # ( F # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # T - # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ 5.Z i.E.. . . i h $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . F.G.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # K -.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Q > # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ H.I.. . J.$ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ m K.f . . . @.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # K -.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # r ~.# # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ y.. . $.$ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ L.. . M.N.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # ( O.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # s P.# # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ m . . :.$ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ M Q.. . R.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # v. w.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # T ].# # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ S.. . ^.$ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ T.. . :.t.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # R 6 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # x. U.# # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ V.W.. . 0 $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ X.. . s.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # d. _.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Y. Z.# # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ `. +X .+h l.++m @+#+r.. . . $+$ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ %+. . b A $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # E 2 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # &+ *+# # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . =+-+$ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ ;+. . >+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # |.> K ,+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # -.]. w # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . '+)+$ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ !+~+. . +.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # I (.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # {+ ]+7 # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ ^+/+(+_+:+A.b <+6.[+a.}+$ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ |+. . _+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # 1+~. {.T # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # S v. 2+# # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # &+ U -.# # # # # # # # # # # # # # # r ;.# # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 5 , |.# # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # s ]+ R |.# # # # # # # # # # # # # 3+U # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Q >. 4+# # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # 5+6+ 3 7.# # # # # # # # # # G 7+P. # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # | 8+_ _.# # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # t ]. n 9+0+T |.-.a+x.b+8.; # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # r G T H b+I J K c+# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # 1.d+ 3 4 # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # e+x.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # f+g+ ] ^ / # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # > >.h+# # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # w.& ) i+j+; ; , k+Z.c+! # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # ; ( _ : < [ p | # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ . . @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ . ", " . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ . . @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ . . @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ . ", " . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ . . @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # S ^ < 3 j+K j+3 < ^ S # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # |.{+Z.3 6+; ].l+[ a+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # 7 m+( ( m+7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # Y.]. K n+-.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # o n+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # > ].U.=.2.q # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # / o+ o+/ # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # / p+ q+q # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # r r+ , r # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # > 9+| # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . s+$ $ $ $ $ $ $ $ t+. . . . . $ $ $ $ $ $ $ $ $ $ $ 4.. . 4.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . i j k l m $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # u+ v+6 G / O.4 2 w+# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # w+ K x+x.|.|.x.y+~. d+7 # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # 6 ~ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # U.G # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . Y $ $ $ $ $ $ $ $ Y . . . . . $ $ $ $ $ $ $ $ $ $ H.. . . . %+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . z A $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # 1+~. c+# # # # # # # z+ ~.! # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # 4+ > p # # # # # # h+> A+# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # * Z.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7 |.B+C+8. U 7 # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . b . ~+t.$ $ $ $ $ $ ^+~+. b . . . $ $ $ $ $ $ $ $ $ $ D+. . . . E+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . O P $ $ $ $ $ $ $ . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # ;. v+# # # # # # # # # 2 F+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # 7 ' V # # # # # # # # G+ ].| # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # s > ; s # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H+~. I+# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . J+. . K+$ $ $ $ $ $ L+. . M+. . . $ $ $ $ $ $ $ $ $ N+i . . . . i N+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ x %.&.. . . *.$ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # ' 6 # # # # # # # # # 4 ' # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # } O+7 # # # # # # # # 7 3 c+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # Y. 3 3 A+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # x+ u # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . #+. . z $ $ $ $ $ $ P+. . Q+. . . $ $ $ $ $ $ $ $ $ R+. . S+S+. . T+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ 9 . . !.$ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # C G # # # # # # # # # O. J # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # n+ z+# # # # # # # # # # [ q+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # : z+2+ e+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # t ]+# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . U+i . . }+$ $ $ $ 8 . . i U+. . . $ $ $ $ $ $ $ $ $ V+. . W+$+. . Y $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ h . . a $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # ; r # # # # # # # # # / ; # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # q+ X+# # # # # # # # # # 0+ ~.1.# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # Y+ ~.Z+Z+~. `+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |. ; # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ @. . (+$ $ $ $ .@. . +$ . . . $ $ $ $ $ $ $ $ 5.~+. }.e.N.b . ~+h $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ [.. . }.$ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # r+ G # # # # # # # # # O. ]+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # +@ O.# # # # # # # # # # F C+# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # @@ 8.# # 8. n+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # | ( # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ D.. . z.M $ $ M z.. . #@$ . . . $ $ $ $ $ $ $ $ $@. . %@$ $ &@. . *@$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ 5.. . 6.$ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # 5 6 # # # # # # # # # 4 =@# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # P. -.# # # # # # # # # # -. 9+# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # r , -@# # -@ , r # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1+ n # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ V.I.. . T.$ $ ;@. . I.V.$ . . . $ $ $ $ $ $ $ V.O . . >@$ $ ,@. . '@V.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ c.. . k $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # 7. v+# # # # # # # # # 2 f+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # > / # # # # # # # # # # -. 5 # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # 4 C -.# # )@C ~ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ;. ;.# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ !@. . |+$ $ ~@. . {@$ $ . . . $ $ $ $ $ $ $ ]@. . ^@[.$ $ [.^@. . D.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ l.m.n.. . . o.$ $ $ $ $ $ $ . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # 7 U c+# # # # # # # z+ R 7 # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # , O.# # # # # # # # # # F n # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # Z. u+# # # # u+ =@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # C+K K Y+# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ b.. . c x k.c . . /@$ $ . . . $ $ $ $ $ $ $ y . . 9.$ $ $ $ (+. . &.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . u.$ $ $ $ $ $ $ $ . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # F O+ v+h+G r G 6 2 ' O.# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # ] (@# # # # # # # # # # _@ _ # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # s ; :@# # # # H ; G # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7 | w.-@2 & # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ <@. . @.s+. . =+$ $ $ . . . $ $ $ $ $ $ P c . . [@$ $ $ $ K.. . c P $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . C.D.$ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # |.x+; ; }@|.# # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # x+ *+# # # # # # # # # # 2+ j+# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # A+ O+# # # # # # 3 A+# # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # 3 E # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ |@. . 1@Y . . 2@$ $ $ . . . $ $ $ $ $ $ 3@. . 0 $ $ $ $ $ $ E.. . 4@$ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . F.G.$ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # -.V j+ j+V -.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # 5@ k+7 # # # # # # # # 7 O+ ; # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # e+ m+# # # # # # *+ v # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # >.6@# # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ 7@b . ~+~+. b N.$ $ $ . . . $ $ $ $ $ $ r.. . X $ $ $ $ $ $ 8@. . 9@$ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ m K.f . . . @.$ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # 7 Y., ].A+7 # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # / 3. {+# # # # # # # # Y. > # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # `+ ~.1.# # # # # # 1.~. B # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # ~.p+|.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ h.. . . . 0@$ $ $ $ . . . $ $ $ $ $ A . . . . . . . . . . . . . . a@$ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ L.. . M.N.$ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # / Z. C o H s r s (@b@C 5 / # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # & P.0+# # # # # # p > , # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # n+ 2 # # # # # # # # 8. d.# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # / O.(@_.+@ v |.# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ /+. . . . #+$ $ $ $ . . . $ $ $ $ $ !@. . . . . . . . . . . . . . {@$ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ M Q.. . R.$ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # y+ e+1.# # # # # # # Z+] u+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # 7 d+ K ;.t |.|.x.x+~. ]. O+# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # r , I+# # # # # # # # -@ ].r # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |.=@ < # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ N+c@. . i U+$ $ $ $ . . . $ $ $ $ ++d@. . . . . . . . . . . . . . f.++$ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ T.. . :.t.$ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # x. ].O.# # # # # # # # # F ]. x.# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # s U 6+6 U # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # ~ J -.# # # # # # # # -.C f+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # / k+ x.# # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ e@. . e@$ $ $ $ $ . . . $ $ $ $ f@. . I.++$ $ $ $ $ $ $ $ ++d . . ;@$ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ X.. . s.$ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # p+ L # # # # # # # # # # # m+ p+# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # -.@@> { B+x. ;.# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # =@ w+# # # # # # # # # # w+ >.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # {+ x+# # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ >+. . g@$ $ $ $ $ $ $ $ $ $ i.. . '+$ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ %+. . b A $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # D Y+# # # # # # # # # # # Y+ D # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # Z+h@d+_ P.6+k+=.h+7 # H+ C+# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # G ; ; G # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # % i+# # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ i@j@. . k@$ $ $ $ $ $ $ $ $ $ a@. . :.)+$ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ ;+. . >+$ $ $ $ $ . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # > | # # # # # # # # # # # | P.# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # l@ % # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # b+ b+# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # )@ 6+# # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ m@. . N $ $ $ $ $ $ $ $ $ $ $ $ r.. . n@$ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ !+~+. . +.$ $ $ $ . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # {. )@# # # # # # # # # # # | {.# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # r ]+ q+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # ] ] # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # | ; # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ <@. . g $ $ $ $ $ $ $ $ $ $ $ $ o@. . =+$ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ |+. . _+$ $ $ $ . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # _ B+# # # # # # # # # # # Y+ v.# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # f+ {+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # 5+ ~.1.# # # # # # # # # # # # 1.~. 5+# # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # % +@# # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # v+ h@# # # # # # # # # # # m+ u # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # / n r+| # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # d. 2 # # # # # # # # # # # # # # 2 d.# # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8+ p@# # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # ^ , G # # # # # # # # # O.]. V # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ;. 7.# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # r ]. I+# # # # # # # # # # # # # # I+ ].r # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # -.O+ L # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # | , q+1 # # # # # # # Z+v 3.| # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # 8.1+# # # # # # # # S q@ =@# # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # f+ J -.# # # # # # # # # # # # # # -.J f+# # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |.=@ J O.# # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # r@~. j+9+:@Q r s H b@C ~.5@# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # g+b+! Q / 1 X+o ]. e+|.# # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # 5 w+# # # # # # # # # # # # # # # # w+ 5 # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # / G (@_.+@ 2.# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # A+K K A+# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # 8.S # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # O.; w # # # # # # # # # # # # # # # # w ; G # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # ~.c+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # w e+ e+w # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # ].Y.7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # & O+# # # # # # # # # # # # # # # # # # O+ b+# # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # e+w # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # x.7+8._ 6+K 6+_ d+s@x.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # T {+u+{ +@> ~.( ' /.-@-.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # = m+# # # # # # # # # # # # # # # # # # m+ U.# # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # K J v.o+W ! # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ t@u@$ $ $ $ $ $ @+f.$ t@u@$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ t@g.$ $ .O !+$ $ $ y.`.v@$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ w@J+$ $ $ $ $ $ Z %@$ w@J+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ w@x@$ $ $ y@|+$ $ z@O b.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ A@B@$ $ $ $ $ $ L.u.$ A@L.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ A@C@$ $ $ m '@h ..D@o.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ &@>@$ $ $ $ $ $ J+f@$ &@,@$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ &@E@$ $ $ $ n@D+[+F@$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ f.. . . . . . . . 7@$ f.^+$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ f.@+$ $ $ $ G@j@L.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ t@u@$ $ $ $ $ $ t.f.$ t@g.$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ t@g.$ $ $ $ l.x@9 H@$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ w@0@$ $ $ $ $ $ >@%@$ w@x@$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ w@x@$ $ $ P [+I@$ <@z@$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ A@L.$ $ $ $ $ $ B@u.$ A@C@$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ A@C@$ $ i@J@Q+$ $ T+y $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ &@Z $ $ $ $ $ $ J+f@$ &@K@$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ &@E@$ 7@Q.l $ $ $ [.O k@$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ f.@+$ $ $ $ $ $ u@7@$ f.. . . . . O $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ f.@+t.L@R+$ $ $ $ $ M@ @$ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ . . @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ . ", " . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ . . @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@. . N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@. ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@. . N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@. ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@. . N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@. ", " . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . N@N@N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@N@N@. . N@N@N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@N@N@. ", " . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . N@N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@N@. . N@N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # / 5@=.n 6+K P.+@{ w+2.T # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # ;. # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # 7 8+, # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # _@~. # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # |.o+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # ~.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@. . P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@P@. . P@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # | v. # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # | : - o 0+1./ s ! b+q+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # o+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@Q@. . . . Q@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@Q@. . . . Q@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # }@ ]+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # ) p+q # # # # # # # # 1+8.# # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |.( f+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@R@. . . . S@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@R@. . . . S@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 0+~. h+ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # 4+ }@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8+ +@r # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@T@U@. . . . U@T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@T@U@. . . . U@T@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |.V@ =.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # | +@ ' / # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # e+ (.# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@W@. . X@X@. . Y@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@W@. . X@X@. . Y@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # y+ , s # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # {+ f+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # t ~.Z+# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@Z@. . `@ #. . .#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@Z@. . `@ #. . .#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # p ~. 4+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # q+ +@r # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # u+ +## # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@@###. $#%#&#*#. ##=#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@@###. $#%#&#*#. ##=#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # |._ * # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # % l@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |.( ~ # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@-#. . ;#O@O@>#. . ,#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@-#. . ;#O@O@>#. . ,#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # u+ - O.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # '# H+# 7 } p+' C {.V@8.c+1.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8+ ]+r # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@)#!#. . ~#O@O@~#. . {#)#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@)#!#. . ~#O@O@~#. . {#)#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # } -@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # ;. t w.U P.9+/ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # e+ (.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@]#. . ^#/#O@O@/#^#. . ]#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@]#. . ^#/#O@O@/#^#. . ]#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # S _ u # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # w+e+J K 6+V@R s@_@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # { h+C p.S # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # t K Z+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@(#. . _#O@O@O@O@:#. . (#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@(#. . _#O@O@O@O@:#. . (#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # l@ J ,+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # = 4+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # 3 ]. K x+x.|.|.x.x+K +## # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # u+ v+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<#[#. . }#O@O@O@O@|#. . [#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@<#[#. . }#O@O@O@O@|#. . [#<#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # h+ 2.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # q@/ # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # ]. > p # # # # # # 1#P. Y.# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |.( ~ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@2#. . 3#O@O@O@O@O@O@4#. . 2#O@O@O@O@O@O@O@. . . . . . . . . . . . . . . . . . O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@2#. . 3#O@O@O@O@O@O@4#. . 2#O@O@O@O@O@O@O@. . . . . . . . . . . . . . . . . . O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # q ]+ 8.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # O+W h+1.-.| Z+~ ;.( ) 7 # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # > {+# # # # # # # # 8+ ]+r # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8+ ]+r # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@5#. . 6#O@O@O@O@O@O@7#. . 8#O@O@O@O@O@O@O@. . . . . . . . . . . . . . . . . . O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@5#. . 6#O@O@O@O@O@O@7#. . 8#O@O@O@O@O@O@O@. . . . . . . . . . . . . . . . . . O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # q@ ( a+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # p@0+# # # # # # # # # s ) m+# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # ; k+7 # # # # # # # # 7 O+ 7.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # v _.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@9#. . . . . . . . . . . . . . 0#O@O@O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@9#. . . . . . . . . . . . . . 0#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # 6 G+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # l@ 6+O.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # J *+# # # # # # # # # # *+ ;.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # t K Z+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@a#. . . . . . . . . . . . . . b#O@O@O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@a#. . . . . . . . . . . . . . b#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # q +@ l+7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # / D G+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # ]+ (@# # # # # # # # # # X+ e+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # u+ u # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@)#c#. . . . . . . . . . . . . . d#)#O@O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@)#c#. . . . . . . . . . . . . . d#)#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # =. P.% # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # A+ e## # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # ' O.# # # # # # # # # # F r+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |.( 4 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#. . g#)#O@O@O@O@O@O@O@O@)#h#. . i#O@O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@f#. . g#)#O@O@O@O@O@O@O@O@)#h#. . i#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # c+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # B+ v.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # v+ / # # # # # # # # # # -. > # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8+ _ 7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@j#. . k#O@O@O@O@O@O@O@O@O@O@l#. . m#O@O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@j#. . k#O@O@O@O@O@O@O@O@O@O@l#. . m#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # | {.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # o -.# # # # # # # # # # -. {.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # v [ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@n#o#. . p#O@O@O@O@O@O@O@O@O@O@0#. . q#r#O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@n#o#. . p#O@O@O@O@O@O@O@O@O@O@0#. . q#r#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # |. {.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # C+ O.# # # # # # # # # # F ]+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # t K ,+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@s#. . t#O@O@O@O@O@O@O@O@O@O@O@O@5#. . s#O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@s#. . t#O@O@O@O@O@O@O@O@O@O@O@O@5#. . s#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # B+ v.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # Z+ X+# # # # # # # # # # _@ g+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # u+ u # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@u#. . v#O@O@O@O@O@O@O@O@O@O@O@O@w#. . 4#O@O@O@O@O@O@O@O@O@O@O@O@. . O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@u#. . v#O@O@O@O@O@O@O@O@O@O@O@O@w#. . 4#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # G+ 2 # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # e+ z+# # # # # # # # # # 2+ b@# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # |.( 6 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # r 3 b+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # L k+7 # # # # # # # # 7 O+ p # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # 8+ _ 7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # d. {.1 # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # |.]. 8+# # # # # # # # 8+ n # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # v [ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # { f+r # # # # # # # # # | l@ _.# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # b+ P.1## # # # # # 0+P. f+# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # t K 1 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # ].l@H+t F )@/ F 1#o - u r # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # r R K x+x.|.|.x.}@K }@# # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # u+ 5 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # &+-.# # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # Q : q@r # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # |.( h+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # e+f+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # -.d.K ].Y.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # V V@7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # ,+f+_.I q+_ ( K ; - 3 u [ t # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # a+_.U - K ( D =@{+|.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # v 2+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@x#. . . $#X@i#O@O@O@O@y#-#X@z#U@A#B#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@x#. . . *#c#j#C#O@O@O@x#. . . . . d#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@B#D#O@O@T@E#F#O@O@O@G#P@l#@#H#%#I#;#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@B#J#O@O@H#K#2#L#M#O@O@B#D#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@N#k#O@O@O@O#P#O@O@/#4#Y@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@N#-#O@O@O@O@O@Q#5#O@O@N#k#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@>#~#O@)#@#R#S#O@O@E#T#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@>#~#O@O@O@O@O@U#V#O@O@>#~#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@d#. . . o#I#O@O@O@.#W#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@d#X#O@O@O@O@O@O#Y#O@O@d#. . . . U@)#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@x#P#O@O@/#Z#`#O@O@O@Y#y#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@x#P#O@O@O@O@O@O@ $8#O@x#P#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@B#D#O@O@O@.$q#O@O@O@q#/#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@B#D#O@O@O@O@O@O@+$@$O@B#D#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@N#l#O@O@O@=#g#O@O@O@4##$O@O@O@O@r#$$O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@N#l#O@O@O@O@O@~#%$T@O@N#l#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@>#&$O@O@G#D#*$O@O@O@$$P@]#.$<#=${#=$O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@>#&$O@-$y##$S@P@0#O@O@>#&$O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@d#. . *#;$>$)#O@O@O@O@B#,$z#[#8#'$H#O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@d#. . q#c#)$s#!$O@O@O@d#. . . . . W@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. . N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@. ", " . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . N@N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@N@. . N@N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@N@. ", " . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . N@N@N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@N@N@. . N@N@N@N@N@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@O@N@N@N@N@N@. ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@. . N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@. ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@. . N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@. ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@. . N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@N@. ", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . ~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$. . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . ~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$. . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . ~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$. . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . ~$~$~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$~$~$. . @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ . ", " . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . ~$~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$~$. . @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1+F+] 6+K 6+] F+! # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # Y+& /.i+- K C v.u L Z+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # 1 4 *+=.{ v.6+; > , e+x+~ 7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # G Z. * s # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # s x.-@_.&+q+- # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # B b@_ K /.O.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # V@f+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # Z+D D ,+# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # , w # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # n+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${$]$^$/$($_$:$<$[$}$|$1${${${${${${${${${${${${$2$3$}$4$5$5$4$}$3$6${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . i :+7$,@++$ $ $ $ $ $ . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # )@i+ ]+G+T -.% b++@ U.-.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # i+o p a+-.q x.9+6+ j+Y+# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # {.Z.8+t G r Q ! h@v. *+# # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${$8$9$0$. . . . . . . . . . a$b${${${${${${${${$c$d$<$. . . . . . . . <$d$c${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . r.` $ $ $ $ $ . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # W U.O.# # # # # F = _.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # j+: I (.C+w s # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # ~.< H # # # # # # # # a+i+ q+7 # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # : '#-.# # # # # # # # )@I > T # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${$e$f$. . . . . . . . . . . . . . {${${${${${${$e$g$. . . . . . . . . . . . g$e${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . C.m $ $ $ $ . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # G ( P.% # # # # # # # w.> C s # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # 8.5+# # # # # # # # # # # Z+j+ ~ # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # r e+ s@# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${$8$h$. . . i$j$k$l$c$m$n$o$p$a$. . {${${${${${${$q$. . . r$s$t$m$m$u$v$w$. . . x${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ k..+y$. . . X $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # (. o # # # # # # # # # b@ _.# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 2+ p+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # I+ v # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${$z$. . . A$m${${${${${${${${${$B$f${${${${${${$^$. . . C$m${${${${${${$m$C$. . . D${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ s.. . Y $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # ' % # # # # # # # # # w. = # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Y+ O+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 1 - # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${$E$F$. . G${${${${${${${${${${${${${${${${${${$m$H$. . I${${${${${${${${${${$J$. . H$K${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ q.. . ^@$ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # T = # # # # # # # # # # # i+ 3+# # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # )@ C # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # / ; # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${$L$. . F$M${${${${${${${${${${${${${${${${${${$N$. . 0$O${${${${${${${${${${$O$P$. . Q${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ .. . j@$ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # 2. y+# # # # # # # # # # # w+ H+# # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # s K # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # G , # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${$R$. . S${${${${${${${${${${${${${${${${${${${$T$. . U${${${${${${${${${${${${$C$. . V${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ W$. . g.$ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # @@ {+# # # # # # # # # # # {+ b@# # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # w 6+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 4 v+# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${$X$. . Y${${${${${${${${${${${${${${${${${${${$Z$. . b${${${${${${${${${${${${$`$. . %{${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ E+. . Y $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # +# p # # # # # # # # # # # } v+# # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # b@ v.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # d+ I+# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${$.%. . +%{${${${${${${${${${${${${${${${${${${$.%. . n${${${${${${${${${${${${$@%. . #%{${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ x $%>+. . . n@$ $ $ $ . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # ' B+# # # # # # # # # # # B+ n # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # | , d+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # r b@ g+7 # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${$%%. . M${${${${${${${$. . . . . . . . {${${${$%%. . M${${${${${${${${${${${${$e$. . 5${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . z -+$ $ $ $ . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # ]+ O.# # # # # # # # # # # O. _ # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # W 7+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # | B+8+] ' F # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${$%%. . K${${${${${${${$. . . . . . . . {${${${$%%. . E${${${${${${${${${${${${$M$. . &%{${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . J@t.$ $ $ $ $ . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # J |.# # # # # # # # # # # |. j+# # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # t ; K T # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # > d.|.# # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${$.%. . 2${${${${${${${$. . . . . . . . {${${${$*%. . n${${${${${${${${${${${${$@%. . =%{${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . c@$.-%K@M $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # ; r # # # # # # # # # # # / ; # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # s D d.# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # j+A+q # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${$Z$. . ;%{${${${${${${${${${${${$. . . {${${${$Z$. . b${${${${${${${${${${${${$>%. . %{${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # ; r # # # # # # # # # # # r ; # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # r 2 i+)@# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # ( (./ # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${$,%. . '%{${${${${${${${${${${${$. . . {${${${$,%. . )%{${${${${${${${${${${${$)%. . T${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # J |.# # # # # # # # # # # |. j+# # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # u+ 3.T # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # 7 S B+C+o+~. U S # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${$N$. . 4$e${${${${${${${${${${${$. . . {${${${$!%. . *%~%{${${${${${${${${${${%0$. . N${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # ]+ G # # # # # # # # # # # O. ]+# # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # [ - Y+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # H ]+ 5 # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${$m$H$. . ]%{${${${${${${${${${${$. . . {${${${$m$4$. . ^%{${${${${${${${${${$/%. . H$m${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # ' w.# # # # # # # # # # # B+ ' # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # {+ C t # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # % ( h+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${$(%. . . ]%e${${${${${${${${${$. . . {${${${${$v$. . . )%K${${${${${${$K$)%. . . ^${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # +# p # # # # # # # # # # # } v+# # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # _%K {.H # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # [ * # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${$J$. . . 4$S$:%<%K$m$[%1$z$}%. . . {${${${${$8$|%. . . 1%v$u$m$m$u$v$2%. . . 3%{${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # n+ {+# # # # # # # # # # # {+ b@# # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # X+> > 1## # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # Y+ ]+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${$m$/$. . . . . . . . . . . . . 4%(%{${${${${${$5%6%. . . . . . . . . . . . 7%5%{${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # {+ x+# # # # # # # # # # # y+ H+# # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # 5+C K ~ # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # )@ ; # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${$8%4$. . . . . . . . . :$9%0%{${${${${${${${$K$a%<$. . . . . . . . <$a%K${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # % = # # # # # # # # # # # = T # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # T 3. ~.b%# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # q j+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${$E$c%d%e%0$%%5$H$g$f%0%{${${${${${${${${${${${$6$3$7%4$&%&%4$7%g%+%{${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ . . . . . . . . . . . . . . $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # ' ~.% # # # # # # # # # % i+# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # O.3 A+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # x. ' # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # W o # # # # # # # # # b@ _.# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # |.e+ W # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # @@ w+# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # O.{. P.% # # # # # # # w.> ( G # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # / 8. u+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # &+|.# # # # # # # # # # # # B > p # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # s@ U.O.# # # # # F = (.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # 7 I u r # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # v.b%r # # # # # # # # # h+]. 2 # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # | ' ]+Y.T -.T A++@ i+-.# # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # n+ { )@# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # v.n+6 T | / G x.G+U _ a+# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # a+v. D Z+# # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # B+# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # i+3+# # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # G =@ Z.G # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # B+# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # t q@( +@h@r # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # t ;.= ( ~.( U.;.t # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # B+# # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # -.4 d.p@r+P.; j+v.2 9+} 7 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${$n$.%{${$f$z${${${${${$v$}%e${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${$h%}${${$i%H$]${${${$L$ %{%{${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${$|$j%{${${$C$k%{${$Y$l%2${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${$h$L${${${$O$[$+%m%r$n%{${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${$4$0%{${${${$o%|%r$i%{${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${$n$.%{${${${${$<%p%q%{${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${$h%}${${${${${$r%}%{${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${$|$j%{${${${${$p$A${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${$h$L${${${${${$q$c%{${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${$4$0%{${${${${$s%n%{${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + . . ~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$. . @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ . ", " . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + . . ~$~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$~$. . @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ . ", " . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . + + + + + # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # + + + + + . . ~$~$~$~$~${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${${$~$~$~$~$~$. . @ @ @ @ @ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ $ @ @ @ @ @ . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . ~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$. . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . ~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$. . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + . . ~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$~$. . @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ @ . ", " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " ", " "}; KCemu-0.5.1/src/ui/gtk/tapeadd.cc0000644001050700006200000000651411345001576016117 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "cmd/cmd.h" #include "ui/status.h" #include "ui/gtk/cmd.h" #include "ui/gtk/tapeadd.h" TapeAddWindow::TapeAddWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file), CMD("ui-tape-name-edit") { register_cmd("ui-tape-name-edit"); } TapeAddWindow::~TapeAddWindow(void) { } void TapeAddWindow::execute(CMD_Args *args, CMD_Context context) { const char *filename, *text; _args = args; filename = _args->get_string_arg("tape-filename"); if (!filename) return; text = _args->get_string_arg("tape-rename-title"); if (!text) return; init(filename, text); } void TapeAddWindow::ok(GtkWidget *widget, gpointer *data) { CMD_Args *args; TapeAddWindow *self = (TapeAddWindow *)data; args = self->_args; args->set_string_arg("tape-filename", gtk_entry_get_text(GTK_ENTRY(self->_tape_add.tapename))); gtk_widget_hide(self->_window); args->call_callbacks("ui-tape-name-edit-CB-ok"); } void TapeAddWindow::cancel(GtkWidget *widget, gpointer *data) { CMD_Args *args; TapeAddWindow *self = (TapeAddWindow *)data; args = self->_args; gtk_widget_hide(self->_window); args->call_callbacks("ui-tape-name-edit-CB-cancel"); } void TapeAddWindow::init(void) { } void TapeAddWindow::init(const char *tapename, const char *text) { /* * window */ _window = get_widget("tapeedit_window"); gtk_window_set_title(GTK_WINDOW(_window), _("KCemu: Rename File")); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(cancel), this); /* gtk_signal_connect(GTK_OBJECT(_window), "destroy", GTK_SIGNAL_FUNC(gtk_widget_destroyed), &_window); */ /* * label */ GtkWidget *label = get_widget("label_text"); gtk_label_set_text(GTK_LABEL(label), text); _tape_add.tapename = get_widget("tapename_entry"); gtk_entry_set_text(GTK_ENTRY(_tape_add.tapename), tapename); gtk_signal_connect(GTK_OBJECT(_tape_add.tapename), "activate", GTK_SIGNAL_FUNC(ok), this); gtk_entry_select_region(GTK_ENTRY(_tape_add.tapename), 0, -1); gtk_widget_grab_focus(_tape_add.tapename); /* * ok button */ _tape_add.b_ok = get_widget("dialog_button_ok"); gtk_signal_connect(GTK_OBJECT(_tape_add.b_ok), "clicked", GTK_SIGNAL_FUNC(ok), this); /* * cancel button */ _tape_add.b_cancel = get_widget("dialog_button_cancel"); gtk_signal_connect(GTK_OBJECT(_tape_add.b_cancel), "clicked", GTK_SIGNAL_FUNC(cancel), this); init_dialog(NULL, NULL); gtk_widget_show(_window); } KCemu-0.5.1/src/ui/gtk/keyboard.cc0000644001050700006200000003464711345001576016325 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/prefs/types.h" #include "kc/prefs/prefs.h" #include "kc/keys.h" #include "kc/keyboard.h" #include "cmd/cmd.h" #include "ui/gtk/cmd.h" #include "ui/gtk/ui_gtk.h" #include "ui/gtk/keyboard.h" #include "libdbg/dbg.h" using namespace std; static struct { const char *name; int key_val; } _key_names[] = { { "KC_KEY_ENTER", KC_KEY_ENTER }, { "KC_KEY_SPACE", KC_KEY_SPACE }, { "KC_KEY_ESC", KC_KEY_ESC }, { "KC_KEY_F1", KC_KEY_F1 }, { "KC_KEY_F2", KC_KEY_F2 }, { "KC_KEY_F3", KC_KEY_F3 }, { "KC_KEY_F4", KC_KEY_F4 }, { "KC_KEY_F5", KC_KEY_F5 }, { "KC_KEY_F6", KC_KEY_F6 }, { "KC_KEY_F7", KC_KEY_F7 }, { "KC_KEY_F8", KC_KEY_F8 }, { "KC_KEY_F9", KC_KEY_F9 }, { "KC_KEY_F10", KC_KEY_F10 }, { "KC_KEY_F11", KC_KEY_F11 }, { "KC_KEY_F12", KC_KEY_F12 }, { "KC_KEY_F13", KC_KEY_F13 }, { "KC_KEY_F14", KC_KEY_F14 }, { "KC_KEY_F15", KC_KEY_F15 }, { "KC_KEY_SHIFT", KC_KEY_SHIFT }, { "KC_KEY_CONTROL", KC_KEY_CONTROL }, { "KC_KEY_ALT", KC_KEY_ALT }, { "KC_KEY_ALT_GR", KC_KEY_ALT_GR }, { "KC_KEY_LEFT", KC_KEY_LEFT }, { "KC_KEY_RIGHT", KC_KEY_RIGHT }, { "KC_KEY_DOWN", KC_KEY_DOWN }, { "KC_KEY_UP", KC_KEY_UP }, { "KC_KEY_HOME", KC_KEY_HOME }, { "KC_KEY_END", KC_KEY_END }, { "KC_KEY_DEL", KC_KEY_DEL }, { "KC_KEY_INSERT", KC_KEY_INSERT }, { "KC_KEY_PAGE_UP", KC_KEY_PAGE_UP }, { "KC_KEY_PAGE_DOWN", KC_KEY_PAGE_DOWN }, { "KC_KEY_PAUSE", KC_KEY_PAUSE }, { "KC_KEY_PRINT", KC_KEY_PRINT }, { "KC_KEY_COLOR", KC_KEY_COLOR }, { "KC_KEY_GRAPHIC", KC_KEY_GRAPHIC }, { "KC_KEY_LIST", KC_KEY_LIST }, { "KC_KEY_RUN", KC_KEY_RUN }, { "KC_KEY_STOP", KC_KEY_STOP }, { "KC_KEY_SHIFT_LOCK", KC_KEY_SHIFT_LOCK }, { "KC_KEY_RESET", KC_KEY_RESET }, { "KC_KEY_NMI", KC_KEY_NMI }, { "KC_KEY_BREAK", KC_KEY_BREAK }, { "KC_KEY_CLEAR", KC_KEY_CLEAR }, { NULL, -1 }, }; class CMD_ui_keyboard_window_toggle : public CMD { private: KeyboardWindow *_w; public: CMD_ui_keyboard_window_toggle(KeyboardWindow *w) : CMD("ui-keyboard-window-toggle") { _w = w; register_cmd("ui-keyboard-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; KeyboardWindow::KeyboardWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { _key_active = FALSE; _key_pressed = NULL; _keys[0].key = NULL; _pixbuf_normal = NULL; _pixbuf_pressed = NULL; _delay = 0; _has_info = false; _cmd = new CMD_ui_keyboard_window_toggle(this); } KeyboardWindow::~KeyboardWindow(void) { delete _cmd; } gboolean KeyboardWindow::sf_expose(GtkWidget *widget, GdkEventExpose *event, gpointer data) { int w, h; KeyboardWindow *self = (KeyboardWindow *)data; gdk_window_set_back_pixmap(self->_w.canvas->window, NULL, FALSE); w = self->_w.canvas->allocation.width; h = self->_w.canvas->allocation.height; gdk_draw_rectangle(self->_w.canvas->window, self->_w.canvas->style->black_gc, FALSE, 0, 0, w - 1, h - 1); gdk_draw_pixbuf(self->_w.canvas->window, self->_w.canvas->style->fg_gc[GTK_STATE_NORMAL], self->_pixbuf_normal, 0, 0, 1, 1, w - 2, h - 2, GDK_RGB_DITHER_NONE, 0, 0); return FALSE; } void KeyboardWindow::draw_key_normal(struct _key_struct *key) { gdk_draw_pixbuf(_w.canvas->window, _w.canvas->style->fg_gc[GTK_STATE_NORMAL], _pixbuf_normal, key->rect.x, key->rect.y, key->rect.x + 1, key->rect.y + 1, key->rect.width, key->rect.height, GDK_RGB_DITHER_NONE, 0, 0); } void KeyboardWindow::draw_key_pressed(struct _key_struct *key) { gdk_draw_pixbuf(_w.canvas->window, _w.canvas->style->fg_gc[GTK_STATE_NORMAL], _pixbuf_pressed, key->rect.x, key->rect.y, key->rect.x + 1, key->rect.y + 1, key->rect.width, key->rect.height, GDK_RGB_DITHER_NONE, 0, 0); } gboolean KeyboardWindow::sf_button_press(GtkWidget *widget, GdkEventButton *event, gpointer data) { int a; KeyboardWindow *self = (KeyboardWindow *)data; for (a = 0;self->_keys[a].key != NULL;a++) { if (self->_keys[a].key_val < 0) continue; if (gdk_region_point_in(self->_keys[a].region, (int)event->x - 1, (int)event->y - 1)) { self->_key_active = TRUE; self->_key_pressed = &self->_keys[a]; self->draw_key_pressed(self->_key_pressed); switch (event->button) { case 2: keyboard->keyPressed(KC_KEY_CONTROL, KC_KEY_CONTROL); break; case 3: keyboard->keyPressed(KC_KEY_SHIFT, KC_KEY_SHIFT); break; } keyboard->keyPressed(self->_key_pressed->key_val, self->_key_pressed->key_val); } } return TRUE; } gboolean KeyboardWindow::sf_button_release(GtkWidget *widget, GdkEventButton *event, gpointer data) { KeyboardWindow *self = (KeyboardWindow *)data; if (!self->_key_pressed) return TRUE; if (self->_key_active) self->_key_active = FALSE; self->draw_key_normal(self->_key_pressed); keyboard->keyReleased(self->_key_pressed->key_val, self->_key_pressed->key_val); switch (event->button) { case 2: keyboard->keyReleased(KC_KEY_CONTROL, KC_KEY_CONTROL); break; case 3: keyboard->keyReleased(KC_KEY_SHIFT, KC_KEY_SHIFT); break; } if (self->_key_pressed->key_val == KC_KEY_RESET) { CMD_EXEC("emu-reset"); } else if (self->_key_pressed->key_val == KC_KEY_NMI) { CMD_EXEC("emu-nmi"); } self->_key_pressed = NULL; return TRUE; } gboolean KeyboardWindow::sf_key_press(GtkWidget *widget, GdkEventKey *event, gpointer data) { return UI_Gtk::sf_key_press(widget, event); } gboolean KeyboardWindow::sf_key_release(GtkWidget *widget, GdkEventKey *event, gpointer data) { return UI_Gtk::sf_key_release(widget, event); } gboolean KeyboardWindow::sf_motion_notify(GtkWidget *widget, GdkEventMotion *event, gpointer data) { KeyboardWindow *self = (KeyboardWindow *)data; if (!self->_key_pressed) { self->check_regions(event); return TRUE; } if (gdk_region_point_in(self->_key_pressed->region, (int)event->x - 1, (int)event->y - 1)) { if (self->_key_active) return TRUE; self->_key_active = TRUE; self->draw_key_pressed(self->_key_pressed); } else { if (!self->_key_active) return TRUE; self->_key_active = FALSE; self->draw_key_normal(self->_key_pressed); } return TRUE; } gboolean KeyboardWindow::timeout_callback(gpointer data) { KeyboardWindow *self = (KeyboardWindow *)data; if (self->_delay == 0) return TRUE; self->_delay--; if (self->_delay != 0) return TRUE; gtk_label_set_text(GTK_LABEL(self->_w.label_info), ""); return TRUE; } int KeyboardWindow::get_key_val(const char *key) { int a; for (a = 0;_key_names[a].name != NULL;a++) if (strcmp(_key_names[a].name, key) == 0) return _key_names[a].key_val; if (strlen(key) == 1) return key[0]; return -1; } void KeyboardWindow::check_regions(GdkEventMotion *event) { static GdkColor red; static GdkColor blue; static GdkGC *gc; static GdkColormap *colormap = NULL; int a, b; int n_rectangles; GdkRectangle *rectangles; bool debug = DBG_check("KCemu/KeyboardWindow/debug_regions"); if (colormap == NULL) { gc = gdk_gc_new(_w.canvas->window); colormap = gdk_colormap_get_system(); gdk_color_parse("#ff0000", &red); gdk_color_parse("#0000ff", &blue); gdk_color_alloc(colormap, &red); gdk_color_alloc(colormap, &blue); } for (a = 0;_keys[a].key != NULL;a++) { if (gdk_region_point_in(_keys[a].region, (int)event->x - 1, (int)event->y - 1)) { _delay = 5; gtk_label_set_text(GTK_LABEL(_w.label_info), _keys[a].info == NULL ? "" : gettext(_keys[a].info)); if (!debug) continue; sf_expose(_w.canvas, NULL, this); gdk_gc_set_foreground(gc, &red); gdk_draw_rectangle(_w.canvas->window, gc, FALSE, _keys[a].rect.x + 1, _keys[a].rect.y + 1, _keys[a].rect.width - 1, _keys[a].rect.height - 1); gdk_draw_rectangle(_w.canvas->window, gc, FALSE, _keys[a].rect.x, _keys[a].rect.y, _keys[a].rect.width + 1, _keys[a].rect.height + 1); gdk_region_get_rectangles(_keys[a].region, &rectangles, &n_rectangles); gdk_gc_set_foreground(gc, &blue); for (b = 0;b < n_rectangles;b++) { gdk_draw_rectangle(_w.canvas->window, gc, FALSE, rectangles[b].x + 1, rectangles[b].y + 1, rectangles[b].width - 1, rectangles[b].height - 1); } } } } void KeyboardWindow::init_key_regions(void) { int a; FILE *f; int state; char buf[1024]; GdkRectangle r; const EmulationType &emulation_type = Preferences::instance()->get_system_type()->get_emulation_type(); const char *filename = emulation_type.get_keyboard_filename(); if (filename == NULL) return; string datadir(kcemu_datadir); string keymap_dir = datadir + "/keymaps/"; string keymap_filename = keymap_dir + filename; f = fopen(keymap_filename.c_str(), "rb"); if (f == NULL) return; if (fgets(buf, 1024, f) == NULL) { fclose(f); return; } _pixbuf_normal = load_pixmap(keymap_dir.c_str(), buf); if (_pixbuf_normal == NULL) { fclose(f); return; } if (fgets(buf, 1024, f) == NULL) { fclose(f); return; } _pixbuf_pressed = load_pixmap(keymap_dir.c_str(), buf); if (_pixbuf_pressed == NULL) { fclose(f); return; } a = -1; state = 0; while (state >= 0) { if (fgets(buf, 1024, f) == NULL) break; if (buf[0] == '#') continue; char *ptr = strchr(buf, '\n'); if (ptr != NULL) *ptr = '\0'; switch (state) { case 2: if (buf[0] == '=') { if (sscanf(buf, "=%d,%d,%d,%d", &r.x, &r.y, &r.width, &r.height) != 4) { state = -1; break; } _keys[a].region = gdk_region_rectangle(&r); break; } else if (buf[0] == '?') { _has_info = true; _keys[a].info = strdup(buf + 1); break; } else if (buf[0] != '+') { state = -1; break; } /* * else reset state and fall through; this is the case when we * just read the first line for a new key definition */ state = 0; case 0: if (buf[0] != '+') { state = -1; break; } a++; _keys[a].key = strdup(buf + 1); _keys[a].key_val = get_key_val(_keys[a].key); _keys[a].info = NULL; if (_keys[a].key_val < 0) { DBG(0, form("KCemu/warning", "Unknown key '%s' in file '%s'\n", _keys[a].key, filename)); } state++; break; case 1: if (buf[0] != ':') { state = -1; break; } if (sscanf(buf, ":%d,%d,%d,%d", &_keys[a].rect.x, &_keys[a].rect.y, &_keys[a].rect.width, &_keys[a].rect.height) != 4) { state = -1; break; } state++; break; } } a++; _keys[a].key = NULL; DBG(0, form("KCemu/KeyboardWindow/debug_regions", "%d key definitions loaded.\n", a)); fclose(f); } GdkPixbuf * KeyboardWindow::load_pixmap(const char *keymap_dir, char *filename_buffer) { char *ptr = strchr(filename_buffer, '\n'); if (ptr != NULL) *ptr = '\0'; string dir(keymap_dir); string filename = dir + filename_buffer; GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(filename.c_str(), NULL); if (pixbuf == NULL) { DBG(0, form("KCemu/warning", "KeyboardWindow::load_pixmap((): can't load keyboard pixmap '%s'\n", filename.c_str())); } return pixbuf; } void KeyboardWindow::init(void) { init_key_regions(); _window = get_widget("keyboard_window"); gtk_window_set_title(GTK_WINDOW(_window), _("KCemu: Keyboard")); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(cmd_exec_sft), (char *)"ui-keyboard-window-toggle"); // FIXME: gtk_signal_connect(GTK_OBJECT(_window), "key_press_event", GTK_SIGNAL_FUNC(sf_key_press), this); gtk_signal_connect(GTK_OBJECT(_window), "key_release_event", GTK_SIGNAL_FUNC(sf_key_release), this); _w.canvas = NULL; _w.eventbox = NULL; _w.notebook = get_widget("notebook"); _w.not_configured_label = get_widget("not_configured_label"); _w.label_info = get_widget("label_info"); if (_has_info) { gtk_widget_show(_w.label_info); gtk_widget_show(get_widget("hseparator_info")); } if ((_pixbuf_normal != NULL) && (_pixbuf_pressed != NULL)) { gtk_notebook_set_current_page(GTK_NOTEBOOK(_w.notebook), 0); /* * eventbox */ _w.eventbox = get_widget("eventbox"); gtk_signal_connect(GTK_OBJECT(_w.eventbox), "motion_notify_event", GTK_SIGNAL_FUNC(sf_motion_notify), this); gtk_signal_connect(GTK_OBJECT(_w.eventbox), "button_press_event", GTK_SIGNAL_FUNC(sf_button_press), this); gtk_signal_connect(GTK_OBJECT(_w.eventbox), "button_release_event", GTK_SIGNAL_FUNC(sf_button_release), this); /* * canvas */ _w.canvas = get_widget("drawingarea"); gtk_signal_connect(GTK_OBJECT(_w.canvas), "expose_event", GTK_SIGNAL_FUNC(sf_expose), this); gtk_widget_set_usize(_w.canvas, gdk_pixbuf_get_width(_pixbuf_normal), gdk_pixbuf_get_height(_pixbuf_normal)); } else { gtk_misc_set_padding(GTK_MISC(_w.not_configured_label), 100, 50); gtk_notebook_set_current_page(GTK_NOTEBOOK(_w.notebook), 1); } #if GLIB_CHECK_VERSION(2,14,0) g_timeout_add_seconds(1, timeout_callback, this); #else g_timeout_add(1000, timeout_callback, this); #endif init_dialog("ui-keyboard-window-toggle", NULL); } KCemu-0.5.1/src/ui/gtk/main.cc0000644001050700006200000007234511345001577015447 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/prefs/prefs.h" #include "sys/sysdep.h" #undef Status #include "ui/status.h" #include "ui/gtk/cmd.h" #include "ui/gtk/main.h" #include "libdbg/dbg.h" class CMD_toggle_main : public CMD { private: MainWindow *_w; public: CMD_toggle_main(MainWindow *w) : CMD("ui-toggle-main") { _w = w; register_cmd("ui-status-bar-toggle", 0); register_cmd("ui-menu-bar-toggle", 1); } void execute(CMD_Args *args, CMD_Context context) { switch (context) { case 0: _w->status_bar_toggle(); break; case 1: _w->menu_bar_toggle(); break; } } }; MainWindow::MainWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { _gc = NULL; _image = NULL; _colormap = NULL; _dirty_old = NULL; _visual = gdk_visual_get_system(); _width = 0; _height = 0; _expose = false; _w.status_sec = 0; _cmd_ui_toggle = new CMD_toggle_main(this); _accel_map_path = string(kcemu_homedir) + "/keys.map"; #if 0 switch (_visual->type) { case GDK_VISUAL_STATIC_GRAY: cout << "GDK_VISUAL_STATIC_GRAY" << endl; break; case GDK_VISUAL_GRAYSCALE: cout << "GDK_VISUAL_GRAYSCALE" << endl; break; case GDK_VISUAL_STATIC_COLOR: cout << "GDK_VISUAL_STATIC_COLOR" << endl; break; case GDK_VISUAL_PSEUDO_COLOR: cout << "GDK_VISUAL_PSEUDO_COLOR" << endl; break; case GDK_VISUAL_TRUE_COLOR: cout << "GDK_VISUAL_TRUE_COLOR" << endl; break; case GDK_VISUAL_DIRECT_COLOR: cout << "GDK_VISUAL_DIRECT_COLOR" << endl; break; default: cout << "unknown visual type" << endl; break; } #endif } MainWindow::~MainWindow(void) { delete _cmd_ui_toggle; } void MainWindow::attach_remote_listener(void) { GdkAtom atom; atom = gdk_atom_intern("_KCEMU_REMOTE_COMMAND", FALSE); gdk_property_change(_window->window, atom, GDK_TARGET_STRING, 8, GDK_PROP_MODE_REPLACE, (unsigned char *) "", 1); gdk_flush(); } gboolean MainWindow::on_property_change(GtkWidget *widget, GdkEventProperty *event, gpointer data) { gboolean ret; guchar *prop_data; char *ptr, *val, *atom; GdkAtom actual_property_type; gint actual_format, actual_length; CMD_Args *args; MainWindow *self = (MainWindow *) data; if (event == NULL) return TRUE; atom = gdk_atom_name(event->atom); if (atom == NULL) return TRUE; if (strcmp(atom, "_KCEMU_REMOTE_COMMAND") == 0) { DBG(1, form("KCemu/UI/remote", "property_change: %s\n", atom)); prop_data = NULL; ret = gdk_property_get(self->_window->window, event->atom, GDK_TARGET_STRING, 0, (65536 / sizeof (long)), FALSE, &actual_property_type, &actual_format, &actual_length, &prop_data); if (!ret || (*prop_data == '\0')) { DBG(1, form("KCemu/UI/remote", "empty or invalid property!\n")); } else { ptr = (char *) prop_data; DBG(1, form("KCemu/UI/remote", "command: %s'\n", ptr)); args = new CMD_Args(); while (242) { ptr += strlen(ptr) + 1; if ((ptr - (char *) prop_data) >= actual_length) break; val = strchr(ptr, '='); if (!val) continue; *val++ = '\0'; DBG(1, form("KCemu/UI/remote", " arg: %s -> '%s'\n", ptr, val)); args->set_string_arg(ptr, val); } CMD_EXEC_ARGS((const char *) prop_data, args); } if (prop_data != NULL) g_free(prop_data); } g_free(atom); return TRUE; } gboolean MainWindow::on_expose_event(GtkWidget *widget, GdkEventExpose *event, gpointer user_data) { static int x = 1; MainWindow *self = (MainWindow *)user_data; self->_expose = true; if (x) { x = 0; self->attach_remote_listener(); Status::instance()->addStatusListener(self); string greeting("KCemu v" KCEMU_VERSION " ("); greeting += Preferences::instance()->get_kc_variant_name(); greeting += ")"; Status::instance()->setMessage(greeting.c_str()); } return FALSE; /* propagate event */ } gboolean MainWindow::on_button_press_event(GtkWidget *widget, GdkEventButton *event, gpointer user_data) { MainWindow *self = (MainWindow *)user_data; switch (event->button) { case 2: { /* hmm, is TEXT the correct selection type ??? */ GdkAtom atom = gdk_atom_intern("TEXT", FALSE); if (atom == GDK_NONE) break; gtk_selection_convert(self->_window, GDK_SELECTION_PRIMARY, atom, GDK_CURRENT_TIME); break; } case 3: { gtk_menu_popup(GTK_MENU(self->_w.popup_menu), NULL, NULL, NULL, NULL, 3, event->time); break; } } return FALSE; /* propagate event */ } void MainWindow::on_accel_group_changed(GtkAccelGroup *accel_group, guint keyval, GdkModifierType modifier, GClosure *accel_closure, gpointer user_data) { MainWindow *self = (MainWindow *)user_data; if (self->_w.idle_id == 0) { // prevent multiple saves as a single user change might cause many signals self->_w.idle_id = g_idle_add(on_accel_group_changed_idle_func, self); } } gboolean MainWindow::on_accel_group_changed_idle_func(gpointer data) { MainWindow *self = (MainWindow *)data; gtk_accel_map_save(self->_accel_map_path.c_str()); self->_w.idle_id = 0; return FALSE; /* remove from idle list */ } GtkWidget * MainWindow::get_main_window(void) { return _window; } void MainWindow::wire_menu_item(const char *name, const char *shortcut, const char *command) { GtkMenuItem *item = GTK_MENU_ITEM(get_widget(name)); GtkWidget *parent = gtk_widget_get_parent(GTK_WIDGET(item)); const char *parent_name = gtk_widget_get_name(parent); string path = string("/") + parent_name + "/" + name; gtk_menu_item_set_accel_path(item, path.c_str()); g_signal_connect(item, "activate", G_CALLBACK(cmd_exec_mc), (gpointer)(command)); string popup_name = string(name) + "_p"; GtkMenuItem *popup_item = GTK_MENU_ITEM(get_widget_or_null(popup_name.c_str())); if (popup_item != NULL) { gtk_menu_item_set_accel_path(popup_item, path.c_str()); g_signal_connect(popup_item, "activate", G_CALLBACK(cmd_exec_mc), (gpointer)(command)); } if (shortcut != NULL) { guint accel_key; GdkModifierType accel_mods; gtk_accelerator_parse(shortcut, &accel_key, &accel_mods); gtk_accel_map_add_entry(path.c_str(), accel_key, accel_mods); } } void MainWindow::add_menu_accel_group(const char *base, const char *name) { string path = string(base) + "/" + name; GtkMenu *menu = GTK_MENU(get_widget(name)); gtk_menu_set_accel_group(menu, _w.accel_group); //gtk_menu_set_accel_path(menu, path.c_str()); } gboolean MainWindow::get_display_effect(void) { return kcemu_ui_display_effect; } void MainWindow::set_display_effect(gboolean effect) { GtkWidget *widget = get_widget("menuitem_display_effects"); gtk_check_menu_item_set_active(GTK_CHECK_MENU_ITEM(widget), effect); kcemu_ui_display_effect = effect; } void MainWindow::init(void) { _window = get_widget("main_window"); g_signal_connect(_window, "delete-event", G_CALLBACK(cmd_exec_sft), (gpointer)"emu-quit"); g_signal_connect(_window, "property-notify-event", G_CALLBACK(on_property_change), this); _w.accel_group = gtk_accel_group_new(); gtk_window_add_accel_group(GTK_WINDOW(_window), _w.accel_group); init_icon(); string title(Preferences::instance()->get_kc_type_name()); title += " Emulator"; gtk_window_set_title(GTK_WINDOW(_window), title.c_str()); _w.menubar = GTK_MENU_BAR(get_widget("menubar")); _w.status_hbox = GTK_HBOX(get_widget("status_hbox")); _w.drawingarea = GTK_DRAWING_AREA(get_widget("drawingarea")); _w.popup_menu = GTK_MENU(get_widget("menu_popup")); _w.status_label = GTK_LABEL(get_widget("status_label")); _w.status_statusbar = GTK_STATUSBAR(get_widget("status_statusbar")); g_signal_connect(_w.drawingarea, "expose_event", G_CALLBACK(on_expose_event), this); g_signal_connect(_window, "button-press-event", G_CALLBACK(on_button_press_event), this); add_menu_accel_group("", "menu_emulator"); add_menu_accel_group("", "menu_view"); add_menu_accel_group("", "menu_options"); add_menu_accel_group("", "menu_popup"); add_menu_accel_group("", "menu_view_p"); GtkMenuItem *helpitem = GTK_MENU_ITEM(get_widget("menubaritem_help")); gtk_menu_item_set_right_justified(helpitem, TRUE); // initialize before attaching signal handlers set_display_effect(get_display_effect()); wire_menu_item("menuitem_run", NULL, "kc-image-run"); wire_menu_item("menuitem_load", "L", "kc-image-load"); wire_menu_item("menuitem_save", "S", "ui-save-memory-window-toggle"); wire_menu_item("menuitem_tape", "T", "ui-tape-window-toggle"); wire_menu_item("menuitem_disk", "D", "ui-disk-window-toggle"); wire_menu_item("menuitem_vdip", "V", "ui-vdip-window-toggle"); wire_menu_item("menuitem_module", "M", "ui-module-window-toggle"); wire_menu_item("menuitem_audio", "U", "ui-wav-window-toggle"); wire_menu_item("menuitem_screenshot", "H", "ui-screenshot-window-toggle"); wire_menu_item("menuitem_plotter", "O", "ui-plotter-window-toggle"); wire_menu_item("menuitem_video", NULL, "ui-video-window-toggle"); wire_menu_item("menuitem_reset", "R", "emu-reset"); wire_menu_item("menuitem_power", "P", "emu-power-on"); wire_menu_item("menuitem_quit", "Q", "emu-quit"); wire_menu_item("menuitem_zoom1", "1", "ui-zoom-1"); wire_menu_item("menuitem_zoom2", "2", "ui-zoom-2"); wire_menu_item("menuitem_zoom3", "3", "ui-zoom-3"); wire_menu_item("menuitem_keyboard", "K", "ui-keyboard-window-toggle"); wire_menu_item("menuitem_menubar", NULL, "ui-menu-bar-toggle"); wire_menu_item("menuitem_statusbar", NULL, "ui-status-bar-toggle"); wire_menu_item("menuitem_colors", "C", "ui-color-window-toggle"); wire_menu_item("menuitem_display_effects", NULL, "ui-display-effects-toggle"); wire_menu_item("menuitem_no_speed_limit", "G", "ui-speed-limit-toggle"); wire_menu_item("menuitem_profiles", NULL, "ui-options-window-toggle"); wire_menu_item("menuitem_help", NULL, "ui-help-window-toggle-home"); wire_menu_item("menuitem_help_index", NULL, "ui-help-window-toggle-index"); wire_menu_item("menuitem_context_help", NULL, "ui-help-window-context-help"); wire_menu_item("menuitem_about", NULL, "ui-about-window-toggle"); wire_menu_item("menuitem_thanks", NULL, "ui-thanks-window-toggle"); wire_menu_item("menuitem_licence", NULL, "ui-copying-window-toggle"); wire_menu_item("menuitem_no_warranty", NULL, "ui-warranty-window-toggle"); gtk_accel_map_load(_accel_map_path.c_str()); g_signal_connect(_w.accel_group, "accel-changed", G_CALLBACK(on_accel_group_changed), this); } void MainWindow::init_icon(void) { const EmulationType &emulation_type = Preferences::instance()->get_system_type()->get_emulation_type(); GdkPixbuf *icon = get_icon(emulation_type.get_icon_name()); if (icon != NULL) gtk_window_set_icon(GTK_WINDOW(_window), icon); g_object_set_data(G_OBJECT(_window), "help-topic", (gpointer)emulation_type.get_help_topic()); } void MainWindow::process_events(void) { if (_w.status_sec == 0) return; long tv_sec, tv_usec; sys_gettimeofday(&tv_sec, &tv_usec); if (tv_sec - _w.status_sec > 10) { gtk_statusbar_pop(_w.status_statusbar, 1); } } void MainWindow::show(int width, int height) { init(); gtk_drawing_area_size(_w.drawingarea, width, height); UI_Gtk_Window::show(); } bool MainWindow::resize(int width, int height) { if ((_width == width) && (_height == height)) return false; if (_image) gdk_image_destroy(_image); _image = gdk_image_new(GDK_IMAGE_FASTEST, _visual, width, height); gtk_drawing_area_size(_w.drawingarea, width, height); if (!GTK_WIDGET_VISIBLE(_window)) gtk_widget_show(_window); if (_gc) gdk_gc_destroy(_gc); _gc = gdk_gc_new(GTK_WIDGET(_w.drawingarea)->window); // force reallocation of dirty buffer if (_dirty_old != NULL) { delete _dirty_old; _dirty_old = NULL; } return true; } void MainWindow::allocate_color_rgb(int idx, int r, int g, int b) { _col[idx].red = r << 8; _col[idx].green = g << 8; _col[idx].blue = b << 8; _colormap = gdk_colormap_get_system(); gdk_color_alloc(_colormap, &_col[idx]); } static gulong lighter_color(gulong col) { static int color_add = 50; // RC::instance()->get_int("DEBUG UI_Gtk Color Add", 50); int r = (col >> 16) & 0xff; int g = (col >> 8) & 0xff; int b = (col ) & 0xff; r += color_add; g += color_add; b += color_add; if (r > 255) r = 255; if (g > 255) g = 255; if (b > 255) b = 255; return (r << 16) | (g << 8) | b; } static gulong darker_color(gulong col) { int r = (col >> 16) & 0xff; int g = (col >> 8) & 0xff; int b = (col ) & 0xff; r = (2 * r) / 3; g = (2 * g) / 3; b = (2 * b) / 3; return (r << 16) | (g << 8) | b; } #define ADD_COL(weight) \ r += weight * ((p >> 16) & 0xff); \ g += weight * ((p >> 8) & 0xff); \ b += weight * ((p ) & 0xff); \ w += weight /* * +---+---+---+ * | 0 | 1 | 2 | * +---+---+---+ * | 3 | 4 | 5 | * +---+---+---+ * | 6 | 7 | 8 | * +---+---+---+ */ gulong MainWindow::get_col(byte_t *bitmap, int which, int idx, int width) { gulong p; long r, g, b, w; w = 0; r = 0; g = 0; b = 0; switch (which) { default: return _col[bitmap[idx]].pixel; case 1: p = _col[bitmap[idx]].pixel; ADD_COL(9); p = _col[bitmap[idx - width]].pixel; ADD_COL(3); break; case 3: p = _col[bitmap[idx]].pixel; ADD_COL(9); p = _col[bitmap[idx - 1]].pixel; ADD_COL(3); break; case 5: p = _col[bitmap[idx]].pixel; ADD_COL(9); p = _col[bitmap[idx + 1]].pixel; ADD_COL(3); break; case 7: p = _col[bitmap[idx]].pixel; ADD_COL(9); p = _col[bitmap[idx + width]].pixel; ADD_COL(3); break; case 0: p = _col[bitmap[idx]].pixel; ADD_COL(12); p = _col[bitmap[idx - 1]].pixel; ADD_COL(5); p = _col[bitmap[idx - width]].pixel; ADD_COL(5); p = _col[bitmap[idx - width - 1]].pixel; ADD_COL(1); break; case 2: p = _col[bitmap[idx]].pixel; ADD_COL(12); p = _col[bitmap[idx + 1]].pixel; ADD_COL(5); p = _col[bitmap[idx - width]].pixel; ADD_COL(5); p = _col[bitmap[idx - width + 1]].pixel; ADD_COL(1); break; case 6: p = _col[bitmap[idx]].pixel; ADD_COL(12); p = _col[bitmap[idx - 1]].pixel; ADD_COL(5); p = _col[bitmap[idx + width]].pixel; ADD_COL(5); p = _col[bitmap[idx + width - 1]].pixel; ADD_COL(1); break; case 8: p = _col[bitmap[idx]].pixel; ADD_COL(12); p = _col[bitmap[idx + 1]].pixel; ADD_COL(5); p = _col[bitmap[idx + width]].pixel; ADD_COL(5); p = _col[bitmap[idx + width + 1]].pixel; ADD_COL(1); break; } r = r / w; g = g / w; b = b / w; return (r << 16) | (g << 8) | b; } void MainWindow::update_1(byte_t *bitmap, byte_t *dirty, int dirty_size, int width, int height) { int d = -1; for (int y = 0;y < height;y += 8) { for (int x = 0;x < width;x += 8) { d++; if (!dirty[d]) continue; int z = y * width + x; for (int yy = 0;yy < 8;yy++) { for (int xx = 0;xx < 8;xx++) { gdk_image_put_pixel(_image, x + xx, y + yy, _col[bitmap[z + xx]].pixel); } z += width; } } } } void MainWindow::update_1_debug(byte_t *bitmap, byte_t *dirty, int dirty_size, int width, int height) { static int frame_delay = 50; if (_dirty_old == NULL) { _dirty_old = new byte_t[dirty_size]; memset(_dirty_old, 0, dirty_size); //frame_delay = 50; // RC::instance()->get_int("DEBUG UI_Gtk Frame Delay", 50); } int d = -1; for (int y = 0;y < height;y += 8) { for (int x = 0;x < width;x += 8) { d++; if (dirty[d]) _dirty_old[d] = frame_delay; if (_dirty_old[d] == 0) continue; if (_dirty_old[d] > 0) _dirty_old[d]--; dirty[d] = 1; int z = y * width + x; if (_dirty_old[d]) { for (int yy = 0;yy < 8;yy++) { for (int xx = 0;xx < 8;xx++) { gdk_image_put_pixel(_image, x + xx, y + yy, lighter_color(_col[bitmap[z + xx]].pixel)); } z += width; } } else { for (int yy = 0;yy < 8;yy++) { for (int xx = 0;xx < 8;xx++) { gdk_image_put_pixel(_image, x + xx, y + yy, _col[bitmap[z + xx]].pixel); } z += width; } } } } } void MainWindow::update_2(byte_t *bitmap, byte_t *dirty, int dirty_size, int width, int height) { int d = -1; for (int y = 0;y < height;y += 8) { for (int x = 0;x < width;x += 8) { d++; if (!dirty[d]) continue; int z = y * width + x; for (int yy = 0;yy < 16;yy += 2) { for (int xx = 0;xx < 16;xx += 2) { gulong pix = _col[bitmap[z++]].pixel; gdk_image_put_pixel(_image, 2 * x + xx, 2 * y + yy , pix); gdk_image_put_pixel(_image, 2 * x + xx + 1, 2 * y + yy , pix); gdk_image_put_pixel(_image, 2 * x + xx , 2 * y + yy + 1, pix); gdk_image_put_pixel(_image, 2 * x + xx + 1, 2 * y + yy + 1, pix); } z += width - 8; } } } } void MainWindow::update_2_scanline(byte_t *bitmap, byte_t *dirty, int dirty_size, int width, int height) { int d = -1; for (int y = 0;y < height;y += 8) { for (int x = 0;x < width;x += 8) { d++; if (!dirty[d]) continue; int z = y * width + x; for (int yy = 0;yy < 16;yy += 2) { for (int xx = 0;xx < 16;xx += 2) { gulong pix = _col[bitmap[z++]].pixel; gdk_image_put_pixel(_image, 2 * x + xx, 2 * y + yy , pix); gdk_image_put_pixel(_image, 2 * x + xx + 1, 2 * y + yy , pix); gdk_image_put_pixel(_image, 2 * x + xx , 2 * y + yy + 1, darker_color(pix)); gdk_image_put_pixel(_image, 2 * x + xx + 1, 2 * y + yy + 1, darker_color(pix)); } z += width - 8; } } } } void MainWindow::update_3(byte_t *bitmap, byte_t *dirty, int dirty_size, int width, int height) { int d = -1; for (int y = 0;y < height;y += 8) { for (int x = 0;x < width;x += 8) { d++; if (!dirty[d]) continue; int z = y * width + x; for (int yy = 0;yy < 24;yy += 3) { for (int xx = 0;xx < 24;xx += 3) { gulong pix = _col[bitmap[z++]].pixel; gdk_image_put_pixel(_image, 3 * x + xx , 3 * y + yy , pix); gdk_image_put_pixel(_image, 3 * x + xx + 1, 3 * y + yy , pix); gdk_image_put_pixel(_image, 3 * x + xx + 2, 3 * y + yy , pix); gdk_image_put_pixel(_image, 3 * x + xx , 3 * y + yy + 1, pix); gdk_image_put_pixel(_image, 3 * x + xx + 1, 3 * y + yy + 1, pix); gdk_image_put_pixel(_image, 3 * x + xx + 2, 3 * y + yy + 1, pix); gdk_image_put_pixel(_image, 3 * x + xx , 3 * y + yy + 2, pix); gdk_image_put_pixel(_image, 3 * x + xx + 1, 3 * y + yy + 2, pix); gdk_image_put_pixel(_image, 3 * x + xx + 2, 3 * y + yy + 2, pix); } z += width - 8; } } } } void MainWindow::update_3_smooth(byte_t *bitmap, byte_t *dirty, int dirty_size, int width, int height) { int d = -1; byte_t dirty_buf[dirty_size]; memcpy(dirty_buf, dirty, dirty_size); for (int y = 0;y < height;y += 8) { for (int x = 0;x < width;x += 8) { d++; if (dirty[d]) { int z = y * width + x; for (int yy = 0;yy < 24;yy += 3) { for (int xx = 0;xx < 24;xx += 3) { gdk_image_put_pixel(_image, 3 * x + xx , 3 * y + yy , get_col(bitmap, 0, z, width)); gdk_image_put_pixel(_image, 3 * x + xx + 1, 3 * y + yy , get_col(bitmap, 1, z, width)); gdk_image_put_pixel(_image, 3 * x + xx + 2, 3 * y + yy , get_col(bitmap, 2, z, width)); gdk_image_put_pixel(_image, 3 * x + xx , 3 * y + yy + 1, get_col(bitmap, 3, z, width)); gdk_image_put_pixel(_image, 3 * x + xx + 1, 3 * y + yy + 1, get_col(bitmap, 4, z, width)); gdk_image_put_pixel(_image, 3 * x + xx + 2, 3 * y + yy + 1, get_col(bitmap, 5, z, width)); gdk_image_put_pixel(_image, 3 * x + xx , 3 * y + yy + 2, get_col(bitmap, 6, z, width)); gdk_image_put_pixel(_image, 3 * x + xx + 1, 3 * y + yy + 2, get_col(bitmap, 7, z, width)); gdk_image_put_pixel(_image, 3 * x + xx + 2, 3 * y + yy + 2, get_col(bitmap, 8, z, width)); z++; } z += width - 8; } } else { /* * not dirty but we need to check the neighbour pixels due to * the antialiasing */ if ((d > 0) && (dirty[d - 1])) { int z = y * width + x; for (int yy = 0;yy < 24;yy += 3) { gdk_image_put_pixel(_image, 3 * x, 3 * y + yy , get_col(bitmap, 0, z, width)); gdk_image_put_pixel(_image, 3 * x, 3 * y + yy + 1, get_col(bitmap, 3, z, width)); gdk_image_put_pixel(_image, 3 * x, 3 * y + yy + 2, get_col(bitmap, 6, z, width)); z += width; } dirty_buf[d] = 1; } if (dirty[d + 1]) { int z = y * width + x + 7; for (int yy = 0;yy < 24;yy += 3) { gdk_image_put_pixel(_image, 3 * x + 23, 3 * y + yy , get_col(bitmap, 2, z, width)); gdk_image_put_pixel(_image, 3 * x + 23, 3 * y + yy + 1, get_col(bitmap, 5, z, width)); gdk_image_put_pixel(_image, 3 * x + 23, 3 * y + yy + 2, get_col(bitmap, 8, z, width)); z += width; } dirty_buf[d] = 1; } if (dirty[d + width / 8]) { int z = (y + 7) * width + x; for (int xx = 0;xx < 24;xx += 3) { gdk_image_put_pixel(_image, 3 * x + xx , 3 * y + 23, get_col(bitmap, 6, z, width)); gdk_image_put_pixel(_image, 3 * x + xx + 1, 3 * y + 23, get_col(bitmap, 7, z, width)); gdk_image_put_pixel(_image, 3 * x + xx + 2, 3 * y + 23, get_col(bitmap, 8, z, width)); z++; } dirty_buf[d] = 1; } if ((d > width / 8) && (dirty[d - width / 8])) { int z = y * width + x; for (int xx = 0;xx < 24;xx += 3) { gdk_image_put_pixel(_image, 3 * x + xx , 3 * y, get_col(bitmap, 0, z, width)); gdk_image_put_pixel(_image, 3 * x + xx + 1, 3 * y, get_col(bitmap, 1, z, width)); gdk_image_put_pixel(_image, 3 * x + xx + 2, 3 * y, get_col(bitmap, 2, z, width)); z++; } dirty_buf[d] = 1; } } } } memcpy(dirty, dirty_buf, dirty_size); } void MainWindow::update(UI_Base *ui, int image_width, int image_height, bool full_update) { byte_t *bitmap = ui->get_buffer(); byte_t *dirty = ui->get_dirty_buffer(); int dirty_size = ui->get_dirty_buffer_size(); int width = ui->get_real_width(); int height = ui->get_real_height(); switch (kcemu_ui_scale) { case 1: if (kcemu_ui_debug) update_1_debug(bitmap, dirty, dirty_size, width, height); else update_1(bitmap, dirty, dirty_size, width, height); break; case 2: if (kcemu_ui_display_effect) update_2_scanline(bitmap, dirty, dirty_size, width, height); else update_2(bitmap, dirty, dirty_size, width, height); break; case 3: if (kcemu_ui_display_effect) update_3_smooth(bitmap, dirty, dirty_size, width, height); else update_3(bitmap, dirty, dirty_size, width, height); break; } if (full_update || _expose) { _expose = false; gdk_draw_image(GTK_WIDGET(_w.drawingarea)->window, _gc, _image, 0, 0, 0, 0, image_width, image_height); return; } int d = -1; int s = 8 * kcemu_ui_scale; for (int y = 0;y < image_height;y += s) { for (int x = 0;x < image_width;x += s) { d++; if (!dirty[d]) continue; gdk_draw_image(GTK_WIDGET(_w.drawingarea)->window, _gc, _image, x, y, x, y, s, s); } } } void MainWindow::set_fps(unsigned long fps) { char buf[20]; snprintf(buf, sizeof(buf), " %ld fps ", fps); gtk_label_set(_w.status_label, buf); } void MainWindow::status_bar_toggle(void) { if (GTK_WIDGET_VISIBLE(_w.status_hbox)) gtk_widget_hide(GTK_WIDGET(_w.status_hbox)); else gtk_widget_show(GTK_WIDGET(_w.status_hbox)); } void MainWindow::menu_bar_toggle(void) { if (GTK_WIDGET_VISIBLE(_w.menubar)) gtk_widget_hide(GTK_WIDGET(_w.menubar)); else gtk_widget_show(GTK_WIDGET(_w.menubar)); } void MainWindow::setStatus(const char *msg) { long tv_sec, tv_usec; sys_gettimeofday(&tv_sec, &tv_usec); _w.status_sec = tv_sec; gtk_statusbar_pop(GTK_STATUSBAR(_w.status_statusbar), 1); gtk_statusbar_push(GTK_STATUSBAR(_w.status_statusbar), 1, msg); } GdkColor * MainWindow::get_colormap() { return _col; }KCemu-0.5.1/src/ui/gtk/debug.cc0000644001050700006200000003374411345001576015610 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/z80.h" #include "kc/memory.h" #include "ui/gtk/cmd.h" #include "ui/gtk/debug.h" using namespace std; extern "C" int disass(int, char **); /* FIXME */ class CMD_debug_window_toggle : public CMD { private: DebugWindow *_w; public: CMD_debug_window_toggle(DebugWindow *w) : CMD("ui-debug-window-toggle") { _w = w; register_cmd("ui-debug-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; class CMD_single_step_executed : public CMD { private: DebugWindow *_w; public: CMD_single_step_executed(DebugWindow *w) : CMD("single-step-executed") { _w = w; register_cmd("single-step-executed"); } void execute(CMD_Args *args, CMD_Context context) { _w->do_goto_int(z80->getPC()); } }; void DebugWindow::do_goto_int(int addr) { _op->go_to(this, addr); _op->update(this); (new debug_op_reg())->update(this); } void DebugWindow::do_goto_string(const char *str) { long val; char *endptr; if (str != NULL) { val = strtol(str, &endptr, 16); if ((*str != '\0') && (*endptr == '\0')) if ((val >= 0) && (val <= 0xffff)) { do_goto_int(val); return; } } gdk_beep(); gtk_entry_select_region(GTK_ENTRY(_w.op), 0, -1); } gint DebugWindow::key_press_func(GtkWidget *widget, GdkEventKey *event, gpointer data) { DebugWindow *self; int clear_op = 0; self = (DebugWindow *)data; if (event->state & GDK_CONTROL_MASK) { switch (event->keyval) { case 'd': delete self->_op; self->_op = new debug_op_asm(); self->_op->activate(self); break; case 'm': delete self->_op; self->_op = new debug_op_mem(); self->_op->activate(self); break; case 'r': delete self->_op; self->_op = new debug_op_reg(); self->_op->activate(self); break; case 'g': /* gtk_label_set_text(GTK_LABEL(self->_w.op), "go to: "); */ if (self->_op->can_go_to()) { // gtk_widget_show(self->_w.op); self->_minibuffer_active = true; gtk_widget_set_sensitive(self->_w.op, true); gtk_entry_select_region(GTK_ENTRY(self->_w.op), 0, -1); gtk_widget_grab_focus(self->_w.op); } break; case 'p': case 'b': case GDK_Up: case GDK_KP_Up: self->_op->update(self, SCROLL_PREV_PAGE); break; case 'f': case 'n': case GDK_Down: case GDK_KP_Down: self->_op->update(self, SCROLL_NEXT_PAGE); break; } } else { switch (event->keyval) { case GDK_Return: case GDK_KP_Enter: if (!GTK_WIDGET_VISIBLE(self->_w.op)) break; self->do_goto_string(gtk_entry_get_text(GTK_ENTRY(self->_w.op))); break; case GDK_Escape: clear_op = 1; break; case GDK_BackSpace: break; case GDK_Up: case GDK_KP_Up: self->_op->update(self, SCROLL_BACKWARD); break; case GDK_Down: case GDK_KP_Down: self->_op->update(self, SCROLL_FORWARD); break; case GDK_Page_Up: case GDK_KP_Page_Up: self->_op->update(self, SCROLL_PREV_PAGE); break; case GDK_Page_Down: case GDK_KP_Page_Down: self->_op->update(self, SCROLL_NEXT_PAGE); break; } } if (clear_op) { /* gtk_label_set_text(GTK_LABEL(self->_w.op), ""); */ // gtk_widget_hide(self->_w.op); gtk_widget_set_sensitive(self->_w.op, false); self->_op->update(self); } if (!self->_minibuffer_active) gtk_signal_emit_stop_by_name(GTK_OBJECT(widget), "key_press_event"); return FALSE; } DebugWindow::DebugWindow(void) { _pc = 0xe000; _mem = 0xe000; _minibuffer_active = false; _font_desc = pango_font_description_new(); pango_font_description_set_family(_font_desc, "Courier"); pango_font_description_set_style(_font_desc, PANGO_STYLE_NORMAL); pango_font_description_set_variant(_font_desc, PANGO_VARIANT_NORMAL); pango_font_description_set_weight(_font_desc, PANGO_WEIGHT_NORMAL); pango_font_description_set_stretch(_font_desc, PANGO_STRETCH_NORMAL); pango_font_description_set_size(_font_desc, 8 * PANGO_SCALE); _cmd1 = new CMD_debug_window_toggle(this); _cmd2 = new CMD_single_step_executed(this); } DebugWindow::~DebugWindow(void) { delete _cmd1; delete _cmd2; pango_font_description_free(_font_desc); } void DebugWindow::init(void) { int a; GdkCursor *cursor; /* * window */ _window = gtk_window_new(GTK_WINDOW_TOPLEVEL); gtk_widget_set_name(_window, "DebugWindow"); gtk_window_set_title(GTK_WINDOW(_window), _("KCemu: Debugger")); gtk_widget_set_uposition(_window, 650, 50); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(cmd_exec_sft), (char *)"ui-debug-window-toggle"); // FIXME: gtk_signal_connect(GTK_OBJECT(_window), "key_press_event", GTK_SIGNAL_FUNC(key_press_func), this); /* * vbox */ _w.vbox = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(_window), _w.vbox); gtk_widget_show(_w.vbox); /* * hbox */ _w.hbox = gtk_hbox_new(TRUE, 0); gtk_container_add(GTK_CONTAINER(_w.vbox), _w.hbox); gtk_widget_show(_w.hbox); /* * active/ op label */ _w.active = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(_w.active), 0, 0.5); gtk_box_pack_start(GTK_BOX(_w.hbox), _w.active, FALSE, TRUE, 0); gtk_widget_show(_w.active); /* * asm eventbox */ _w.evb_asm = gtk_event_box_new(); gtk_box_pack_start(GTK_BOX(_w.vbox), _w.evb_asm, FALSE, TRUE, 0); gtk_widget_show(_w.evb_asm); gtk_object_set_user_data(GTK_OBJECT(_w.evb_asm), this); gtk_widget_realize(_w.evb_asm); cursor = gdk_cursor_new(GDK_HAND1); gdk_window_set_cursor(_w.evb_asm->window, cursor); gdk_cursor_destroy(cursor); gtk_widget_show(_w.evb_asm); /* * asm frame/ vbox */ _w.frame_asm = gtk_frame_new(DEBUG_ASM_HEADLINE); gtk_container_add(GTK_CONTAINER(_w.evb_asm), _w.frame_asm); gtk_widget_show(_w.frame_asm); _w.vbox_asm = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(_w.frame_asm), _w.vbox_asm); gtk_widget_show(_w.vbox_asm); /* * mem eventbox */ _w.evb_mem = gtk_event_box_new(); gtk_box_pack_start(GTK_BOX(_w.vbox), _w.evb_mem, FALSE, TRUE, 0); gtk_widget_show(_w.evb_mem); gtk_object_set_user_data(GTK_OBJECT(_w.evb_mem), this); gtk_widget_realize(_w.evb_mem); cursor = gdk_cursor_new(GDK_CROSSHAIR); gdk_window_set_cursor(_w.evb_mem->window, cursor); gdk_cursor_destroy(cursor); gtk_widget_show(_w.evb_mem); /* * mem frame/ vbox */ _w.frame_mem = gtk_frame_new(DEBUG_MEM_HEADLINE); gtk_container_add(GTK_CONTAINER(_w.evb_mem), _w.frame_mem); gtk_widget_show(_w.frame_mem); _w.vbox_mem = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(_w.frame_mem), _w.vbox_mem); gtk_widget_show(_w.vbox_mem); /* * reg eventbox */ _w.evb_reg = gtk_event_box_new(); gtk_box_pack_start(GTK_BOX(_w.vbox), _w.evb_reg, FALSE, TRUE, 0); gtk_widget_show(_w.evb_reg); gtk_object_set_user_data(GTK_OBJECT(_w.evb_reg), this); gtk_widget_realize(_w.evb_reg); cursor = gdk_cursor_new(GDK_XTERM); gdk_window_set_cursor(_w.evb_reg->window, cursor); gdk_cursor_destroy(cursor); gtk_widget_show(_w.evb_reg); /* * reg frame/ vbox */ _w.frame_reg = gtk_frame_new(DEBUG_REG_HEADLINE); gtk_container_add(GTK_CONTAINER(_w.evb_reg), _w.frame_reg); gtk_widget_show(_w.frame_reg); _w.vbox_reg = gtk_vbox_new(FALSE, 0); gtk_container_add(GTK_CONTAINER(_w.frame_reg), _w.vbox_reg); gtk_widget_show(_w.vbox_reg); _w.trace = gtk_toggle_button_new_with_label(_("Trace")); gtk_box_pack_start(GTK_BOX(_w.vbox), _w.trace, FALSE, TRUE, 0); gtk_signal_connect(GTK_OBJECT(_w.trace), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (char *)"z80-trace-toggle"); // FIXME: gtk_widget_show(_w.trace); _w.single_step = gtk_toggle_button_new_with_label(_("Single Step")); gtk_box_pack_start(GTK_BOX(_w.vbox), _w.single_step, FALSE, TRUE, 0); gtk_signal_connect(GTK_OBJECT(_w.single_step), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (char *)"z80-single-step-toggle"); // FIXME: gtk_widget_show(_w.single_step); _w.execute_step = gtk_button_new_with_label(_("Execute Step")); gtk_box_pack_start(GTK_BOX(_w.vbox), _w.execute_step, FALSE, TRUE, 0); gtk_signal_connect(GTK_OBJECT(_w.execute_step), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (char *)"z80-execute-step"); // FIXME: gtk_widget_show(_w.execute_step); /* _w.op = gtk_label_new(""); gtk_misc_set_alignment(GTK_MISC(_w.op), 0, 0.5); */ _w.op = gtk_entry_new(); gtk_widget_set_sensitive(_w.op, false); gtk_box_pack_start(GTK_BOX(_w.vbox), _w.op, FALSE, TRUE, 0); gtk_widget_show(_w.op); /* *--------------------------------------------------------------------------- */ /* * labels */ for (a = 0;a < DEBUG_NR_OF_ASM_LABELS;a++) { _w.l_asm[a] = gtk_label_new(""); gtk_widget_modify_font(_w.l_asm[a], _font_desc); gtk_misc_set_alignment(GTK_MISC(_w.l_asm[a]), 0, 0.5); gtk_box_pack_start(GTK_BOX(_w.vbox_asm), _w.l_asm[a], FALSE, TRUE, 0); gtk_widget_show(_w.l_asm[a]); } for (a = 0;a < DEBUG_NR_OF_MEM_LABELS;a++) { _w.l_mem[a] = gtk_label_new(""); gtk_widget_modify_font(_w.l_mem[a], _font_desc); gtk_misc_set_alignment(GTK_MISC(_w.l_mem[a]), 0, 0.5); gtk_box_pack_start(GTK_BOX(_w.vbox_mem), _w.l_mem[a], FALSE, TRUE, 0); gtk_widget_show(_w.l_mem[a]); } for (a = 0;a < DEBUG_NR_OF_REG_LABELS;a++) { _w.l_reg[a] = gtk_label_new(""); gtk_widget_modify_font(_w.l_reg[a], _font_desc); gtk_misc_set_alignment(GTK_MISC(_w.l_reg[a]), 0, 0.5); gtk_box_pack_start(GTK_BOX(_w.vbox_reg), _w.l_reg[a], FALSE, TRUE, 0); gtk_widget_show(_w.l_reg[a]); } /* * initial display */ _op = new debug_op_reg(); _op->update(this); delete _op; _op = new debug_op_mem(); _op->update(this); delete _op; _op = new debug_op_asm(); _op->update(this); _op->activate(this); } void debug_op_t::activate(DebugWindow *w) { char buf[256]; sprintf(buf, "Active Window: %s", get_name()); gtk_label_set_text(GTK_LABEL(w->_w.active), buf); } void debug_op_asm::go_to(DebugWindow *w, int addr) { w->_pc = addr; } void debug_op_asm::update(DebugWindow *w, scroll_dir_t direction) { int a; int done; char *ptr; int pc, newpc; if (direction == SCROLL_NEXT_PAGE) { direction = SCROLL_NONE; w->_pc = w->_pc_np; } newpc = w->_pc - 20; a = 0; done = 0; do { pc = newpc; newpc = 0; // FIXME: call disassembler here free(ptr); switch (direction) { case SCROLL_NONE: done = 1; break; case SCROLL_FORWARD: if ((pc <= w->_pc) && (newpc > w->_pc)) { w->_pc = newpc; done = 1; } break; case SCROLL_BACKWARD: if ((pc < w->_pc) && (newpc >= w->_pc)) { w->_pc = pc; done = 1; } break; default: break; } if (++a > 22) { cerr << "ARGH! (" __FILE__ ":" << __LINE__ << ")" << endl; return; } } while (!done); pc = w->_pc; for (a = 0;a < DEBUG_NR_OF_ASM_LABELS;a++) { if (a == (DEBUG_NR_OF_ASM_LABELS - 2)) w->_pc_np = pc; pc = 0; // FIXME: call disassembler here gtk_label_set_text(GTK_LABEL(w->_w.l_asm[a]), ptr); free(ptr); } gtk_widget_queue_draw(w->_w.vbox_asm); } void debug_op_mem::go_to(DebugWindow *w, int addr) { w->_mem = addr; } void debug_op_mem::update(DebugWindow *w, scroll_dir_t direction) { int c; int a, b, mem; char mem_str[100]; switch (direction) { case SCROLL_NONE: break; case SCROLL_FORWARD: w->_mem += 16; break; case SCROLL_BACKWARD: w->_mem -= 16; break; case SCROLL_NEXT_PAGE: w->_mem += 16 * DEBUG_NR_OF_MEM_LABELS; break; case SCROLL_PREV_PAGE: w->_mem -= 16 * DEBUG_NR_OF_MEM_LABELS; break; } mem = w->_mem; for (a = 0;a < DEBUG_NR_OF_MEM_LABELS;a++) { sprintf(mem_str, "%04xh:", mem); for (b = 0;b < 16;b++) { sprintf(strchr(mem_str, 0), " %02x", memory->memRead8(mem + b)); if (b == 7) sprintf(strchr(mem_str, 0), " -"); } sprintf(strchr(mem_str, 0), " | "); for (b = 0;b < 16;b++) { c = memory->memRead8(mem + b); sprintf(strchr(mem_str, 0), "%c", ((c >= 0x20) && (c < 0x80)) ? c : '.'); if (b == 7) sprintf(strchr(mem_str, 0), "-"); } mem += 16; gtk_label_set_text(GTK_LABEL(w->_w.l_mem[a]), mem_str); } } void debug_op_reg::update(DebugWindow *w, scroll_dir_t direction) { int a; char buf[256]; a = 0; sprintf(buf, "PC = %04xh SP = %04xh", z80->getPC(), z80->getSP()); gtk_label_set_text(GTK_LABEL(w->_w.l_reg[a++]), buf); sprintf(buf, "AF = %04xh BC = %04xh DE = %04xh HL = %04xh", z80->getAF(), z80->getBC(), z80->getDE(), z80->getHL()); gtk_label_set_text(GTK_LABEL(w->_w.l_reg[a++]), buf); sprintf(buf, "AF' = %04xh BC' = %04xh DE' = %04xh HL' = %04xh", z80->getAFs(), z80->getBCs(), z80->getDEs(), z80->getHLs()); gtk_label_set_text(GTK_LABEL(w->_w.l_reg[a++]), buf); sprintf(buf, "IX = %04xh IY = %04xh IFF = %02xh I = %02xh", z80->getIX(), z80->getIY(), z80->getIFF(), z80->getI()); gtk_label_set_text(GTK_LABEL(w->_w.l_reg[a++]), buf); gtk_widget_queue_draw(w->_w.vbox_reg); } KCemu-0.5.1/src/ui/gtk/selector.cc0000644001050700006200000002701111345001576016330 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "ui/gtk/cmd.h" #include "ui/gtk/selector.h" class CMD_profile_selector_window_toggle : public CMD { private: ProfileSelectorWindow *_w; public: CMD_profile_selector_window_toggle(ProfileSelectorWindow *w) : CMD("ui-profile-selector-window-toggle") { _w = w; register_cmd("ui-profile-selector-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; ProfileSelectorWindow::ProfileSelectorWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { _w.liststore_iconview = NULL; _w.treestore_treeview = NULL; _cmd = new CMD_profile_selector_window_toggle(this); } ProfileSelectorWindow::~ProfileSelectorWindow(void) { if (_w.liststore_iconview != NULL) gtk_list_store_clear(_w.liststore_iconview); if (_w.treestore_treeview != NULL) gtk_tree_store_clear(_w.treestore_treeview); delete _cmd; } void ProfileSelectorWindow::on_dialog_ok(GtkWidget *widget, gpointer user_data) { ProfileSelectorWindow *self = (ProfileSelectorWindow *)user_data; self->close(); } void ProfileSelectorWindow::on_dialog_quit(GtkWidget *widget, gpointer user_data) { exit(0); } void ProfileSelectorWindow::on_dialog_cancel(GtkWidget *widget, gpointer user_data) { ProfileSelectorWindow *self = (ProfileSelectorWindow *)user_data; self->cancel(); } gboolean ProfileSelectorWindow::on_window_delete_event(GtkWidget *widget, GdkEvent *event, gpointer user_data) { ProfileSelectorWindow *self = (ProfileSelectorWindow *)user_data; self->cancel(); return TRUE; /* DO NOT propagate event */ } void ProfileSelectorWindow::on_iconview_selection_changed(GtkIconView *iconview, gpointer user_data) { ProfileSelectorWindow *self = (ProfileSelectorWindow *)user_data; GList *list = gtk_icon_view_get_selected_items(iconview); if (g_list_length(list) == 0) { self->select(NULL); return; } gtk_tree_selection_unselect_all(gtk_tree_view_get_selection(self->_w.treeview)); GtkTreePath *path = (GtkTreePath *)list->data; self->select(GTK_TREE_MODEL(self->_w.liststore_iconview), path, ICONVIEW_DATA_COLUMN); g_list_foreach(list, (GFunc)gtk_tree_path_free, NULL); g_list_free(list); } void ProfileSelectorWindow::on_iconview_item_activated(GtkIconView *iconview, GtkTreePath *path, gpointer user_data) { ProfileSelectorWindow *self = (ProfileSelectorWindow *)user_data; self->select(GTK_TREE_MODEL(self->_w.liststore_iconview), path, ICONVIEW_DATA_COLUMN); self->close(); } void ProfileSelectorWindow::on_tree_selection_changed(GtkTreeSelection *selection, gpointer user_data) { ProfileSelectorWindow *self = (ProfileSelectorWindow *)user_data; GtkTreeIter iter; GtkTreeModel *model; if (!gtk_tree_selection_get_selected(selection, &model, &iter)) return; gtk_icon_view_unselect_all(self->_w.iconview); gchar *profile; gtk_tree_model_get(model, &iter, TREEVIEW_DATA_COLUMN, &profile, -1); self->select(profile); g_free(profile); } void ProfileSelectorWindow::on_tree_row_activated(GtkTreeView *treeview, GtkTreePath *path, GtkTreeViewColumn *column, gpointer user_data) { ProfileSelectorWindow *self = (ProfileSelectorWindow *)user_data; self->select(GTK_TREE_MODEL(self->_w.treestore_treeview), path, TREEVIEW_DATA_COLUMN); self->close(); } void ProfileSelectorWindow::on_edit_button_clicked(GtkButton *button, gpointer user_data) { CMD_EXEC("ui-options-window-toggle"); } char * ProfileSelectorWindow::get_selected_profile(void) { if (_selected_profile.length() == 0) return NULL; return strdup(_selected_profile.c_str()); } void ProfileSelectorWindow::select(const char *profile) { if (profile == NULL) { _selected_profile = ""; } else { _selected_profile = profile; } gtk_widget_set_sensitive(GTK_WIDGET(_w.button_ok), profile != NULL); } void ProfileSelectorWindow::select(GtkTreeModel *model, GtkTreePath *path, int column) { GtkTreeIter iter; GValue value = { 0, }; gtk_tree_model_get_iter(model, &iter, path); gtk_tree_model_get_value(model, &iter, column, &value); const gchar *profile = g_value_get_string(&value); select(profile); } void ProfileSelectorWindow::iconview_model_add(GtkListStore *store, GdkPixbuf *pixbuf, const char *text, const char *tooltip, const char *profile) { GtkTreeIter iter; gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, ICONVIEW_PIXBUF_COLUMN, pixbuf, ICONVIEW_TEXT_COLUMN, text, ICONVIEW_TOOLTIP_COLUMN, tooltip, ICONVIEW_DATA_COLUMN, profile, -1); } GtkListStore * ProfileSelectorWindow::get_iconview_model(void) { GtkListStore *store = gtk_list_store_new(ICONVIEW_N_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING); emulation_type_list_t list = EmulationType::get_emulation_types(); for (emulation_type_list_t::iterator it = list.begin();it != list.end();it++) { GdkPixbuf *pixbuf = get_icon((*it)->get_image_name()); iconview_model_add(store, pixbuf, (*it)->get_short_name(), (*it)->get_name(), (*it)->get_config_name()); g_object_unref(pixbuf); } return store; } void ProfileSelectorWindow::treeview_model_add(GtkTreeStore *store, GdkPixbuf *pixbuf, const char *text, const char *comment, const char *profile, GtkTreeIter *iter, GtkTreeIter *parent) { gtk_tree_store_append(store, iter, parent); gtk_tree_store_set(store, iter, TREEVIEW_PIXBUF_COLUMN, pixbuf, TREEVIEW_TEXT_COLUMN, text, TREEVIEW_COMMENT_COLUMN, comment, TREEVIEW_DATA_COLUMN, profile, TREEVIEW_ALIGN_COLUMN, 0.0, TREEVIEW_WEIGHT_COLUMN, parent == NULL ? PANGO_WEIGHT_BOLD : PANGO_WEIGHT_NORMAL, TREEVIEW_WEIGHT_SET_COLUMN, TRUE, -1); } GtkTreeStore * ProfileSelectorWindow::get_treeview_model(void) { GtkTreeStore *store = gtk_tree_store_new(TREEVIEW_N_COLUMNS, GDK_TYPE_PIXBUF, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_STRING, G_TYPE_DOUBLE, G_TYPE_INT, G_TYPE_BOOLEAN); int nr_of_user_profiles = 0; GdkPixbuf *pixbuf_default = NULL; emulation_type_list_t types = EmulationType::get_emulation_types(); for (emulation_type_list_t::const_iterator it = types.begin();it != types.end();it++) { list profiles = Preferences::instance()->find_child_profiles((*it)->get_config_name()); if (profiles.size() == 0) continue; if (pixbuf_default == NULL) { pixbuf_default = get_icon("icon-default.png"); } GtkTreeIter parent; GdkPixbuf *pixbuf = get_icon((*it)->get_icon_name()); treeview_model_add(store, pixbuf, (*it)->get_name(), "", (*it)->get_config_name(), &parent, NULL); g_object_unref(pixbuf); for (list::const_iterator it2 = profiles.begin();it2 != profiles.end();it2++) { GtkTreeIter iter; treeview_model_add(store, pixbuf_default, (*it2)->get_name(), (*it2)->get_comment(), (*it2)->get_config_name(), &iter, &parent); nr_of_user_profiles++; } } _nr_of_user_profiles = nr_of_user_profiles; return store; } void ProfileSelectorWindow::show(void) { UI_Gtk_Window::show(); gtk_main(); } void ProfileSelectorWindow::close(void) { hide(); gtk_main_quit(); } void ProfileSelectorWindow::cancel(void) { select(NULL); close(); } void ProfileSelectorWindow::init(void) { _window = get_widget("profile_selector_window"); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(on_window_delete_event), this); _w.iconview = GTK_ICON_VIEW(get_widget("iconview_system_profiles")); _w.liststore_iconview = get_iconview_model(); gtk_icon_view_set_pixbuf_column(GTK_ICON_VIEW(_w.iconview), ICONVIEW_PIXBUF_COLUMN); gtk_icon_view_set_text_column(GTK_ICON_VIEW(_w.iconview), ICONVIEW_TEXT_COLUMN); gtk_icon_view_set_tooltip_column(GTK_ICON_VIEW(_w.iconview), ICONVIEW_TOOLTIP_COLUMN); gtk_icon_view_set_model(GTK_ICON_VIEW(_w.iconview), GTK_TREE_MODEL(_w.liststore_iconview)); g_signal_connect(_w.iconview, "selection-changed", G_CALLBACK(on_iconview_selection_changed), this); g_signal_connect(_w.iconview, "item-activated", G_CALLBACK(on_iconview_item_activated), this); _w.treeview = GTK_TREE_VIEW(get_widget("treeview_user_profiles")); _w.treestore_treeview = get_treeview_model(); gtk_tree_view_set_model(GTK_TREE_VIEW(_w.treeview), GTK_TREE_MODEL(_w.treestore_treeview)); GtkTreeViewColumn *column1 = gtk_tree_view_column_new(); add_icon_renderer(GTK_TREE_VIEW(_w.treeview), column1, "", "pixbuf", TREEVIEW_PIXBUF_COLUMN, "yalign", TREEVIEW_ALIGN_COLUMN, NULL); add_text_renderer(GTK_TREE_VIEW(_w.treeview), column1, "Profile", "text", TREEVIEW_TEXT_COLUMN, "yalign", TREEVIEW_ALIGN_COLUMN, "weight", TREEVIEW_WEIGHT_COLUMN, NULL); gtk_tree_view_append_column(_w.treeview, column1); GtkTreeViewColumn *column2 = gtk_tree_view_column_new(); add_text_renderer(GTK_TREE_VIEW(_w.treeview), column2, "Comment", "text", TREEVIEW_COMMENT_COLUMN, "yalign", TREEVIEW_ALIGN_COLUMN, NULL); gtk_tree_view_append_column(_w.treeview, column2); gtk_tree_view_expand_all(_w.treeview); gtk_tree_view_columns_autosize(GTK_TREE_VIEW(_w.treeview)); g_signal_connect(_w.treeview, "row-activated", G_CALLBACK(on_tree_row_activated), this); /* Setup the selection handler */ GtkTreeSelection *select = gtk_tree_view_get_selection(_w.treeview); gtk_tree_selection_set_mode(select, GTK_SELECTION_SINGLE); g_signal_connect(select, "changed", G_CALLBACK(on_tree_selection_changed), this); GtkWidget *cancel_button = get_widget("dialog_button_cancel"); g_signal_connect(cancel_button, "clicked", G_CALLBACK(on_dialog_cancel), this); _w.button_ok = GTK_BUTTON(get_widget("dialog_button_close")); g_signal_connect(_w.button_ok, "clicked", G_CALLBACK(on_dialog_ok), this); _w.button_quit = GTK_BUTTON(get_widget("dialog_button_quit")); g_signal_connect(_w.button_quit, "clicked", G_CALLBACK(on_dialog_quit), this); _w.expander_system_profiles = GTK_EXPANDER(get_widget("expander_system_profiles")); _w.expander_user_profiles = GTK_EXPANDER(get_widget("expander_user_profiles")); gtk_expander_set_expanded(_w.expander_user_profiles, _nr_of_user_profiles != 0); this->select(NULL); init_dialog(NULL, NULL); } KCemu-0.5.1/src/ui/gtk/ui_gtk3.cc0000644001050700006200000000514511345001577016062 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "ui/generic/ui_3.h" #include "ui/gtk/ui_gtk3.h" #include "libdbg/dbg.h" UI_Gtk3::UI_Gtk3(void) : UI_Gtk_Base(new UI_3()) { _colors.push_back(UI_Color(false, 0x00, 0x00, 0x00)); /* black */ _colors.push_back(UI_Color(false, 240)); /* blue */ _colors.push_back(UI_Color(false, 0)); /* red */ _colors.push_back(UI_Color(false, 300)); /* magenta */ _colors.push_back(UI_Color(false, 120)); /* green */ _colors.push_back(UI_Color(false, 180)); /* cyan */ _colors.push_back(UI_Color(false, 60)); /* yellow */ _colors.push_back(UI_Color(false, 0xe0, 0xe0, 0xe0)); /* white */ _colors.push_back(UI_Color(false, 0x00, 0x00, 0x00)); /* black */ _colors.push_back(UI_Color(false, 260)); /* blue + 30° */ _colors.push_back(UI_Color(false, 20)); /* red + 30° */ _colors.push_back(UI_Color(false, 320)); /* magenta + 30° */ _colors.push_back(UI_Color(false, 140)); /* green + 30° */ _colors.push_back(UI_Color(false, 210)); /* cyan + 30° */ _colors.push_back(UI_Color(false, 90)); /* yellow + 30° */ _colors.push_back(UI_Color(false, 0xe0, 0xe0, 0xe0)); /* white */ _colors.push_back(UI_Color(true, 0x00, 0x00, 0x00)); /* black */ _colors.push_back(UI_Color(true, 240)); /* blue */ _colors.push_back(UI_Color(true, 0)); /* red */ _colors.push_back(UI_Color(true, 300)); /* magenta */ _colors.push_back(UI_Color(true, 120)); /* green */ _colors.push_back(UI_Color(true, 180)); /* cyan */ _colors.push_back(UI_Color(true, 60)); /* yellow */ _colors.push_back(UI_Color(true, 0xe0, 0xe0, 0xe0)); /* white */ } UI_Gtk3::~UI_Gtk3(void) { } Scanline * UI_Gtk3::get_scanline(void) { return &_scanline; } MemAccess * UI_Gtk3::get_mem_access(void) { return &_memaccess; } KCemu-0.5.1/src/ui/gtk/ui_gtk_kramermc.cc0000644001050700006200000000224511345001576017655 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "ui/generic/ui_kramermc.h" #include "ui/gtk/ui_gtk_kramermc.h" UI_Gtk_KramerMC::UI_Gtk_KramerMC(void) : UI_Gtk_Base(new UI_KramerMC()) { _colors.push_back(UI_Color(true, 0x00, 0x00, 0x00)); _colors.push_back(UI_Color(false, 0xd0, 0xd0, 0xd0)); } UI_Gtk_KramerMC::~UI_Gtk_KramerMC(void) { } KCemu-0.5.1/src/ui/gtk/ffmpeg.cc0000644001050700006200000001255211345001577015761 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/config.h" #ifdef HAVE_LIBAVFORMAT #include "kc/system.h" #include "ui/gtk/ffmpeg.h" FfmpegVideoEncoder::FfmpegVideoEncoder(void) { _context = NULL; _stream = NULL; _frame = NULL; _buf = NULL; } FfmpegVideoEncoder::~FfmpegVideoEncoder(void) { close(); } bool FfmpegVideoEncoder::init(const char *filename, int width, int height, int fps_den, double quality) { if (filename == NULL) return false; _width = width; _height = height; av_register_all(); AVOutputFormat *fmt = guess_format("avi", NULL, "video/x-msvideo"); if (fmt == NULL) return false; _context = avformat_alloc_context(); if (_context == NULL) return false; _context->oformat = fmt; snprintf(_context->filename, sizeof (_context->filename), "%s", filename); _stream = av_new_stream(_context, 0); if (_stream == NULL) { close(); return false; } _stream->codec->codec_id = fmt->video_codec; _stream->codec->codec_type = CODEC_TYPE_VIDEO; _stream->codec->codec_tag = MKTAG('D', 'X', '5', '0'); _stream->codec->bit_rate = 79000 + 1000 * pow(1.4, quality * 20.0); _stream->codec->width = width; _stream->codec->height = height; _stream->codec->time_base.den = 50; _stream->codec->time_base.num = fps_den; _stream->codec->gop_size = 100 / fps_den; _stream->codec->pix_fmt = PIX_FMT_YUV420P; // some formats want stream headers to be separate if (_context->oformat->flags & AVFMT_GLOBALHEADER) _stream->codec->flags |= CODEC_FLAG_GLOBAL_HEADER; if (av_set_parameters(_context, NULL) < 0) { close(); return false; } AVCodec *codec = avcodec_find_encoder(_stream->codec->codec_id); if (avcodec_open(_stream->codec, codec) < 0) { close(); return false; } _bufsize = 10 * width * height; _buf = (byte_t *)av_malloc(_bufsize); if (_buf == NULL) { close(); return false; } _frame = avcodec_alloc_frame(); if (_frame == NULL) { close(); return false; } int size = avpicture_get_size(_stream->codec->pix_fmt, width, height); byte_t *buf = (byte_t *) av_malloc(size); if (buf == NULL) { close(); return false; } avpicture_fill((AVPicture *) _frame, buf, _stream->codec->pix_fmt, width, height); if (url_fopen(&_context->pb, filename, URL_WRONLY) < 0) { close(); return false; } //dump_format(_context, 0, filename, 1); av_write_header(_context); return true; } void FfmpegVideoEncoder::allocate_color_rgb(int idx, int r, int g, int b) { _col[idx].y = (0.257 * r) + (0.504 * g) + (0.098 * b) + 16; _col[idx].u = -(0.148 * r) - (0.291 * g) + (0.439 * b) + 128; _col[idx].v = (0.439 * r) - (0.368 * g) - (0.071 * b) + 128; } bool FfmpegVideoEncoder::encode(byte_t *image, byte_t *dirty) { for (int y = 0;y < _height;y++) { int z = y * _frame->linesize[0]; for (int x = 0;x < _width;x++) { _frame->data[0][z + x] = _col[image[z + x]].y; } } for (int y = 0;y < _height / 2;y++) { int z = 2 * y * _width; for (int x = 0;x < _width;x += 2) { int u = _col[image[z + x]].u + _col[image[z + x + 1]].u + _col[image[z + x + _width]].u + _col[image[z + x + _width + 1]].u; int v = _col[image[z + x]].v + _col[image[z + x + 1]].v + _col[image[z + x + _width]].v + _col[image[z + x + _width + 1]].v; _frame->data[1][y * _frame->linesize[1] + x / 2] = u / 4; _frame->data[2][y * _frame->linesize[2] + x / 2] = v / 4; } } int out_size = avcodec_encode_video(_stream->codec, _buf, _bufsize, _frame); if (out_size == 0) return true; AVPacket pkt; av_init_packet(&pkt); if (_stream->codec->coded_frame->pts != AV_NOPTS_VALUE) pkt.pts = av_rescale_q(_stream->codec->coded_frame->pts, _stream->codec->time_base, _stream->time_base); if (_stream->codec->coded_frame->key_frame) pkt.flags |= PKT_FLAG_KEY; pkt.stream_index = _stream->index; pkt.data = _buf; pkt.size = out_size; return av_interleaved_write_frame(_context, &pkt) == 0; } void FfmpegVideoEncoder::close(void) { if (_context == NULL) return; av_write_trailer(_context); avcodec_close(_stream->codec); av_free(_frame->data[0]); av_free(_frame); av_free(_buf); for (unsigned int i = 0;i < _context->nb_streams;i++) { av_freep(&_context->streams[i]->codec); av_freep(&_context->streams[i]); } url_fclose(_context->pb); av_free(_context); _context = NULL; _stream = NULL; _frame = NULL; _buf = NULL; } #endif /* HAVE_LIBAVFORMAT */KCemu-0.5.1/src/ui/gtk/ui_gtk_base.cc0000644001050700006200000000246111345001576016766 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "ui/gtk/ui_gtk_base.h" UI_Gtk_Base::UI_Gtk_Base(UI_Base *generic_ui) { _generic_ui = generic_ui; } UI_Gtk_Base::~UI_Gtk_Base(void) { } UI_Base * UI_Gtk_Base::get_generic_ui(void) const { return _generic_ui; } const list & UI_Gtk_Base::get_colors(void) const { return _colors; } Scanline * UI_Gtk_Base::get_scanline(void) { return NULL; } MemAccess * UI_Gtk_Base::get_mem_access(void) { return NULL; } KCemu-0.5.1/src/ui/gtk/copying.cc0000644001050700006200000000730511345001576016164 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/kc.h" #include "ui/gtk/cmd.h" #include "ui/gtk/copying.h" using namespace std; class CMD_copying_window_toggle : public CMD { private: CopyingWindow *_w; public: CMD_copying_window_toggle(CopyingWindow *w) : CMD("ui-copying-window-toggle") { _w = w; register_cmd("ui-copying-window-toggle", 0); register_cmd("ui-warranty-window-toggle", 1); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); if (context == 0) _w->scroll_to_copying(); else _w->scroll_to_warranty(); } }; CopyingWindow::CopyingWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { _font_desc = pango_font_description_new(); pango_font_description_set_family(_font_desc, "Courier"); pango_font_description_set_style(_font_desc, PANGO_STYLE_NORMAL); pango_font_description_set_variant(_font_desc, PANGO_VARIANT_NORMAL); pango_font_description_set_weight(_font_desc, PANGO_WEIGHT_NORMAL); pango_font_description_set_stretch(_font_desc, PANGO_STRETCH_NORMAL); pango_font_description_set_size(_font_desc, 10 * PANGO_SCALE); _cmd = new CMD_copying_window_toggle(this); } CopyingWindow::~CopyingWindow(void) { delete _cmd; pango_font_description_free(_font_desc); } void CopyingWindow::init(void) { /* * copying window */ _window = get_widget("copying_window"); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(cmd_exec_sft), (char *)"ui-copying-window-toggle"); // FIXME: /* * scrolled window */ _w.scrolled_window = get_widget("main_scrolledwindow"); /* * label copying */ _w.label_license = get_widget("main_label_license"); gtk_label_set_text(GTK_LABEL(_w.label_license), kc_get_license()); gtk_widget_modify_font(_w.label_license, _font_desc); /* * label warranty */ string warranty_text = kc_get_warranty(); string text = warranty_text + kc_get_license_trailer(); _w.label_warranty = get_widget("main_label_warranty"); gtk_label_set_text(GTK_LABEL(_w.label_warranty), text.c_str()); gtk_widget_modify_font(_w.label_warranty, _font_desc); init_dialog("ui-copying-window-toggle", NULL); /* * force allocation calculation for this window; so we get * the values for the label width */ gtk_widget_realize(_window); } void CopyingWindow::scroll_to_copying(void) { GtkAdjustment* adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(_w.scrolled_window)); if (adj == NULL) return; adj->value = 0.0; gtk_signal_emit_by_name(GTK_OBJECT(adj), "value_changed"); } void CopyingWindow::scroll_to_warranty(void) { GtkAdjustment* adj = gtk_scrolled_window_get_vadjustment(GTK_SCROLLED_WINDOW(_w.scrolled_window)); if (adj == NULL) return; adj->value = _w.label_license->requisition.height; gtk_signal_emit_by_name(GTK_OBJECT(adj), "value_changed"); } KCemu-0.5.1/src/ui/gtk/image.cc0000644001050700006200000001553111345001576015576 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "ui/error.h" #include "ui/gtk/image.h" CMD_ui_image_props::CMD_ui_image_props(void) : CMD("ui-image-get-properties") { register_cmd("ui-image-get-properties", 0); } CMD_ui_image_props::~CMD_ui_image_props(void) { } void CMD_ui_image_props::ok(GtkWidget * /* widget */, gpointer data) { CMD_ui_image_props *self = (CMD_ui_image_props *)data; if (!self->check_values(self->_args)) return; gtk_widget_destroy(self->_w.dialog); self->_args->call_callbacks("ui-image-get-properties-CB-ok"); } void CMD_ui_image_props::cancel(GtkWidget * /* widget */, gpointer data) { CMD_ui_image_props *self = (CMD_ui_image_props *)data; gtk_widget_destroy(self->_w.dialog); self->_args->call_callbacks("ui-image-get-properties-CB-cancel"); } int CMD_ui_image_props::delete_event(GtkWidget *widget, GdkEvent *event, gpointer data) { cancel(widget, data); return true; } void CMD_ui_image_props::toggle_autostart(GtkWidget *w, gpointer data) { CMD_ui_image_props *self = (CMD_ui_image_props *)data; self->_autostart = GTK_TOGGLE_BUTTON(w)->active; gtk_widget_set_sensitive(self->_w.start_addr, self->_autostart); } bool CMD_ui_image_props::check_values(CMD_Args *args) { const char *load, *start; char *l_endptr, *s_endptr; unsigned long load_address, start_address; if (!args) return false; load = gtk_entry_get_text(GTK_ENTRY(_w.load_addr)); start = gtk_entry_get_text(GTK_ENTRY(_w.start_addr)); load_address = strtoul(load, &l_endptr, 0); start_address = strtoul(start, &s_endptr, 0); if (!((*load != '\0') && (*l_endptr == '\0'))) { Error::instance()->info(_("error in given load address!\n\n" "valid addresses have to be in the " "range from 0 to 65535\n" "hexadecimal values need to be " "prefixed with 0x (e.g. 0x1234),\n" "octal values require a leading 0 " "(e.g. 0444)")); return false; } _args->set_long_arg("load-address", load_address); if (!_autostart) return true; if (!((*start != '\0') && (*s_endptr == '\0'))) { Error::instance()->info(_("error in given start address!")); return false; } _args->set_long_arg("start-address", start_address); return true; } void CMD_ui_image_props::execute(CMD_Args *args, CMD_Context context) { GtkWidget *button, *label, *table; _args = args; /* * dialog */ _w.dialog = gtk_dialog_new(); gtk_signal_connect(GTK_OBJECT (_w.dialog), "delete_event", GTK_SIGNAL_FUNC(delete_event), this); gtk_window_set_title(GTK_WINDOW(_w.dialog), _("Input Image Properties")); gtk_window_position(GTK_WINDOW(_w.dialog), GTK_WIN_POS_MOUSE); gtk_container_set_border_width(GTK_CONTAINER(_w.dialog), 0); /* * label */ label = gtk_label_new(_("It was not possible to automatically determine the\n" "type of the selected file. Thus I don't know at which\n" "address the file should be loaded\n\n" "To load the file nevertheless you need to type in the\n" "needed values yourself.")); gtk_misc_set_padding(GTK_MISC(label), 10, 10); gtk_misc_set_alignment(GTK_MISC(label), 0, 0); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(_w.dialog)->vbox), label, TRUE, TRUE, 0); gtk_widget_show(label); /* * table */ table = gtk_table_new(3, 2, FALSE); gtk_table_set_row_spacings(GTK_TABLE(table), 2); gtk_table_set_col_spacings(GTK_TABLE(table), 4); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(_w.dialog)->vbox), table, FALSE, TRUE, 0); gtk_widget_show(table); /* * load addr */ label = gtk_label_new(_("Load address:")); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 0, 1); gtk_widget_show(label); _w.load_addr = gtk_entry_new(); gtk_table_attach_defaults(GTK_TABLE(table), _w.load_addr, 1, 2, 0, 1); gtk_widget_show(_w.load_addr); /* * start addr */ label = gtk_label_new(_("Start address:")); gtk_misc_set_alignment(GTK_MISC(label), 1.0, 0.5); gtk_table_attach_defaults(GTK_TABLE(table), label, 0, 1, 1, 2); gtk_widget_show(label); _w.start_addr = gtk_entry_new(); gtk_table_attach_defaults(GTK_TABLE(table), _w.start_addr, 1, 2, 1, 2); gtk_widget_show(_w.start_addr); /* * autostart */ _autostart = false; if (args && args->get_long_arg("auto-start")) _autostart = true; button = gtk_check_button_new_with_label(_("Start Program after Loading")); gtk_table_attach_defaults(GTK_TABLE(table), button, 1, 2, 2, 3); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(button), _autostart); gtk_widget_set_sensitive(_w.start_addr, _autostart); gtk_signal_connect(GTK_OBJECT(button), "toggled", GTK_SIGNAL_FUNC(toggle_autostart), this); gtk_widget_show(button); /* * ok button */ button = gtk_button_new_with_label(_("OK")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(_w.dialog)->action_area), button, TRUE, TRUE, 0); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(ok), this); gtk_widget_grab_default(button); gtk_widget_show(button); /* * cancel button */ button = gtk_button_new_with_label(_("Cancel")); GTK_WIDGET_SET_FLAGS(button, GTK_CAN_DEFAULT); gtk_box_pack_start(GTK_BOX(GTK_DIALOG(_w.dialog)->action_area), button, TRUE, TRUE, 0); gtk_signal_connect(GTK_OBJECT(button), "clicked", GTK_SIGNAL_FUNC(cancel), this); gtk_widget_show(button); /* * show dialog now */ gtk_widget_show(_w.dialog); } KCemu-0.5.1/src/ui/gtk/ui_gtk.cc0000644001050700006200000006732111345001577016003 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include /* FIXME: only for testing */ #include #include #include #include #include "kc/system.h" #include "kc/prefs/types.h" #include "kc/prefs/prefs.h" #include "kc/z80.h" #include "kc/keys.h" #include "kc/memory.h" // text_update() #include "kc/keyboard.h" #include "sys/sysdep.h" #include "cmd/cmd.h" #include "ui/error.h" #include "ui/gtk/cmd.h" #include "ui/gtk/debug.h" #include "ui/gtk/ui_gtk.h" #include "ui/gtk/wav.h" #include "ui/gtk/main.h" #include "ui/gtk/help.h" #include "ui/gtk/tape.h" #include "ui/gtk/disk.h" #include "ui/gtk/vdip.h" #include "ui/gtk/info.h" #include "ui/gtk/about.h" #include "ui/gtk/debug.h" #include "ui/gtk/color.h" #include "ui/gtk/thanks.h" #include "ui/gtk/module.h" #include "ui/gtk/keyboard.h" #include "ui/gtk/copying.h" #include "ui/gtk/tapeadd.h" #include "ui/gtk/options.h" #include "ui/gtk/selector.h" #include "ui/gtk/savemem.h" #include "ui/gtk/screenshot.h" #include "ui/gtk/plotter.h" #include "ui/gtk/video.h" #include "ui/gtk/ui_gtk0.h" #include "ui/gtk/ui_gtk1.h" #include "ui/gtk/ui_gtk3.h" #include "ui/gtk/ui_gtk4.h" #include "ui/gtk/ui_gtk6.h" #include "ui/gtk/ui_gtk8.h" #include "ui/gtk/ui_gtk9.h" #include "ui/gtk/ui_gtk_kramermc.h" #include "ui/gtk/ui_gtk_muglerpc.h" #include "ui/gtk/ui_gtk_vcs80.h" #include "ui/gtk/ui_gtk_c80.h" #include "ui/generic/ui_0.h" #include "libdbg/dbg.h" using namespace std; static UI_Gtk *self; class CMD_ui_toggle : public CMD { private: UI_Gtk *_w; public: CMD_ui_toggle(UI_Gtk *w) : CMD("ui-toggle") { _w = w; register_cmd("ui-speed-limit-toggle", 0); register_cmd("ui-zoom-1", 1); register_cmd("ui-zoom-2", 2); register_cmd("ui-zoom-3", 3); register_cmd("ui-display-effects-toggle", 4); } void execute(CMD_Args *args, CMD_Context context) { switch (context) { case 0: _w->speed_limit_toggle(); break; case 1: case 2: case 3: _w->gtk_zoom(context); break; case 4: _w->display_effects_toggle(); break; } } }; class CMD_update_colortable : public CMD { private: UI_Gtk *_ui; ColorWindow *_colwin; public: CMD_update_colortable(UI_Gtk *ui, ColorWindow *colwin) : CMD("ui-update-colortable") { _ui = ui; _colwin = colwin; register_cmd("ui-update-colortable"); } void execute(CMD_Args *args, CMD_Context context) { _ui->allocate_colors(_colwin->get_brightness_fg(), _colwin->get_contrast_fg(), _colwin->get_brightness_bg(), _colwin->get_contrast_bg()); _ui->update(true, true); } }; void UI_Gtk::idle(void) { gtk_main_quit(); } void UI_Gtk::sf_selection_received(GtkWidget *widget, GtkSelectionData *sel_data, gpointer *data) { GdkAtom atom; UI_Gtk *self; CMD_Args *args; self = (UI_Gtk *)data; if (sel_data->length < 0) return; atom = gdk_atom_intern("TEXT", FALSE); if (atom == GDK_NONE) return; /* * may check sel_data->type here... */ // printf("selection (%d bytes) = %s\n", sel_data->length, sel_data->data); args = new CMD_Args(); args->set_string_arg("text", (const char *)sel_data->data); CMD_EXEC_ARGS("keyboard-replay", args); } void UI_Gtk::key_press_release(GdkEventKey *event, bool press) { int c = 0; int key_code; key_code = event->hardware_keycode; switch (event->keyval) { case GDK_Alt_L: case GDK_Alt_R: case GDK_Meta_L: case GDK_Meta_R: case GDK_Super_L: case GDK_Super_R: case GDK_Hyper_L: case GDK_Hyper_R: c = KC_KEY_ALT; break; case GDK_ISO_Level3_Shift: case GDK_Mode_switch: c = KC_KEY_ALT_GR; break; case GDK_Shift_L: case GDK_Shift_R: c = KC_KEY_SHIFT; break; case GDK_Control_L: case GDK_Control_R: c = KC_KEY_CONTROL; break; case GDK_Left: case GDK_KP_Left: c = KC_KEY_LEFT; break; case GDK_Right: case GDK_KP_Right: c = KC_KEY_RIGHT; break; case GDK_Up: case GDK_KP_Up: c = KC_KEY_UP; break; case GDK_Down: case GDK_KP_Down: c = KC_KEY_DOWN; break; case GDK_Escape: c = KC_KEY_ESC; break; case GDK_Home: c = KC_KEY_HOME; break; case GDK_End: c = KC_KEY_END; break; case GDK_Pause: c = KC_KEY_PAUSE; break; case GDK_Print: c = KC_KEY_PRINT; break; case GDK_Delete: case GDK_KP_Delete: c = KC_KEY_DEL; break; case GDK_Insert: case GDK_KP_Insert: c = KC_KEY_INSERT; break; case GDK_Page_Up: case GDK_KP_Page_Up: c = KC_KEY_PAGE_UP; break; case GDK_Page_Down: case GDK_KP_Page_Down: c = KC_KEY_PAGE_DOWN; break; case GDK_F1: case GDK_KP_F1: c = KC_KEY_F1; break; case GDK_F2: case GDK_KP_F2: c = KC_KEY_F2; break; case GDK_F3: case GDK_KP_F3: c = KC_KEY_F3; break; case GDK_F4: case GDK_KP_F4: c = KC_KEY_F4; break; case GDK_F5: c = KC_KEY_F5; break; case GDK_F6: c = KC_KEY_F6; break; case GDK_F7: c = KC_KEY_F7; break; case GDK_F8: c = KC_KEY_F8; break; case GDK_F9: c = KC_KEY_F9; break; case GDK_F10: c = KC_KEY_F10; break; case GDK_F11: c = KC_KEY_F11; break; case GDK_F12: c = KC_KEY_F12; break; case GDK_F13: c = KC_KEY_F13; break; case GDK_F14: c = KC_KEY_F14; break; case GDK_F15: c = KC_KEY_F15; break; case GDK_KP_0: c = '0'; break; case GDK_KP_1: c = '1'; break; case GDK_KP_2: c = '2'; break; case GDK_KP_3: c = '3'; break; case GDK_KP_4: c = '4'; break; case GDK_KP_5: c = '5'; break; case GDK_KP_6: c = '6'; break; case GDK_KP_7: c = '7'; break; case GDK_KP_8: c = '8'; break; case GDK_KP_9: c = '9'; break; case GDK_KP_Equal: c = '='; break; case GDK_KP_Multiply: c = '*'; break; case GDK_KP_Add: c = '+'; break; case GDK_KP_Subtract: c = '-'; break; case GDK_KP_Divide: c = '/'; break; case GDK_KP_Enter: c = 0x0d; break; case GDK_dead_circumflex: c = '^'; break; case GDK_dead_acute: c = '\''; break; case GDK_dead_grave: c = '\''; break; default: c = event->keyval & 0xff; break; } DBG(2, form("KCemu/UI/key_kc", "%s - keyval = %5d/0x%04x / keycode = %5d -> kccode = %5d/0x%04x\n", press ? "press " : "release", event->keyval, event->keyval, key_code, c, c)); if (press) keyboard->keyPressed(c, key_code); else keyboard->keyReleased(c, key_code); } gboolean UI_Gtk::sf_key_press(GtkWidget */*widget*/, GdkEventKey *event) { DBG(2, form("KCemu/UI/key_press", "key_press: keyval = %04x, keycode = %04x\n", event->keyval, event->hardware_keycode)); /* * Don't handle the key event if the ALT modifier * is set. This allows for better handling of the * accelerator key in the menu bar. */ if ((event->state & GDK_MOD1_MASK) == GDK_MOD1_MASK) return FALSE; key_press_release(event, true); return TRUE; } gboolean UI_Gtk::sf_key_release(GtkWidget */*widget*/, GdkEventKey *event) { DBG(2, form("KCemu/UI/key_release", "key_release: keyval = %04x, keycode = %04x\n", event->keyval, event->hardware_keycode)); /* * Don't handle the key event if the ALT modifier * is set. This allows for better handling of the * accelerator key in the menu bar. */ if ((event->state & GDK_MOD1_MASK) == GDK_MOD1_MASK) return FALSE; key_press_release(event, false); return TRUE; } void UI_Gtk::sf_focus_in(GtkWidget * /* widget */, GdkEventFocus *event) { DBG(2, form("KCemu/UI/focus_in", "got focus\n")); keyboard->keyReleased(-1, -1); } void UI_Gtk::sf_focus_out(GtkWidget *widget, GdkEventFocus *event) { DBG(2, form("KCemu/UI/focus_out", "lost focus\n")); keyboard->keyReleased(-1, -1); } void UI_Gtk::sf_leave_notify(GtkWidget *widget, GdkEventCrossing *event) { keyboard->keyReleased(-1, -1); } void UI_Gtk::speed_limit_toggle(void) { _speed_limit = !_speed_limit; } void UI_Gtk::text_update(void) { #if 0 static GdkFont *font = 0; unsigned long val = 0; if (font == 0) font = gdk_font_load("fixed"); byte_t *irm = memory->getIRM(); for (int a = 0;a < 8;a++) { val |= (irm[40 * a + 320] & 0xf); val <<= 4; } char buf[100]; snprintf(buf, 100, "%08x", val); gdk_draw_string(_text.canvas->window, font, _gc, 10, 10, buf); #endif } void UI_Gtk::gtk_sync(void) { static int count = 0; static bool first = true; static long tv_sec, tv_usec; static long tv1_sec = 0, tv1_usec = 0; static long tv2_sec, tv2_usec; static unsigned long frame = 25; static unsigned long long base, d2; static long basetime_sec = 0, basetime_usec = 0; unsigned long timeframe, diff, fps; if (++count >= 60) { count = 0; sys_gettimeofday(&tv2_sec, &tv2_usec); diff = ((1000000 * (tv2_sec - tv1_sec)) + (tv2_usec - tv1_usec)); fps = 60500000 / diff; _main_window->set_fps(fps); tv1_sec = tv2_sec; tv1_usec = tv2_usec; } if (first) { first = false; sys_gettimeofday(&tv1_sec, &tv1_usec); sys_gettimeofday(&basetime_sec, &basetime_usec); base = (basetime_sec * 50) + basetime_usec / 20000; base -= 26; // see comment below } sys_gettimeofday(&tv_sec, &tv_usec); d2 = (tv_sec * 50) + tv_usec / 20000; timeframe = (unsigned long)(d2 - base); frame++; /* * because of this test we start with frame = 25 otherwise it * would fail due to the fact that timeframe is unsigned! */ if (frame < (timeframe - 20)) { DBG(2, form("KCemu/UI/update", "counter = %lu, frame = %lu, timeframe = %lu\n", (unsigned long)z80->getCounter(), frame, timeframe)); frame = timeframe; } if (_speed_limit) { if (frame > (timeframe + 1)) { sys_usleep(20000 * (frame - timeframe - 1)); } } else { frame = timeframe; } /* * if (!_auto_skip) * { * processEvents(); * update(); * } */ sys_gettimeofday(&tv_sec, &tv_usec); d2 = (tv_sec * 50) + tv_usec / 20000; timeframe = (unsigned long)(d2 - base); _auto_skip = false; if (frame < timeframe) { if (++_cur_auto_skip > _max_auto_skip) _cur_auto_skip = 0; else _auto_skip = true; } } UI_Gtk::UI_Gtk(void) { _ui = 0; _init = false; _video_encoder_state = VideoEncoder::VIDEO_ENCODER_STATE_STOP; _video_encoder = _video_encoder_dummy = new DummyVideoEncoder(); } UI_Gtk::~UI_Gtk(void) { delete _about_window; delete _help_window; delete _thanks_window; delete _color_window; delete _tape_window; delete _tape_add_window; delete _disk_window; delete _vdip_window; delete _save_memory_window; delete _module_window; delete _keyboard_window; delete _copying_window; delete _options_window; delete _selector_window; delete _debug_window; delete _info_window; delete _wav_window; delete _screenshot_window; delete _plotter_window; delete _video_window; delete _edit_header_window; delete _dialog_window; delete _file_browser; delete _main_window; } void UI_Gtk::init(int *argc, char ***argv) { self = this; _shift_lock = false; _speed_limit = true; _auto_skip = false; _cur_auto_skip = 0; _max_auto_skip = 6; #ifdef ENABLE_NLS /* * We need to get all text in UTF-8 because this is required * for GTK versions above 2.0 (more precisely it's required by * the Pango library). * * And we do it here because this way it's possible to get the * help/usage messages still in the default locale of the user. * From this point all messages that are sent to the console are * encoded in UTF-8 too. */ bind_textdomain_codeset(PACKAGE, "UTF-8"); #endif /* ENABLE_NLS */ gtk_init(argc, argv); string datadir(kcemu_datadir); /* * load gtk ressource files */ string rc_filename = datadir + "/.kcemurc.gtk"; gtk_rc_parse(rc_filename.c_str()); const char *tmp = kcemu_homedir; if (tmp) { string homedir(tmp); string home_rc_filename = homedir + "/.kcemurc.gtk"; gtk_rc_parse(home_rc_filename.c_str()); } else cerr << "Warning: HOME not set! can't locate file `.kcemurc.gtk'" << endl; /* * don't let gtk catch SIGSEGV, make core dumps ;-) */ signal(SIGSEGV, SIG_DFL); Error::instance()->addErrorListener(this); _dialog_window = new DialogWindow("dialog.glade"); _selector_window = new ProfileSelectorWindow("selector.glade"); _help_window = new HelpWindow("help.glade"); } void UI_Gtk::init2(void) { create_ui(); _main_window = new MainWindow("main.glade"); _about_window = new AboutWindow("about.glade"); _thanks_window = new ThanksWindow("thanks.glade"); _color_window = new ColorWindow("color.glade"); _tape_window = new TapeWindow("tape.glade"); _tape_add_window = new TapeAddWindow("tapeedit.glade"); _disk_window = new DiskWindow("disk.glade"); _vdip_window = new VDIPWindow("vdip.glade"); _module_window = new ModuleWindow("module.glade"); _keyboard_window = new KeyboardWindow("keyboard.glade"); _copying_window = new CopyingWindow("legal.glade"); _options_window = new OptionsWindow("options.glade"); _wav_window = new WavWindow("audio.glade"); _screenshot_window = new ScreenshotWindow("screenshot.glade", this); _plotter_window = new PlotterWindow("plotter.glade"); _save_memory_window = new SaveMemoryWindow("savemem.glade"); _video_window = new VideoWindow("video.glade", this); _edit_header_window = new EditHeaderWindow(); _file_browser = new FileBrowser(); _debug_window = new DebugWindow(); _info_window = new InfoWindow(); ColorWindow *color_window = (ColorWindow *)_color_window; allocate_colors(color_window->get_brightness_fg(), color_window->get_contrast_fg(), color_window->get_brightness_bg(), color_window->get_contrast_bg()); /* this _must_ come last due to some initialization for menus */ _main_window->show(get_width(), get_height()); CMD *cmd; cmd = new CMD_ui_toggle(this); cmd = new CMD_update_colortable(this, color_window); GtkWidget *main_window = _main_window->get_main_window(); g_signal_connect(main_window, "selection_received", G_CALLBACK(sf_selection_received), this); g_signal_connect(main_window, "key_press_event", G_CALLBACK(sf_key_press), this); g_signal_connect(main_window, "key_release_event", G_CALLBACK(sf_key_release), this); g_signal_connect(main_window, "focus_in_event", G_CALLBACK(sf_focus_in), this); g_signal_connect(main_window, "focus_out_event", G_CALLBACK(sf_focus_out), this); // static GtkTargetEntry targetlist[] = { // { "STRING", 0, 1 }, // { "TEXT", 0, 2 }, // { "COMPOUND_TEXT", 0, 3 } // }; // gint ntargets = sizeof(targetlist) / sizeof(targetlist[0]); // gint nentries = sizeof(entries) / sizeof(entries[0]); // gint nentriesP = sizeof(entriesP) / sizeof(entriesP[0]); // // g_selection_add_targets(_main.window, GDK_SELECTION_PRIMARY, targetlist, ntargets); } void UI_Gtk::gtk_resize(void) { if (_main_window->resize(get_width(), get_height())) set_video_encoder_state(VideoEncoder::VIDEO_ENCODER_STATE_STOP); } int UI_Gtk::ensure_range(double val) { if (val < 0) return 0; if (val > 255) return 255; return (int)val; } void UI_Gtk::allocate_colors(double brightness_fg, double contrast_fg, double brightness_bg, double contrast_bg) { int idx = 0; list colors(_ui->get_colors()); for (list::const_iterator it = colors.begin();it != colors.end();it++, idx++) { double r, g, b; if ((*it).is_rgb()) { r = (*it).get_red(); g = (*it).get_green(); b = (*it).get_blue(); } else { int red, green, blue; //double s = (*it).is_bg() ? 0.85 : 1.0; //double v = (*it).is_bg() ? 0.70 : 1.0; hsv2rgb((*it).get_hue(), 1.0, 1.0, &red, &green, &blue); r = red; g = green; b = blue; } double contrast; double brightness; if ((*it).is_bg()) { contrast = contrast_bg; brightness = brightness_bg; } else { contrast = contrast_fg; brightness = brightness_fg; } r *= 1.5 * contrast; g *= 1.5 * contrast; b *= 1.5 * contrast; r += (256 * brightness - 127); g += (256 * brightness - 127); b += (256 * brightness - 127); int red = ensure_range(r); int green = ensure_range(g); int blue = ensure_range(b); DBG(2, form("KCemu/UI/color", "%c(%3d): %5.2f / %5.2f - %7.2f, %7.2f, %7.2f - %3d, %3d, %3d\n", (*it).is_bg() ? 'B' : 'F', idx, brightness, contrast, r, g, b, red, green, blue)); _main_window->allocate_color_rgb(idx, red, green, blue); _video_encoder->allocate_color_rgb(idx, red, green, blue); } } void UI_Gtk::set_video_encoder(VideoEncoder *encoder) { if (_video_encoder == encoder) return; _video_encoder->close(); _video_encoder = (encoder == NULL) ? _video_encoder_dummy : encoder; } void UI_Gtk::set_video_encoder_state(int state) { if (state == _video_encoder_state) return; if (state == VideoEncoder::VIDEO_ENCODER_STATE_PAUSE) { _video_encoder_state = VideoEncoder::VIDEO_ENCODER_STATE_PAUSE; CMD_EXEC("ui-video-pause"); } if (state == VideoEncoder::VIDEO_ENCODER_STATE_STOP) { if (_video_encoder_state == VideoEncoder::VIDEO_ENCODER_STATE_RECORD) _video_encoder->close(); _video_encoder_state = VideoEncoder::VIDEO_ENCODER_STATE_STOP; CMD_EXEC("ui-video-stop"); } if (state == VideoEncoder::VIDEO_ENCODER_STATE_RECORD) { UI_Base *ui = _ui->get_generic_ui(); int width = _ui->get_generic_ui()->get_real_width(); int height = _ui->get_generic_ui()->get_real_height(); if (_video_encoder->init(_video_encoder_filename, width, height, _video_encoder_frame_skip, _video_encoder_quality)) { // cheat a bit by forcing color table update and repaint CMD_EXEC("ui-update-colortable"); _video_encoder->encode(ui->get_buffer(), NULL); _video_encoder_state = VideoEncoder::VIDEO_ENCODER_STATE_RECORD; _video_frame = _video_skip = _video_encoder_frame_skip; CMD_EXEC("ui-video-record"); } else { _video_encoder_state = VideoEncoder::VIDEO_ENCODER_STATE_STOP; CMD_EXEC("ui-video-stop"); } } } void UI_Gtk::set_video_encoder_config(const char *filename, double quality, int frame_skip, bool start_on_reset) { _video_encoder_filename = filename; _video_encoder_quality = quality; _video_encoder_frame_skip = frame_skip; _video_encoder_start_on_reset = start_on_reset; } void UI_Gtk::show(void) { _init = true; gtk_resize(); } void UI_Gtk::gtk_zoom(int zoom) { if (zoom < 1) zoom = 1; if (zoom > 3) zoom = 3; kcemu_ui_scale = zoom; gtk_resize(); update(true, true); } void UI_Gtk::processEvents(void) { _main_window->process_events(); while (gtk_events_pending()) gtk_main_iteration(); } void UI_Gtk::display_effects_toggle(void) { _main_window->set_display_effect(!_main_window->get_display_effect()); update(true, true); } void UI_Gtk::update(bool full_update, bool clear_cache) { Scanline *scanline = _ui->get_scanline(); if (scanline != NULL) { scanline->update(); } MemAccess *memaccess = _ui->get_mem_access(); if (memaccess != NULL) { memaccess->update(); } UI_Base *ui = _ui->get_generic_ui(); ui->generic_update(scanline, memaccess, clear_cache); _main_window->update(ui, get_width(), get_height(), full_update); if (_video_encoder_state == VideoEncoder::VIDEO_ENCODER_STATE_RECORD) { if (_video_frame <= 0) { _video_frame = _video_skip; // we can use the dirty buffer only when not skipping frames _video_encoder->encode(ui->get_buffer(), _video_skip == 1 ? ui->get_dirty_buffer() : NULL); } _video_frame--; } memset(ui->get_dirty_buffer(), 0, ui->get_dirty_buffer_size()); processEvents(); gtk_sync(); } UI_ModuleInterface * UI_Gtk::getModuleInterface(void) { return (ModuleWindow *)_module_window; } TapeInterface * UI_Gtk::getTapeInterface(void) { return (TapeWindow *)_tape_window; } DebugInterface * UI_Gtk::getDebugInterface(void) { return (DebugWindow *)_debug_window; } void UI_Gtk::errorInfo(const char *msg) { _dialog_window->show_dialog_ok(_("Info"), msg); } GdkPixbuf * UI_Gtk::get_screenshot(void) { UI_Base *ui = _ui->get_generic_ui(); GdkColor *colormap = _main_window->get_colormap(); int width = ui->get_real_width(); int height = ui->get_real_height(); int count = width * height; byte_t *image = ui->get_buffer(); byte_t *buf = new byte_t[3 * count]; for (int src = 0, dst = 0;src < count;src++) { GdkColor col = colormap[image[src]]; buf[dst++] = col.red >> 8; buf[dst++] = col.green >> 8; buf[dst++] = col.blue >> 8; } return gdk_pixbuf_new_from_data(buf, GDK_COLORSPACE_RGB, FALSE, 8, width, height, 3 * width, on_pixbuf_destroy, NULL); } void UI_Gtk::on_pixbuf_destroy(guchar *pixels, gpointer user_data) { delete[] pixels; } char * UI_Gtk::select_profile(void) { _selector_window->show(); return ((ProfileSelectorWindow *)_selector_window)->get_selected_profile(); } void UI_Gtk::create_ui(void) { const SystemType *system_type = Preferences::instance()->get_system_type(); _callback_value = system_type->get_ui_callback_value(); _callback_value_retrace = system_type->get_ui_callback_retrace_value(); switch (Preferences::instance()->get_kc_type()) { case KC_TYPE_85_1: case KC_TYPE_87: _ui = new UI_Gtk1(); break; case KC_TYPE_85_2: case KC_TYPE_85_3: _ui = new UI_Gtk3(); break; case KC_TYPE_85_4: case KC_TYPE_85_5: _ui = new UI_Gtk4(); break; case KC_TYPE_LC80: _ui = new UI_Gtk8(); break; case KC_TYPE_Z1013: _ui = new UI_Gtk0(); break; case KC_TYPE_A5105: _ui = new UI_Gtk9(); break; case KC_TYPE_POLY880: _ui = new UI_Gtk6(); break; case KC_TYPE_KRAMERMC: _ui = new UI_Gtk_KramerMC(); break; case KC_TYPE_MUGLERPC: _ui = new UI_Gtk_MuglerPC(); break; case KC_TYPE_VCS80: _ui = new UI_Gtk_VCS80(); break; case KC_TYPE_C80: _ui = new UI_Gtk_C80(); break; case KC_TYPE_ALL: case KC_TYPE_NONE: case KC_TYPE_85_1_CLASS: case KC_TYPE_85_2_CLASS: DBG(0, form("KCemu/internal_error", "KCemu: got unhandled value from get_kc_type(): %d\n", Preferences::instance()->get_kc_type())); break; } z80->register_ic(this); add_callback(); } void UI_Gtk::destroy_ui(void) { z80->unregister_ic(this); delete _ui; } void UI_Gtk::add_callback(void) { z80->addCallback(_callback_value, this, (void *)0); if (_callback_value_retrace > 0) z80->addCallback(_callback_value_retrace, this, (void *)1); } void UI_Gtk::callback(void *data) { if (data == (void *)1) { if (_ui != NULL) { _ui->get_generic_ui()->generic_signal_v_retrace(false); } } else { if (_ui != NULL) { update(); _ui->get_generic_ui()->generic_signal_v_retrace(true); } add_callback(); } } void UI_Gtk::flash(bool enable) { Scanline *scanline = _ui->get_scanline(); if (scanline != NULL) { scanline->trigger(enable); } } int UI_Gtk::get_mode(void) { if (_ui == NULL) { DBG(1, form("KCemu/warning", "UI_Gtk::get_mode(): generic ui not yet initialized!\n")); return 0; } return _ui->get_generic_ui()->generic_get_mode(); } void UI_Gtk::set_mode(int mode) { if (_ui == NULL) { DBG(1, form("KCemu/warning", "UI_Gtk::set_mode(): generic ui not yet initialized!\n")); return ; } _ui->get_generic_ui()->generic_set_mode(mode); gtk_resize(); update(true, true); } void UI_Gtk::memory_read(word_t addr) { MemAccess *memaccess = _ui->get_mem_access(); if (memaccess != NULL) { memaccess->memory_read(addr); } } void UI_Gtk::memory_write(word_t addr) { MemAccess *memaccess = _ui->get_mem_access(); if (memaccess != NULL) { memaccess->memory_write(addr); } } int UI_Gtk::get_width(void) { return kcemu_ui_scale * _ui->get_generic_ui()->get_real_width(); } int UI_Gtk::get_height(void) { return kcemu_ui_scale * _ui->get_generic_ui()->get_real_height(); } void UI_Gtk::reset(bool power_on) { if (_video_encoder_start_on_reset) { _video_encoder_start_on_reset = false; CMD_EXEC("ui-video-reset"); set_video_encoder_state(VideoEncoder::VIDEO_ENCODER_STATE_RECORD); } }KCemu-0.5.1/src/ui/gtk/a5105.key0000644001050700006200000000517111131675406015453 0ustar glaubitzfbedva5105_keyboard.png a5105_keyboard_pressed.png ########################## # A5105 Keyboard Layout ########################## # # function keys # +KC_KEY_F1 :36,34,36,36 =36,34,36,36 +KC_KEY_F2 :36,70,36,36 =36,70,36,36 +KC_KEY_F3 :36,106,36,36 =36,106,36,36 +KC_KEY_F4 :36,142,36,36 =36,142,36,36 +KC_KEY_F5 :36,178,36,36 =36,178,36,36 # # first row # +KC_KEY_HOME :90,34,36,36 =90,34,36,36 +1 :126,34,36,36 =126,34,36,36 +2 :162,34,36,36 =162,34,36,36 +3 :198,34,36,36 =198,34,36,36 +4 :234,34,36,36 =234,34,36,36 +5 :270,34,36,36 =270,34,36,36 +6 :306,34,36,36 =306,34,36,36 +7 :342,34,36,36 =342,34,36,36 +8 :378,34,36,36 =378,34,36,36 +9 :414,34,36,36 =414,34,36,36 +0 :450,34,36,36 =450,34,36,36 +? :486,34,36,36 =486,34,36,36 +# :522,34,36,36 =522,34,36,36 +' :558,34,36,36 =558,34,36,36 # # second row # +KC_KEY_CONTROL :108,70,36,36 =108,70,36,36 +q :144,70,36,36 =144,70,36,36 +w :180,70,36,36 =180,70,36,36 +e :216,70,36,36 =216,70,36,36 +r :252,70,36,36 =252,70,36,36 +t :288,70,36,36 =288,70,36,36 +z :324,70,36,36 =324,70,36,36 +u :360,70,36,36 =360,70,36,36 +i :396,70,36,36 =396,70,36,36 +o :432,70,36,36 =432,70,36,36 +p :468,70,36,36 =468,70,36,36 +ü :504,70,36,36 =504,70,36,36 +< :540,70,36,36 =540,70,36,36 # # third row # +KC_KEY_SHIFT_LOCK :108,106,42,36 =108,106,42,36 +a :150,106,36,36 =150,106,36,36 +s :186,106,36,36 =186,106,36,36 +d :222,106,36,36 =222,106,36,36 +f :258,106,36,36 =258,106,36,36 +g :294,106,36,36 =294,106,36,36 +h :330,106,36,36 =330,106,36,36 +j :366,106,36,36 =366,106,36,36 +k :402,106,36,36 =402,106,36,36 +l :438,106,36,36 =438,106,36,36 +ö :474,106,36,36 =474,106,36,36 +ä :510,106,36,36 =510,106,36,36 ++ :546,106,36,36 =546,106,36,36 # # forth row # +KC_KEY_ESC :90,142,36,36 =90,142,36,36 +KC_KEY_SHIFT :126,142,42,36 =126,142,42,36 +y :168,142,36,36 =168,142,36,36 +x :204,142,36,36 =204,142,36,36 +c :240,142,36,36 =240,142,36,36 +v :276,142,36,36 =276,142,36,36 +b :312,142,36,36 =312,142,36,36 +n :348,142,36,36 =348,142,36,36 +m :384,142,36,36 =384,142,36,36 +, :420,142,36,36 =420,142,36,36 +. :456,142,36,36 =456,142,36,36 +- :492,142,36,36 =492,142,36,36 +KC_KEY_SHIFT :528,142,54,36 =528,142,54,36 # # fifth row # +KC_KEY_GRAPHIC :114,178,36,36 =114,178,36,36 +KC_KEY_ALT :150,178,36,36 =150,178,36,36 +KC_KEY_SPACE :186,178,288,36 =186,178,288,36 +KC_KEY_INSERT :474,178,36,36 =474,178,36,36 +KC_KEY_DEL :510,178,36,36 =510,178,36,36 # # cursor keys # +KC_KEY_STOP :621,34,54,36 =621,34,54,36 +KC_KEY_UP :630,70,36,36 =630,70,36,36 +KC_KEY_LEFT :612,106,36,36 =612,106,36,36 +KC_KEY_RIGHT :648,106,36,36 =648,106,36,36 +KC_KEY_DOWN :630,142,36,36 =630,142,36,36 +KC_KEY_ENTER :621,178,54,36 =621,178,54,36 KCemu-0.5.1/src/ui/gtk/help.cc0000644001050700006200000005155211345001576015447 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * Handling of hyperlinks in GtkTextView taken from the gtk demos source * code provided as example for programming with GTK - The GIMP Toolkit. * * Copyright (C) 1995-1997 Peter Mattis, Spencer Kimball and Josh MacDonald * * Context help handling taken from "The GIMP" * * Copyright (C) ??? * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "ui/gtk/cmd.h" #include "ui/gtk/help.h" #include "libdbg/dbg.h" using namespace std; class CMD_help_window_toggle : public CMD { private: HelpWindow *_w; public: CMD_help_window_toggle(HelpWindow *w) : CMD("ui-help-window-toggle") { _w = w; register_cmd("ui-help-window-toggle"); register_cmd("ui-help-window-toggle-home", 1); register_cmd("ui-help-window-toggle-index", 2); register_cmd("ui-help-window-show", 3); register_cmd("ui-help-window-context-help", 4); } void execute(CMD_Args *args, CMD_Context context) { const char *topic = NULL; switch (context) { case 0: _w->toggle(); break; case 1: _w->toggle(); _w->scroll_to("home", TRUE); break; case 2: _w->toggle(); _w->scroll_to("index", TRUE); break; case 3: _w->show(); if (args != NULL) topic = args->get_string_arg("help-topic"); _w->scroll_to(topic, TRUE); break; case 4: g_idle_add(_w->context_help_idle_start, _w); break; } } }; void HelpWindow::sf_button_back(GtkButton *button, gpointer data) { HelpWindow *w = (HelpWindow *)data; w->history_back(); } void HelpWindow::sf_button_forward(GtkButton *button, gpointer data) { HelpWindow *w = (HelpWindow *)data; w->history_next(); } void HelpWindow::sf_button_home(GtkButton *button, gpointer data) { HelpWindow *w = (HelpWindow *)data; w->scroll_to("home", TRUE); } void HelpWindow::sf_button_index(GtkButton *button, gpointer data) { HelpWindow *w = (HelpWindow *)data; w->scroll_to("index", TRUE); } void HelpWindow::sf_button_refresh(GtkButton *button, gpointer data) { HelpWindow *w = (HelpWindow *)data; w->load_text(); } /* * Links can be activated by pressing Enter. */ gboolean HelpWindow::sf_key_press_event(GtkWidget *text_view, GdkEventKey *event, gpointer data) { GtkTextIter iter; GtkTextBuffer *buffer; HelpWindow *w = (HelpWindow *)data; switch (event->keyval) { case GDK_Return: case GDK_KP_Enter: buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(text_view)); gtk_text_buffer_get_iter_at_mark(buffer, &iter, gtk_text_buffer_get_insert(buffer)); w->follow_if_link(text_view, &iter); break; default: break; } return FALSE; } /* * Also update the cursor image if the window becomes visible * (e.g. when a window covering it got iconified). */ gboolean HelpWindow::sf_visibility_notify_event(GtkWidget *text_view, GdkEventVisibility *event, gpointer data) { gint wx, wy, bx, by; HelpWindow *w = (HelpWindow *)data; gdk_window_get_pointer (text_view->window, &wx, &wy, NULL); gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(text_view), GTK_TEXT_WINDOW_WIDGET, wx, wy, &bx, &by); w->set_cursor_if_appropriate(GTK_TEXT_VIEW(text_view), bx, by); return FALSE; } /* * Update the cursor image if the pointer moved. */ gboolean HelpWindow::sf_motion_notify_event(GtkWidget *text_view, GdkEventMotion *event, gpointer data) { gint x, y; HelpWindow *w = (HelpWindow *)data; gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(text_view), GTK_TEXT_WINDOW_WIDGET, (gint)event->x, (gint)event->y, &x, &y); w->set_cursor_if_appropriate(GTK_TEXT_VIEW(text_view), x, y); gdk_window_get_pointer(text_view->window, NULL, NULL, NULL); return FALSE; } /* * Links can also be activated by clicking. */ gboolean HelpWindow::sf_event_after(GtkWidget *text_view, GdkEvent *ev, gpointer data) { gint x, y; GtkTextBuffer *buffer; GdkEventButton *event; GtkTextIter start, end, iter; HelpWindow *w = (HelpWindow *)data; if (ev->type != GDK_BUTTON_RELEASE) return FALSE; event = (GdkEventButton *)ev; if (event->button != 1) return FALSE; buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW (text_view)); /* we shouldn't follow a link if the user has selected something */ gtk_text_buffer_get_selection_bounds(buffer, &start, &end); if (gtk_text_iter_get_offset(&start) != gtk_text_iter_get_offset(&end)) return FALSE; gtk_text_view_window_to_buffer_coords(GTK_TEXT_VIEW(text_view), GTK_TEXT_WINDOW_WIDGET, (gint)event->x, (gint)event->y, &x, &y); gtk_text_view_get_iter_at_location(GTK_TEXT_VIEW(text_view), &iter, x, y); w->follow_if_link(text_view, &iter); return FALSE; } const gchar * HelpWindow::get_attribute(const gchar *name, const gchar **attribute_names, const gchar **attribute_values) { for (int i = 0;attribute_names[i] != NULL;i++) { if (strcmp(attribute_names[i], name) == 0) { return attribute_values[i]; } } return NULL; } void HelpWindow::sf_parser_start_element_handler(GMarkupParseContext *context, const gchar *element_name, const gchar **attribute_names, const gchar **attribute_values, gpointer user_data, GError **error) { HelpWindow *w = (HelpWindow *)user_data; if (strcmp(element_name, "ref") == 0) { const gchar *val = get_attribute("name", attribute_names, attribute_values); if (val != NULL) { w->insert_ref(val); } } else if (strcmp(element_name, "size") == 0) { const gchar *val = get_attribute("value", attribute_names, attribute_values); if (val != NULL) { int value = atoi(val); if (value < -3) value = -3; if (value > 3) value = 3; w->text_size = value; } } else if (strcmp(element_name, "link") == 0) { const gchar *val = get_attribute("ref", attribute_names, attribute_values); if (val != NULL) { w->link_name = strdup(val); } w->parse_state = PARSE_STATE_LINK; } else if (strcmp(element_name, "img") == 0) { const gchar *val = get_attribute("src", attribute_names, attribute_values); if (val != NULL) { w->insert_image(val); } } else if (strcmp(element_name, "b") == 0) { w->parse_flags |= PARSE_FLAGS_BOLD; } else if (strcmp(element_name, "i") == 0) { w->parse_flags |= PARSE_FLAGS_ITALIC; } else if (strcmp(element_name, "u") == 0) { w->parse_flags |= PARSE_FLAGS_UNDERLINE; } else if (strcmp(element_name, "c") == 0) { w->parse_flags |= PARSE_FLAGS_CENTER; } else if (strcmp(element_name, "m") == 0) { w->parse_flags |= PARSE_FLAGS_MONOSPACE; } else if (strcmp(element_name, "p") == 0) { w->parse_state = PARSE_STATE_TEXT; } } void HelpWindow::sf_parser_end_element_handler(GMarkupParseContext *context, const gchar *element_name, gpointer user_data, GError **error) { HelpWindow *w = (HelpWindow *)user_data; if (strcmp(element_name, "size") == 0) { w->text_size = 0; } if (strcmp(element_name, "b") == 0) { w->parse_flags &= ~PARSE_FLAGS_BOLD; } if (strcmp(element_name, "i") == 0) { w->parse_flags &= ~PARSE_FLAGS_ITALIC; } if (strcmp(element_name, "u") == 0) { w->parse_flags &= ~PARSE_FLAGS_UNDERLINE; } if (strcmp(element_name, "c") == 0) { w->parse_flags &= ~PARSE_FLAGS_CENTER; } if (strcmp(element_name, "m") == 0) { w->parse_flags &= ~PARSE_FLAGS_MONOSPACE; } if (strcmp(element_name, "p") == 0) { w->parse_state = PARSE_STATE_NONE; } else if (strcmp(element_name, "link") == 0) { w->parse_state = PARSE_STATE_TEXT; } } void HelpWindow::sf_parser_text_handler(GMarkupParseContext *context, const gchar *text, gsize text_len, gpointer user_data, GError **error) { HelpWindow *w = (HelpWindow *)user_data; switch (w->parse_state) { case PARSE_STATE_LINK: w->insert_link(text, w->link_name); free(w->link_name); w->link_name = NULL; break; case PARSE_STATE_TEXT: w->insert_text(text, NULL); break; default: break; } } void HelpWindow::sf_parser_passthrough_handler(GMarkupParseContext *context, const gchar *passthrough_text, gsize text_len, gpointer user_data, GError **error) { DBG(1, form("KCemu/Help/parser", "passthrough text (%ld chars): '%.*s'\n", text_len, text_len, passthrough_text)); } void HelpWindow::sf_parser_error_handler(GMarkupParseContext *context, GError *error, gpointer user_data) { DBG(1, form("KCemu/Help/parser", "error: %s\n", error->message)); } HelpWindow::HelpWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { _history = NULL; _history_ptr = NULL; _hovering_over_link = FALSE; _hand_cursor = gdk_cursor_new(GDK_HAND2); _regular_cursor = gdk_cursor_new(GDK_XTERM); parser.start_element = sf_parser_start_element_handler; parser.end_element = sf_parser_end_element_handler; parser.text = sf_parser_text_handler; parser.passthrough = sf_parser_passthrough_handler; parser.error = sf_parser_error_handler; _cmd = new CMD_help_window_toggle(this); init2(); } HelpWindow::~HelpWindow(void) { delete _cmd; } void HelpWindow::init(void) { } void HelpWindow::init2(void) { _window = get_widget("help_window"); g_signal_connect(G_OBJECT(_window), "delete_event", G_CALLBACK(cmd_exec_sft), (char *)"ui-help-window-toggle"); // FIXME: /* * textview / textbuffer */ _w.text_view = get_widget("main_textview"); _w.text_buffer = gtk_text_view_get_buffer(GTK_TEXT_VIEW(_w.text_view)); _w.tag_bold = gtk_text_buffer_create_tag(_w.text_buffer, "bold", "weight", PANGO_WEIGHT_BOLD, NULL); _w.tag_italic = gtk_text_buffer_create_tag(_w.text_buffer, "italic", "style", PANGO_STYLE_ITALIC, NULL); _w.tag_underline = gtk_text_buffer_create_tag(_w.text_buffer, "underline", "underline", PANGO_UNDERLINE_DOUBLE, NULL); _w.tag_center = gtk_text_buffer_create_tag(_w.text_buffer, "center", "justification", GTK_JUSTIFY_CENTER, NULL); _w.tag_monospace = gtk_text_buffer_create_tag(_w.text_buffer, "monospace", "family", "Monospace", NULL); _w.tag_size[0] = gtk_text_buffer_create_tag(_w.text_buffer, "size -3", "scale", PANGO_SCALE_XX_SMALL, NULL); _w.tag_size[1] = gtk_text_buffer_create_tag(_w.text_buffer, "size -2", "scale", PANGO_SCALE_X_SMALL, NULL); _w.tag_size[2] = gtk_text_buffer_create_tag(_w.text_buffer, "size -1", "scale", PANGO_SCALE_SMALL, NULL); _w.tag_size[3] = NULL; _w.tag_size[4] = gtk_text_buffer_create_tag(_w.text_buffer, "size +1", "scale", PANGO_SCALE_LARGE, NULL); _w.tag_size[5] = gtk_text_buffer_create_tag(_w.text_buffer, "size +2", "scale", PANGO_SCALE_X_LARGE, NULL); _w.tag_size[6] = gtk_text_buffer_create_tag(_w.text_buffer, "size +3", "scale", PANGO_SCALE_XX_LARGE, NULL); g_signal_connect(_w.text_view, "key-press-event", G_CALLBACK(sf_key_press_event), this); g_signal_connect(_w.text_view, "event-after", G_CALLBACK(sf_event_after), this); g_signal_connect(_w.text_view, "motion-notify-event", G_CALLBACK(sf_motion_notify_event), this); g_signal_connect(_w.text_view, "visibility-notify-event", G_CALLBACK(sf_visibility_notify_event), this); /* * Buttons */ _w.button_back = get_widget("navigation_button_back"); _w.button_next = get_widget("navigation_button_forward"); g_signal_connect(_w.button_back, "clicked", G_CALLBACK(sf_button_back), this); g_signal_connect(_w.button_next, "clicked", G_CALLBACK(sf_button_forward), this); g_signal_connect(get_widget("navigation_button_home"), "clicked", G_CALLBACK(sf_button_home), this); g_signal_connect(get_widget("navigation_button_index"), "clicked", G_CALLBACK(sf_button_index), this); g_signal_connect(get_widget("navigation_button_refresh"), "clicked", G_CALLBACK(sf_button_refresh), this); init_dialog("ui-help-window-toggle", NULL); /* * force initialization directly on gui creation, otherwise the first * call to show the context help will go wrong as it does not wait * for the expose of the window :-( */ load_text(); gtk_widget_realize(_window); } void HelpWindow::load_text(void) { GtkTextBuffer *buf = _w.text_buffer; string datadir(kcemu_datadir); string help_doc = datadir + "/doc/kcemu-help.xml"; gchar *text; gsize length; GError *error = NULL; if (!g_file_get_contents(help_doc.c_str(), &text, &length, &error)) { fprintf (stderr, "%s\n", error->message); g_error_free (error); return; } text_size = 0; parse_flags = 0; link_name = NULL; parse_state = PARSE_STATE_NONE; gtk_text_buffer_set_text(buf, "", 0); gtk_text_buffer_get_start_iter(buf, &iter); gtk_text_view_scroll_to_iter(GTK_TEXT_VIEW(_w.text_view), &iter, 0.0, TRUE, 0.0, 0.0); GMarkupParseContext *context = g_markup_parse_context_new(&parser, (GMarkupParseFlags)0, this, NULL); if (!g_markup_parse_context_parse(context, text, length, NULL)) { g_markup_parse_context_free(context); return; } if (!g_markup_parse_context_end_parse(context, NULL)) { g_markup_parse_context_free(context); return; } g_markup_parse_context_free(context); } void HelpWindow::history_next(void) { if (_history_ptr != g_list_first(_history)) { _history_ptr = g_list_previous(_history_ptr); if (scroll_to((const char *)_history_ptr->data, FALSE)) { gtk_widget_set_sensitive(_w.button_back, TRUE); } } gtk_widget_set_sensitive(_w.button_next, _history_ptr != g_list_first(_history)); } void HelpWindow::history_back(void) { if (_history_ptr != g_list_last(_history)) { _history_ptr = g_list_next(_history_ptr); if (scroll_to((const char *)_history_ptr->data, FALSE)) { gtk_widget_set_sensitive(_w.button_next, TRUE); } } gtk_widget_set_sensitive(_w.button_back, _history_ptr != g_list_last(_history)); } void HelpWindow::insert_ref(const char *name) { gtk_text_buffer_create_mark(_w.text_buffer, name, &iter, TRUE); } void HelpWindow::insert_text(const char *text, GtkTextTag *tag) { GtkTextTag *tags[7]; tags[0] = tags[1] = tags[2] = tags[3] = tags[4] = tags[5] = tags[6] = NULL; int i = 0; if (parse_flags & PARSE_FLAGS_BOLD) tags[i++] = _w.tag_bold; if (parse_flags & PARSE_FLAGS_ITALIC) tags[i++] = _w.tag_italic; if (parse_flags & PARSE_FLAGS_UNDERLINE) tags[i++] = _w.tag_underline; if (parse_flags & PARSE_FLAGS_CENTER) tags[i++] = _w.tag_center; if (parse_flags & PARSE_FLAGS_MONOSPACE) tags[i++] = _w.tag_monospace; if (_w.tag_size[text_size + 3] != NULL) tags[i++] = _w.tag_size[text_size + 3]; if (tag != NULL) tags[i++] = tag; gtk_text_buffer_insert_with_tags(_w.text_buffer, &iter, text, -1, tags[0], tags[1], tags[2], tags[3], tags[4], tags[5], tags[6], NULL); } void HelpWindow::insert_image(const char *name) { string datadir(kcemu_datadir); string docdir = datadir + "/doc/"; string filename = docdir + name; GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(filename.c_str(), NULL); if (pixbuf == NULL) return; gtk_text_buffer_insert_pixbuf(_w.text_buffer, &iter, pixbuf); } void HelpWindow::insert_link(const char *text, const char *ref) { GtkTextTag *tag = gtk_text_buffer_create_tag(_w.text_buffer, NULL, "foreground", "blue", "underline", PANGO_UNDERLINE_SINGLE, NULL); g_object_set_data(G_OBJECT(tag), "ref", (gpointer)strdup(ref)); insert_text(text, tag); } gboolean HelpWindow::scroll_to(const char *topic, gboolean update_history) { GtkTextMark *mark = gtk_text_buffer_get_mark(_w.text_buffer, topic); if (mark == NULL) { const char *fallback_topic = "home"; DBG(1, form("KCemu/Help/help", "help-topic not found: '%s' (reverting to topic '%s')\n", topic, fallback_topic)); mark = gtk_text_buffer_get_mark(_w.text_buffer, fallback_topic); if (mark == NULL) { DBG(1, form("KCemu/Help/help", "help-topic not found: '%s'\n", fallback_topic)); return FALSE; } } if (update_history) { while (_history_ptr != _history) { g_free(_history->data); _history = g_list_delete_link(_history, _history); } if ((_history == NULL) || (strcmp((const char *)_history->data, topic) != 0)) _history = g_list_prepend(_history, g_strdup(topic)); _history_ptr = _history; gtk_widget_set_sensitive(_w.button_back, _history_ptr != g_list_last(_history)); gtk_widget_set_sensitive(_w.button_next, FALSE); } DBG(1, form("KCemu/Help/history", "history: ---top-\n")); for (GList *ptr = _history;ptr != NULL;ptr = g_list_next(ptr)) { DBG(1, form("KCemu/Help/history", "history: %s%s\n", ptr == _history_ptr ? "->" : " ", ptr->data)); } gtk_text_view_scroll_to_mark(GTK_TEXT_VIEW(_w.text_view), mark, 0, true, 0.0, 0.0); return TRUE; } /* * Looks at all tags covering the position of iter in the text view, * and if one of them is a link, follow it by showing the page identified * by the data attached to it. */ void HelpWindow::follow_if_link(GtkWidget *text_view, GtkTextIter *iter) { GSList *tags = NULL, *tagp = NULL; tags = gtk_text_iter_get_tags (iter); for (tagp = tags;tagp != NULL;tagp = tagp->next) { GtkTextTag *tag = (GtkTextTag *)tagp->data; const char *ref = (const char *)g_object_get_data(G_OBJECT(tag), "ref"); if (ref != NULL) { DBG(1, form("KCemu/Help/help", "follow link to ref: '%s'\n", ref)); scroll_to(ref, TRUE); } } if (tags) g_slist_free (tags); } /* * Looks at all tags covering the position (x, y) in the text view, * and if one of them is a link, change the cursor to the "hands" cursor * typically used by web browsers. */ void HelpWindow::set_cursor_if_appropriate(GtkTextView *text_view, gint x, gint y) { GSList *tags = NULL, *tagp = NULL; GtkTextBuffer *buffer; GtkTextIter iter; gboolean hovering = FALSE; buffer = gtk_text_view_get_buffer(text_view); gtk_text_view_get_iter_at_location(text_view, &iter, x, y); tags = gtk_text_iter_get_tags(&iter); for (tagp = tags;tagp != NULL;tagp = tagp->next) { GtkTextTag *tag = (GtkTextTag *)tagp->data; const char *ref = (const char *)g_object_get_data(G_OBJECT(tag), "ref"); if (ref != NULL) { hovering = TRUE; break; } } if (hovering != _hovering_over_link) { _hovering_over_link = hovering; if (_hovering_over_link) gdk_window_set_cursor(gtk_text_view_get_window(text_view, GTK_TEXT_WINDOW_TEXT), _hand_cursor); else gdk_window_set_cursor(gtk_text_view_get_window(text_view, GTK_TEXT_WINDOW_TEXT), _regular_cursor); } if (tags) g_slist_free (tags); } gboolean HelpWindow::context_help_idle_start(gpointer data) { UI_Gtk_Window *w = (UI_Gtk_Window *)data; if (!gtk_grab_get_current ()) { GtkWidget *invisible = gtk_invisible_new_for_screen(gtk_widget_get_screen(w->get_window())); gtk_widget_show(invisible); GdkCursor *cursor = gdk_cursor_new_for_display(gtk_widget_get_display(invisible), GDK_QUESTION_ARROW); GdkGrabStatus status = gdk_pointer_grab(invisible->window, TRUE, (GdkEventMask)(GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_ENTER_NOTIFY_MASK | GDK_LEAVE_NOTIFY_MASK), NULL, cursor, GDK_CURRENT_TIME); gdk_cursor_unref(cursor); if (status != GDK_GRAB_SUCCESS) { gtk_widget_destroy (invisible); return FALSE; } gtk_grab_add(invisible); g_signal_connect(invisible, "button_press_event", G_CALLBACK(context_help_button_press), w); } return FALSE; } gboolean HelpWindow::context_help_button_press(GtkWidget *widget, GdkEventButton *bevent, gpointer data) { UI_Gtk_Window *w = (UI_Gtk_Window *)data; GtkWidget *help_widget = gtk_get_event_widget((GdkEvent *)bevent); if (help_widget && (bevent->button == 1) && (bevent->type == GDK_BUTTON_PRESS)) { gtk_grab_remove(widget); gdk_display_pointer_ungrab(gtk_widget_get_display(widget), bevent->time); gtk_widget_destroy(widget); if (help_widget != widget) sf_help_recursive(help_widget, w); } return TRUE; } KCemu-0.5.1/src/ui/gtk/theora.cc0000644001050700006200000001420511345001577015774 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/config.h" #ifdef HAVE_LIBTHEORA #include #include #include #include "kc/system.h" #include "ui/gtk/theora.h" using namespace std; TheoraVideoEncoder::TheoraVideoEncoder(void) { _f = NULL; _context = NULL; _buf_y = _buf_u = _buf_v = NULL; } TheoraVideoEncoder::~TheoraVideoEncoder(void) { close(); } bool TheoraVideoEncoder::init(const char *filename, int width, int height, int fps_den, double quality) { if (filename == NULL) return false; if (quality < 0) quality = 0; if (quality > 1) quality = 1; _f = fopen(filename, "wb+"); if (_f == NULL) return false; #ifdef HAVE_LIBTHEORA11 _format = (quality >= 0.85) ? TH_PF_444 : TH_PF_420; #else _format = TH_PF_420; #endif th_info_init(&_info); _info.pic_x = 0; _info.pic_y = 0; _info.pic_width = width; _info.pic_height = height; _info.frame_width = (width + 15) & ~0x0f; _info.frame_height = (height + 15) & ~0x0f; _info.target_bitrate = 0; _info.quality = 63.0 * quality; _info.fps_numerator = 50; _info.fps_denominator = fps_den; _info.aspect_numerator = 1; _info.aspect_denominator = 1; _info.colorspace = TH_CS_ITU_REC_470BG; _info.pixel_fmt = _format; _buf_y = new byte_t[_info.frame_width * _info.frame_height]; _buf_u = new byte_t[_info.frame_width * _info.frame_height]; _buf_v = new byte_t[_info.frame_width * _info.frame_height]; _context = th_encode_alloc(&_info); if (_context == NULL) return false; srand(time(NULL)); if (ogg_stream_init(&_stream, rand()) != 0) return false; th_comment comment; th_comment_init(&comment); th_comment_add_tag(&comment, "ENCODER", "KCemu"); th_comment_add_tag(&comment, "ENCODER_VERSION", KCEMU_VERSION); ogg_packet packet; while (th_encode_flushheader(_context, &comment, &packet) > 0) { th_comment_clear(&comment); ogg_stream_packetin(&_stream, &packet); ogg_page page; if (ogg_stream_pageout(&_stream, &page) != 0) if (!write_page(&page)) return false; } return flush(); } void TheoraVideoEncoder::allocate_color_rgb(int idx, int r, int g, int b) { _col[idx].y = (0.257 * r) + (0.504 * g) + (0.098 * b) + 16; _col[idx].u = -(0.148 * r) - (0.291 * g) + (0.439 * b) + 128; _col[idx].v = (0.439 * r) - (0.368 * g) - (0.071 * b) + 128; } bool TheoraVideoEncoder::write_page(ogg_page *page) { if (fwrite(page->header, 1, page->header_len, _f) != (size_t) page->header_len) return false; if (fwrite(page->body, 1, page->body_len, _f) != (size_t) page->body_len) return false; return true; } bool TheoraVideoEncoder::flush(void) { ogg_page page; while (ogg_stream_flush(&_stream, &page) != 0) if (!write_page(&page)) return false; fflush(_f); return true; } void TheoraVideoEncoder::encode_444(byte_t *image, byte_t *dirty) { for (unsigned int y = 0;y < _info.frame_height;y++) { int z = y * _info.frame_width; for (unsigned int x = 0;x < _info.frame_width;x++) { _buf_y[z + x] = _col[image[z + x]].y; _buf_u[z + x] = _col[image[z + x]].u; _buf_v[z + x] = _col[image[z + x]].v; } } } void TheoraVideoEncoder::encode_420(byte_t *image, byte_t *dirty) { for (unsigned int y = 0;y < _info.frame_height;y++) { unsigned int z = y * _info.frame_width; for (unsigned int x = 0;x < _info.frame_width;x++) { _buf_y[z + x] = _col[image[z + x]].y; } } for (unsigned int y = 0;y < _info.frame_height;y += 2) { unsigned int z = y * _info.frame_width; for (unsigned int x = 0;x < _info.frame_width;x += 2) { int u = _col[image[z + x]].u + _col[image[z + x + 1]].u + _col[image[z + x + _info.frame_width]].u + _col[image[z + x + _info.frame_width + 1]].u; int v = _col[image[z + x]].v + _col[image[z + x + 1]].v + _col[image[z + x + _info.frame_width]].v + _col[image[z + x + _info.frame_width + 1]].v; _buf_u[(z + x) / 2] = u / 4; _buf_v[(z + x) / 2] = v / 4; } } } bool TheoraVideoEncoder::encode(byte_t *image, byte_t *dirty) { th_ycbcr_buffer buffer; buffer[0].data = _buf_y; buffer[1].data = _buf_u; buffer[2].data = _buf_v; for (int a = 0;a < 3;a++) { buffer[a].width = _info.frame_width; buffer[a].height = _info.frame_height; buffer[a].stride = buffer[a].width; } if (_format == TH_PF_444) { encode_444(image, dirty); } else { buffer[1].width /= 2; buffer[2].width /= 2; buffer[1].height /= 2; buffer[2].height /= 2; encode_420(image, dirty); } if (th_encode_ycbcr_in(_context, buffer) != 0) { return false; } ogg_packet packet; while (th_encode_packetout(_context, 0, &packet)) { ogg_stream_packetin(&_stream, &packet); ogg_page page; if (ogg_stream_pageout(&_stream, &page) != 0) if (!write_page(&page)) return false; } return flush(); } void TheoraVideoEncoder::close(void) { if (_context != NULL) { th_encode_free(_context); _context = NULL; } if (_f != NULL) { fclose(_f); _f = NULL; } if (_buf_y != NULL) { delete[] _buf_y; delete[] _buf_u; delete[] _buf_v; _buf_y = _buf_u = _buf_v = NULL; } } #endif /* HAVE_LIBTHEORA */ KCemu-0.5.1/src/ui/gtk/wav.cc0000644001050700006200000001437111345001576015312 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "cmd/cmd.h" #include "ui/gtk/cmd.h" #include "ui/gtk/wav.h" class CMD_ui_wav_window_toggle : public CMD { private: WavWindow *_w; public: CMD_ui_wav_window_toggle(WavWindow *w) : CMD("ui-wav-window-toggle") { _w = w; register_cmd("ui-wav-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; class CMD_ui_wav_info : public CMD { private: WavWindow *_w; public: CMD_ui_wav_info(WavWindow *w) : CMD("ui-wav-info") { _w = w; register_cmd("ui-wav-info", 0); register_cmd("ui-wav-file-selected", 1); register_cmd("ui-wav-file-closed", 2); } void execute(CMD_Args *args, CMD_Context context) { switch (context) { case 0: if (args == NULL) return; if (_w->is_visible()) _w->update(args->get_long_arg("gap")); break; case 1: if (args == NULL) return; _w->selected(args->get_string_arg("filename")); break; case 2: _w->selected(NULL); break; } } }; void WavWindow::sf_expose(GtkWidget *widget, GdkEvent *event, gpointer *data) { WavWindow *self = (WavWindow *)data; self->expose(); } WavWindow::WavWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { _cmd_wav_info = new CMD_ui_wav_info(this); _cmd_wav_toggle = new CMD_ui_wav_window_toggle(this); } WavWindow::~WavWindow(void) { delete _cmd_wav_info; delete _cmd_wav_toggle; } void WavWindow::init(void) { /* * wav window */ _window = get_widget("audio_window"); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(cmd_exec_sft), (char *)"ui-wav-window-toggle"); // FIXME: _w.tooltips = gtk_tooltips_new(); /* * canvas, needs GDK_EXPOSURE_MASK to be set! */ _w.canvas = get_widget("main_drawingarea"); gtk_drawing_area_size(GTK_DRAWING_AREA(_w.canvas), WINDOW_WIDTH, WINDOW_HEIGHT); gtk_signal_connect(GTK_OBJECT(_w.canvas), "expose_event", GTK_SIGNAL_FUNC(sf_expose), this); /* * comboboxentry */ _w.comboboxentry = get_widget("file_comboboxentry"); /* * open button */ _w.open = get_widget("file_button_open"); gtk_signal_connect(GTK_OBJECT(_w.open), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (gpointer)"kc-wav-open"); gtk_tooltips_set_tip(_w.tooltips, _w.open, _("Open"), NULL); /* * close button */ _w.close = get_widget("file_button_close"); gtk_signal_connect(GTK_OBJECT(_w.close), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (gpointer)"kc-wav-close"); gtk_tooltips_set_tip(_w.tooltips, _w.close, _("Close"), NULL); /* * play button */ _w.play = get_widget("control_togglebutton_play"); gtk_signal_connect(GTK_OBJECT(_w.play), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (gpointer)"kc-wav-play"); gtk_tooltips_set_tip(_w.tooltips, _w.play, _("Play"), NULL); /* * stop button */ _w.stop = get_widget("control_button_stop"); gtk_signal_connect(GTK_OBJECT(_w.stop), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (gpointer)"kc-wav-stop"); gtk_tooltips_set_tip(_w.tooltips, _w.stop, _("Stop"), NULL); /* * record button */ _w.record = get_widget("control_togglebutton_record"); gtk_signal_connect(GTK_OBJECT(_w.record), "clicked", GTK_SIGNAL_FUNC(cmd_exec_sf), (gpointer)"kc-wav-record"); gtk_tooltips_set_tip(_w.tooltips, _w.record, _("Record"), NULL); init_dialog("ui-wav-window-toggle", "window-audio"); _w.gc = NULL; _image_y = 0; _image = gdk_image_new(GDK_IMAGE_FASTEST, gdk_visual_get_system(), WINDOW_WIDTH, 2 * WINDOW_HEIGHT); } void WavWindow::selected(const char *filename) { gboolean sensitive = TRUE; if (filename == NULL) { filename = ""; sensitive = FALSE; } gtk_widget_set_sensitive(_w.close, sensitive); gtk_widget_set_sensitive(_w.play, sensitive); gtk_widget_set_sensitive(_w.stop, sensitive); gtk_widget_set_sensitive(_w.record, FALSE); GtkEntry *entry = GTK_ENTRY(GTK_BIN(_w.comboboxentry)->child); gtk_entry_set_text(GTK_ENTRY(entry), filename); } void WavWindow::expose(void) { if (_w.gc == NULL) { _w.gc = gdk_gc_new(GTK_WIDGET(_w.canvas)->window); /* * clear image not in initialization to decrease startup time * instead we do it when receiving the first expose event */ for (int y = 0;y < 2 * WINDOW_HEIGHT;y++) for (int x = 0;x < WINDOW_WIDTH;x++) gdk_image_put_pixel(_image, x, y, 0xffffffff); } gdk_draw_image(GTK_WIDGET(_w.canvas)->window, _w.gc, _image, 0, _image_y, 0, 0, WINDOW_WIDTH, WINDOW_HEIGHT); } void WavWindow::update(int gap) { int a, x; static int cnt = 80; if (_w.gc == NULL) return; x = gap / 5; if (x >= WINDOW_WIDTH) return; gdk_image_put_pixel(_image, x, _image_y, 0); gdk_image_put_pixel(_image, x, _image_y + WINDOW_HEIGHT, 0); if (--cnt >= 0) return; cnt = 80; _image_y++; for (a = 0;a < WINDOW_WIDTH;a++) { gdk_image_put_pixel(_image, a, _image_y, 0xffffffff); gdk_image_put_pixel(_image, a, _image_y + WINDOW_HEIGHT, 0xffffffff); } gdk_image_put_pixel(_image, 550 / 5, _image_y, 0xff0000); gdk_image_put_pixel(_image, 550 / 5, _image_y + WINDOW_HEIGHT, 0xff0000); gdk_image_put_pixel(_image, 1000 / 5, _image_y, 0x00ff00); gdk_image_put_pixel(_image, 1000 / 5, _image_y + WINDOW_HEIGHT, 0x00ff00); expose(); if (_image_y >= WINDOW_HEIGHT) _image_y = 0; } KCemu-0.5.1/src/ui/gtk/ui_gtk_c80.cc0000644001050700006200000000260211345001576016443 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "ui/generic/ui_c80.h" #include "ui/gtk/ui_gtk_c80.h" UI_Gtk_C80::UI_Gtk_C80(void) : UI_Gtk_Base(new UI_C80()) { _colors.push_back(UI_Color(false, 0x00, 0x00, 0x00)); /* black */ _colors.push_back(UI_Color(false, 0x00, 0x20, 0x00)); /* really dark green */ _colors.push_back(UI_Color(false, 0x00, 0xe0, 0x00)); /* green */ _colors.push_back(UI_Color(false, 0xff, 0x8c, 0x00)); /* dark orange */ _colors.push_back(UI_Color(false, 0x9a, 0xcd, 0x32)); /* led green */ } UI_Gtk_C80::~UI_Gtk_C80(void) { } KCemu-0.5.1/src/ui/gtk/color.cc0000644001050700006200000000651311345001577015633 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/prefs/prefs.h" #include "ui/gtk/cmd.h" #include "ui/gtk/color.h" #include "libdbg/dbg.h" class CMD_color_window_toggle : public CMD { private: ColorWindow *_w; public: CMD_color_window_toggle(ColorWindow *w) : CMD("ui-color-window-toggle") { _w = w; register_cmd("ui-color-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; void ColorWindow::sf_adjustment_changed(GtkAdjustment *adj, double *data) { *data = adj->value; CMD_EXEC("ui-update-colortable"); } ColorWindow::ColorWindow(const char *ui_xml_file) : UI_Gtk_Window(ui_xml_file) { _brightness_fg = Preferences::instance()->get_int_value("color_brightness_fg", 50) / 100.0; _contrast_fg = Preferences::instance()->get_int_value("color_contrast_fg", 70) / 100.0; _brightness_bg = Preferences::instance()->get_int_value("color_brightness_bg", 35) / 100.0; _contrast_bg = Preferences::instance()->get_int_value("color_contrast_bg", 50) / 100.0; _cmd = new CMD_color_window_toggle(this); } ColorWindow::~ColorWindow(void) { delete _cmd; } GtkAdjustment * ColorWindow::init_adjustment(GtkRange* range, double *val_ptr) { GtkAdjustment *adj = gtk_range_get_adjustment(range); gtk_range_set_value(range, *val_ptr); gtk_object_set_data(GTK_OBJECT(adj), "self", this); gtk_signal_connect(GTK_OBJECT(adj), "value_changed", GTK_SIGNAL_FUNC(sf_adjustment_changed), val_ptr); return adj; } void ColorWindow::init(void) { _window = get_widget("color_window"); gtk_window_position(GTK_WINDOW(_window), GTK_WIN_POS_MOUSE); gtk_signal_connect(GTK_OBJECT(_window), "delete_event", GTK_SIGNAL_FUNC(cmd_exec_sft), (char *)"ui-color-window-toggle"); // FIXME: /* * foreground contrast */ _w.c_fg_vscale = get_widget("foreground_contrast_vscale"); _w.s_fg_adj = init_adjustment(GTK_RANGE(_w.c_fg_vscale), &_contrast_fg); /* * foreground brightness */ _w.b_fg_vscale = get_widget("foreground_brightness_vscale"); _w.v_fg_adj = init_adjustment(GTK_RANGE(_w.b_fg_vscale), &_brightness_fg); /* * background contrast */ _w.c_bg_vscale = get_widget("background_contrast_vscale"); _w.s_bg_adj = init_adjustment(GTK_RANGE(_w.c_bg_vscale), &_contrast_bg); /* * background brightness */ _w.b_bg_vscale = get_widget("background_brightness_vscale"); _w.v_bg_adj = init_adjustment(GTK_RANGE(_w.b_bg_vscale), &_brightness_bg); init_dialog("ui-color-window-toggle", "window-colors"); } KCemu-0.5.1/src/ui/gtk/window.cc0000644001050700006200000002002111345001576016011 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/kc.h" #include "ui/gtk/window.h" #include "ui/gtk/cmd.h" using namespace std; bool UI_Gtk_Window::_static_init = false; string UI_Gtk_Window::_icon_path; string UI_Gtk_Window::_image_path; UI_Gtk_Window::UI_Gtk_Window(void) { static_init(); _window = 0; _visible = false; _gtk_builder = NULL; _help_args = new CMD_Args(); } UI_Gtk_Window::UI_Gtk_Window(const char *ui_xml_file) { static_init(); _window = 0; _visible = false; _help_args = new CMD_Args(); string ui_xml_file_path = _image_path + ui_xml_file; _gtk_builder = gtk_builder_new(); gtk_builder_set_translation_domain(_gtk_builder, PACKAGE); gtk_builder_add_from_file(_gtk_builder, ui_xml_file_path.c_str(), NULL); } UI_Gtk_Window::~UI_Gtk_Window(void) { delete _help_args; } void UI_Gtk_Window::static_init(void) { if (_static_init) return; _static_init = true; string datadir(kcemu_datadir); _icon_path = datadir + "/icons/"; _image_path = datadir + "/images/"; GtkSettings *settings = gtk_settings_get_default(); gtk_settings_set_long_property(settings, "gtk-can-change-accels", 1, "UI_Gtk_Window::static_init"); gtk_settings_set_string_property(settings, "gtk-menu-bar-accel", "", "UI_Gtk_Window::static_init"); GdkPixbuf *pixbuf16 = get_icon("kcemu-winicon_16x16.png"); GdkPixbuf *pixbuf32 = get_icon("kcemu-winicon_32x32.png"); GdkPixbuf *pixbuf48 = get_icon("kcemu-winicon_48x48.png"); GList *icon_list = NULL; if (pixbuf16 != NULL) icon_list = g_list_append(icon_list, pixbuf16); if (pixbuf32 != NULL) icon_list = g_list_append(icon_list, pixbuf32); if (pixbuf48 != NULL) icon_list = g_list_append(icon_list, pixbuf48); if (icon_list != NULL) gtk_window_set_default_icon_list(icon_list); } void UI_Gtk_Window::show(void) { if (_visible) return; if (_window == NULL) init(); gtk_widget_show(_window); _visible = true; } void UI_Gtk_Window::hide(void) { if (!_visible) return; gtk_widget_hide(_window); _visible = false; } void UI_Gtk_Window::toggle(void) { if (_visible) hide(); else show(); } bool UI_Gtk_Window::is_visible(void) { return _visible; } GtkWidget * UI_Gtk_Window::get_window(void) { return _window; } GdkPixbuf * UI_Gtk_Window::get_pixbuf(string path) { GdkPixbuf *pixbuf = gdk_pixbuf_new_from_file(path.c_str(), NULL); return pixbuf; } GdkPixbuf * UI_Gtk_Window::get_icon(const char *name) { return get_pixbuf(_icon_path + name); } GdkPixbuf * UI_Gtk_Window::get_image(const char *name) { return get_pixbuf(_image_path + name); } GtkWidget * UI_Gtk_Window::get_widget_or_null(const char *name) { g_assert(_gtk_builder != NULL); GtkWidget *widget = GTK_WIDGET(gtk_builder_get_object(_gtk_builder, name)); return widget; } GtkWidget * UI_Gtk_Window::get_widget(const char *name) { GtkWidget *widget = get_widget_or_null(name); if (widget == NULL) g_error("widget with name '%s' not found!", name); return widget; } GtkWidget * UI_Gtk_Window::get_widget(const char *name, int nr) { char widget_name[80]; snprintf(widget_name, sizeof(widget_name), "%s%d", name, nr); return get_widget(widget_name); } GtkCellRenderer * UI_Gtk_Window::bind_list_model_column(GtkComboBox *combobox, int column, ...) { GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox), renderer, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combobox), renderer, "text", column, NULL); va_list ap; va_start(ap, column); while (242) { const char *attr = va_arg(ap, const char *); if (attr == NULL) break; int index = va_arg(ap, int); gtk_cell_layout_add_attribute(GTK_CELL_LAYOUT(combobox), renderer, attr, index); } va_end(ap); return renderer; } GtkCellRenderer * UI_Gtk_Window::add_text_renderer(GtkTreeView *treeview, GtkTreeViewColumn *column, const char *title, ...) { GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); gtk_tree_view_column_set_title(column, title); gtk_tree_view_column_pack_end(column, renderer, TRUE); gtk_tree_view_column_set_resizable(column, TRUE); gtk_tree_view_column_set_expand(column, TRUE); va_list ap; va_start(ap, title); while (242) { const char *attr = va_arg(ap, const char *); if (attr == NULL) break; int index = va_arg(ap, int); gtk_tree_view_column_add_attribute(column, renderer, attr, index); } va_end(ap); return renderer; } GtkCellRenderer * UI_Gtk_Window::add_icon_renderer(GtkTreeView *treeview, GtkTreeViewColumn *column, const char *title, ...) { GtkCellRenderer *renderer = gtk_cell_renderer_pixbuf_new(); gtk_tree_view_column_set_title(column, title); gtk_tree_view_column_pack_start(column, renderer, FALSE); gtk_tree_view_column_set_resizable(column, FALSE); gtk_tree_view_column_set_expand(column, FALSE); va_list ap; va_start(ap, title); while (242) { const char *attr = va_arg(ap, const char *); if (attr == NULL) break; int index = va_arg(ap, int); gtk_tree_view_column_add_attribute(column, renderer, attr, index); } va_end(ap); return renderer; } void UI_Gtk_Window::sf_help(GtkWidget *widget, gpointer data) { UI_Gtk_Window *w = (UI_Gtk_Window *)data; char *help_topic = (char *)g_object_get_data(G_OBJECT(widget), "help-topic"); if (help_topic == NULL) return; w->_help_args->set_string_arg("help-topic", help_topic); CMD_EXEC_ARGS("ui-help-window-show", w->_help_args); } void UI_Gtk_Window::sf_help_recursive(GtkWidget *widget, gpointer data) { UI_Gtk_Window *w = (UI_Gtk_Window *)data; while (widget != NULL) { char *help_topic = (char *)g_object_get_data(G_OBJECT(widget), "help-topic"); if (help_topic != NULL) { w->_help_args->set_string_arg("help-topic", help_topic); CMD_EXEC_ARGS("ui-help-window-show", w->_help_args); break; } widget = gtk_widget_get_parent(widget); } } void UI_Gtk_Window::init_dialog(const char *close_button_func, const char *help_topic) { g_object_set_data(G_OBJECT(_window), "help-topic", (gpointer)help_topic); if (close_button_func != NULL) { GtkWidget *button_close = get_widget("dialog_button_close"); g_assert(GTK_IS_BUTTON(button_close)); g_signal_connect(G_OBJECT(button_close), "clicked", G_CALLBACK(cmd_exec_sf), (gpointer)close_button_func); GTK_WIDGET_SET_FLAGS(button_close, GTK_CAN_DEFAULT); gtk_widget_grab_default(button_close); } if (help_topic != NULL) { GtkWidget *button_help = get_widget("dialog_button_help"); g_assert(GTK_IS_BUTTON(button_help)); g_object_set_data(G_OBJECT(button_help), "help-topic", (gpointer)help_topic); g_signal_connect(G_OBJECT(button_help), "clicked", G_CALLBACK(sf_help), (gpointer)this); } GtkWidget *header_label = get_widget("header_label"); g_assert(GTK_IS_LABEL(header_label)); PangoFontDescription *font_desc = pango_font_description_from_string("Sans 16"); gtk_widget_modify_font(header_label, font_desc); pango_font_description_free(font_desc); } KCemu-0.5.1/src/ui/gtk/poly880_keyboard.xpm0000644001050700006200000071003210527416075020041 0ustar glaubitzfbedv/* XPM */ static char *poly880_keyboard[] = { /* width height num_colors chars_per_pixel */ " 680 340 52 1", /* colors */ ". c #563f49", "# c #000000", "a c #7c0a00", "b c #7a7a70", "c c #780004", "d c #c9460e", "e c #c1b5a5", "f c #ba0403", "g c #c4400d", "h c #bb350a", "i c #9e1301", "j c #ac2405", "k c #c03b0b", "l c #a31902", "m c #a81e04", "n c #b62f08", "o c #b12a07", "p c #b7a998", "q c #a79885", "r c #a2927e", "s c #b1a392", "t c #bcaf9f", "u c #9d8c78", "v c #92806b", "w c #978672", "x c #ac9e8b", "y c #b50403", "z c #a90302", "A c #af0302", "B c #a40202", "C c #990101", "D c #880000", "E c #8e0000", "F c #930101", "G c #9e0201", "H c #135817", "I c #05c204", "J c #04b803", "K c #03b303", "L c #04bd04", "M c #02a301", "N c #009400", "O c #019e01", "P c #03ae02", "Q c #019900", "R c #02a902", "S c #432f38", "T c #302026", "U c #49353e", "V c #503a43", "W c #3d2a32", "X c #36252c", /* pixels */ "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".................######################################################################......######################################################################......######################################################################......######################################################################..................................................................######################################################################......######################################################################..................................................................######################################################################.................", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#....#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#................", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..............................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#...............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb##bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#............................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#............................................................#bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb##bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb#............................................................#cccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccccc#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#............................................................#bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb##bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb#............................................................#ccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddddddddddghhhhddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddkjliiiiiimndddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiiiiiiiiiiimjhdddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddgmiiiiiiiiiiilkdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiiiiiiiiiiiiiiindddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddddhiiiiiljjjliiiiihddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiiiiiiiiiiiiiiiijddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddhiiiijkdddddkmiiiikdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddhoiiiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddgliiihdddddddddjiiildddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddgliiioddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddoiiihdddddddddddmiiinddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddgliiigdddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddgiiimddddddddddddkiiimddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddddhiiiodddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddoiiikdddddddddddddljohddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddliildddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddliiiddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddoiiikddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddhiiihddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddkiiinddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddgiiioddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiljjjjjjjjjjjnddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddhiiihddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddddddiiijddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiijddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddhiiihddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddddddiiijddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiijddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddhiiihddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddddddiiijddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiimhhhhhhhhhhhkddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddhiiihddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddddddiiijddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeepqrrrseeeeeeeeetsrrrseeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeepsspeeeeeetssseeessssssssssteesssteeeeeepsspeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddgiiioddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddkiiioddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeetuvvvvvvwseeeeeexvvvvvvvxeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervvueeeeeexvvveeevvvvvvvvvvseevvvxeeeeeeuvvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffyzzzzzzzAffffffzzzzzzzzzzyffffyBCCCzfffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddhiiihddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeepvvqpeepqvvpeeeeqvwxtetxwvqeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervvvteeeeervvveeevvssssssssteevvvueeeeeevvvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDDDDDDDDEzffffDDDDDDDDDDzfffzDDDDDDEzfffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddjiiiddddddddddddddkimjkdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddoiiigddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeewvseeeeeexvueeepvwteeeeetwvpeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervrvseeeeevrvveeevveeeeeeeeeeevvrveeeeesvrvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDFzzzzzCDDyfffDDzzzzzzzzyffADDBffyGDEyffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddniiikdddddddddddddoiiindddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddddliildddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeesvueeeeeeeewueeeuvxeeeeeeexvueeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervsvreeeesvsvveeevveeeeeeeeeeevvsvseeeervsvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCffffffGDGfffDDfffffffffffGDBfffffCDBffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddgiiimdddddddddddddliiigdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddddniiindddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeervseeeeeeeeeeeeevveeeeeeeeevveeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervsrveeeervevveeevveeeeeeeeeeevvevreeeevrsvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCffffffzDCfffDDfffffffffffCDzfffffACBffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddoiiihdddddddddddoiiioddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddddddgliiigdddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeevveeeeeeeeeeeeesvreeeeeeeeervseeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervsxvseeewuevveeevvssssssspeeevveuveeepvxsvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCffffffBDCfffDDfffffffffffBDEyfffffffffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddgliiihdddddddddniiiigddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijddddddddddgliiinddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeevveeeeepssssstesvreeeeeeeeervseeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervstvqeepvxevveeevvvvvvvvvreeevvexvpeeqvtsvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCfffffBDDAfffDDzzzzzzzAffffEDDFBAffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddhiiiimkdddddkmiiiihdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiijdddddddghoiiiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeevveeeeervvvvvsesvreeeeeeeeervseeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervsewweeqvtevveeevvssssssspeeevvepvqeewuesvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDDDDDDDDDGffffDDDDDDDDDCfffffGEDDDEGyfffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddddhiiiiiljjjliiiiihddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiiiiiiiiiiiiiiiijddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiiiihdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeewvteeeepsssuvsepvueeeeeeeeeuvpeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervseqvpeuweevveeevveeeeeeeeeeevveewwetvqesvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDECCCDDCAfffffDDzzzzzzzAfffffffAGFDDEyffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddhliiiiiiiiiiilhdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiiiiiiiiiiiiiilndddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiiiihdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeervxeeeeeeeervseevvteeeeeeetvveeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervsepvxtvqeevveeevveeeeeeeeeeevveeqvtxvpesvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCfffADEyfffffDDffffffffffffffffffyCDCffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddnmiiiiiiimndddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiiiiiiiiiiijjhdddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiiiiiiiiiiiiiiiiihdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeepvweeeeeeeervseeqvqeeeeeeeqvqeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervseevuxvseevveeevveeeeeeeeeeevveesvxuveesvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCffffzDEyffffDDffffffffffACBffffffyDDffffffffffffffccc#..............", "..............#aaadddddddddddddddddddddddddddddddkhhhhddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeervrteeeeepwvseetwvseeeeesvwteeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervseervrveeevveeevveeeeeeeeeeevveeevrvreesvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCfffffCDCffffDDffffffffffADEfffffffDDffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeervwqssxuvvrteeeswvuxsxuvvseeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervseesvvreeevveeevvrrrrrrrrxeevveeervvseesvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCfffffyEDAfffDDfffffffffffEDCfffffBDCffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeexwvvvvvupeeeeeetuvvvvvrteeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeervseeevvseeevveeevvvvvvvvvvreevveeesvveeesvreeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCffffffBDEfffDDCCCCCCCCBffADDFBzzFDEyffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeetssseeeeeeeeeeeessseeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccfffffffffffffffzDCfffffffFDGffDDDDDDDDDDCfffAFDDDDDFyfffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccfffffffffffffffffffffffffffffffffffffffffffffffzzzyfffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddkhhhhhkddddddkojjhdddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjiiiiiimgdddjimjjilgdddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjddddkloddolkdddglmdddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjdddddnidgihdddddkikddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjdddddhidnidddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjdddddmmdjjdddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjljjjjlikdjjdddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjljjjjngddjjdddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjddddddddhidddddddnkddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjddddddddgindddddginddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjdddddddddolkdddglldddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddjjddddddddddjimjjilgdddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaadddddkkdddddddddddkojjndddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#............................................................#bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb##bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb#............................................................#ccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcccc#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#............................................................#bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb##bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb#............................................................#cccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccccc#..............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb##bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#............................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#..............", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..............................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#...............", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#....#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#................", ".................######################################################################......######################################################################......######################################################################......######################################################################..................................................................######################################################################......######################################################################..................................................................######################################################################.................", ".................######################################################################......######################################################################......######################################################################......######################################################################..................................................................######################################################################......######################################################################..................................................................######################################################################.................", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#....#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#................................................................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..............................................................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#...............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb##bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#............................................................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#............................................................#bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb##bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb#............................................................#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#............................................................#bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb##bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb#............................................................#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddkjliiijnddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddhjiiimogddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddniiiigdddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiimjkdddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddgmiiiiiiiilgddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddgliiiiiiiiodddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddliiiindddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiimgdddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddliiiiiiiiiilgdddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddgliiiiiiiiiijddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddkiiiiildddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiiilgddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddoiiimkddgoiiildddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddliiimhddgnliiodddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddoiijiiikddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijdddddddghmiiimddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddiiijddddddniiihddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddoiiijddddddgliikddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddiiinjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddmiiikdddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddhiiikdddddddliioddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddliilddddddddniijddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddniiigkiiigdddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddkiiiodddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddhiiiddddddddjiijddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddgiiindddddddddiiiddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddmiijddliindddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijdddddddddddiiijdddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddhiiigdddddddmiijddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddhiiigdddddddddjiihdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddkiiikddoiildddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijdddddddddddiiijdddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddiiinddddddgiiihddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddhiiiddddddddddjiihdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddoiimdddgiiikddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddkiiihdddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddoiiihddddgliildddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddhiiiddddddddddjiiodddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddiiinddddmiijddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddmiilddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddjiiiljjmiiilgdddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddkiiikdddddddddiiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddniiigddddniiigdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddhmiiihddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddddkliiiiiiindddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiioddddddddniiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddmiijddddddiiindddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiilhdddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddhliiiiiiiiinddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddoiiihddddddgliiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkiiihddddddjiildddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiinddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddjiiilohhnmiiijdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddgiiiiokddgniiiiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddoiiidddddddkiiikddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiiilhddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddhiiijddddddhiiioddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddhiiiiiiiiiijjiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiioddddddddliijddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddhoiiiihdddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddkhhkddddddghhhddddddknjjokddddddghhddddddghkdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddliimddddddddniiigdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddhliiiiiiiodjiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddniiiiiiiiiiiiiiiigdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddgliildddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjiimddddddniiiddddgjiiiiiilkddddhiihdddddhijdddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddgiiihdddddddddiiindddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddgomiiljkddmiihdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddmiiiiiiiiiiiiiiiindddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijdddddddddddniiihddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjiiigdddddjiiiddddlimhddkoiikdddhiilgddddhijdddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddhiiiddddddddddjiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddiiihdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddkiiiiiiiiiiiiiiiiildddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijdddddddddddgiiijddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeesrrrxteeeessssssssssstetsssssssssseeessssssspeeeeeeeeeebbb##bbbeeeeeeeeeeeeeetssssssspeeeeeessssssssssteeeeeesrrrqpeeeeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjijihdddddijiidddoijddddddhildddhiiioddddhijdddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddhiiiddddddddddjiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddkiiigdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddoiiigddddddddddniiikddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddddiiijddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeetwvvvvvvqeeevvvvvvvvvvvsesvvvvvvvvvveeevvvvvvvvwseeeeeeeebbb##bbbeeeeeeeeeeeeeesvvvvvvvvwseeeevvvvvvvvvvseeeeswvvvvvvuteeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihijddddhihiiddgiigdddddddminddhimiikdddhijdddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddhiiigdddddddddmiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddhnjkddddddddoiilddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddiiimdddddddddddgiiijddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijdddddddddddgiiijddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeewvrteexwvseessssqvusssstesvusssssssseeevvsssssrvvteeeeeeebbb##bbbeeeeeeeeeeeeeesvusssssrvvteeevvssssssssteeeqvwxteesuvweeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihjiddddjidiiddhijddddddddhijddhijoildddhijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddiiinddddddddgiiihdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddliijddddddddliioddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddniiinddddddddddddjiiigdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijdddddddddddniiihddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeepvueeeeesvueeeeeesvreeeeeesvreeeeeeeeeeevveeeeeervxeeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeeeqvqeeevveeeeeeeeeeepvwteeeeeeuvxeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihnihdddlmdiiddjihdddddddddiiddhijdlioddhijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddmiilgdddddddjiiigdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddjiiigddddddoiiigddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddmiiidddddddddddddhiiindddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddddgliiigddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeesvreeeeeerreeeeeesvreeeeeesvreeeeeeeeeeevveeeeeesvreeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeeesvreeevveeeeeeeeeeervxeeeeeeepvxeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihgioddkindiiddjihdddddddddiiddhijdkiigdhijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddkiiilkddddgjiiioddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkiiilgdddgjiiiodddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddkiiijddddddddddddddiiildddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiijddddddddknliiiodddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeetvvseeeeeeeeeeeeesvreeeeeesvreeeeeeeeeeevveeeeeexvreeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeeexvreeevveeeeeeeeeeevveeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihdllddoigdiiddjihdddddddddiiddhijddoimdhijdddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddoiiiiljjmiiiildddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddjiiiimjjiiiijddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddoiiikddddddddddddddoiiikddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiiiilddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeqvvwqseeeeeeeeeesvreeeeeesvusssssssteeevveeeeetwvseeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeexvvpeeevvssssssspeesvreeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihdoikdmlddiiddoinddddddddgilddhijddglinhijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddoiiiiiiiiiijgdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddjiiiiiiiiijdddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddliildddddddddddddddkiiioddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiiiiiodddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeesuvvvvrpeeeeeeesvreeeeeesvvvvvvvvvseeevvrrrrrvvreeeeeeeebbb##bbbeeeeeeeeeeeeeesvvvvvvvvvqeeeevvvvvvvvvreesvreeeeesssssseeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihdkingioddiiddhimddddddddnijddhijdddhiinijdddddddddddaaa#..............", "..............#aaadddddddddddddddddddddddddddddkjiiiiiimndddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddnliiiiimhddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddiiioddddddddddddddddliiiddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiiiiiiiiiiiljngddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeetxrvvvseeeeeesvreeeeeesvusssssssteeevvvvvvvuqeeeeeeeeebbb##bbbeeeeeeeeeeeeeesvwrrrvvrpeeeeevvssssssspeesvreeeeevvvvvveeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihddimnihddiidddlikdddddddlikddhijddddjilijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddkhhhddddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddghhhdddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeexvveeeeeesvreeeeeesvreeeeeeeeeeevveeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeesvreeepvwteeeeevveeeeeeeeeepvueeeeessssvveeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihddjijidddiidddhilgdddddjijdddhijddddgliijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeerreeeeeeeuvseeeeesvreeeeeesvreeeeeeeeeeevveeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeesvwteeeevveeeeeeeeeeevvteeeeeeeevveeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihddhiijdddiiddddoiijhholilgdddhijdddddniijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeewvpeeeeeervseeeeesvreeeeeesvreeeeeeeeeeevveeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeervreeeevveeeeeeeeeeeqvqeeeeeeeevveeeeeeeeeeeeebbb#............................................................#aaadddddddddddddjihdddiihdddiidddddhliiiilodddddhijddddddmijdddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeqvwteeeetvveeeeeesvreeeeeesvreeeeeeeeeeevveeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeetwvpeeevveeeeeeeeeeetwvxeeeeeexvveeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddghhkddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeewvwqssqvvseeeeeesvreeeeeesvwrrrrrrrrpeevveeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeeexvweeevvrrrrrrrrxeeetwvuxssqwvvxeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeetqvvvvvwseeeeeeesvreeeeeesvvvvvvvvvvseevveeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeesvreeeeeeeuvqeevvvvvvvvvvreeeetqvvvvvvqteeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeepsspeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeepsspeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddkkddkhhhhhhhgdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddkkdghgdddddhkdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddkkdhkddddddkhdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddgnjjngddddhhhhhhgdddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjiiiiiiihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddmmddddnigdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdnigddddgindddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddklljjlihdddiiiiiiioddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjjddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddglnddkinddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddmjddddmmddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddmjddddoigddihddddnikdddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjjddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddhikdljdddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddkihddhikddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddihdddddjkddihdddddmjdddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjjddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddjlolgdddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddolgglodddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddljgddddddddihdddddjjdddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjmhhhhhhddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddglihddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddljjlddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddhiimokdddddihddddgindddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjiiiiiiiddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddglihddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddkiikddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddkjliilhdddimjjjjilddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjjddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddjlolgdddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddddjjdddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddddddgnlikddimjjjjhdddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjjddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddhikdljdddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddddjjdddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddghddddddljddihddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjjddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddgloddkihddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddddjjdddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddkikdddddjjddihddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjjddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddmlddddnlgdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddddjjdddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddlmgdddkihddihddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddjjddjiiiiiiijdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdnigdddddmmdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjdddddjjdddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddglijjmijdddihddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddkkddkhhhhhhhkdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddkkdhkddddddghgddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddkkdddddkkdddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddddhjjokddddhgddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#............................................................#bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb##bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb#............................................................#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#............................................................#bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb##bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb#............................................................#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#..............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb##bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#............................................................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..............................................................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#...............", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#....#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#................................................................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................", ".................######################################################################......######################################################################......######################################################################......######################################################################..................................................................######################################################################......######################################################################..................................................................######################################################################.................", ".................######################################################################......######################################################################......######################################################################......######################################################################..................................................................######################################################################......######################################################################..................................................................######################################################################.................", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#....#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#................", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..............................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#...............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb##bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#............................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#............................................................#bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb##bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb#............................................................#HHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHHH#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#............................................................#bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb##bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb#............................................................#HHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddgomiiimogdddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkjjjjjjjjjjjjjjjjnddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddkjjjjjjjjjjjjkddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddoiiiiiiiiioddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddhiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddhjjkddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddjiiiiiiiiiiiihddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddjiiiiiiiiiiijdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddhiiiiiiiiiiiiiiiijddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddddddddddkiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddmiiiiiiiiiiiihddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddoiiimhddgnliiikddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkjjjjjjjjjjjjjliihddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIJKKJIIIIIILKKKIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddgliiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddiiimjjjjjjjjjkddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkiiijddddddgiiimddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddhiindddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNNOIIIIIIPNNNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddmiiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddkiiihddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddjiilddddddddoiiigdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddhiijddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNNNLIIIIIMNNNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddddddddoiiiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddhiiidddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiinddddddddgiljkdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddglilgddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNMNKIIIIINMNNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddhiiiiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddjiildddddddddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddhiiidddddddddddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddmiihdddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKNMIIIIKNKNNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddddddgiiiliiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddmiijdddddddddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddoiijdddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddniimddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKMNIIIIMNINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddddddliiihiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddiiinddkhhgdddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddjiioddkjliimogdddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddgliigddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKPNKIIIQOINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddjiiindiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkiiihnliiiilndddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddliihgmiiiiiiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddoiiodddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKLNRIIJNPINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddddhiiijddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddhiiiliiiiiiiimgdddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiinliiiiiiiiiihdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddgiiigdddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKIQQIIRNLINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddkiiilgddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddjiiiiimjjmiiiimdddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiililngddkoiiiikddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddmiioddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKIRNJIOQIINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddgliiikdddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddmiiimgddddgjiiioddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiilgddddddgliilddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddgiiigddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKIJNPLNRIINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddjiiihddddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddjmijddddddddmiiiddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiiigddddddddniiikdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddoiimdddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKIINOPNKIINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddniiijdddddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddkiiihdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiijddddddddddiiindddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddiiihdddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKIIMNMNIIINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddhiiilddddddiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddliiodddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddiiihddddddddddjiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddhiiiddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeetsssssssssteeeeepqrrxteeeepsssssssssspeeeeeeeeeeeeeebbb##bbbeeeeeeeetsssssspeeeeeeeeetsseeeeeeeeeetxrrqpeeeeetspeeeeeepsseeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKIIKNNMIIINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddgliiigddddddiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddjiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddjiihddddddddddjiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvvvvvvvvvseeetuvvvvvvseeervvvvvvvvvvreeeeeeeeeeeeeebbb##bbbeeeeeeeesvvvvvvvwseeeeeeervvseeeeeeeeqvvvvvvreeeesvreeeeesvvseeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIMNKIIINNKIIINNIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddjiiiljjjjjjjiiimjjndddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddjiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddjiihddddddddddjiijdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvusssssssteetwvqpeexvvseepssssvvsssspeeeeeeeeeeeeeebbb##bbbeeeeeeeesvussssqvvteeeeetvuvueeeeeeervuseepwvreeesvreeeesvvseeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddjiiiiiiiiiiiiiiiiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddkhddddddddddjiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddhiijddddddddddiiindddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddhiiidddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeeeuvxeeeeesvweeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvreeeeeqvqeeeeexvxuvteeeeexvueeeeetwvpeesvreeesvvseeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddjiiiiiiiiiiiiiiiiijdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddhiiigdddddddddiiihdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddgiiigddddddddkiiikdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddoiimdddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeetvweeeeeeewrpeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvreeeeesvreeeeewvesvqeeeeeuvpeeeeeequxeesvreesvvseeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddnjjjjjjjjjjjiiimjjndddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiinddddddddniiigdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddjiimdddddddgliimddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddmiijdddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeexvreeeeeeeeeeeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvreeeeeqvxeeeepvreewweeeetvveeeeeeeeeeeesvresvvseeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddmiilgddddddgliimddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddgiiilkddddkliiikddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddiiihdddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvusssssseeervseeeeeeeeeeeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvussssqvreeeeervpeeqvseeesvreeeeeeeeeeeesvrsvvxeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkiiilkddddkliiigddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddhiiiiljjliiiijdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddgiiihdddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvvvvvvvveeervseeeeeeeeeeeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvvvvvvvvpeeeetvweeepvueeesvreeeeeeeeeeeesvwvvvueeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddjiiiimjjliiiihdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddhiiiiiiiiiijddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddhiiiddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvusssssseeervseeeeeeeeeeeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvussssqwvseeexvxeeeeuvteesvreeeeeeeeeeeesvvvswvreeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddjiiiiiiiiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddgoiiiiiimkdddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddhiiiddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeeqvxeeeeeeeeeeeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvreeeeetvvteewvvvvvvvvqeepvueeeeeeeeeeeesvvsetwvseeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIKMMMKIIIIJKJIIIIIIIIJKJIIIILPMMRJIIIIILKJIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddkmiiiiiiogdddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddkhhhddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeesvreeeeeeexuxeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvreeeeeervsepvwrrrrrrvweeevveeeeeeetwreesvreeesvvteeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIKQNNNNNQLIILNNJIIIIIIJNNLIIIRNNNNNNMIIIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddhhhkddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeeevvteeeeeewvseeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvreeeeeeuvseuvseeeeeervxeervxeeeeeeqvreesvreeeeqvwteeeeeeeebbb#............................................................#HHHIIIIIIIIIIKNQPLILMNQLIIPNQLIIIILQNPIIIMNOKIIJQNMIIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeeeqvuteeeervweeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvreeeeesvvetvveeeeeeepvueepvvpeeeesvvpeesvreeeeervreeeeeeeebbb#............................................................#HHHIIIIIIIIILNNLIIIIIMNRIIIMNMIIIIMNOIIIPNOIIIIILQNJIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeeeervwqssuvvpeeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvwrrrruvvseqvqeeeeeeeewvpeesvvrssqvvqeeesvreeeeetwvxeeeeeeebbb#............................................................#HHHIIIIIIIIIPNRIIIIIIJQMIIILQNKIIKNQLIIIONJIIIIIIROPIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeesvreeeeeeeeeeeeqvvvvvuteeeeeeeevveeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeesvvvvvvvrpeewvpeeeeeeeeqvqeeeswvvvvwseeeesvreeeeeepvvseeeeeebbb#............................................................#HHHIIIIIIIIIONKIIIIIIIIIIIIIKNQLLQNKIIILNNIIIIIIIIIIIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeesssteeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeepsspeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIINNIIIIIIIIIIIIIIIMNMMNMIIIIKNMIIIIIIIIIIIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIINNIIIIIIIIIIIIIIILQNNQLIIIIKNMIIIIIIIIIIIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIINNIIIIIIIIIIIIIIIIKNNKIIIIIKNMIIIIIIIIIIIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIQNLIIIIIIIIIIIIIIIINNIIIIIIJNOIIIIIIIIIIIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIMNKIIIIIIIOMJIIIIIINNIIIIIIINNIIIIIIILQMIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIKNOIIIIIIJNNIIIIIIINNIIIIIIIMNPIIIIIIRNMIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIQNRIIIILQNRIIIIIIINNIIIIIIIJNNJIIIIKNNJIIKNMIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIILQNOPKPQNQIIIIIIIINNIIIIIIIIKNNMKKRNNRIIIKNQMMMMMMJIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIILONNNNNRIIIIIIIIINNIIIIIIIIIKQNNNNQKIIIIKNNNNNNNNKIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIILKKKIIIIIIIIIIIIIIIIIIIIIIIIJKKJIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddgkddddddhhhhhhhkdddghdhhgdddddhhgddhgdddddddddddddddddddddddaaa##aaadddddkhhhhhgddddddkojjhddddddghdhhgdddddhhgddddkojjnddddddddddddddddaaa##aaadddddkhhhhhgdddddhhhhhhhhdddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddkkddddddhgddhgddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddmigdddddiiiiiiijdddomdiioddddkiihddihdddddddddddddddddddddddaaa##aaadddddjiiiiiioddddjimjjilgddddomdiioddddkiihdddoiljjilhddddddddddddddaaa##aaadddddjiiiiiimgdddiiiiiiiidddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddgijndddddihdddddddddlodilmddddnlihddihdddddddddddddddddddddddaaa##aaadddddjjddddninddolkdddglmddddlodilmddddnlihddoihdddgjigdddddddddddddaaa##aaadddddjjddddklldddihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddookldddddihddddddddgikdioigdddmoihddihdddddddddddddddddddddddaaa##aaadddddjjdddddjjdgihdddddkikddgikdioigdddmoihdginddddddmmdddddddddddddaaa##aaadddddjjdddddginddihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddlkdlkddddihddddddddniddihinddgihihddihdddddddddddddddddddddddaaa##aaadddddjjdddddmodnidddddddddddniddihinddgihihdnidddddddhidddddddddddddaaa##aaadddddjjddddddomddihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddhlddojddddiohhhhkdddjjddihjjddhidihddihdddddddddddddddddddddddaaa##aaadddddjmhhhhmigdjjdddddddddddjjddihjjddhidihdjjddddddddihddddddddddddaaa##aaadddddjjddddddhiddiohhhhhkdddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjljjjjjjihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddmoddgigdddiiiiiijdddihddihhiddjjdihddihdddddddddddddddddddddddaaa##aaadddddjiiiiiijddjjdddddddddddihddihhiddjjdihdjjddddddddihddddddddddddaaa##aaadddddjjddddddhiddiiiiiiijdddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjljjjjjjihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddgimjjjindddihdddddddhigddihgihdindihddihdddddddddddddddddddddddaaa##aaadddddjjddddklodjjddddddddddhigddihgihdindihdjjddddddddihddddddddddddaaa##aaadddddjjddddddhiddihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddoljjjjmldddihdddddddomdddihdmohigdihddihdddddddddddddddddddddddaaa##aaadddddjjdddddhidhidddddddnkdomdddihdmohigdihdnldddddddhigddddddddddddaaa##aaadddddjjddddddjmddihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddlnddddgikddihdddddddlodddihdololddihddihdddddddddddddddddddddddaaa##aaadddddjjdddddnidgindddddgindlodddihdololddihdginddddddmmdddddddddddddaaa##aaadddddjjdddddginddihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddhiddddddjjddihddddddgikdddihdkiloddihddihdddddddddddddddddddddddaaa##aaadddddjjddddkloddolkdddglldgikdddihdkiloddihddoihddddjikdddddddddddddaaa##aaadddddjjddddhlldddihdddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddihddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddmjddddddhigdihddddddniddddihddiihddihddihdddddddddddddddddddddddaaa##aaadddddjiiiiiimgdddjimjjilgdniddddihddiihddihdddoiljjilhddddddddddddddaaa##aaadddddjiiiiiimgdddiiiiiiiihddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddjjddddddihddiiiiiiidddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddhgdddddddhgdhgddddddkkddddhgddkhdddhgddhgdddddddddddddddddddddddaaa##aaadddddkhhhhhgddddddkojjndddkkddddhgddkhdddhgddddkojjngdddddddddddddddaaa##aaadddddkhhhhhgdddddhhhhhhhhgddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddkkddddddhgddhhhhhhhdddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#............................................................#bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb##bbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbb#............................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#............................................................#bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb##bbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbb#............................................................#HHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHH#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#............................................................#bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb##bbbbbeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeebbbbb#............................................................#HHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHHH#..............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb##bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#............................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#..............", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..............................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#..............................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#...............", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#................................................................#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#....#bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb#................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#................", ".................######################################################################......######################################################################......######################################################################......######################################################################..................................................................######################################################################......######################################################################..................................................................######################################################################.................", ".................######################################################################......######################################################################......######################################################################......######################################################################........................................................................................................######################################################################........................................................................................................######################################################################.................", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#......................................................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#......................................................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#................", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....................................................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#....................................................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#...............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..................................................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#..................................................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#..................................................................................................#cccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccccc#..................................................................................................#HHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHHH#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#..................................................................................................#ccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcccc#..................................................................................................#HHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddmijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddnjiiimokddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddddkjliiijhdddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddniijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddgomiiiljhddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddgliiiiiiiiodddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddjiiiiiiiimgdddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddhiiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddoiiiiiiiiilkddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddgliiiiiiiiiijddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddjiiiiiiiiiilgddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddhiiiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddjiiiiiiiiiiiihdddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddliiiokddkmiiindddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddniiilhddkjiiijddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddoiiiiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddoiiilngddkjiiilgddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddniiihddddddmiildddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddliimddddddjiiikdddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddkliiiiiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddiiimdddddddhiiinddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddjiimdddddddkiiikddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddhiiigdddddddliiodddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddmiiiinjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddhiiigddddddddmiimddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddjminddddddddiiihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddjiimddddddddniildddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddiiilkdjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddjiimdddddddddhiiiddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddiiihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddliinddddddddgiiikddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddilndddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddkhjndddddddddhiiiddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddniiidddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddiiihdddddddddiiihddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddndddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddoiilddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddhiiiodddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddgiiikdddddddddliinddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddliijddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddkhnmiiijddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddhiiiddddddddddjiijddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddoiiikddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddjiiiiindddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddhiiiddddddddddjiijddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddhiiimdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddmiiiiiioddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddhiiiddddddddddjiijddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddhiiiigdddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddohhnmiiilgddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddhiiiddddddddddjiijddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddhiiiihddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddhiiijddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddhiiiddddddddddjiijddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddhiiiihdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddniiikdddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddhiiiddddddddddjiijddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiiiihddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddiiindddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddkiiiddddddddddmiioddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddgjiiiihdddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddddddddddjiijdddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffyzzzzzzzzzzffzzyffffffzzAffzzzzzzzzzzyfffffyBCCGAfffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIKMMMKIIIIJKJIIIIIIIIJKJIIIILPMMRJIIIIILKJIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddiiihdddddddddiiihddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddddgliiilgddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddkhddddddddddjiijdddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDDDDDDDDDDffBDEyffffzDDyffDDDDDDDDDDzffffGDDDDDDCffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIKQNNNNNQLIILNNJIIIIIIJNNLIIIRNNNNNNMIIIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddiiihdddddddddiiihddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddgliiijgdddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddhiiikdddddddddmiijdddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDFzzzzzzzzfffCDCfffyEDBfffDDzzzzzzzzyfffCDFzffAEDCfffffffffccc#..................................................................................................#HHHIIIIIIIIIIIKNQPLILMNQLIIPNQLIIIILQNPIIIMNOKIIJQNMIIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddjiijddddddddhiiidddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddgliiijdddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddiiioddddddddkiiihdddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDCfffffffffffyEDzffCDCffffDDfffffffffffBDFfffffyEDAffffffffccc#..................................................................................................#HHHIIIIIIIIIILNNLIIIIIMNRIIIMNMIIIIMNOIIIPNOIIIIILQNJIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddniiiddddddddjiimdddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddliiihddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddmiiigdddddddmiilddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDCffffffffffffzDEyBDEyffffDDfffffffffffFDAffffffGFBffffffffccc#..................................................................................................#HHHIIIIIIIIIIPNRIIIIIIJQMIIILQNKIIKNQLIIIONJIIIIIIROPIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddgiiijddddddhiiindddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddoiiihdddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddkiiilkddddkmiiinddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDCfffffffffffffCDCDDzfffffDDffffffffffyDDffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIONKIIIIIIIIIIIIIKNQLLQNKIIILNNIIIIIIIIIIIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddoiiijddddhiiilddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddgiiijhhhhhhhhhhhhgdddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddoiiiiljjmiiiijdddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDFzzzzzzzyfffffyEDDCffffffDDzzzzzzzAffzDCffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIINNIIIIIIIIIIIIIIIMNMMNMIIIIKNMIIIIIIIIIIIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddgliiiijjliiiihddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddoiiiiiiiiiiiiiiiihdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddoiiiiiiiiiioddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDDDDDDDDDzffffffBDDAffffffDDDDDDDDDCffzDCffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIINNIIIIIIIIIIIIIIILQNNQLIIIIKNMIIIIIIIIIIIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddgliiiiiiiiihdddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddjiijddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddliiiiiiiiiiiiiiiihdddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddddkmiiiiiijkdddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDFzzzzzzzyfffffADDDFffffffDDzzzzzzzAffzDCffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIINNIIIIIIIIIIIIIIIIKNNKIIIIIKNMIIIIIIIIIIIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddgoiiiiiimkddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaadddddddddddddddddddddddddddiiiiiiiiiiiiiiiiihdddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddhhhhddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDCfffffffffffffEDGEDGfffffDDffffffffffADFffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIQNLIIIIIIIIIIIIIIIINNIIIIIIJNOIIIIIIIIIIIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddddddddddddddddddddddddddkhhhdddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDCffffffffffffGDEfyDDAffffDDfffffffffffDDfffffffyECffffffffccc#..................................................................................................#HHHIIIIIIIIIIMNKIIIIIIIOMJIIIIIINNIIIIIIINNIIIIIIILQMIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDCfffffffffffADDAffBDEffffDDfffffffffffCDBffffffGDCffffffffccc#..................................................................................................#HHHIIIIIIIIIIKNOIIIIIIJNNIIIIIIINNIIIIIIIMNPIIIIIIRNMIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDCffffffffffyEDBffffFDGfffDDfffffffffffADDAffffzDDAffffffffccc#..................................................................................................#HHHIIIIIIIIIIIQNRIIIILQNRIIIIIIINNIIIIIIIJNNJIIIIKNNJIIKNMIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDECCCCCCCCAfCDFfffffyDDzffDDCCCCCCCCBfffzDDCzzGDDGfffffffffccc#..................................................................................................#HHHIIIIIIIIIIILQNOPKPQNQIIIIIIIINNIIIIIIIIKNNMKKRNNRIIIKNQMMMMMMJIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffzDDDDDDDDDDzzDDyffffffzDEyfDDDDDDDDDDCffffzEDDDDEzffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIILONNNNNRIIIIIIIIINNIIIIIIIIIKQNNNNQKIIIIKNNNNNNNNKIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffAzzAffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIILKKKIIIIIIIIIIIIIIIIIIIIIIIIJKKJIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddgkddddddhhhhhhhkdddghdhhhhhhgdddghddddddddddddddddddddddddddaaa##aaaddddkhhhhhgddddddkojjhddddddghdhhhhhhgddddddhjjjkdddddddddddddddddddaaa##aaaddddkhhhhhgdddddhhhhhhhhddddghdhhgdddddhhgddhhhhhhhhddddddddddddddddaaa##aaadddddkkddddddhgddhgdddddddddhgkhhhhhhhddhgddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddmigdddddiiiiiiijdddomdiiiiiiioddhiddddddddddddddddddddddddddaaa##aaaddddjiiiiiioddddjimjjilgddddomdiiiiiiiodddgmimjmimgdddddddddddddddddaaa##aaaddddjiiiiiimgdddiiiiiiiiddddomdiioddddkiihddiiiiiiiiddddddddddddddddaaa##aaadddddjjddddddihddihddddddddkigjiiiiiiiddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddgijndddddihdddddddddlodihddddnikdhiddddddddddddddddddddddddddaaa##aaaddddjjddddninddolkdddglmddddlodihddddnikddllgdddklmdddddddddddddddddaaa##aaaddddjjddddklldddihddddddddddlodilmddddnlihddihddddddddddddddddddddddaaa##aaadddddjjddddddihddihddddddddoldjjddddddddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddookldddddihddddddddgikdihdddddmjdhiddddddddddddddddddddddddddaaa##aaaddddjjdddddjjdgihdddddkikddgikdihdddddmjdnigdddddginddddddddddddddddaaa##aaaddddjjdddddginddihdddddddddgikdioigdddmoihddihddddddddddddddddddddddaaa##aaadddddjjddddddihddihddddddddmodjjddddddddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddddlkdlkddddihddddddddniddihdddddjjdhiddddddddddddddddddddddddddaaa##aaaddddjjdddddmodnidddddddddddniddihdddddjjdmjdddddddjjddddddddddddddddaaa##aaaddddjjddddddomddihdddddddddniddihinddgihihddihddddddddddddddddddddddaaa##aaadddddjjddddddihddihdddddddgihdjjddddddddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddhlddojddddiohhhhkdddjjddihddddgindhiddddddddddddddddddddddddddaaa##aaaddddjmhhhhmigdjjdddddddddddjjddihddddgindihdddddddhiddddddddddddddddaaa##aaaddddjjddddddhiddiohhhhhkdddjjddihjjddhidihddiohhhhhkddddddddddddddddaaa##aaadddddjljjjjjjihddihdddddddhiddjmhhhhhdddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddmoddgigdddiiiiiijdddihddimjjjjilddhiddddddddddddddddddddddddddaaa##aaaddddjiiiiiijddjjdddddddddddihddimjjjjilddihdddddddhiddddddddddddddddaaa##aaaddddjjddddddhiddiiiiiiijdddihddihhiddjjdihddiiiiiiijddddddddddddddddaaa##aaadddddjljjjjjjihddihdddddddjjddjiiiiiidddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddgimjjjindddihdddddddhigddimjjjjhdddhiddddddddddddddddddddddddddaaa##aaaddddjjddddklodjjddddddddddhigddimjjjjhdddihdddddddhiddddddddddddddddaaa##aaaddddjjddddddhiddihddddddddhigddihgihdindihddihddddddddddddddddddddddaaa##aaadddddjjddddddihddihdddddddinddjjddddddddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddoljjjjmldddihdddddddomdddihddddddddhiddddddddddddddddddddddddddaaa##aaaddddjjdddddhidhidddddddnkdomdddihddddddddmodddddddjmddddddddddddddddaaa##aaaddddjjddddddjmddihddddddddomdddihdmohigdihddihddddddddddddddddddddddaaa##aaadddddjjddddddihddihddddddkigddjjddddddddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaadddddlnddddgikddihdddddddlodddihddddddddhiddddddddddddddddddddddddddaaa##aaaddddjjdddddnidgindddddgindlodddihddddddddnigdddddginddddddddddddddddaaa##aaaddddjjdddddginddihddddddddlodddihdololddihddihddddddddddddddddddddddaaa##aaadddddjjddddddihddihddddddoldddjjddddddddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddhiddddddjjddihddddddgikdddihddddddddhiddddddddddddddddddddddddddaaa##aaaddddjjddddkloddolkdddglldgikdddihdddddddddllgdddglldddddddddddddddddaaa##aaaddddjjddddhlldddihdddddddgikdddihdkiloddihddihddddddddddddddddddddddaaa##aaadddddjjddddddihddihddddddmodddjjddddddddihddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddmjddddddhigdihddddddniddddihddddddddhiddddddddddddddddddddddddddaaa##aaaddddjiiiiiimgdddjimjjilgdniddddihdddddddddgmimjmimgdddddddddddddddddaaa##aaaddddjiiiiiimgdddiiiiiiiihniddddihddiihddihddiiiiiiiihdddddddddddddddaaa##aaadddddjjddddddihddiiiiiiigihdddjjddddddddiiiiiiidddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddhgdddddddhgdhgddddddkkddddhgddddddddghddddddddddddddddddddddddddaaa##aaaddddkhhhhhgddddddkojjndddkkddddhgdddddddddddhjjjhdddddddddddddddddddaaa##aaaddddkhhhhhgdddddhhhhhhhhgkkddddhgddkhdddhgddhhhhhhhhgdddddddddddddddaaa##aaadddddkkddddddhgddhhhhhhhghddddkkddddddddhhhhhhhdddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa##aaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaa#..................................................................................................#cccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccc#..................................................................................................#HHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHH#..............", "..............#aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa##aaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaa#..................................................................................................#ccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffcccc#..................................................................................................#HHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHH#..............", "..............#aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa##aaaaaddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddaaaaa#..................................................................................................#cccccffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffccccc#..................................................................................................#HHHHHIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIIHHHHH#..............", "..............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa##aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..................................................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#..................................................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#..............", "...............#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#..#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....................................................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#....................................................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#...............", "................#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#....#aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa#......................................................................................................#cccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccccc#......................................................................................................#HHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHHH#................", ".................######################################################################......######################################################################......######################################################################......######################################################################........................................................................................................######################################################################........................................................................................................######################################################################.................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................STTTS....USU........USU....VWTTXU.." }; KCemu-0.5.1/src/ui/gtk/video.cc0000644001050700006200000002647711345001577015636 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/kc.h" #include "kc/system.h" #include "cmd/cmd.h" #include "ui/gtk/ui_gtk.h" #include "ui/gtk/cmd.h" #include "ui/gtk/video.h" #include "ui/gtk/vnc.h" #include "ui/gtk/gif.h" #include "ui/gtk/xvid.h" #include "ui/gtk/dirac.h" #include "ui/gtk/schro.h" #include "ui/gtk/ffmpeg.h" #include "ui/gtk/theora.h" #include "libgtkex/libgtkex.h" class CMD_ui_video_window_toggle : public CMD { private: VideoWindow *_w; public: CMD_ui_video_window_toggle(VideoWindow *w) : CMD("ui-video-window-toggle") { _w = w; register_cmd("ui-video-window-toggle"); } void execute(CMD_Args *args, CMD_Context context) { _w->toggle(); } }; class CMD_ui_video_record : public CMD { private: VideoWindow *_w; public: CMD_ui_video_record(VideoWindow *w) : CMD("ui-video-record") { _w = w; register_cmd("ui-video-reset", -1); register_cmd("ui-video-record", VideoEncoder::VIDEO_ENCODER_STATE_RECORD); register_cmd("ui-video-pause", VideoEncoder::VIDEO_ENCODER_STATE_PAUSE); register_cmd("ui-video-stop", VideoEncoder::VIDEO_ENCODER_STATE_STOP); } void execute(CMD_Args *args, CMD_Context context) { _w->ui_set_state(context); } }; VideoWindow::VideoWindow(const char *ui_xml_file, UI_Gtk *ui) : UI_Gtk_Window(ui_xml_file) { _ui = ui; _cmd_video_toggle = new CMD_ui_video_window_toggle(this); _cmd_video_record = new CMD_ui_video_record(this); } VideoWindow::~VideoWindow(void) { delete _cmd_video_toggle; delete _cmd_video_record; } void VideoWindow::set_state(int state) { _ui->set_video_encoder_state(state); } void VideoWindow::ui_set_state(int state) { switch (state) { case VideoEncoder::VIDEO_ENCODER_STATE_RECORD: gtk_widget_set_sensitive(_w.encoder_combobox, false); gtk_widget_set_sensitive(_w.record_button, false); gtk_widget_set_sensitive(_w.stop_button, true); gtk_widget_set_sensitive(_w.pause_button, true); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(_w.record_button), TRUE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(_w.pause_button), FALSE); set_config_widget_sensitivity(false); break; case VideoEncoder::VIDEO_ENCODER_STATE_STOP: gtk_widget_set_sensitive(_w.encoder_combobox, true); gtk_widget_set_sensitive(_w.record_button, true); gtk_widget_set_sensitive(_w.stop_button, false); gtk_widget_set_sensitive(_w.pause_button, false); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(_w.record_button), FALSE); gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(_w.pause_button), FALSE); set_config_widget_sensitivity(true); break; case VideoEncoder::VIDEO_ENCODER_STATE_PAUSE: gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(_w.pause_button), TRUE); break; default: gtk_toggle_button_set_active(GTK_TOGGLE_BUTTON(_w.start_on_reset_checkbutton), FALSE); break; } } void VideoWindow::set_config_widget_sensitivity(bool enable) { gboolean enable_encoder = FALSE, enable_filebutton = FALSE, enable_config = FALSE; GtkTreeIter iter; if (enable && gtk_combo_box_get_active_iter(GTK_COMBO_BOX(_w.encoder_combobox), &iter)) { enable_encoder = TRUE; gtk_tree_model_get(GTK_TREE_MODEL(gtk_combo_box_get_model(GTK_COMBO_BOX(_w.encoder_combobox))), &iter, 2, &enable_filebutton, 3, &enable_config, -1); } gtk_widget_set_sensitive(_w.filebutton, enable_filebutton); gtk_widget_set_sensitive(_w.fps_combobox, enable_config); gtk_widget_set_sensitive(_w.quality_spinbutton, enable_config); gtk_widget_set_sensitive(_w.start_on_reset_checkbutton, enable_config); } void VideoWindow::on_record_clicked(GtkWidget *widget, gpointer user_data) { VideoWindow *self = (VideoWindow *) user_data; GtkToggleButton *button = GTK_TOGGLE_BUTTON(widget); if (button->active) { self->set_state(VideoEncoder::VIDEO_ENCODER_STATE_RECORD); } } void VideoWindow::on_stop_clicked(GtkWidget *widget, gpointer user_data) { VideoWindow *self = (VideoWindow *) user_data; self->set_state(VideoEncoder::VIDEO_ENCODER_STATE_STOP); } void VideoWindow::on_pause_clicked(GtkWidget *widget, gpointer user_data) { VideoWindow *self = (VideoWindow *) user_data; GtkToggleButton *button = GTK_TOGGLE_BUTTON(widget); int state = button->active ? VideoEncoder::VIDEO_ENCODER_STATE_PAUSE : VideoEncoder::VIDEO_ENCODER_STATE_RECORD; self->set_state(state); } void VideoWindow::on_config_changed(GtkWidget *widget, gpointer user_data) { VideoWindow *self = (VideoWindow *) user_data; gchar *filename = gtk_filebutton_get_filename(GTK_FILEBUTTON(self->_w.filebutton)); double quality = gtk_spin_button_get_value(GTK_SPIN_BUTTON(self->_w.quality_spinbutton)); int video_skip = get_active_value_as_int(GTK_COMBO_BOX(self->_w.fps_combobox), 1); bool start_on_reset = gtk_toggle_button_get_active(GTK_TOGGLE_BUTTON(self->_w.start_on_reset_checkbutton)); self->_ui->set_video_encoder_config(filename, quality / 100.0, video_skip, start_on_reset); } void VideoWindow::on_encoder_changed(GtkComboBox *combobox, gpointer user_data) { VideoWindow *self = (VideoWindow *) user_data; GtkTreeIter iter; if (!gtk_combo_box_get_active_iter(combobox, &iter)) return; gpointer encoder; gtk_tree_model_get(GTK_TREE_MODEL(gtk_combo_box_get_model(combobox)), &iter, 1, &encoder, -1); self->_ui->set_video_encoder((VideoEncoder *) encoder); self->set_config_widget_sensitivity(true); on_config_changed(GTK_WIDGET(combobox), user_data); } gint VideoWindow::get_active_value_as_int(GtkComboBox *combobox, int column) { GtkTreeIter iter; if (!gtk_combo_box_get_active_iter(combobox, &iter)) return 0; guint value; gtk_tree_model_get(gtk_combo_box_get_model(combobox), &iter, 1, &value, -1); return value; } void VideoWindow::init_fps(GtkComboBox *combobox) { GtkTreeIter iter; GtkListStore *store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_INT); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, "50", 1, 1, -1); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, "25", 1, 2, -1); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, "16", 1, 3, -1); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, "12", 1, 4, -1); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, "10", 1, 5, -1); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, "5", 1, 10, -1); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, "2", 1, 25, -1); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, "1", 1, 50, -1); gtk_combo_box_set_model(combobox, GTK_TREE_MODEL(store)); GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_end(GTK_CELL_LAYOUT(combobox), renderer, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combobox), renderer, "text", 0, NULL); gtk_combo_box_set_active(combobox, 0); g_object_unref(store); } void VideoWindow::init_encoder(GtkComboBox *combobox) { GtkTreeIter iter; GtkListStore *store = gtk_list_store_new(4, G_TYPE_STRING, G_TYPE_POINTER, G_TYPE_BOOLEAN, G_TYPE_BOOLEAN); gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, _(""), 1, new DummyVideoEncoder(), 2, FALSE, 3, FALSE, -1); #ifdef HAVE_LIBTHEORA gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, _("Theora/Ogg"), 1, new TheoraVideoEncoder(), 2, TRUE, 3, TRUE, -1); #endif #ifdef HAVE_LIBAVFORMAT gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, _("AVI"), 1, new FfmpegVideoEncoder(), 2, TRUE, 3, TRUE, -1); #endif #ifdef HAVE_LIBXVIDCORE gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, _("MPEG 4"), 1, new XvidVideoEncoder(), 2, TRUE, 3, TRUE, -1); #endif #ifdef HAVE_LIBDIRAC gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, _("Dirac"), 1, new DiracVideoEncoder(), 2, TRUE, 3, TRUE, -1); #endif #ifdef HAVE_LIBSCHROEDINGER gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, _("Schroedinger"), 1, new SchroedingerVideoEncoder(), 2, TRUE, 3, TRUE, -1); #endif #ifdef HAVE_LIBGIF gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, _("Animated GIF"), 1, new GifVideoEncoder(), 2, TRUE, 3, TRUE, -1); #endif #ifdef HAVE_LIBVNCSERVER gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, _("VNC"), 1, new VncVideoEncoder(), 2, FALSE, 3, TRUE, -1); #endif gtk_combo_box_set_model(combobox, GTK_TREE_MODEL(store)); GtkCellRenderer *renderer = gtk_cell_renderer_text_new(); gtk_cell_layout_pack_start(GTK_CELL_LAYOUT(combobox), renderer, TRUE); gtk_cell_layout_set_attributes(GTK_CELL_LAYOUT(combobox), renderer, "text", 0, NULL); gtk_combo_box_set_active(combobox, 0); g_object_unref(store); } void VideoWindow::init(void) { /* * video window */ _window = get_widget("video_window"); g_signal_connect(_window, "delete_event", G_CALLBACK(cmd_exec_sft), (char *) "ui-video-window-toggle");// FIXME: _w.start_on_reset_checkbutton = get_widget("start_on_reset_checkbutton"); g_signal_connect(_w.start_on_reset_checkbutton, "toggled", G_CALLBACK(on_config_changed), this); _w.quality_spinbutton = get_widget("quality_spinbutton"); gtk_spin_button_set_value(GTK_SPIN_BUTTON(_w.quality_spinbutton), 80); g_signal_connect(_w.quality_spinbutton, "value-changed", G_CALLBACK(on_config_changed), this); _w.fps_combobox = get_widget("fps_combobox"); init_fps(GTK_COMBO_BOX(_w.fps_combobox)); g_signal_connect(_w.fps_combobox, "changed", G_CALLBACK(on_config_changed), this); _w.encoder_combobox = get_widget("encoder_combobox"); init_encoder(GTK_COMBO_BOX(_w.encoder_combobox)); g_signal_connect(_w.encoder_combobox, "changed", G_CALLBACK(on_encoder_changed), this); _w.filebutton = gtk_filebutton_new("Video"); GtkWidget *c = get_widget("video_file_container"); gtk_container_add(GTK_CONTAINER(c), _w.filebutton); gtk_widget_set_sensitive(_w.filebutton, FALSE); gtk_widget_show(_w.filebutton); g_signal_connect(_w.filebutton, "changed", G_CALLBACK(on_config_changed), this); _w.record_button = get_widget("record_button"); g_signal_connect(_w.record_button, "clicked", G_CALLBACK(on_record_clicked), this); _w.stop_button = get_widget("stop_button"); g_signal_connect(_w.stop_button, "clicked", G_CALLBACK(on_stop_clicked), this); _w.pause_button = get_widget("pause_button"); g_signal_connect(_w.pause_button, "clicked", G_CALLBACK(on_pause_clicked), this); init_dialog("ui-video-window-toggle", "window-video"); }KCemu-0.5.1/src/ui/gtk/kc851_keyboard.xpm0000644001050700006200000132575410527416075017467 0ustar glaubitzfbedv/* XPM */ static char *kc851_keyboard[] = { /* width height num_colors chars_per_pixel */ " 721 256 85 2", /* colors */ ".. c #989993", ".# c #000000", ".a c #656662", ".b c #333331", ".c c #444442", ".d c #222221", ".e c #111111", ".f c #777773", ".g c #555552", ".h c #878883", ".i c #ffffff", ".j c #ff0000", ".k c #c75350", ".l c #ea1f1e", ".m c #fd0403", ".n c #a6857f", ".o c #272725", ".p c #979892", ".q c #31312f", ".r c #585855", ".s c #595956", ".t c #4b4b48", ".u c #595a56", ".v c #8b8c86", ".w c #7b7c77", ".x c #464744", ".y c #010101", ".z c #1a1a19", ".A c #52524f", ".B c #5d5e5a", ".C c #1b1c1b", ".D c #555652", ".E c #40413e", ".F c #84857f", ".G c #0b0b0a", ".H c #848580", ".I c #141413", ".J c #272826", ".K c #71726e", ".L c #050505", ".M c #60615d", ".N c #373836", ".O c #181817", ".P c #878882", ".Q c #232321", ".R c #71716d", ".S c #898a85", ".T c #62625f", ".U c #434341", ".V c #0e0e0d", ".W c #3e3e3c", ".X c #50504d", ".Y c #3d3e3b", ".Z c #0b0b0b", ".0 c #2f2f2e", ".1 c #080808", ".2 c #41413f", ".3 c #454542", ".4 c #1e1f1d", ".5 c #646460", ".6 c #111110", ".7 c #282827", ".8 c #72736f", ".9 c #747470", "#. c #858681", "## c #2e2f2d", "#a c #2a2b29", "#b c #8b8c87", "#c c #3f3f3d", "#d c #80807b", "#e c #3c3d3a", "#f c #6e6e6a", "#g c #757671", "#h c #83847f", "#i c #353533", "#j c #292927", "#k c #292928", "#l c #0d0d0c", "#m c #1f1f1e", "#n c #4c4c49", "#o c #53c750", "#p c #1fea1e", "#q c #04fd03", "#r c #84a77f", "#s c #00ff00", /* pixels */ "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".......................................................................................................................................................#.#.#...a.b.........b.#.a.....#.#.#.a.b...a.b...................................................#.#.#...a.#.#.#.b.b.#.#.a.................................................#.#.#.a.#.#.b...b.#.#.#.a.#.#.#.#.a.b...a.b...................................#.....#.a.#.#.#.b.b.a.......#.........a.#.b...b.a...b.a.....................................#.#.#...a.b.......b.a...b.a.#.#.#.#.....................................#.....#...a.#.b.....b.#.#.a.#.#.#.#.a.b...a.b.b.#.#.#.a...#.#.....................................#.#.#.a.b...a.b...b.#.a...#.....#.............................................#.....#.a.b...a.b.b.#.#.a...#.#.#.#.a.#.#.#.b..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".......................................................................................................................................................#.....#.a.b.......b.a...b.a.#.......a.b...a.b...................................................#.....#.a.b.......b.a...b.a.............................................#.......a.b...a.b.b.a.......#.......a.#.b.a.b...................................#.....#.a.b.......b.a.......#.......a.b...a.b.b.a...b.a.....................................#.....#.a.b.......b.a...b.a.#...........................................#.#.#.#.a.b...a.b.b.a.......#.......a.#.b.a.b.....b.a...#.....#.................................#.......a.b...a.b.b.a...b.a.#.#...#.............................................#.....#.a.b...a.b...b.a.........#...a.b........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".......................................................................................................................................................#.....#.a.b.......b.a...b.a.#.......a.b.a.b.....................................................#.....#.a.b.......b.a...b.a.............................................#.......a.b...a.b.b.a.......#.......a.#.b.a.b...................................#.....#.a.b.......b.a.......#.......a.b...a.b.b.a...b.a.....................................#.....#.a.b.......b.a...b.a.#...........................................#.#.#.#.a.b...a.b.b.a.......#.......a.#.b.a.b.....b.a...#.....#.................................#.......a.b...a.b.b.a...b.a.#.#...#.............................................#.....#.a.b...a.b...b.a.........#...a.b........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".......................................................................................................................................................#.b.b.a.a.b.......b.c.a.d.a.#.......a.e.c.f.....................................................#.a.a.b.a.e.b.g...b.a...b.a.............................................#...b.#.a.d.a.g.g.b.d.b.f...#.b.b...a.b.a.#.b...................................#.....#.a.e.b.g...b.a.......#.......a.b...a.b.b.a.f.d.a.....................................#.b.b.a.a.b.......b.a...b.a.#.b.b.......................................#.b...#.a.d.a.c.b.b.a.g.e.a.#.b.b...a.b.a.#.b.....b.a...#.a.a.#.................................#.......a.b...a.b.b.c.a.d.a.#...#.#.............................................#...a.#.a.e.b.d.b...b.a.........#...a.e.b.g....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".......................................................................................................................................................#.....#.a.b.......b.d.b.e.a.#.......a.b.f.c.f...................................................#.b.b.a.a.b.......b.a...b.a.............................................#.....#.a.e.b.c.f.b.a.......#.......a.b.f.d.b...................................b.a.a.#.a.b.......b.a.......#.......a.b...a.b.b.c.d.#.a.....................................#.....#.a.b.......b.a...b.a.#...........................................#.....#.a.e.b.d.b.b.a...b.a.#.......a.b.f.d.b.....b.a...#.b.b.#.................................#.......f.c.a.c.b.b.d.b.e.a.#...b.#.............................................#.a.#.#.a.b...a.b...b.a.........#...a.b........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".......................................................................................................................................................#.....#.a.b.......b.a...b.a.#.......a.b...a.b...................................................#.....#.a.b.......b.a...b.a.............................................#.....#.a.b...a.b.b.a.......#.......a.b...a.b.....................................b.b.#.a.b.......b.a.......#.......a.b...a.b.b.#.#.#.a.....................................#.....#.a.b.......b.a...b.a.#...........................................#.....#.a.b...a.b.b.a...b.a.#.......a.b...a.b.....b.a...#.....#.................................#.........f.b.d.b.b.a...b.a.#.....#.............................................#.#.#.#.a.b...a.b...b.a.........#...a.b........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".......................................................................................................................................................#.a.a.b.a.d.a.a.f.b.a...b.a.b.a.a.a.a.b...a.b...................................................#.....#.a.d.a.a.f.b.c.a.c.f.............................................b.a.a.#.a.b...a.b.b.c.a.a.h.#.a.a.a.a.b...a.b...................................a.a.a.b.a.d.a.a.f.b.c.a.a.h.#.a.a.a.f.c.a.g.g.b.d.b.e.a.....................................#.a.a.b.a.d.a.a.f.g.g.a.c.f.#.a.a.a.....................................#.....#.a.b...a.b.g.g.a.d.a.#.a.a.a.a.b...a.b.....b.a...#.....#.................................b.a.a.a.h.a.a.g.g.b.a...b.a.#.....#.............................................#.b.b.#.a.b...a.b.f.d.c.h.......#...a.d.a.a.f..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".......................................................................................................................................................b.b.b...f.b.b.b.g.g.f...g.f...b.b.b.f.g...f.g...................................................b.....b.f.b.b.b.g.g.b.b.f.................................................b.b.b.f.g...f.g.g.b.b.b.f.b.b.b.b.f.g...f.g...................................b.b.b...f.b.b.b.g.g.b.b.b.f.b.b.b.b...f.b.g...g.f...g.f.....................................b.b.b...f.b.b.b.g...g.b.f...b.b.b.b.....................................b.....b.f.g...f.g...g.b.b.f.b.b.b.b.f.g...f.g.....g.f...b.....b...................................b.b.b.f.b.b.g...g.f...g.f.b.....b.............................................b.....b.f.g...f.g.g.b.b.f.......b...f.b.b.b.g..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".............................................................................................................................................................................f.f...............................................................................a.h.h.a.........................................................................a.h.h.a.............................................................................b.b.......................................................................................................................................................................h.a.f.................................................................................f.f.................................................................................a.h...............................................................................a.h......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".............................................................................................................................................................................b.b...............................................................................#.a.a.#.........................................................................#.a.a.#...........................................................................b.e.e.b...............................................................................g.b.f...g.g...........................................................................d.c.e.f...............................................................................b.b...............................................................................g.d.h...............................................................................c.d......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".............................................................................................................................................................................b.b...............................................................................#.a.a.#.........................................................................#.a.a.#.......................................................................h.d.g.b.b.g.d.h.........................................................................a.#.a.#.h.d.g.........................................................................b.g...f.e...............................................................................b.b.............................................................................a.#.....................................................................................b.b.........................................................................................................................................................................................................................................................................................................................a.g.a.g.g.....a.g.a.g.g...f.g.......g.f.h.a.a.b.a.a.h......................................................................................................................................................................................................................................", ".............................................................................................................................................................................b.b...............................................................................#.a.a.#.....................................................................f.b.#.d.d.#.b.f...................................................................a.#...b.b...a.h.........................................................................h.d.d.c.a.#...........................................................................b.g...f.e.............................................................................f.e.f.............................................................................d.c.....................................................................................f.e.f.....................................................................................................................................................................................................................................................................................................................f.b.h...h.d.f.f.b.h...h.d.f.a.b.......b.a.......#............................................................................................................................................................................................................................................", ".............................................................................................................................................................................b.b...............................................................................................................................................................#.a.a.#.......................................................................f.e.f.b.b.......................................................................................#.a.............................................................................d.#.e.f...............................................................................................................................................................#.a.......................................................................................#.a.....................................................................................................................................................................................................................................................................................................................a.b.......g.f.a.b.......b.a.a.d.h.....b.a.......#............................................................................................................................................................................................................................................", ".............................................................................................................................................................................b.b...............................................................................................................................................................#.a.a.#.........................................................................f.e.e.e.b...................................................................................g.d.h.............................................................................d.#.e.f.f.f...........................................................................................................................................................#.a.......................................................................................#.a.....................................................................................................................................................................................................................................................................................................................a.b...........a.b.......b.a.a.e.e.f...b.a.......#............................................................................................................................................................................................................................................", ".............................................................................................................................................................................b.b...............................................................................................................................................................#.a.a.#.............................................................................b.b.g.d.h.............................................................................h.d.g...........................................................................h.d.g...f.e.e.f...........................................................................................................................................................#.a.......................................................................................#.a.....................................................................................................................................................................................................................................................................................................................a.b...........a.b.......b.a.a.b.f.e...b.a.......#............................................................................................................................................................................................................................................", ".............................................................................................................................................................................f.f...........................................................................................................................................................f.b.#.d.d.#.b.f.........................................................................b.b...#.a.............................................................................a.#.............................................................................a.#.......b.b.............................................................................................................................................................#.a.......................................................................................#.a.....................................................................................................................................................................................................................................................................................................................a.b...........a.b.......b.a.a.b...h.e.e.a.......#............................................................................................................................................................................................................................................", ".............................................................................................................................................................................f.f...............................................................................................................................................................#.a.a.#.......................................................................f.e.f.b.b.f.e.f.............................................................................#.a.c.d.d.h.....................................................................a.#.......b.b.............................................................................................................................................................a.#.....................................................................................b.b.......................................................................................................................................................................................................................................................................................................................a.b.......f.h.a.b.......b.a.a.b.....f.e.a.......#............................................................................................................................................................................................................................................", ".............................................................................................................................................................................b.b...............................................................................................................................................................#.a.a.#.........................................................................f.e.e.e.e.f.............................................................................g.d.h.#.a.#.a.....................................................................h.d.g...f.e.e.f...........................................................................................................................................................h.d.g.................................................................................f.e.f.......................................................................................................................................................................................................................................................................................................................f.b.h...h.d.f.f.b.h...h.d.f.a.b.......b.a.......#............................................................................................................................................................................................................................................", ".............................................................................................................................................................................g.g...............................................................................................................................................................b.f.f.b.............................................................................b.b.................................................................................g.g...f.b.g...........................................................................b.b.b.f.f.f...............................................................................................................................................................b.f...............................................................................b.f.............................................................................f.b.b.b.b.b.b.f...............................................................................................................................................................................................................................g.d.b.d.c.....g.d.b.d.c...a.b.......b.a.......#............................................................................................................................................................................................................................................", "...................................................................................................................................................................................................................................................................................................................................................................................................................................f.f............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j.j................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "...........................................................a.g.a.g.g.....a.g.a.g.g...f.g.......g.f.h.a.a.b.a.a.h.f.c.a.a.g.g.................................................f.f...............................................................................a.a.a.a.........................................................................a.a.a.a...................................................................................a.h.........................................................................h.a.a.a.a.a.a.h.........................................................................a.a.a.a.f.......................................................................h.a.a.a.a.a.a.h.........................................................................a.a.a.a.............................................................................a.a.a.a.............................................................................a.a.a.a.............................................................................f.a.a.a.a.....................................................................................................................................f.c.a.a.g.g.....a.g.a.g.g...f.g.......g.f...a.g.a.g.g...f.c.a.a.a.a.h.............................................................................................f.c.a.a.g.g...f.c.a.a.a.a.h...a.g.a.g.g...f.c.a.a.a.a.h.h.a.a.b.a.a.h............................................................", ".........................................................f.b.h...h.d.f.f.b.h...h.d.f.a.b.......b.a.......#.......a.b.....h.d.f.............................................f.e.b.............................................................................g.d.a.a.d.g.....................................................................g.d.a.a.d.g...............................................................................g.#.a.........................................................................a.#.a.a.a.a.a.h.......................................................................g.d.a.a.a.f.......................................................................a.#.a.a.a.a.#.a.......................................................................g.d.a.a.d.g.........................................................................g.d.a.a.d.g.........................................................................g.d.a.a.d.g.........................................................................f.e.a.a.a.d.g...................................................................................................................................a.b.....h.d.f.f.b.h...h.d.f.a.b.......b.a.f.b.h...h.d.f.a.b.......................................................................................................a.b.....h.d.f.a.b...........f.b.h...h.d.f.a.b.................#..................................................................", ".........................................................a.b.......g.f.a.b.......b.a.a.d.h.....b.a.......#.......a.b.......b.a...........................................f.e.e.b...........................................................................a.#.........#.a.................................................................f.b.........#.a...........................................................................c.d.#.a.........................................................................a.#.................................................................................a.#.................................................................................f.b.........#.a.....................................................................a.#.........#.a.....................................................................a.#.........#.a.....................................................................a.#.........#.a.......................................................................#.a...f.a.a.#.a.................................................................................................................................a.b.......b.a.a.b.......b.a.a.b.......b.a.a.b...........a.b.......................................................................................................a.b.......b.a.a.b...........a.b...........a.b.................#..................................................................", ".........................................................a.b...........a.b.......b.a.a.e.e.f...b.a.......#.......a.b.....h.d.f...........................................f.f.b.b...........................................................................a.#.........#.a.............................................................................#.a.........................................................................g.d.h.#.a.........................................................................a.#.................................................................................a.#...........................................................................................g.d.h.....................................................................a.#.........#.a.....................................................................a.#.........#.a.....................................................................a.#.......g.#.a.......................................................................#.a.f.e.a.a.#.a.................................................................................................................................a.b.....h.d.f.a.b.......b.a.a.b.......b.a.f.b.h.........a.b.......................................................................................................a.b.....h.d.f.a.b...........f.b.h.........a.b.................#..................................................................", ".........................................................a.b...........a.b.......b.a.a.b.f.e...b.a.......#.......a.e.b.b.d.c.................................................b.b.....................................................................................f.e.f...........................................................................f.e.f.......................................................................c.d.....#.a.........................................................................a.#.a.a.a.a.........................................................................a.#.a.a.a.a.................................................................................h.d.g.......................................................................f.e.f.....f.e.f.....................................................................a.#.........#.a.....................................................................a.#.....c.d.#.a.......................................................................#.a.#.a.....#.a.................................................................................................................................a.e.b.b.d.c...a.b.......b.a.a.b.......b.a...g.d.b.b.f...a.e.b.b.b.f...............................................................................................a.e.b.b.d.c...a.e.b.b.b.f.....g.d.b.b.f...a.e.b.b.b.f.........#..................................................................", ".........................................................a.b...........a.b.......b.a.a.b...h.e.e.a.......#.......a.d.d.g.....................................................b.b...................................................................................f.e.f.......................................................................f.b.b.e.f.......................................................................g.d.h.....#.a.........................................................................h.a.a.a.a.d.g.......................................................................a.#.a.a.a.d.g...............................................................................a.#...........................................................................f.e.b.b.e.f.......................................................................h.d.g.......#.a.....................................................................a.#...g.d.h.#.a.......................................................................#.a.#.a.....#.a.................................................................................................................................a.b...........a.d.a.a.a.d.a.a.b.......b.a.........h.d.f.a.b.......................................................................................................a.d.d.g.......a.b...................h.d.f.a.b.................#..................................................................", ".........................................................a.b.......f.h.a.b.......b.a.a.b.....f.e.a.......#.......a.b...d.f...................................................b.b.................................................................................f.e.f...............................................................................g.d.h...................................................................a.#.........#.a.....................................................................................#.a.....................................................................a.#.........#.a.............................................................................#.a.........................................................................h.d.g.....g.d.h.........................................................................b.b.b.b.#.a.....................................................................a.#.c.d.....#.a.......................................................................#.a.#.a.....#.a.................................................................................................................................a.b...........a.b.......b.a.a.b.......b.a...........b.a.a.b.......................................................................................................a.b...d.f.....a.b.....................b.a.a.b.................#..................................................................", ".........................................................f.b.h...h.d.f.f.b.h...h.d.f.a.b.......b.a.......#.......a.b...h.b.g.................................................b.b...............................................................................f.e.f...................................................................................#.a...................................................................a.#.........#.a.....................................................................................#.a.....................................................................a.#.........#.a...........................................................................g.d.h.........................................................................a.#.........#.a.................................................................................#.a.....................................................................a.#.d.h.....#.a.......................................................................#.a.c.d.....#.a.................................................................................................................................a.b...........a.b.......b.a.f.b.h...h.d.f.h.g.h...h.d.f.a.b.......................................................................................................a.b...h.b.g...a.b...........h.g.h...h.d.f.a.b.................#..................................................................", "...........................................................g.d.b.d.c.....g.d.b.d.c...a.b.......b.a.......#.......a.b.....h.d.f...............................................b.b.............................................................................f.e.f.........................................................................h.a.........#.a...................................................................f.b.b.b.b.b.#.a.........................................................................h.a.........#.a.....................................................................a.#.........#.a...........................................................................b.b...........................................................................a.#.........#.a.................................................................................#.a.....................................................................a.#.........#.a.......................................................................#.a...g.b.b.b.f.................................................................................................................................a.b...........a.b.......b.a...g.d.b.d.c.....g.d.b.d.c...a.e.b.b.b.b.f.............................................................................................a.b.....h.d.f.a.e.b.b.b.b.f...g.d.b.d.c...a.e.b.b.b.b.f.......#..................................................................", ".............................................................................................................................................................................b.b...........................................................................f.e.f...........................................................................h.d.g.....g.d.h...............................................................................#.a.........................................................................h.d.g.....g.d.h.....................................................................h.d.g.....g.d.h...........................................................................b.b...........................................................................h.d.g.....g.d.h...............................................................................g.d.h.....................................................................h.d.g.....g.d.h.......................................................................c.d................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".........................................................................................................................................................................g.b.b.b.b.g.......................................................................f.b.b.b.b.b.b.f.....................................................................b.b.b.b...................................................................................b.f.............................................................................b.b.b.b.............................................................................b.b.b.b...............................................................................g.g...............................................................................b.b.b.b...........................................................................g.b.b.b.b.............................................................................b.b.b.b.............................................................................g.b.b.b.b.b.f....................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................f.c.a.a.g.g...f.c.a.a.a.a.h.f.g......................................................................................................................................................................................................................................................", ".............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................a.b.....h.d.f.a.b...........a.b......................................................................................................................................................................................................................................................", ".............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................a.b.......b.a.a.b...........a.b...............................................................................................................................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#................................................................", ".............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................a.b.......b.a.a.b...........a.b...............................................................................................................................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#................................................................", ".............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................a.b.......b.a.a.e.b.b.b.f...a.b...............................................................................................................................#.#.................................................#.#................................................................", ".............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................a.b.......b.a.a.b...........a.b...............................................................................................................................#.#.................................................#.#................................................................", ".............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................a.b.......b.a.a.b...........a.b...............................................................................................................................#.#.................................................#.#................................................................", ".............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................a.b.....h.d.f.a.b...........a.b...............................................................................................................................#.#.................................................#.#................................................................", ".............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................a.e.b.b.d.c...a.e.b.b.b.b.f.a.e.b.b.b.b.f.....................................................................................................................#.#.................................................#.#................................................................", "...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................#.#.................................................#.#................................................................", "...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................#.#...................k.l.m.m.l.k...................#.#................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#...............n.l.j.j.j.j.j.j.l.n...............#.#................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#...............l.j.j.j.j.j.j.j.j.l...............#.#................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.............k.j.j.j.j.j.j.j.j.j.j.k.............#.#................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.............l.j.j.j.j.j.j.j.j.j.j.l.............#.#................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.............m.j.j.j.j.j.j.j.j.j.j.m.............#.#................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.............m.j.j.j.j.j.j.j.j.j.j.m.............#.#................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.............l.j.j.j.j.j.j.j.j.j.j.l.............#.#................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.............k.j.j.j.j.j.j.j.j.j.j.k.............#.#................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#...............l.j.j.j.j.j.j.j.j.l...............#.#................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................#.#...............n.l.j.j.j.j.j.j.l.n...............#.#................................................................", "...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................#.#...................k.l.m.m.l.k...................#.#................................................................", "...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................#.#.................................................#.#................................................................", "...........................................................a.g.a.g.g.....a.g.a.g.g...f.g.............a.g.a.g.g...f.c.a.a.g.g.............................................a.a.a.a.........................................................................a.h.........a.h.....................................................................h.a.a.a.a.a.a.h.....................................................................h.a.a.a.a.a...........................................................................h.a.a.a.a.a.a.h...................................................................h.a.a.a.a.a.a.h.....................................................................h.a.........a.h.........................................................................a.a.a.a...............................................................................a.a.a.a.........................................................................h.a.a.a.a.a.......................................................................................................................................................................................................................................h.a.b.a.h...f.g.......g.f...a.g.a.g.g.........................................f.g.............h.a.b.a.h.....a.g.a.g.g...h.a.a.b.a.a.h.........................#.#.................................................#.#................................................................", ".........................................................f.b.h...h.d.f.f.b.h...h.d.f.a.b...........f.b.h...h.d.f.a.b.....h.d.f.........................................g.d.a.a.d.g.......................................................................#.a.........#.a.....................................................................a.#.a.a.a.a.a.h.....................................................................a.#.a.a.a.d.g.........................................................................h.a.a.d.d.a.a.h...................................................................h.a.a.a.a.a.#.a.....................................................................a.#.........#.a.........................................................................a.d.d.a.............................................................................g.d.a.a.d.g.......................................................................a.#.a.a.a.d.g...............................................................................f.f.......................................................................................................................................................#.......a.b.......b.a.f.b.h...h.d.f.......................................a.b.................#.......f.b.h...h.d.f.......#...............................#.#.................................................#.#................................................................", ".........................................................a.b.......g.f.a.b.......b.a.a.b...........a.b.......b.a.a.b.......b.a.......................................a.#.........#.a.....................................................................#.a.........#.a.....................................................................a.#.................................................................................a.#.........#.a.............................................................................b.b.....................................................................................#.a.....................................................................a.#.........#.a...........................................................................b.b.............................................................................a.#.........#.a.....................................................................a.#.........#.a...........................................................................f.e.e.f.....................................................................................................................................................#.......a.d.h.....b.a.a.b.................................................a.b.................#.......a.b.................#...............................#.#.................................................#.#................................................................", ".........................................................a.b...........a.b.......b.a.a.b...........a.b.......b.a.a.b.....h.d.f.......................................a.#.........#.a.....................................................................#.a.........#.a.....................................................................a.#.................................................................................a.#.........#.a.............................................................................b.b...................................................................................g.d.h.....................................................................a.#.........#.a...........................................................................b.b.............................................................................a.#.........#.a.....................................................................a.#.........#.a.........................................................................f.e.f.f.e.f...................................................................................................................................................#.......a.e.e.f...b.a.f.b.h...............................................a.b.................#.......f.b.h...............#...............................#.#.................................................#.#................................................................", ".........................................................a.b...........a.b.......b.a.a.b...........a.b.......b.a.a.e.b.b.d.c.........................................a.#.........#.a.....................................................................#.a.........#.a.....................................................................a.#.................................................................................a.#.......f.e.f.............................................................................b.b.................................................................................c.d.........................................................................a.#.........#.a...........................................................................b.b.............................................................................a.#.........#.a.....................................................................a.#.......f.e.f.......................................................................f.e.f.....f.e.f.................................................................................................................................................#.......a.b.f.e...b.a...g.d.b.b.f.........................................a.b.................#.........g.d.b.b.f.........#...............................#.#.................................................#.#................................................................", ".........................................................a.b...........a.b.......b.a.a.b...........a.b.......b.a.a.d.d.g.............................................a.#.........#.a.....................................................................#.a.........#.a.....................................................................a.#.b.b.b.b.........................................................................a.#.b.b.b.e.f...............................................................................b.b...............................................................................g.d.h.........................................................................a.#.........#.a...........................................................................b.b.............................................................................a.#.........#.a.....................................................................a.#.b.b.b.e.f.........................................................................................................................................................................................................................................#.......a.b...h.e.e.a.........h.d.f.......................................a.b.................#...............h.d.f.......#...............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#................................................................", ".........................................................a.b.......f.h.a.b.......b.a.a.b...........a.b.......b.a.a.b...d.f...........................................a.#.........#.a.....................................................................#.a.h.d.f...#.a.....................................................................a.#.................................................................................a.#.d.c.....................................................................................b.b.............................................................................c.d.............................................................................a.#.........#.a...........................................................................b.b.............................................................................a.#.........#.a.....................................................................a.#...................................................................................................................................................................................................................................................#.......a.b.....f.e.a...........b.a.......................................a.b.................#.................b.a.......#...............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#................................................................", ".........................................................f.b.h...h.d.f.f.b.h...h.d.f.a.b...........f.b.h...h.d.f.a.b...h.b.g.........................................a.#.........#.a.....................................................................#.a.d.c.e.f.#.a.....................................................................a.#.................................................................................a.#.h.d.g...................................................................................b.b...........................................................................g.d.h.............................................................................a.#.........#.a...........................................................................b.b.............................................................................a.#.........#.a.....................................................................a.#...................................................................................................................................................................................................................................................#.......a.b.......b.a.h.g.h...h.d.f.......................................a.b.................#.......h.g.h...h.d.f.......#......................................................................................................................................................", "...........................................................g.d.b.d.c.....g.d.b.d.c...a.e.b.b.b.b.f...g.d.b.d.c...a.b.....h.d.f.......................................a.#...f.f...#.a.....................................................................#.#.g...f.e.#.a.....................................................................a.#.................................................................................a.#.....d.c.................................................................................b.b.........................................................................a.#.................................................................................a.#.........#.a...........................................................................b.b.............................................................................a.#.........#.a.....................................................................a.#...............................................................................................................................................................................................................................................f.b.#.b.f...a.b.......b.a...g.d.b.d.c.........................................a.e.b.b.b.b.f...f.b.#.b.f.....g.d.b.d.c.........#......................................................................................................................................................", ".....................................................................................................................................................................h.d.g.f.e.b.d.h.....................................................................#.c.......f.#.a.....................................................................a.#.................................................................................a.#.....h.d.g...............................................................................b.b.........................................................................a.#.................................................................................h.d.g.....g.d.h...........................................................................b.b.............................................................................h.d.g.....g.d.h.....................................................................a.#....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".........................................................................................................................................................................b.b.b.e.f.......................................................................g...........f.f.....................................................................f.b.b.b.b.b.b.f.....................................................................f.b.........b.f.............................................................................g.g.........................................................................f.b.b.b.b.b.b.f.........................................................................b.b.b.b.............................................................................b.b.b.b...............................................................................b.b.b.b.........................................................................f.b....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "...............................................................................................................................................................................f.e.f..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................g.g.......................................................................................................................................a.g.a.g.g...f.c.a.a.g.g...........f.g...........f.g.......g.f..................................................................................................................................................................................................................................", "...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................h.a.......f.f...............................................................................h.d.g.....................................................................................................................................f.b.h...h.d.f.a.b.....h.d.f.........a.b...........a.b.......b.a..................................................................................................................................................................................................................................", "...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................h.d.g...f.e.f...............................................................................a.#.......................................................................................................................................a.b.......g.f.a.b.......b.a.........a.b...........a.d.h.....b.a..................................................................................................................................................................................................................................", "...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................d.c.e.f.................................................................................#.a.......................................................................................................................................a.b...........a.b.....h.d.f.........a.b...........a.e.e.f...b.a..................................................................................................................................................................................................................................", "...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................f.b.d.#.e.b.g.............................................................................g.d.h.......................................................................................................................................a.b...........a.e.b.b.d.c...........a.b...........a.b.f.e...b.a..................................................................................................................................................................................................................................", "...............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................c.d.d.h.............................................................................h.d.g.........................................................................................................................................a.b...........a.d.d.g...............a.b...........a.b...h.e.e.a..................................................................................................................................................................................................................................", ".............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................g.d.h.c.d.............................................................................a.#...........................................................................................................................................a.b.......f.h.a.b...d.f.............a.b...........a.b.....f.e.a..................................................................................................................................................................................................................................", ".....................................................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................f.b.......g.g...........................................................................#.a...........................................................................................................................................f.b.h...h.d.f.a.b...h.b.g...........a.b...........a.b.......b.a..................................................................................................................................................................................................................................", ".....................................................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................g.d.h.............................................................................................................................................g.d.b.d.c...a.b.....h.d.f.........a.e.b.b.b.b.f.a.b.......b.a..................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................g.g..............................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.......i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.......#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#.......i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.......#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#.......i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.......#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#.......i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.......#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#.......i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.......#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#.......i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.......#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#.......i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.......#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#.......i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.......#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#.......i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.......#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#.......i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.......#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#.....................................................................#.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#.........................................a.a.a.a...............................................................................a.a.a.a.......................................................................h.a.a.a.a.a...........................................................................h.a.a.a.a.a.a.h.......................................................................a.a.a.a.........................................................................h.a.........a.h.............................................................................a.a.a.a.....................................................................h.a.........a.h.......................................................................h.a...................................................................................................................................................................................................................................................................................................................................f.c.a.a.a.a.h...a.g.a.g.g.....a.g.a.g.g.......................................................................................................................................f.c.a.a.g.g...f.g.......g.f.f.g.......g.f..............................................................", ".....................................................#.#.....................................................................#.#.......................................g.d.a.a.d.g...........................................................................g.d.a.a.d.g.....................................................................a.#.a.a.a.d.g.........................................................................a.#.a.a.a.a.a.h.....................................................................g.d.a.a.d.g.......................................................................a.#.........#.a.............................................................................a.d.d.a.....................................................................a.#.......g.d.h.......................................................................a.#.......................................................................................................................................................................a.a.a.a.....................................................................................................................................................a.b...........f.b.h...h.d.f.f.b.h...h.d.f.....................................................................................................................................a.b.....h.d.f.a.b.......b.a.a.b.......b.a..............................................................", ".....................................................#.#.....................................................................#.#.....................................a.#.........#.a.......................................................................a.#.........b.f...................................................................a.#.........#.a.......................................................................a.#...............................................................................a.#.........#.a.....................................................................a.#.........#.a...............................................................................b.b.......................................................................a.#.....c.d...........................................................................a.#.....................................................................................................................................................................g.d.a.a.d.g...................................................................................................................................................a.b...........a.b...........a.b.......g.f.....................................................................................................................................a.b.......b.a.a.b.......b.a.a.d.h.....b.a..............................................................", ".....................................................#.#.....................................................................#.#.....................................a.#.........#.a.......................................................................a.#...............................................................................a.#.........#.a.......................................................................a.#...............................................................................a.#.........a.h.....................................................................a.#.........#.a...............................................................................b.b.......................................................................a.#...g.d.h...........................................................................a.#.......................................................................................g.g.........................................................................a.#.........#.a.................................................................................................................................................a.b...........f.b.h.........a.b...............................................................................................................................................a.b.....h.d.f.a.b.......b.a.a.e.e.f...b.a..............................................................", ".....................................................#.#.....................................................................#.#.....................................a.#.........#.a.......................................................................f.e.f.............................................................................a.#.........#.a.......................................................................a.#...............................................................................a.#.................................................................................a.#.........#.a...............................................................................b.b.......................................................................a.#.c.d...............................................................................a.#.......................................................................................b.b.........................................................................a.#.........#.a.................................................................................................................................................a.e.b.b.b.f.....g.d.b.b.f...a.b...............................................................................................................................................a.e.b.b.d.c...a.b.......b.a.a.b.f.e...b.a..............................................................", ".....................................................#.#.....................................................................#.#.....................................a.#.........#.a.........................................................................f.e.b.b.b.......................................................................a.#.........#.a.......................................................................a.#.b.b.b.b.......................................................................a.#.....b.b.b.f.....................................................................a.#.b.b.b.b.#.a...............................................................................b.b.......................................................................a.#.d.h...............................................................................a.#.......................................................................................f.f.................................................................................h.d.g...................................................................................................................................................a.b...................h.d.f.a.b...............................................................................................................................................a.d.d.g.......a.b.......b.a.a.b...h.e.e.a..............................................................", ".....................................................#.#.....................................................................#.#.....................................a.#.b.b.b.b.#.a.................................................................................g.d.h...................................................................a.#.........#.a.......................................................................a.#...............................................................................a.#.........#.a.....................................................................a.#.........#.a...............................................................................b.b.......................................................................a.#.d.c...............................................................................a.#...........................................................................................................................................................................d.c.....................................................................................................................................................a.b.....................b.a.a.b.......f.h.....................................................................................................................................a.b...d.f.....a.b.......b.a.a.b.....f.e.a..............................................................", ".....................................................#.#.....................................................o...............#.#.....................................a.#.........#.a...................................................................................#.a...................................................................a.#.........#.a.......................................................................a.#...............................................................................a.#.........#.a.....................................................................a.#.........#.a.......................................................................g.g.....b.b.......................................................................a.#.h.d.g.............................................................................a.#.........................................................................................................................................................................b.b.......................................................................................................................................................a.b...........h.g.h...h.d.f.f.b.h...h.d.f.....................................................................................................................................a.b...h.b.g...f.b.h...h.d.f.a.b.......b.a..............................................................", ".....................................................#.#...........p.................p.............................p.........#.#.....................................a.#.........#.a.......................................................................h.a.........#.a...................................................................a.#.........#.a.......................................................................a.#...............................................................................a.#.........#.a.....................................................................a.#.........#.a.......................................................................b.b.....b.b.......................................................................a.#.....d.c...........................................................................a.#.......................................................................................b.b...............................................................................f.f.......................................................................................................................................................a.e.b.b.b.b.f...g.d.b.d.c.....g.d.b.d.c.......................................................................................................................................a.b.....h.d.f...g.d.b.d.c...a.b.......b.a..............................................................", ".....................................................#.#...q.r.s.....t.r.u.v...w.s.r.x.p.y.r.z.p.A.....B...v.C.D...E.r.u.F...#.#.....................................a.#.........#.a.......................................................................h.d.g.....g.d.h...................................................................a.#.......g.d.h.......................................................................a.#...............................................................................h.d.g.....g.d.h.....................................................................a.#.........#.a.......................................................................f.e.f.f.e.f.......................................................................a.#.....h.d.g.........................................................................a.#.......................................................................................b.b...............................................................................f.f............................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.........G...H.....I...J.....K...L.......g.....M.....N.....w.....O...#.#.....................................f.b.........b.f...........................................................................b.b.b.b.......................................................................f.b.b.b.b.b...........................................................................f.b...................................................................................b.b.b.b.........................................................................f.b.........b.f.........................................................................f.b.b.f.........................................................................f.b.........b.f.......................................................................f.b.b.b.b.b.b.f.............................................................................................................................................................b.b............................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.............P.....Q...J.....R...L...S...g.....M.....N.....w.........#.#...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................g.g............................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.....T.U.V...W.X.Y.....Z.U.U.0...1.U.2...s.3.4.5.....N.....w.........#.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.........6...H.K.......7.....8...L.......g.....M.....N.....w.........#.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.........z...H...g.....J.....R...L.......g.....M.....N.....9.....d...#.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#..#.###a.p..#b...p#c...A....#d..#e......#f....#g..#h#i#j....###k.....#.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................f.f.........................................................................h.a........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#.........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................f.e.f.........................................................................h.d.g...................................................................................f.f................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#.......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................f.e.f...............................................................................d.c.................................................................................b.b.........................................................................................................................................................................................................................................................................#.#....................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#.....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................f.e.f.................................................................................h.d.g...............................................................................b.b.................................................................................................................................................................................................................................................................#.......#.#....................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................f.e.f.......................................................................................d.c.......................................................................f.b.b.e.e.b.b.f.......................................................................f.b.b.b.b.b.b.f.....................................................................................................................................................................##l.....#.#....................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................f.e.f.........................................................................................h.d.g...........................................................................b.b.................................................................................................................................................................................................................................................................#.##m...#.#....................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#...................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................g.d.h.......................................................................................c.d.............................................................................b.b.................................................................................................................................................................................................................................................#.#.#.#.#.#.#.#.#.#.##k.#.#....................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#.....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................c.d.....................................................................................g.d.h.............................................................................g.g................................................................................................................................................................................................................................................#n#n#n#n#n#n#n#n.#.#.#...#.#....................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#.......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................g.d.h...............................................................................c.d.....................................................................................................................................................................................................................................................................................................................................................#.#.....#.#....................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#.........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................c.d.............................................................................g.d.h.....................................................................................................................................................................................................................................................................................................................................................#.......#.#....................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#...........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................g.g.........................................................................f.b.................................................................................................................................................................................................................................................................................................................................................................#.#....................................................................................................................................................................................................................................................", ".....................................................#.#............................#o#p#q#q#p#o.............................#.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#........................#r#p#s#s#s#s#s#s#p#r.........................#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#........................#p#s#s#s#s#s#s#s#s#p.........................#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#......................#o#s#s#s#s#s#s#s#s#s#s#o.......................#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#......................#p#s#s#s#s#s#s#s#s#s#s#p.......................#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#......................#q#s#s#s#s#s#s#s#s#s#s#q.......................#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#......................#q#s#s#s#s#s#s#s#s#s#s#q.......................#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#......................#p#s#s#s#s#s#s#s#s#s#s#p.......................#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#......................#o#s#s#s#s#s#s#s#s#s#s#o.......................#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#........................#p#s#s#s#s#s#s#s#s#p.........................#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#........................#r#p#s#s#s#s#s#s#p#r.........................#.#...................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.............................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", ".....................................................#.#............................#o#p#q#q#p#o.............................#.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.....................................................................#.#..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".....................................................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.....................................h.a.........a.h.......................................................................h.a.........a.h.........................................................................a.a.a.a.........................................................................h.a.........a.h.....................................................................h.a.a.a.a.a.........................................................................h.a.........a.h.....................................................................f...........h.h.....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................#.#.........................................................................................................................................................a.g.a.g.g...h.a.a.b.a.a.h...a.g.a.g.g...f.c.a.a.g.g................................................................", ".....................................................#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.#.....................................a.#.........#.a.......................................................................a.#.........#.a.......................................................................g.d.a.a.d.g.......................................................................a.#.........#.a.....................................................................a.#.a.a.a.d.g.......................................................................a.#.........#.a.....................................................................e.f.........d.a.....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................#.#.......#...............................................................................................................................................f.b.h...h.d.f.......#.......f.b.h...h.d.f.a.b.....h.d.f..............................................................", ".......................................................................................................................................................................b.b.....b.b...........................................................................b.b.....b.b.......................................................................a.#.........#.a.....................................................................a.#.........#.a.....................................................................a.#.........#.a.....................................................................a.#.........#.a.....................................................................#.#.f...h.d.#.a.....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................#.#....#l.#...............................................................................................................................................a.b.................#.......a.b.......b.a.a.b.......b.a..............................................................", ".......................................................................................................................................................................f.e.f.f.e.f...........................................................................f.e.f.f.e.f.......................................................................a.#.........a.h.....................................................................h.d.g.....g.d.h.....................................................................a.#.........#.a.....................................................................a.#.g.......#.a.....................................................................#.c.e.f.d.c.#.a.....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................#.#..#m.#.#...............................................................................................................................................f.b.h...............#.......a.b.......b.a.a.b.....h.d.f..............................................................", ".........................................................................................................................................................................d.c.c.d...............................................................................d.c.c.d.........................................................................a.#...................................................................................b.b.....b.b.......................................................................a.#.......f.e.f.....................................................................a.#.d.c.....#.a.....................................................................#.a.f.e.g...#.a...................................................................................................................................................................................................................................................g.g...............................................................................................................................................................................................................................................#.##k.#.#.#.#.#.#.#.#.#.#.#.................................................................................................................................g.d.b.b.f.........#.......a.b.......b.a.a.e.b.b.d.c................................................................", ".........................................................................................................................................................................h.d.d.h...............................................................................h.d.d.h.........................................................................a.#...................................................................................f.e.f.f.e.f.......................................................................a.#.b.b.b.e.f.......................................................................a.#.h.d.g...#.a.....................................................................#.a...f.....#.a...................................................................................................................................................................................................................................................b.b...............................................................................................................................................................................................................................................#.#...#.#.##n#n#n#n#n#n#n#n.......................................................................................................................................h.d.f.......#.......a.b.......b.a.a.b........................................................................", "...........................................................................................................................................................................b.b.................................................................................c.d.d.c.........................................................................a.#.....................................................................................#.a.a.#.........................................................................a.#.......g.d.h.....................................................................a.#.....d.c.#.a.....................................................................#.a.........#.a...................................................................................................................................................................................................................................................f.f...........................................................................f.b.b.b.b.b.b.f.....................................................................................................................................................#.#.....#.#.........................................................................................................................................................b.a.......#.......a.b.......b.a.a.b........................................................................", "...........................................................................................................................................................................b.b.................................................................................#.a.a.#.........................................................................a.#.....................................................................................c.d.d.c.........................................................................a.#.........#.a.....................................................................a.#.....h.d.#.a.....................................................................#.a.........#.a.....................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................#.#.......#...............................................................................................................................................h.g.h...h.d.f.......#.......f.b.h...h.d.f.a.b........................................................................", "...........................................................................................................................................................................b.b...............................................................................b.b.....b.b.......................................................................a.#.........#.a.........................................................................a.#.#.a.........................................................................a.#.........#.a.....................................................................a.#.........#.a.....................................................................#.a.........#.a.................................................................................................................................................................f.f.................................................................................................................................................................................................................................................................................................................................#.#.........................................................................................................................................................g.d.b.d.c.........#.........g.d.b.d.c...a.b........................................................................", "...........................................................................................................................................................................................................................................................f.e.f.....f.e.f.....................................................................h.d.g.....g.d.h.........................................................................h.d.d.h.........................................................................a.#.......g.d.h.....................................................................a.#.........#.a.....................................................................#.a.........#.a.................................................................................................................................................................b.b...............................................................................b.b..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "...........................................................................................................................................................................................................................................................f.b.........b.f.........................................................................b.b.b.b...............................................................................g.g...........................................................................f.b.b.b.b.b.........................................................................f.b.........b.f.....................................................................b.f.........b.f...........................................................................b.b...................................................................................g.g...............................................................................b.b...........................................................................f.b.b.b.b.b.b.f....................................................................................................................................................................................................................................................................................................................................................................................................................................", ".........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................b.b...................................................................................................................................................................h.d.g..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................h.d.g...................................................................................................................................................................h.a................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................h.a........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", "...............................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.................................................................................................................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.............................i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i.i................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".................................................................a.g.a.g.g...f.g.......g.f...h.a.b.a.h...f.c.a.a.a.a.h.h.a.a.b.a.a.h.............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................a.g.a.g.g...f.g.......g.f...h.a.b.a.h...f.c.a.a.a.a.h.h.a.a.b.a.a.h...............................................................................a.g.g.g...f.......g...h.a.b.h...f.c.a.a.a.h.a.a.b.a.h.......f.g...........a.a.g.g...a.g.a.g...f.g...h.c.h...................................................................................f.c.a.a.a.a.h.f.g.......g.f.h.a.a.b.a.a.h.f.c.a.a.a.a.h.f.c.a.a.g.g................................................................", "...............................................................f.b.h...h.d.f.a.b.......b.a.......#.......a.b.................#.................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................f.b.h...h.d.f.a.b.......b.a.......#.......a.b.................#...................................................................................f.b.h.h.d.f.a.......b.......#.....a.b.............#...........a.b.........f.b...h.d.f.b.h...h.f.a.b...d.c.....................................................................................a.b...........a.b.......b.a.......#.......a.b...........a.b.....h.d.f..............................................................", "...............................................................a.b...........a.b.......b.a.......#.......a.b.................#.............................................................................................................................#...............................................................................................#............................................................................................................................................................................................................................................................................................................................................................................................................................#k....................................................................................#n.#.............................................................................................................................a.b...........a.b.......b.a.......#.......a.b.................#...................................................................................a.b.........a.......b.......#.....a.b.............#...........a.b.........a.b.....b.a.b.......f.a.b...g.......................................................................................a.b...........a.d.h.....b.a.......#.......a.b...........a.b.......b.a..............................................................", "...............................................................f.b.h.........a.b.......b.a.......#.......a.b.................#..........................................................................................................................#l.#...............................................................................................##l.........................................................................................................................................................................................................................................................................................................................................................................................................................#.##m..................................................................................#n.#.............................................................................................................................f.b.h.........a.b.......b.a.......#.......a.b.................#...................................................................................f.b.h.......a.......b.......#.....a.b.............#...........a.b.........a.b.....b.a.b.........a.d.d.........................................................................................a.b...........a.e.e.f...b.a.......#.......a.b...........a.b.....h.d.f..............................................................", ".................................................................g.d.b.b.f...a.e.b.b.b.e.a.......#.......a.e.b.b.b.f.........#........................................................................................................................#m.#.#...............................................................................................#.##m.....................................................................................................................................................................................................................................................................................................................................................................................................................#.#.#.##l................................................................................#n.#...............................................................................................................................g.d.b.b.f...a.e.b.b.b.e.a.......#.......a.e.b.b.b.f.........#.....................................................................................g.d.b.f...a.b.b.b.e.......#.....a.e.b.b.f.......#...........a.b.........a.b.....b.a.b.........a.#.c.........................................................................................a.e.b.b.b.f...a.b.f.e...b.a.......#.......a.e.b.b.b.f...a.e.b.b.d.c................................................................", ".......................................................................h.d.f.a.b.......b.a.......#.......a.b.................#......................................................................................................................#k.#.#.#.#.#.#.#.#.#.#.#...............................................................#.#.#.#.#.#.#.#.#.#.##k.................................................................................................................................................................................................................................................................................................................................................................................................................#.#.#.#.#.#.#..............................................................................#n.#.....................................................................................................................................h.d.f.a.b.......b.a.......#.......a.b.................#.........................................................................................h.d.f.a.......b.......#.....a.b.............#...........a.b.........a.b.....b.a.b.........a.d.d.........................................................................................a.b...........a.b...h.e.e.a.......#.......a.b...........a.d.d.g....................................................................", ".........................................................................b.a.a.b.......b.a.......#.......a.b.................#.........................................................................................................................#.#.##n#n#n#n#n#n#n#n..............................................................#n#n#n#n#n#n#n#n.#.#.#......................................................................................................................................................................................................................................................................................................................................................................................................................#n.#....................................................................................#n.#.......................................................................................................................................b.a.a.b.......b.a.......#.......a.b.................#...........................................................................................b.a.a.......b.......#.....a.b.............#...........a.b.........a.b.....b.a.b.......h.a.b...f.......................................................................................a.b...........a.b.....f.e.a.......#.......a.b...........a.b...d.f..................................................................", "...............................................................h.g.h...h.d.f.a.b.......b.a.......#.......a.b.................#...........................................................................................................................#.#...............................................................................................#.#........................................................................................................................................................................................................................................................................................................................................................................................................................#n.#....................................................................................#n.#.............................................................................................................................h.g.h...h.d.f.a.b.......b.a.......#.......a.b.................#...................................................................................h.g.h.h.d.f.a.......b.......#.....a.b.............#...........a.b.........f.b...h.d.f.b.h...h.f.a.b...b.g.....................................................................................a.b...........a.b.......b.a.......#.......a.b...........a.b...h.b.g................................................................", ".................................................................g.d.b.d.c...a.b.......b.a...f.b.#.b.f...a.b.................#.............................................................................................................................#...............................................................................................#..........................................................................................................................................................................................................................................................................................................................................................................................................................#n.#....................................................................................#n.#...............................................................................................................................g.d.b.d.c...a.b.......b.a...f.b.#.b.f...a.b.................#.....................................................................................g.d.d.c...a.......b...f.b.#.f...a.b.............#...........a.e.b.b.b.f...g.b.d.c...g.d.b.d...a.b...h.d.f...................................................................................a.e.b.b.b.b.f.a.b.......b.a.......#.......a.e.b.b.b.b.f.a.b.....h.d.f..............................................................", "......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................#n.#....................................................................................#n.#................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................#n.#.................................................................................#.#.#.#.#.#.#..........................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................#n.#...................................................................................#.#.#.##l............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................#n.#.....................................................................................#.##m..............................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "......................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................#n.#......................................................................................#k................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", "..................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................", ".................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................................." }; KCemu-0.5.1/src/ui/gtk/Makefile.in0000644001050700006200000006602211412404774016255 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @TARGET_LINUX_TRUE@bin_PROGRAMS = kcemu-remote$(EXEEXT) subdir = src/ui/gtk DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libui_gtk_a_AR = $(AR) $(ARFLAGS) libui_gtk_a_LIBADD = am_libui_gtk_a_OBJECTS = ui_gtk.$(OBJEXT) ui_gtk_base.$(OBJEXT) \ ui_gtk0.$(OBJEXT) ui_gtk1.$(OBJEXT) ui_gtk3.$(OBJEXT) \ ui_gtk4.$(OBJEXT) ui_gtk6.$(OBJEXT) ui_gtk8.$(OBJEXT) \ ui_gtk9.$(OBJEXT) ui_gtk_kramermc.$(OBJEXT) \ ui_gtk_muglerpc.$(OBJEXT) ui_gtk_vcs80.$(OBJEXT) \ ui_gtk_c80.$(OBJEXT) cmd.$(OBJEXT) window.$(OBJEXT) \ main.$(OBJEXT) disk.$(OBJEXT) vdip.$(OBJEXT) tape.$(OBJEXT) \ tapeadd.$(OBJEXT) info.$(OBJEXT) help.$(OBJEXT) \ about.$(OBJEXT) thanks.$(OBJEXT) color.$(OBJEXT) \ module.$(OBJEXT) keyboard.$(OBJEXT) options.$(OBJEXT) \ screenshot.$(OBJEXT) selector.$(OBJEXT) debug.$(OBJEXT) \ copying.$(OBJEXT) savemem.$(OBJEXT) fbrowse.$(OBJEXT) \ dialog.$(OBJEXT) image.$(OBJEXT) wav.$(OBJEXT) \ plotter.$(OBJEXT) video.$(OBJEXT) theora.$(OBJEXT) \ xvid.$(OBJEXT) dirac.$(OBJEXT) schro.$(OBJEXT) \ ffmpeg.$(OBJEXT) vnc.$(OBJEXT) gif.$(OBJEXT) hedit.$(OBJEXT) libui_gtk_a_OBJECTS = $(am_libui_gtk_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(keymapdir)" PROGRAMS = $(bin_PROGRAMS) am__kcemu_remote_SOURCES_DIST = kcemu-remote.c @TARGET_LINUX_TRUE@am_kcemu_remote_OBJECTS = kcemu-remote.$(OBJEXT) kcemu_remote_OBJECTS = $(am_kcemu_remote_OBJECTS) am__DEPENDENCIES_1 = @TARGET_LINUX_TRUE@kcemu_remote_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @TARGET_LINUX_TRUE@ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(libui_gtk_a_SOURCES) $(kcemu_remote_SOURCES) DIST_SOURCES = $(libui_gtk_a_SOURCES) $(am__kcemu_remote_SOURCES_DIST) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' DATA = $(keymap_DATA) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libui_gtk.a keymapdir = $(pkgdatadir)/keymaps KEYMAPS = \ kc851.key \ kc851_keyboard.xpm \ kc851_keyboard_pressed.xpm \ kc854.key \ kc854_keyboard.xpm \ kc854_keyboard_pressed.xpm \ poly880.key \ poly880_keyboard.xpm \ poly880_keyboard_pressed.xpm \ lc80.key \ lc80_keyboard.xpm \ lc80_keyboard_pressed.xpm \ vcs80.key \ vcs80_keyboard_pressed.xpm \ vcs80_keyboard.xpm \ a5105.key \ a5105_keyboard.png \ a5105_keyboard_pressed.png keymap_DATA = $(KEYMAPS) EXTRA_DIST = $(KEYMAPS) INCLUDES = \ -I../../../include \ $(LIBTHEORA_CFLAGS) \ $(XVIDCORE_CFLAGS) \ $(LIBDIRAC_CFLAGS) \ $(LIBSCHROEDINGER_CFLAGS) \ $(LIBAVFORMAT_CFLAGS) \ $(VNCSERVER_CFLAGS) \ $(GTK_CFLAGS) \ $(SDL_CFLAGS) AM_CPPFLAGS = \ $(X11_CFLAGS) \ $(XMU_CFLAGS) libui_gtk_a_SOURCES = \ ui_gtk.cc \ ui_gtk_base.cc \ ui_gtk0.cc \ ui_gtk1.cc \ ui_gtk3.cc \ ui_gtk4.cc \ ui_gtk6.cc \ ui_gtk8.cc \ ui_gtk9.cc \ ui_gtk_kramermc.cc \ ui_gtk_muglerpc.cc \ ui_gtk_vcs80.cc \ ui_gtk_c80.cc \ cmd.cc \ window.cc \ main.cc \ disk.cc \ vdip.cc \ tape.cc \ tapeadd.cc \ info.cc \ help.cc \ about.cc \ thanks.cc \ color.cc \ module.cc \ keyboard.cc \ options.cc \ screenshot.cc \ selector.cc \ debug.cc \ copying.cc \ savemem.cc \ fbrowse.cc \ dialog.cc \ image.cc \ wav.cc \ plotter.cc \ video.cc \ theora.cc \ xvid.cc \ dirac.cc \ schro.cc \ ffmpeg.cc \ vnc.cc \ gif.cc \ hedit.cc @TARGET_LINUX_TRUE@kcemu_remote_SOURCES = kcemu-remote.c @TARGET_LINUX_TRUE@kcemu_remote_LDADD = $(X11_LIBS) $(XMU_LIBS) $(INTLLIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/ui/gtk/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/ui/gtk/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libui_gtk.a: $(libui_gtk_a_OBJECTS) $(libui_gtk_a_DEPENDENCIES) -rm -f libui_gtk.a $(libui_gtk_a_AR) libui_gtk.a $(libui_gtk_a_OBJECTS) $(libui_gtk_a_LIBADD) $(RANLIB) libui_gtk.a install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) kcemu-remote$(EXEEXT): $(kcemu_remote_OBJECTS) $(kcemu_remote_DEPENDENCIES) @rm -f kcemu-remote$(EXEEXT) $(LINK) $(kcemu_remote_OBJECTS) $(kcemu_remote_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/about.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/color.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/copying.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/debug.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dialog.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirac.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fbrowse.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ffmpeg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gif.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hedit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/help.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/image.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/info.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kcemu-remote.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyboard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/options.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plotter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/savemem.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/schro.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/screenshot.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/selector.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tape.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tapeadd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/thanks.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/theora.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_gtk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_gtk0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_gtk1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_gtk3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_gtk4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_gtk6.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_gtk8.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_gtk9.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_gtk_base.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_gtk_c80.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_gtk_kramermc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_gtk_muglerpc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ui_gtk_vcs80.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/video.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vnc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wav.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/window.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/xvid.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` install-keymapDATA: $(keymap_DATA) @$(NORMAL_INSTALL) test -z "$(keymapdir)" || $(MKDIR_P) "$(DESTDIR)$(keymapdir)" @list='$(keymap_DATA)'; test -n "$(keymapdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(keymapdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(keymapdir)" || exit $$?; \ done uninstall-keymapDATA: @$(NORMAL_UNINSTALL) @list='$(keymap_DATA)'; test -n "$(keymapdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(keymapdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(keymapdir)" && rm -f $$files ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(keymapdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-keymapDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS uninstall-keymapDATA .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-noinstLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am \ install-keymapDATA install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am uninstall-binPROGRAMS uninstall-keymapDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/ui/Makefile.in0000644001050700006200000005400311412404773015463 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/ui DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libui_a_AR = $(AR) $(ARFLAGS) libui_a_LIBADD = am_libui_a_OBJECTS = log.$(OBJEXT) error.$(OBJEXT) status.$(OBJEXT) \ commands.$(OBJEXT) hsv2rgb.$(OBJEXT) libui_a_OBJECTS = $(am_libui_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(libui_a_SOURCES) DIST_SOURCES = $(libui_a_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = generic gtk noinst_LIBRARIES = libui.a INCLUDES = \ -I../../include AM_CPPFLAGS = \ -DVERSION=\"$(VERSION)\" libui_a_SOURCES = \ log.cc \ error.cc \ status.cc \ commands.cc \ hsv2rgb.cc all: all-recursive .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/ui/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/ui/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libui.a: $(libui_a_OBJECTS) $(libui_a_DEPENDENCIES) -rm -f libui.a $(libui_a_AR) libui.a $(libui_a_OBJECTS) $(libui_a_LIBADD) $(RANLIB) libui.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/commands.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/hsv2rgb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/log.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/status.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LIBRARIES) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags ctags-recursive distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/sys/0000755001050700006200000000000011412404773013615 5ustar glaubitzfbedvKCemu-0.5.1/src/sys/Makefile.am0000644001050700006200000000026111340261610015637 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in if TARGET_LINUX SUBDIRS = linux endif if TARGET_FREEBSD SUBDIRS = linux endif if TARGET_MINGW SUBDIRS = mingw endif KCemu-0.5.1/src/sys/mingw/0000755001050700006200000000000011412404773014736 5ustar glaubitzfbedvKCemu-0.5.1/src/sys/mingw/sys_basename.c0000644001050700006200000000213411345001576017552 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" char * sys_basename(const char *path) { const char *basename = strrchr(path, '\\'); if (basename) basename++; else basename = path; return strdup(basename); } KCemu-0.5.1/src/sys/mingw/sys_htons.c0000644001050700006200000000175711345001576017144 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" unsigned short sys_htons(unsigned short hostshort) { return htons(hostshort); } KCemu-0.5.1/src/sys/mingw/sys_socket_init.c0000644001050700006200000000233711345001576020317 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" int sys_socket_init(void) { WORD wVersionRequested = MAKEWORD(2, 2); WSADATA wsaData; int err = WSAStartup(wVersionRequested, &wsaData); if (err != 0) { return 1; } if (LOBYTE(wsaData.wVersion) != 2 || HIBYTE(wsaData.wVersion) != 2) { WSACleanup(); return 1; } return 0; } KCemu-0.5.1/src/sys/mingw/sys_getdiskinfo.c0000644001050700006200000000347211345001576020313 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" int sys_getdiskinfo(const char *path, unsigned long *total, unsigned long *available, unsigned short *block_size) { ULARGE_INTEGER free, size; DWORD bytes_per_sector, d1, d2, d3; // Fetch the block size from the old interface as this information // is not provided by the new one anymore. if (GetDiskFreeSpace(path, &d1, &bytes_per_sector, &d2, &d3)) { *block_size = bytes_per_sector; } else { *block_size = 0; } // The disk size is queried via the new interface that supports // drives with more than 2GB (although we currently only support // return values of 4GB! if (!GetDiskFreeSpaceExA(path, &free, &size, NULL)) { *total = 0; *available = 0; *block_size = 0; return -1; } *available = free.QuadPart > 0xffffffffUL ? 0xffffffffUL : free.QuadPart; *total = size.QuadPart > 0xffffffffUL ? 0xffffffffUL : size.QuadPart; return 0; } KCemu-0.5.1/src/sys/mingw/sys_socket_create.c0000644001050700006200000000232411345001576020613 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" int sys_socket_create(int stream, int nonblocking) { int type = stream ? SOCK_STREAM : SOCK_DGRAM; int s = socket(AF_INET, type, 0); if (s < 0) return -1; if (!nonblocking) return s; unsigned long val = 1; if (ioctlsocket(s, FIONBIO, &val) == 0) return s; close(s); return -1; } KCemu-0.5.1/src/sys/mingw/sys_mkdir.c0000644001050700006200000000200011345001576017075 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/config.h" #include "sys/sysdep.h" int sys_mkdir(const char *pathname, int mode) { return mkdir(pathname); } KCemu-0.5.1/src/sys/mingw/Makefile.am0000644001050700006200000000105111340261610016756 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in noinst_LIBRARIES = libsys_mingw.a INCLUDES = \ -I../../../include libsys_mingw_a_SOURCES = \ sys_usleep.c \ sys_basename.c \ sys_isabsolutepath.c \ sys_converttime.c \ sys_localtime.c \ sys_gettimeofday.c \ sys_getprogrampath.c \ sys_gethome.c \ sys_mkdir.c \ sys_getdiskinfo.c \ sys_htonl.c \ sys_htons.c \ sys_socket_init.c \ sys_socket_create.c \ sys_socket_close.c \ sys_socket_connect.c \ sys_socket_recvfrom.c \ sys_socket_sendto.c \ sys_socket_send.c KCemu-0.5.1/src/sys/mingw/sys_isabsolutepath.c0000644001050700006200000000231311345001576021025 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" int sys_isabsolutepath(const char *path) { int drv; if ((path == NULL) || (path[0] == '\0') || (path[1] == '\0')) return 0; if (path[1] != ':') return 0; if (path[2] != '\\') return 0; drv = path[0]; return (((drv >= 'a') && (drv <= 'z')) || ((drv >= 'A') && (drv <= 'Z'))); } KCemu-0.5.1/src/sys/mingw/sys_socket_close.c0000644001050700006200000000173211345001576020457 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" void sys_socket_close(int socket) { closesocket(socket); } KCemu-0.5.1/src/sys/mingw/sys_converttime.c0000644001050700006200000000240111345001576020333 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/config.h" #include "sys/sysdep.h" void sys_converttime(long time, int *year, int *month, int *day, int *hour, int *minute, int *second) { time_t t = time; struct tm *result; result = localtime(&t); *year = result->tm_year; *month = result->tm_mon + 1; *day = result->tm_mday; *hour = result->tm_hour; *minute = result->tm_min; *second = result->tm_sec; } KCemu-0.5.1/src/sys/mingw/sys_socket_sendto.c0000644001050700006200000000257211345001576020651 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/config.h" #include "sys/sysdep.h" int sys_socket_sendto(int socket, unsigned char *buf, int bufsize, unsigned char ip0, unsigned char ip1, unsigned char ip2, unsigned char ip3, unsigned short port) { struct sockaddr_in addr; memset(&addr, 0, sizeof (addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = ip0 | ip1 << 8 | ip2 << 16 | ip3 << 24; return sendto(socket, buf, bufsize, 0, (struct sockaddr*)&addr, sizeof(addr)); } KCemu-0.5.1/src/sys/mingw/sys_gethome.c0000644001050700006200000000351511345001576017433 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/config.h" #include "sys/sysdep.h" static char * _sys_gethome(void) { char *buf; const char *ptr, *ptr2; ptr = getenv("APPDATA"); if (ptr != NULL) { buf = malloc(strlen(ptr) + 7); strcpy(buf, ptr); strcat(buf, "\\KCemu"); return strdup(ptr); } ptr = getenv("USERPROFILE"); if (ptr != NULL) return strdup(ptr); ptr = getenv("HOMEDRIVE"); if (ptr != NULL) { ptr2 = getenv("HOMEPATH"); if (ptr2 != NULL) { buf = malloc(strlen(ptr) + strlen(ptr2) + 1); strcpy(buf, ptr); strcat(buf, ptr2); return buf; } } ptr = getenv("HOME"); if (ptr != NULL) return strdup(ptr); return NULL; } char * sys_gethome(void) { int a; char *ptr; ptr = _sys_gethome(); if (ptr == NULL) return NULL; for (a = 0;ptr[a] != 0;a++) if (ptr[a] == '\\') ptr[a] = '/'; return ptr; } KCemu-0.5.1/src/sys/mingw/sys_socket_recvfrom.c0000644001050700006200000000373311345001576021200 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include "kc/config.h" #include "sys/sysdep.h" int sys_socket_recvfrom(int socket, unsigned char *buf, int bufsize, unsigned char *ip0, unsigned char *ip1, unsigned char *ip2, unsigned char *ip3, unsigned short *port) { struct timeval tv; fd_set fds; struct sockaddr_storage peer_addr; unsigned int peer_addr_len = sizeof(peer_addr); FD_ZERO(&fds); FD_SET(socket, &fds); tv.tv_sec = 0; tv.tv_usec = 0; int s = select(1, &fds, NULL, NULL, &tv); if (s < 0) return -1; if (!FD_ISSET(socket, &fds)) return -1; int r = recvfrom(socket, buf, bufsize, 0, (struct sockaddr *)&peer_addr, &peer_addr_len); if (r < 0) return r; struct sockaddr_in *addr; addr = (struct sockaddr_in *)&peer_addr; if (ip0 != NULL) *ip0 = addr->sin_addr.s_addr; if (ip1 != NULL) *ip1 = addr->sin_addr.s_addr >> 8; if (ip2 != NULL) *ip2 = addr->sin_addr.s_addr >> 16; if (ip3 != NULL) *ip3 = addr->sin_addr.s_addr >> 24; if (port != NULL) *port = ntohs(addr->sin_port); return r; } KCemu-0.5.1/src/sys/mingw/sys_socket_send.c0000644001050700006200000000201211345001576020273 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" int sys_socket_send(int socket, unsigned char *buf, int bufsize) { return send(socket, buf, bufsize, 0); } KCemu-0.5.1/src/sys/mingw/sys_gettimeofday.c0000644001050700006200000000211311345001576020455 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/config.h" #include "sys/sysdep.h" void sys_gettimeofday(long *tv_sec, long *tv_usec) { DWORD t = timeGetTime(); *tv_sec = t / 1000; *tv_usec = 1000 * (t % 1000); // microseconds! } KCemu-0.5.1/src/sys/mingw/sys_socket_connect.c0000644001050700006200000000334311345001576021003 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/config.h" #include "sys/sysdep.h" int sys_socket_connect(int socket, unsigned char ip0, unsigned char ip1, unsigned char ip2, unsigned char ip3, unsigned short port) { int err; struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = ip0 | ip1 << 8 | ip2 << 16 | ip3 << 24; err = connect(socket, (struct sockaddr *)&addr, sizeof(addr)); if (err >= 0) return 0; err = WSAGetLastError(); switch (err) { case WSAEINTR: return SYS_SOCKET_ERR_INTR; case WSAEINPROGRESS: case WSAEWOULDBLOCK: case WSAEINVAL: return SYS_SOCKET_ERR_INPROGRESS; case WSAEALREADY: return SYS_SOCKET_ERR_ALREADY; case WSAEISCONN: return SYS_SOCKET_ERR_ISCONN; default: return err; } } KCemu-0.5.1/src/sys/mingw/sys_usleep.c0000644001050700006200000000174111345001576017277 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" void sys_usleep(long microseconds) { Sleep(microseconds / 1000); } KCemu-0.5.1/src/sys/mingw/sys_getprogrampath.c0000644001050700006200000000252311345001576021025 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" char * sys_getprogrampath(void) { int len; TCHAR cmd[MAX_PATH]; int ret = GetModuleFileName(NULL, cmd, MAX_PATH); if ((ret == 0) || (ret == MAX_PATH)) return NULL; // safeguard against path without drive letter if ((cmd[1] != ':') || (cmd[2] != '\\')) return NULL; // remove filename, loop end checked above len = strlen(cmd); while (cmd[len - 1] != '\\') len--; cmd[len] = '\0'; return strdup(cmd); } KCemu-0.5.1/src/sys/mingw/sys_localtime.c0000644001050700006200000000237711345001576017761 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/config.h" #include "sys/sysdep.h" void sys_localtime(int *year, int *month, int *day, int *hour, int *minute, int *second) { time_t t; struct tm *result; t = time(NULL); result = localtime(&t); *year = result->tm_year; *month = result->tm_mon + 1; *day = result->tm_mday; *hour = result->tm_hour; *minute = result->tm_min; *second = result->tm_sec; } KCemu-0.5.1/src/sys/mingw/sys_htonl.c0000644001050700006200000000175311345001576017131 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" unsigned long sys_htonl(unsigned long hostlong) { return htonl(hostlong); } KCemu-0.5.1/src/sys/mingw/Makefile.in0000644001050700006200000004506011412404773017010 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/sys/mingw DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libsys_mingw_a_AR = $(AR) $(ARFLAGS) libsys_mingw_a_LIBADD = am_libsys_mingw_a_OBJECTS = sys_usleep.$(OBJEXT) \ sys_basename.$(OBJEXT) sys_isabsolutepath.$(OBJEXT) \ sys_converttime.$(OBJEXT) sys_localtime.$(OBJEXT) \ sys_gettimeofday.$(OBJEXT) sys_getprogrampath.$(OBJEXT) \ sys_gethome.$(OBJEXT) sys_mkdir.$(OBJEXT) \ sys_getdiskinfo.$(OBJEXT) sys_htonl.$(OBJEXT) \ sys_htons.$(OBJEXT) sys_socket_init.$(OBJEXT) \ sys_socket_create.$(OBJEXT) sys_socket_close.$(OBJEXT) \ sys_socket_connect.$(OBJEXT) sys_socket_recvfrom.$(OBJEXT) \ sys_socket_sendto.$(OBJEXT) sys_socket_send.$(OBJEXT) libsys_mingw_a_OBJECTS = $(am_libsys_mingw_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libsys_mingw_a_SOURCES) DIST_SOURCES = $(libsys_mingw_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libsys_mingw.a INCLUDES = \ -I../../../include libsys_mingw_a_SOURCES = \ sys_usleep.c \ sys_basename.c \ sys_isabsolutepath.c \ sys_converttime.c \ sys_localtime.c \ sys_gettimeofday.c \ sys_getprogrampath.c \ sys_gethome.c \ sys_mkdir.c \ sys_getdiskinfo.c \ sys_htonl.c \ sys_htons.c \ sys_socket_init.c \ sys_socket_create.c \ sys_socket_close.c \ sys_socket_connect.c \ sys_socket_recvfrom.c \ sys_socket_sendto.c \ sys_socket_send.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/sys/mingw/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/sys/mingw/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libsys_mingw.a: $(libsys_mingw_a_OBJECTS) $(libsys_mingw_a_DEPENDENCIES) -rm -f libsys_mingw.a $(libsys_mingw_a_AR) libsys_mingw.a $(libsys_mingw_a_OBJECTS) $(libsys_mingw_a_LIBADD) $(RANLIB) libsys_mingw.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_basename.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_converttime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_getdiskinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_gethome.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_getprogrampath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_gettimeofday.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_htonl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_htons.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_isabsolutepath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_localtime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_mkdir.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket_close.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket_connect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket_create.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket_init.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket_recvfrom.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket_send.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket_sendto.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_usleep.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/sys/linux/0000755001050700006200000000000011412404773014754 5ustar glaubitzfbedvKCemu-0.5.1/src/sys/linux/sys_basename.c0000644001050700006200000000213311345001576017567 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" char * sys_basename(const char *path) { const char *basename = strrchr(path, '/'); if (basename) basename++; else basename = path; return strdup(basename); } KCemu-0.5.1/src/sys/linux/sys_htons.c0000644001050700006200000000176011345001576017154 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" unsigned short sys_htons(unsigned short hostshort) { return htons(hostshort); } KCemu-0.5.1/src/sys/linux/sys_socket_init.c0000644001050700006200000000166011345001576020333 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/config.h" #include "sys/sysdep.h" int sys_socket_init(void) { return 0; } KCemu-0.5.1/src/sys/linux/sys_getdiskinfo.c0000644001050700006200000000301111345001576020316 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" int sys_getdiskinfo(const char *path, unsigned long *total, unsigned long *available, unsigned short *block_size) { struct statvfs buf; if (statvfs(path, &buf) == 0) { unsigned long long free = (unsigned long long) buf.f_bavail * buf.f_bsize; unsigned long long size = (unsigned long long) buf.f_blocks * buf.f_frsize; *available = free > 0xffffffffUL ? 0xffffffffUL : free; *total = size > 0xffffffffUL ? 0xffffffffUL : total; *block_size = buf.f_bsize; return 0; } else { *total = 0; *available = 0; *block_size = 0; return -1; } } KCemu-0.5.1/src/sys/linux/sys_socket_create.c0000644001050700006200000000245211345001576020633 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include "kc/config.h" #include "sys/sysdep.h" int sys_socket_create(int stream, int nonblocking) { int type = stream ? SOCK_STREAM : SOCK_DGRAM; int s = socket(AF_INET, type, 0); if (s < 0) return -1; if (!nonblocking) return s; if (fcntl(s, F_SETFL, O_NONBLOCK) == 0) return s; close(s); return -1; } KCemu-0.5.1/src/sys/linux/sys_mkdir.c0000644001050700006200000000200611345001576017121 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/config.h" #include "sys/sysdep.h" int sys_mkdir(const char *pathname, int mode) { return mkdir(pathname, mode); } KCemu-0.5.1/src/sys/linux/Makefile.am0000644001050700006200000000105111340261610016774 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in noinst_LIBRARIES = libsys_linux.a INCLUDES = \ -I../../../include libsys_linux_a_SOURCES = \ sys_usleep.c \ sys_basename.c \ sys_isabsolutepath.c \ sys_converttime.c \ sys_localtime.c \ sys_gettimeofday.c \ sys_getprogrampath.c \ sys_gethome.c \ sys_mkdir.c \ sys_getdiskinfo.c \ sys_htonl.c \ sys_htons.c \ sys_socket_init.c \ sys_socket_create.c \ sys_socket_close.c \ sys_socket_connect.c \ sys_socket_recvfrom.c \ sys_socket_sendto.c \ sys_socket_send.c KCemu-0.5.1/src/sys/linux/sys_isabsolutepath.c0000644001050700006200000000200311345001576021037 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" int sys_isabsolutepath(const char *path) { if (path == NULL) return 0; return path[0] == '/'; } KCemu-0.5.1/src/sys/linux/sys_socket_close.c0000644001050700006200000000201111345001576020464 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/config.h" #include "sys/sysdep.h" void sys_socket_close(int socket) { shutdown(socket, SHUT_RDWR); close(socket); } KCemu-0.5.1/src/sys/linux/sys_converttime.c0000644001050700006200000000345011345001576020356 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/config.h" #include "sys/sysdep.h" #if HAVE_LOCALTIME_R void sys_converttime(long time, int *year, int *month, int *day, int *hour, int *minute, int *second) { time_t t = time; struct tm result; localtime_r(&t, &result); *year = result.tm_year; *month = result.tm_mon + 1; *day = result.tm_mday; *hour = result.tm_hour; *minute = result.tm_min; *second = result.tm_sec; } #else /* HAVE_LOCALTIME_R */ #if HAVE_LOCALTIME void sys_localtime(long time, int *year, int *month, int *day, int *hour, int *minute, int *second) { time_t t = time; struct tm *result; result = localtime(&t); *year = result->tm_year; *month = result->tm_mon + 1; *day = result->tm_mday; *hour = result->tm_hour; *minute = result->tm_min; *second = result->tm_sec; } #else /* HAVE_LOCALTIME */ #error neither HAVE_LOCALTIME_R nor HAVE_LOCALTIME defined #endif /* HAVE_LOCALTIME */ #endif /* HAVE_LOCALTIME_R */ KCemu-0.5.1/src/sys/linux/sys_socket_sendto.c0000644001050700006200000000274311345001576020667 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include "kc/config.h" #include "sys/sysdep.h" int sys_socket_sendto(int socket, unsigned char *buf, int bufsize, unsigned char ip0, unsigned char ip1, unsigned char ip2, unsigned char ip3, unsigned short port) { char ip[256]; snprintf(ip, sizeof(ip), "%d.%d.%d.%d", ip0, ip1, ip2, ip3); struct sockaddr_in addr; memset(&addr, 0, sizeof (addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port); inet_pton(AF_INET, ip, &addr.sin_addr); return sendto(socket, buf, bufsize, 0, (struct sockaddr*)&addr, sizeof(addr)); } KCemu-0.5.1/src/sys/linux/sys_gethome.c0000644001050700006200000000235411345001576017451 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "kc/config.h" #include "sys/sysdep.h" char * sys_gethome(void) { const char *ptr; struct passwd *passwd; ptr = getenv("HOME"); if (ptr != NULL) return strdup(ptr); passwd = getpwuid(getuid()); if (passwd != NULL) return strdup(passwd->pw_dir); return NULL; } KCemu-0.5.1/src/sys/linux/sys_socket_recvfrom.c0000644001050700006200000000330411345001576021210 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/config.h" #include "sys/sysdep.h" int sys_socket_recvfrom(int socket, unsigned char *buf, int bufsize, unsigned char *ip0, unsigned char *ip1, unsigned char *ip2, unsigned char *ip3, unsigned short *port) { struct sockaddr_storage peer_addr; socklen_t peer_addr_len = sizeof(peer_addr); int r = recvfrom(socket, buf, bufsize, MSG_DONTWAIT, (struct sockaddr *)&peer_addr, &peer_addr_len); if (r < 0) return r; struct sockaddr_in *addr; addr = (struct sockaddr_in *)&peer_addr; if (ip0 != NULL) *ip0 = addr->sin_addr.s_addr; if (ip1 != NULL) *ip1 = addr->sin_addr.s_addr >> 8; if (ip2 != NULL) *ip2 = addr->sin_addr.s_addr >> 16; if (ip3 != NULL) *ip3 = addr->sin_addr.s_addr >> 24; if (port != NULL) *port = ntohs(addr->sin_port); return r; } KCemu-0.5.1/src/sys/linux/sys_socket_send.c0000644001050700006200000000201411345001576020313 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" int sys_socket_send(int socket, unsigned char *buf, int bufsize) { return send(socket, buf, bufsize, 0); } KCemu-0.5.1/src/sys/linux/sys_gettimeofday.c0000644001050700006200000000206211345001576020476 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" void sys_gettimeofday(long *tv_sec, long *tv_usec) { struct timeval tv; gettimeofday(&tv, 0); *tv_sec = tv.tv_sec; *tv_usec = tv.tv_usec; } KCemu-0.5.1/src/sys/linux/sys_socket_connect.c0000644001050700006200000000335311345001576021022 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include "kc/config.h" #include "sys/sysdep.h" int sys_socket_connect(int socket, unsigned char ip0, unsigned char ip1, unsigned char ip2, unsigned char ip3, unsigned short port) { int err; struct sockaddr_in addr; memset(&addr, 0, sizeof(addr)); addr.sin_family = AF_INET; addr.sin_port = htons(port); addr.sin_addr.s_addr = ip0 | ip1 << 8 | ip2 << 16 | ip3 << 24; err = connect(socket, (struct sockaddr *)&addr, sizeof(addr)); if (err >= 0) return 0; switch (errno) { case EINTR: return SYS_SOCKET_ERR_INTR; case EINPROGRESS: return SYS_SOCKET_ERR_INPROGRESS; case EALREADY: return SYS_SOCKET_ERR_ALREADY; case EISCONN: return SYS_SOCKET_ERR_ISCONN; default: return errno; } } KCemu-0.5.1/src/sys/linux/sys_usleep.c0000644001050700006200000000173411345001576017317 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" void sys_usleep(long microseconds) { usleep(microseconds); } KCemu-0.5.1/src/sys/linux/sys_getprogrampath.c0000644001050700006200000000171511345001576021045 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" char * sys_getprogrampath(void) { return NULL; } KCemu-0.5.1/src/sys/linux/sys_localtime.c0000644001050700006200000000344611345001576017775 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/config.h" #include "sys/sysdep.h" #if HAVE_LOCALTIME_R void sys_localtime(int *year, int *month, int *day, int *hour, int *minute, int *second) { time_t t; struct tm result; t = time(NULL); localtime_r(&t, &result); *year = result.tm_year; *month = result.tm_mon + 1; *day = result.tm_mday; *hour = result.tm_hour; *minute = result.tm_min; *second = result.tm_sec; } #else /* HAVE_LOCALTIME_R */ #if HAVE_LOCALTIME void sys_localtime(int *year, int *month, int *day, int *hour, int *minute, int *second) { time_t t; struct tm *result; t = time(NULL); result = localtime(&t); *year = result->tm_year; *month = result->tm_mon + 1; *day = result->tm_mday; *hour = result->tm_hour; *minute = result->tm_min; *second = result->tm_sec; } #else /* HAVE_LOCALTIME */ #error neither HAVE_LOCALTIME_R nor HAVE_LOCALTIME defined #endif /* HAVE_LOCALTIME */ #endif /* HAVE_LOCALTIME_R */ KCemu-0.5.1/src/sys/linux/sys_htonl.c0000644001050700006200000000175411345001576017150 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/config.h" #include "sys/sysdep.h" unsigned long sys_htonl(unsigned long hostlong) { return htonl(hostlong); } KCemu-0.5.1/src/sys/linux/Makefile.in0000644001050700006200000004506011412404773017026 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/sys/linux DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libsys_linux_a_AR = $(AR) $(ARFLAGS) libsys_linux_a_LIBADD = am_libsys_linux_a_OBJECTS = sys_usleep.$(OBJEXT) \ sys_basename.$(OBJEXT) sys_isabsolutepath.$(OBJEXT) \ sys_converttime.$(OBJEXT) sys_localtime.$(OBJEXT) \ sys_gettimeofday.$(OBJEXT) sys_getprogrampath.$(OBJEXT) \ sys_gethome.$(OBJEXT) sys_mkdir.$(OBJEXT) \ sys_getdiskinfo.$(OBJEXT) sys_htonl.$(OBJEXT) \ sys_htons.$(OBJEXT) sys_socket_init.$(OBJEXT) \ sys_socket_create.$(OBJEXT) sys_socket_close.$(OBJEXT) \ sys_socket_connect.$(OBJEXT) sys_socket_recvfrom.$(OBJEXT) \ sys_socket_sendto.$(OBJEXT) sys_socket_send.$(OBJEXT) libsys_linux_a_OBJECTS = $(am_libsys_linux_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libsys_linux_a_SOURCES) DIST_SOURCES = $(libsys_linux_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libsys_linux.a INCLUDES = \ -I../../../include libsys_linux_a_SOURCES = \ sys_usleep.c \ sys_basename.c \ sys_isabsolutepath.c \ sys_converttime.c \ sys_localtime.c \ sys_gettimeofday.c \ sys_getprogrampath.c \ sys_gethome.c \ sys_mkdir.c \ sys_getdiskinfo.c \ sys_htonl.c \ sys_htons.c \ sys_socket_init.c \ sys_socket_create.c \ sys_socket_close.c \ sys_socket_connect.c \ sys_socket_recvfrom.c \ sys_socket_sendto.c \ sys_socket_send.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/sys/linux/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/sys/linux/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libsys_linux.a: $(libsys_linux_a_OBJECTS) $(libsys_linux_a_DEPENDENCIES) -rm -f libsys_linux.a $(libsys_linux_a_AR) libsys_linux.a $(libsys_linux_a_OBJECTS) $(libsys_linux_a_LIBADD) $(RANLIB) libsys_linux.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_basename.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_converttime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_getdiskinfo.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_gethome.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_getprogrampath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_gettimeofday.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_htonl.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_htons.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_isabsolutepath.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_localtime.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_mkdir.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket_close.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket_connect.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket_create.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket_init.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket_recvfrom.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket_send.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_socket_sendto.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sys_usleep.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/sys/Makefile.in0000644001050700006200000004721111412404773015667 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/sys DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = linux mingw DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @TARGET_FREEBSD_TRUE@SUBDIRS = linux @TARGET_LINUX_TRUE@SUBDIRS = linux @TARGET_MINGW_TRUE@SUBDIRS = mingw all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/sys/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/sys/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/Makefile.am0000644001050700006200000000035211340261610015022 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in if USE_INCLUDED_GETOPT GETOPTDIR = getopt endif SUBDIRS = \ sys \ $(GETOPTDIR) \ libdbg \ fileio \ libtape \ libdisk \ libaudio \ libgtkex \ cmd \ ui \ kc \ util KCemu-0.5.1/src/libdisk/0000755001050700006200000000000011412404773014420 5ustar glaubitzfbedvKCemu-0.5.1/src/libdisk/teledisk.c0000644001050700006200000002164511345001576016377 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "libdisk/teledisk.h" static int decode_sector_copy(teledisk_prop_t *prop, int track_idx, unsigned char *buf) { int a, c, size; size = prop->offset[track_idx].l; for (a = 0;a < size;a++) { c = fgetc(prop->f); if (c == EOF) return -1; buf[a] = c; } return 0; } static int decode_sector_mult(teledisk_prop_t *prop, int track_idx, unsigned char *buf) { int a, b1, b2, idx, len; len = fgetc(prop->f); len = len + 256 * fgetc(prop->f); b1 = fgetc(prop->f); b2 = fgetc(prop->f); idx = 0; for (a = 0;a < len;a++) { buf[idx++] = b1; buf[idx++] = b2; } return 0; } static int decode_sector_rle(teledisk_prop_t *prop, int track_idx, unsigned char *buf) { int a, c, code, b1, b2, len, idx; idx = 0; while (idx < prop->offset[track_idx].l) { code = fgetc(prop->f); switch (code) { case 0: len = fgetc(prop->f); for (a = 0;a < len;a++) { c = fgetc(prop->f); buf[idx++] = c; } break; case 1: len = fgetc(prop->f); b1 = fgetc(prop->f); b2 = fgetc(prop->f); for (a = 0;a < len;a++) { buf[idx++] = b1; buf[idx++] = b2; } break; default: return -1; } } return 0; } static int decode_sector(teledisk_prop_t *prop, int track_idx, unsigned char *buf) { int type; char *name; type = fgetc(prop->f); switch (type) { case 0x00: name = "copy"; break; case 0x01: name = "mult"; break; case 0x02: name = "rle"; break; default: name = "unknown"; break; } //printf("track: %d, type = %d (%s)\n", track_idx, type, name); memset(prop->buf, 0, sizeof(prop->buf)); switch (type) { case 0x00: return decode_sector_copy(prop, track_idx, buf); case 0x01: return decode_sector_mult(prop, track_idx, buf); case 0x02: return decode_sector_rle(prop, track_idx, buf); default: break; } return -1; } static int read_sectors(teledisk_prop_t *prop) { int o, t, s1, s2, s3, s4, s5, s6, s7, s8; o = ftell(prop->f); s1 = fgetc(prop->f); s2 = fgetc(prop->f); s3 = fgetc(prop->f); s4 = fgetc(prop->f); s5 = fgetc(prop->f); s6 = fgetc(prop->f); s7 = fgetc(prop->f); s8 = fgetc(prop->f); //printf("SECTOR: %02x %02x %02x %02x %02x %02x %02x %02x\n", s1, s2, s3, s4, s5, s6, s7, s8); t = prop->sectors_total; prop->sectors_total++; prop->offset[t].c = s1; prop->offset[t].h = s2; prop->offset[t].s = s3; switch (s4) { case 0: prop->offset[t].l = 128; break; case 1: prop->offset[t].l = 256; break; case 2: prop->offset[t].l = 512; break; case 3: prop->offset[t].l = 1024; break; default: return -1; } if (prop->sector_size == 0) prop->sector_size = prop->offset[t].l; else if (prop->sector_size != prop->offset[t].l) prop->sector_size = -1; if (prop->cylinders < (s1 + 1)) prop->cylinders = s1 + 1; if (prop->sectors < s3) prop->sectors = s3; prop->offset[t].o = o; prop->offset[prop->sectors_total].o = 0; return decode_sector(prop, t, prop->buf); } static int read_tracks(teledisk_prop_t *prop) { int a, t1, t2, t3, t4; t1 = fgetc(prop->f); t2 = fgetc(prop->f); t3 = fgetc(prop->f); t4 = fgetc(prop->f); //printf("TRACK: %02x %02x %02x %02x\n", t1, t2, t3, t4); if (t1 == 0xff) // end marker? { //printf("TRACK END MARKER?\n"); return 1; } for (a = 0;a < t1;a++) if (read_sectors(prop) < 0) return -1; return 0; } static int set_density(teledisk_prop_t *prop, int density) { switch (density) { case 0: prop->density = "250K bps MFM"; break; case 1: prop->density = "300K bps MFM"; break; case 2: prop->density = "500K bps MFM"; break; case 128: prop->density = "250K bps FM"; break; case 129: prop->density = "300K bps FM"; break; case 130: prop->density = "500K bps FM"; break; default: return 0; } return 1; } static int set_drive_type(teledisk_prop_t *prop, int drive_type) { switch (drive_type) { case 1: prop->drive_type = "360k"; break; case 2: prop->drive_type = "1.2M"; break; case 3: prop->drive_type = "720k"; break; case 4: prop->drive_type = "1.44k"; break; default: return 0; } return 1; } static int read_header(teledisk_prop_t *prop) { char buf[2048]; struct { unsigned char file_id[2]; unsigned char volume_sequence; unsigned char check_signature; unsigned char version_number; unsigned char source_density; unsigned char drive_type; unsigned char track_density; unsigned char dos_mode; unsigned char heads; unsigned short crc; } h; struct { unsigned short crc; unsigned short len; unsigned char year; unsigned char month; unsigned char day; unsigned char hour; unsigned char minute; unsigned char second; } comment; const char *month[] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec" }; if (fread(&h, sizeof(h), 1, prop->f) != 1) return 0; /* * check file identifier */ if ((h.file_id[0] != 'T') && (h.file_id[0] != 't')) return 0; if ((h.file_id[1] != 'D') && (h.file_id[1] != 'd')) return 0; if (h.volume_sequence != 0) return 0; prop->id[0] = h.file_id[0]; prop->id[1] = h.file_id[1]; prop->id[2] = 0; prop->volume = h.volume_sequence; prop->signature = h.check_signature; prop->version_major = h.version_number / 16; prop->version_minor = h.version_number & 15; prop->heads = h.heads; prop->dos_mode = h.dos_mode; if (!set_density(prop, h.source_density)) return 0; if (!set_drive_type(prop, h.drive_type)) return 0; // check for comment if ((h.track_density & 0x80) != 0) { // comment header if (fread(&comment, sizeof(comment), 1, prop->f) != 1) return 0; snprintf(buf, sizeof(buf), "%02d. %s %04d, %02d:%02d:%02d", comment.day, month[comment.month], comment.year + 1900, comment.hour, comment.minute, comment.second); prop->comment_date = strdup(buf); if (comment.len >= (sizeof(buf) - 1)) return 0; /* * read comment */ memset(buf, 0, sizeof(buf)); if (fread(buf, 1, comment.len, prop->f) != comment.len) return 0; printf("comment: %s\n", buf); prop->comment = strdup(buf); } return 1; } teledisk_prop_t * teledisk_open(const char *filename) { int ret; FILE *f; teledisk_prop_t *prop; f = fopen(filename, "rb"); if (f == NULL) return NULL; prop = malloc(sizeof(teledisk_prop_t)); if (prop == NULL) return NULL; prop->f = f; prop->heads = 0; prop->cylinders = 0; prop->sector_size = 0; prop->sectors_total = 0; prop->comment = NULL; prop->comment_date = NULL; if (!read_header(prop)) { free(prop); return NULL; } prop->filename = strdup(filename); while (242) { ret = read_tracks(prop); if (ret > 0) break; if (ret < 0) { teledisk_close(prop); return NULL; } } return prop; } void teledisk_close(teledisk_prop_t *prop) { if (prop == NULL) return; free(prop->filename); if (prop->comment != NULL) free(prop->comment); if (prop->comment_date != NULL) free(prop->comment_date); free(prop); return; } int teledisk_read_sector(teledisk_prop_t *prop, int c, int h, int s) { int a = -1; while (242) { a++; if (prop->offset[a].o == 0) return -1; if (prop->offset[a].c != c) continue; if (prop->offset[a].h != h) continue; if (prop->offset[a].s != s) continue; break; } if (fseek(prop->f, prop->offset[a].o + 8, SEEK_SET) < 0) { memset(prop->buf, 0, sizeof(prop->buf)); return -1; } if (decode_sector(prop, a, prop->buf) < 0) { memset(prop->buf, 0, sizeof(prop->buf)); return -1; } return prop->offset[a].l; } KCemu-0.5.1/src/libdisk/disk.c0000644001050700006200000000644511345001576015526 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include "libdisk/libdiskP.h" static libdisk_loader_t *loaders[MAX_DISK_LOADERS]; void libdisk_init(void) { memset(loaders, 0, sizeof(loaders)); /* * order is importend * first check for types with unique signatures * unsafe guesses come last */ loader_dir_init(); loader_cdm_init(); loader_td0_init(); loader_22dsk_init(); } int libdisk_register_loader(libdisk_loader_t *loader) { int a; for (a = 0;a < MAX_DISK_LOADERS;a++) if (loaders[a] == NULL) { loaders[a] = loader; return 1; } return 0; } int libdisk_open(libdisk_prop_t **prop, const char *path) { int a; if (path == NULL) return -1; if (prop == NULL) return -1; *prop = (libdisk_prop_t *)malloc(sizeof(libdisk_prop_t)); if (*prop == NULL) return -1; for (a = 0;a < MAX_DISK_LOADERS;a++) { if (loaders[a] == NULL) continue; if (loaders[a]->open(*prop, path) == 0) { //printf("loader: %s\n", loaders[a]->get_name()); return 0; } } free(*prop); *prop = 0; // ensure pointer to be NULL on failure! return -1; } void libdisk_close(libdisk_prop_t **prop) { libdisk_prop_t *p; if (prop == NULL) return; p = (*prop); if (p == NULL) return; if (p->loader != NULL) if (p->loader->close != NULL) p->loader->close(p); free(p); *prop = 0; } int libdisk_seek(libdisk_prop_t **prop, int head, int cylinder, int sector) { libdisk_prop_t *p; if (prop == NULL) return -1; p = (*prop); p->head = head; p->cylinder = cylinder; p->sector = sector; return 0; } int libdisk_read_sector(libdisk_prop_t **prop, unsigned char *buf, int len) { libdisk_prop_t *p; if (prop == NULL) return -1; p = (*prop); if (p) if (p->loader != NULL) if (p->loader->read_sector != NULL) return p->loader->read_sector(p, buf, len); return 0; } int libdisk_write_sector(libdisk_prop_t **prop, unsigned char *buf, int len) { libdisk_prop_t *p; if (prop == NULL) return -1; p = (*prop); if (p) if (p->loader != NULL) if (p->loader->write_sector != NULL) return p->loader->write_sector(p, buf, len); return 0; } void libdisk_show_config(void) { int a; printf("available libdisk plugins:\n"); for (a = 0;a < MAX_DISK_LOADERS;a++) { if (loaders[a]) printf(" %s\n", loaders[a]->get_name()); } } KCemu-0.5.1/src/libdisk/Makefile.am0000644001050700006200000000060110527416075016455 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in bin_PROGRAMS = tdtodump EXTRA_DIST = extract-system-tracks.sh noinst_LIBRARIES = libdisk.a AM_CPPFLAGS = \ -DDEBUG -DLINUX INCLUDES = \ -I../../include libdisk_a_SOURCES = \ disk.c \ teledisk.c \ load_dir.c \ load_cdm.c \ load_td0.c \ load_22dsk.c tdtodump_SOURCES = \ tdtodump.c tdtodump_LDADD = \ libdisk.a KCemu-0.5.1/src/libdisk/tdtodump.c0000644001050700006200000001120211345001576016417 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "libdisk/teledisk.h" static void print_underline(const char *text, int c) { int a; fprintf(stderr, "%s\n", text); for (a = 0;a < strlen(text);a++) fputc(c, stderr); fputc('\n', stderr); } static void usage(const char *program) { fprintf(stderr, "usage: %s [-o filename] [-s] teledisk-dump\n", program); exit(1); } static void dump(const char *image_name, const char *out_name, int by_sector) { FILE *out; int c, h, s; char buf[2048]; teledisk_prop_t *prop; prop = teledisk_open(image_name); if (prop == NULL) { fprintf(stderr, "can't open `%s'\n", image_name); exit(1); } if (!by_sector) { out = out_name == NULL ? stdout : fopen(out_name, "wb"); if (out == NULL) { fprintf(stderr, "can't write `%s'\n", out_name); exit(1); } } snprintf(buf, sizeof(buf), "Teledisk file `%s'", prop->filename); print_underline(buf, '='); fprintf(stderr, "Id : %s\n", prop->id); fprintf(stderr, "Version : %d.%d\n", prop->version_major, prop->version_minor); fprintf(stderr, "Volume : %d\n", prop->volume); fprintf(stderr, "Check-Byte : %d (%02xh)\n", prop->signature, prop->signature); fprintf(stderr, "Density : %s\n", prop->density); fprintf(stderr, "Drive-Type : %s\n", prop->drive_type); fprintf(stderr, "Dos-Mode : %s\n", prop->dos_mode ? "Yes" : "No"); fprintf(stderr, "Heads : %d\n", prop->heads); fprintf(stderr, "Cylinders : %d\n", prop->cylinders); fprintf(stderr, "Sectors : %d\n", prop->sectors); if (prop->sector_size < 0) fprintf(stderr, "Sector-Size : variable\n"); else fprintf(stderr, "Sector-Size : %d\n", prop->sector_size); if (prop->comment != NULL) { fprintf(stderr, "Comment-Date : %s\n", prop->comment_date); fprintf(stderr, "Comment : %s\n", prop->comment); } fprintf(stderr, "\n"); int old_size = 0; for (c = 0; c < prop->cylinders; c++) { for (h = 0; h < prop->heads; h++) { for (s = 1; s < prop->sectors; s++) { int size = teledisk_read_sector(prop, c, h, s); if (size < 0) { continue; } else if ((old_size > 0) && (old_size != size)) { fprintf(stderr, "Sector Size Change %d -> %d at %d/%d/%d (C/H/S)\n", old_size, size, c, h, s); } old_size = size; if (by_sector) { if (out_name) snprintf(buf, sizeof(buf), "%s_c%02dh%02ds%02d", out_name, c, h, s); out = out_name == NULL ? stdout : fopen(buf, "wb"); } //fputc(c, out); //fputc(h, out); //fputc(c, out); //fputc(h, out); //fputc(s, out); //fputc(3, out); //fputc(0, out); //fputc(4, out); fwrite(prop->buf, 1, size, out); if (by_sector) { fclose(out); out = NULL; } } } } fprintf(stderr, "\n"); fprintf(stderr, "\n"); if (out != NULL) fclose(out); teledisk_close(prop); } int main(int argc, char **argv) { int opt; int by_sector = 0; char *out_name = NULL; while ((opt = getopt(argc, argv, "so:")) != -1) { switch (opt) { case 's': by_sector = 1; break; case 'o': out_name = strdup(optarg); break; default: usage(argv[0]); } } if ((optind + 1) != argc) usage(argv[0]); dump(argv[optind], out_name, by_sector); return 0; } KCemu-0.5.1/src/libdisk/load_22dsk.c0000644001050700006200000002135411345001576016514 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* * The following CP/M Disk Parameter Block description is from the * 22DISK Tool by Sydex: * * BSH refers to the block shift or the number of left shifts needed * to translate an allocation block number to a relative sector * address. * * BLM refers to the block mask or a bit mask of ones corresponding * to the number of bits specified by BSH. For example, if BSH * is 3, BLM is 7 (3 bits). * * EXM refers to the extent mask or a bit mask of ones used in * delimiting extents, or groups of 128 128-byte records. * * DSM refers to the total number of sectors present on a diskette. * This quantity, like all of the CP/M system variables, as- * sumes a 128-byte sector. * * DRM refers to the total number of directory entries available on * a diskette. DRM is also related to the AL0 and AL1 fields. * * AL0 and AL1 form a bit mask, beginning with the most significant * bit in byte AL0 and ending with the least significant bit in * AL1. These two bytes map the first 16 allocation blocks of * the disk. A 1 bit in a position indicates that an alloca- * tion block is reserved, usually for the directory (see DRM, * above). * * OFS indicates the number of tracks that are used for storing the * CP/M system and BIOS at the beginning of a diskette. * * SOFS indicates the number of sectors that are used for storing * the CP/M system and BIOS at the beginning of a diskette. * SOFS is used when the number of sectors used by the CP/M is * not an integral number of tracks, such as for the Coleco * Adam. * * * A working parameter block to read standard KC-CAOS disks looks * like this: * * BEGIN KC KC * DENSITY MFM,LOW * CYLINDERS 80 * SIDES 2 * SECTORS 5,1024 * SIDE1 0 1,2,3,4,5 * SIDE2 1 1,2,3,4,5 * ORDER SIDES * BSH 4 BLM 15 EXM 0 DSM 390 DRM 127 AL0 11000000B AL1 0 OFS 4 * END * */ #include #include #include #include #include "libdisk/libdiskP.h" typedef struct { FILE *f; gzFile *gzf; int read_only; int len; struct { int head; int cylinder; int sector; int count; long offset; } offset[5000]; } dsk_data_t; static const char * loader_22dsk_get_name(void); static int loader_22dsk_open(libdisk_prop_t *prop, const char *path); static void loader_22dsk_close(libdisk_prop_t *prop); static int loader_22dsk_read_sector(libdisk_prop_t *prop, unsigned char *buf, int len); static int loader_22dsk_write_sector(libdisk_prop_t *prop, unsigned char *buf, int len); static libdisk_loader_t loader = { loader_22dsk_get_name, loader_22dsk_open, loader_22dsk_close, loader_22dsk_read_sector, loader_22dsk_write_sector }; static FILE * try_open_gzip(const char *path) { FILE *f; char *filename; f = gzopen(path, "rb"); if (f == NULL) { filename = (char *) malloc(strlen(path) + 4); if (filename == NULL) return NULL; strcpy(filename, path); strcat(filename, ".gz"); f = gzopen(filename, "rb"); free(filename); } return f; } static dsk_data_t * do_open(const char *path) { int ro; FILE *f; int b1, b2; gzFile *gzf; dsk_data_t *data; f = NULL; gzf = NULL; ro = 0; f = fopen(path, "rb+"); if (f == NULL) { ro = 1; f = fopen(path, "rb"); if (f == NULL) return NULL; } /* check for gzip file header */ b1 = fgetc(f); b2 = fgetc(f); fseek(f, 0, SEEK_SET); if ((b1 == 0x1f) && (b2 == 0x8b)) { fclose(f); f = NULL; ro = 1; gzf = try_open_gzip(path); if (gzf == NULL) return NULL; } data = (dsk_data_t *)malloc(sizeof(dsk_data_t)); if (data == NULL) return NULL; data->f = f; data->gzf = gzf; data->read_only = ro; return data; } static int do_seek(dsk_data_t *data, long offset) { if (data->gzf != NULL) return gzseek(data->gzf, offset, SEEK_SET); return fseek(data->f, offset, SEEK_SET); } static int do_read(dsk_data_t *data, unsigned char *buf, int len) { if (data->gzf != NULL) return gzread(data->gzf, buf, len); return fread(buf, 1, len, data->f); } static int do_write(dsk_data_t *data, unsigned char *buf, int len) { if (data->gzf != NULL) return gzwrite(data->gzf, buf, len); return fwrite(buf, 1, len, data->f); } static int do_getc(dsk_data_t *data) { if (data->gzf != NULL) return gzgetc(data->gzf); return fgetc(data->f); } static int read_offsets(dsk_data_t *data) { long idx; int a, acyl, asid, lcyl, lsid, lsec, llen, c, count; idx = 0; data->len = 0; while (242) { acyl = do_getc(data); idx++; if (acyl == EOF) return 0; asid = do_getc(data); idx++; if (asid == EOF) return -1; lcyl = do_getc(data); idx++; if (lcyl == EOF) return -1; lsid = do_getc(data); idx++; if (lsid == EOF) return -1; lsec = do_getc(data); idx++; if (lsec == EOF) return -1; llen = do_getc(data); idx++; if (llen == EOF) return -1; c = do_getc(data); idx++; if (c == EOF) return -1; count = c; c = do_getc(data); idx++; if (c == EOF) return -1; count |= (c << 8); data->offset[data->len].head = lsid; data->offset[data->len].cylinder = lcyl; data->offset[data->len].sector = lsec; data->offset[data->len].count = count; data->offset[data->len].offset = idx; data->len++; for (a = 0;a < count;a++) { c = do_getc(data); idx++; if (c == EOF) return -1; } } } static const char * loader_22dsk_get_name(void) { return "disk loader for Sydex AnaDisk disk-dumps"; } static int loader_22dsk_open(libdisk_prop_t *prop, const char *path) { dsk_data_t *data; if (prop == NULL) return -1; data = do_open(path); if (data == NULL) return -1; if (read_offsets(data) < 0) return -1; prop->head_count = 2; prop->cylinder_count = 80; prop->sector_size = 1024; prop->sectors_per_cylinder = 5; prop->data = data; prop->loader = &loader; prop->read_only = data->read_only; return 0; } static void loader_22dsk_close(libdisk_prop_t *prop) { dsk_data_t *data; if (prop == NULL) return; if (prop->data == NULL) return; data = (dsk_data_t *)prop->data; if (data->f != NULL) fclose(data->f); if (data->gzf != NULL) gzclose(data->gzf); free(data); prop->data = NULL; } static int loader_22dsk_seek(libdisk_prop_t *prop) { long offset; int a, h, c, s; dsk_data_t *data; if (prop == NULL) return -1; if (prop->data == NULL) return -1; h = prop->head; c = prop->cylinder; s = prop->sector; if ((h < 0) || (h > 1)) return -1; if ((c < 0) || (c > 79)) return -1; if ((s < 1) || (s > 5)) return -1; data = (dsk_data_t *)prop->data; offset = -1; for (a = 0;a < data->len;a++) { if ((h == data->offset[a].head) && (c == data->offset[a].cylinder) && (s == data->offset[a].sector)) { offset = data->offset[a].offset; break; } } if (offset == -1) return -1; if (do_seek(data, offset) < 0) return -1; return 0; } static int loader_22dsk_read_sector(libdisk_prop_t *prop, unsigned char *buf, int len) { int l; dsk_data_t *data; if (loader_22dsk_seek(prop) < 0) return -1; data = (dsk_data_t *)prop->data; // seek doesn't succeed if this would fail! l = do_read(data, buf, len); if (l != len) return -1; return l; } static int loader_22dsk_write_sector(libdisk_prop_t *prop, unsigned char *buf, int len) { int l; dsk_data_t *data; if (loader_22dsk_seek(prop) < 0) return -1; data = (dsk_data_t *)prop->data; // seek doesn't succeed if this would fail! l = do_write(data, buf, len); if (l != len) return -1; return l; } void loader_22dsk_init(void) { libdisk_register_loader(&loader); } KCemu-0.5.1/src/libdisk/load_td0.c0000644001050700006200000000534511345001576016260 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "libdisk/teledisk.h" #include "libdisk/libdiskP.h" static const char * loader_td0_get_name(void); static int loader_td0_open(libdisk_prop_t *prop, const char *path); static void loader_td0_close(libdisk_prop_t *prop); static int loader_td0_read_sector(libdisk_prop_t *prop, unsigned char *buf, int len); static int loader_td0_write_sector(libdisk_prop_t *prop, unsigned char *buf, int len); static libdisk_loader_t loader = { loader_td0_get_name, loader_td0_open, loader_td0_close, loader_td0_read_sector, loader_td0_write_sector }; static const char * loader_td0_get_name(void) { return "disk loader for Sydex TeleDisk images"; } static int loader_td0_open(libdisk_prop_t *prop, const char *path) { teledisk_prop_t *data; if (prop == NULL) return -1; data = teledisk_open(path); if (data == NULL) return -1; prop->head_count = 2; prop->cylinder_count = 80; prop->sector_size = 1024; prop->sectors_per_cylinder = 5; prop->data = data; prop->loader = &loader; prop->read_only = 1; return 0; } static void loader_td0_close(libdisk_prop_t *prop) { teledisk_prop_t *data; if (prop == NULL) return; if (prop->data == NULL) return; data = (teledisk_prop_t *)prop->data; teledisk_close(data); prop->data = NULL; } static int loader_td0_read_sector(libdisk_prop_t *prop, unsigned char *buf, int len) { teledisk_prop_t *data; if (prop == NULL) return -1; if (prop->data == NULL) return -1; if (len != 1024) return -1; data = (teledisk_prop_t *)prop->data; if (teledisk_read_sector(data, prop->cylinder, prop->head, prop->sector) < 0) return -1; memcpy(buf, data->buf, len); return len; } static int loader_td0_write_sector(libdisk_prop_t *prop, unsigned char *buf, int len) { return -1; } void loader_td0_init(void) { libdisk_register_loader(&loader); } KCemu-0.5.1/src/libdisk/load_cdm.c0000644001050700006200000000762011345001576016332 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* * CDM is the disk manager program which comes with the * yaze CP/M emulator. * * parameters for CDM create command: * * $> create disk.img 819200 -b1024 -d127 -o0 -s5 */ #include #include #include #include "libdisk/libdiskP.h" typedef struct { FILE *f; } cdm_data_t; static const char * loader_cdm_get_name(void); static int loader_cdm_open(libdisk_prop_t *prop, const char *path); static void loader_cdm_close(libdisk_prop_t *prop); static int loader_cdm_read_sector(libdisk_prop_t *prop, unsigned char *buf, int len); static int loader_cdm_write_sector(libdisk_prop_t *prop, unsigned char *buf, int len); static libdisk_loader_t loader = { loader_cdm_get_name, loader_cdm_open, loader_cdm_close, loader_cdm_read_sector, loader_cdm_write_sector }; static const char * loader_cdm_get_name(void) { return "disk loader for Yaze CP/M files"; } static int loader_cdm_open(libdisk_prop_t *prop, const char *path) { int ro; FILE *f; char buf[128]; cdm_data_t *data; if (prop == NULL) return -1; ro = 0; f = fopen(path, "rb+"); if (f == NULL) { ro = 1; f = fopen(path, "rb"); if (f == NULL) return -1; } if (fread(buf, 1, 128, f) != 128) return -1; if (strncmp(buf, "", 10) != 0) return -1; data = (cdm_data_t *)malloc(sizeof(cdm_data_t)); if (data == NULL) return -1; data->f = f; prop->read_only = ro; prop->head_count = 2; prop->cylinder_count = 80; prop->sector_size = 1024; prop->sectors_per_cylinder = 5; prop->data = data; prop->loader = &loader; return 0; } static void loader_cdm_close(libdisk_prop_t *prop) { cdm_data_t *data; if (prop == NULL) return; if (prop->data == NULL) return; data = (cdm_data_t *)prop->data; fclose(data->f); free(data); prop->data = NULL; } static int loader_cdm_seek(libdisk_prop_t *prop) { long offset; int h, c, s; cdm_data_t *data; if (prop == NULL) return -1; if (prop->data == NULL) return -1; h = prop->head; c = prop->cylinder; s = prop->sector; if ((h < 0) || (h > 1)) return -1; if ((c < 0) || (c > 79)) return -1; if ((s < 1) || (s > 5)) return -1; s--; offset = (10 * c + 5 * h + s) * 1024 + 128; data = (cdm_data_t *)prop->data; if (fseek(data->f, offset, SEEK_SET) < 0) return -1; return 0; } static int loader_cdm_read_sector(libdisk_prop_t *prop, unsigned char *buf, int len) { int l; cdm_data_t *data; if (loader_cdm_seek(prop) < 0) return -1; data = (cdm_data_t *)prop->data; // seek doesn't succeed if this would fail! l = fread(buf, 1, len, data->f); if (l != len) return -1; return l; } static int loader_cdm_write_sector(libdisk_prop_t *prop, unsigned char *buf, int len) { int l; cdm_data_t *data; if (loader_cdm_seek(prop) < 0) return -1; data = (cdm_data_t *)prop->data; // seek doesn't succeed if this would fail! l = fwrite(buf, 1, len, data->f); if (l != len) return -1; return l; } void loader_cdm_init(void) { libdisk_register_loader(&loader); } KCemu-0.5.1/src/libdisk/extract-system-tracks.sh0000755001050700006200000000262511345001576021244 0ustar glaubitzfbedv#!/bin/bash # # KCemu -- The emulator for the KC85 homecomputer series and much more. # Copyright (C) 1997-2010 Torsten Paul # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License along # with this program; if not, write to the Free Software Foundation, Inc., # 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. if test "x$1" = x then echo "usage: $0 disk-dump " exit 1 fi TMP=`mktemp` if test $? -ne 0 then echo "cannot create temporary file, abort." exit 1 fi trap "rm -f \"$TMP\"" 0 SECT=0 while test $SECT -lt 20 do SRC_OFFSET=`expr $SECT \* \( 1024 + 8 \) + 8` DST_OFFSET=`expr $SECT \* 1024` dd if="$1" of="$TMP" bs=1 skip=$SRC_OFFSET seek=$DST_OFFSET count=1024 2>/dev/null if test $? -ne 0 then echo "error while extracting system tracks from \"$1\", abort." exit 1 fi SECT=`expr $SECT + 1` done if test "x$2" = x then cat "$TMP" else mv "$TMP" "$2" fi KCemu-0.5.1/src/libdisk/load_dir.c0000644001050700006200000004531111345001576016344 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include "libdisk/libdiskP.h" // CP/M record size is 128 #define RECORD_SIZE (128) // size of one directory entry #define DIR_ENTRY_SIZE (32) #define SIZE_TO_REC(x) (((x) + (RECORD_SIZE - 1)) / RECORD_SIZE) // directory size in bytes #define DIR_SIZE(dpb) (DIR_ENTRY_SIZE * ((dpb)->drm + 1)) // disk size in bytes #define DISK_SIZE(dpb) (RECORD_SIZE * (((dpb)->dsm + 1) << ((dpb)->bsh))) // sector size in bytes #define SECTOR_SIZE(dpb) (RECORD_SIZE << ((dpb)->bsh)) // size of allocation unit #define AU_SIZE(dpb) (RECORD_SIZE << (dpb)->bsh) #define SIZE_TO_AU(dpb,x) (((x) + (AU_SIZE(dpb) - 1)) / AU_SIZE(dpb)) // FIXME: uses hardcoded disk geometry #define CHS_TO_SECT(dpb,c,h,s) (((s) - 1) + 5 * (h) + 10 * (c)) // FIXME: still uses hardcoded information that AU is 2 * SECTOR size #define CHS_TO_AU(dpb,c,h,s) (CHS_TO_SECT((dpb), (c), (h), (s)) / 2) // FIXME: still uses hardcoded information that AU is 2 * SECTOR size #define AU_TO_OFFSET(dpb,au,c,h,s) (CHS_TO_SECT((dpb), (c), (h), (s)) - 2 * (au)) // first data allocation unit (after directory, not counting system tracks) #define FIRST_AU(dpb) ((DIR_SIZE(dpb) + (AU_SIZE(dpb) - 1)) / AU_SIZE(dpb)) #define SYSTEM_NAME "@boot.sys" /* * * CP/M 2.2 disc formats * (see http://www.seasip.demon.co.uk/Cpm/format22.html) * * CP/M 2.2 works with a much larger range of discs than CP/M 1.4. The * disc statistics are stored in a parameter block (the DPB), which * contains the following information: * * DEFW spt ;Number of 128-byte records per track * DEFB bsh ;Block shift. 3 => 1k, 4 => 2k, 5 => 4k.... * DEFB blm ;Block mask. 7 => 1k, 0Fh => 2k, 1Fh => 4k... * DEFB exm ;Extent mask, see later * DEFW dsm ;(no. of blocks on the disc)-1 * DEFW drm ;(no. of directory entries)-1 * DEFB al0 ;Directory allocation bitmap, first byte * DEFB al1 ;Directory allocation bitmap, second byte * DEFW cks ;Checksum vector size, 0 for a fixed disc * ;No. directory entries/4, rounded up. * DEFW ofs ;Offset, number of reserved tracks * * The directory allocation bitmap is interpreted as: * * al0 al1 * b7b6b5b4b3b2b1b0 b7b6b5b4b3b2b1b0 * 1 1 1 1 0 0 0 0 0 0 0 0 0 0 0 0 * * - ie, in this example, the first 4 blocks of the disc contain the * directory. * * * The DPB is not stored on disc. It is either hardwired into the BIOS or * generated on the fly when a disc is logged in. * * The reserved tracks will contain an image of CP/M 2.2, used when the * system is rebooted. Discs can be formatted as data only discs, in * which case they have no system tracks and cannot be used to reboot the * system. * * CP/M 2.2 directory * * The CP/M 2.2 directory has only one type of entry: * * UU F1 F2 F3 F4 F5 F6 F7 F8 T1 T2 T3 EX S1 S2 RC .FILENAMETYP.... * AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL AL ................ * * UU = User number. 0-15 (on some systems, 0-31). The user number * allows multiple files of the same name to coexist on the disc. * User number = 0E5h => File deleted * Fn - filename * Tn - filetype. The characters used for these are 7-bit ASCII. * The top bit of T1 (often referred to as T1') is set if the * file is read-only. * T2' is set if the file is a system file (this corresponds * to "hidden" on other systems). * EX = Extent counter, low byte - takes values from 0-31 * S2 = Extent counter, high byte. * * An extent is the portion of a file controlled by one directory * entry. If a file takes up more blocks than can be listed in one * directory entry, it is given multiple entries, distinguished by * their EX and S2 bytes. The formula is: Entry number = * ((32*S2)+EX) / (exm+1) where exm is the extent mask value from * the Disc Parameter Block. * * S1 - reserved, set to 0. * RC - Number of records (1 record=128 bytes) used in this extent, low * byte. The total number of records used in this extent is * * (EX & exm) * 128 + RC * * If RC is 80h, this extent is full and there may be another one on * the disc. File lengths are only saved to the nearest 128 bytes. * * AL - Allocation. Each AL is the number of a block on the disc. If an * AL number is zero, that section of the file has no storage * allocated to it (ie it does not exist). For example, a 3k file * might have allocation 5,6,8,0,0.... - the first 1k is in block 5, * the second in block 6, the third in block 8. * * AL numbers can either be 8-bit (if there are fewer than 256 * blocks on the disc) or 16-bit (stored low byte first). * ************************************************************************* * * $a = 2 * $au; * $s = ($a % 5) + 1; * $h = ($a % 10) / 5; * $c = ($a / 10); * * ($s - 1) + $h * 5 + $c * 10 * * Used disk layout: 2 sides, 80 tracks with 5 sectors of 1024 bytes each * (This is the default disk format for the KC) */ static const char * loader_dir_get_name(void); static int loader_dir_open(libdisk_prop_t *prop, const char *path); static void loader_dir_close(libdisk_prop_t *prop); static int loader_dir_read_sector(libdisk_prop_t *prop, unsigned char *buf, int len); static int loader_dir_write_sector(libdisk_prop_t *prop, unsigned char *buf, int len); static libdisk_loader_t _loader = { loader_dir_get_name, loader_dir_open, loader_dir_close, loader_dir_read_sector, loader_dir_write_sector }; #define __DRM (127) // FIXME: hack, change to use dpb #define __DIR_SIZE (DIR_ENTRY_SIZE * (__DRM + 1)) // FIXME: hack, change to use dpb typedef struct { char *path; libdisk_dpb_t *dpb; char *filename[__DRM + 1]; long size[__DRM + 1]; long au[__DRM + 1]; unsigned char dir[__DIR_SIZE]; } dir_data_t; typedef struct sector_data_struct { int c; int h; int s; int au; int len; unsigned char *data; struct sector_data_struct *next; } sector_data_t; /* * DISK PARAMETER BLOCK (for disk format 5*1024*80*2 OFF 2) */ static libdisk_dpb_t _dpb = { // logical disc descriptor 80, // spt: number of 128-byte records per track 4, // bsh: block shift. 3 => 1k, 4 => 2k, 5 => 4k.... 15, // blm: block mask. 7 => 1k, 0Fh => 2k, 1Fh => 4k... 0, // exm: extent mask 389, // dsm: (no. of blocks on the disc) - 1 127, // drm: (no. of directory entries) - 1 192, // al0: directory allocation bitmap, first byte 0, // al1: directory allocation bitmap, second byte 16, // cks: checksum vector size, No. directory entries/4, rounded up. 2, // ofs: offset, number of reserved tracks // physical disc descriptor 3, // psh: physical block shift 7, // phm: physical block mask 5, // eot: number of last sector 15, // gap: sector gap 80, // ntr: number of tracks }; static sector_data_t *_sector_data_head = NULL; static sector_data_t *_sector_data_last = NULL; static void dump_sector(unsigned char *sector, int length); static void cache_sector_data(dir_data_t *data, int c, int h, int s, unsigned char *buf, int len); static void set_filename(unsigned char *buf, char *filename) { int a; char *ptr; memset(buf, ' ', 11); for (a = 0;a < 8;a++) { if (filename[a] == '\0') break; if (filename[a] == '.') break; buf[a] = toupper(filename[a]); } ptr = strrchr(filename, '.'); if (ptr == NULL) return; ptr++; for (a = 0;a < 3;a++) { if (ptr[a] == '\0') break; buf[8 + a] = toupper(ptr[a]); } } static int set_directory_entry(dir_data_t *data, int idx, int start_au, long size, char *filename) { int a; int au; int rec; int extend; au = 0; extend = 0; rec = SIZE_TO_REC(size); printf("set_directory_entry(): %d: '%s'\n", start_au, filename); do { memset(&data->dir[32 * idx], 0, 32); //printf("%d: %s - %d\n", extend, filename, rec); set_filename(&data->dir[32 * idx + 1], filename); data->dir[32 * idx] = 0; // user data->dir[32 * idx + 12] = extend; data->dir[32 * idx + 13] = 0; data->dir[32 * idx + 14] = 0; data->dir[32 * idx + 15] = (rec > 0x80) ? 0x80 : rec; for (a = 0;a < 8;a++) if (au < SIZE_TO_AU(data->dpb, size)) { data->dir[32 * idx + 2 * a + 16] = (start_au + au) & 0xff; data->dir[32 * idx + 2 * a + 17] = (start_au + au) >> 8; au++; } rec -= 0x80; extend++; idx++; } while (rec > 0); return extend; } static const char * loader_dir_get_name(void) { return "disk loader for unix directories"; } static int loader_dir_open(libdisk_prop_t *prop, const char *path) { DIR *d; int a, idx, ro, au; char pwd[4096]; // FIXME: fix getcwd()! dir_data_t *data; struct stat statbuf; struct dirent *dirent; if (prop == NULL) return -1; if (getcwd(pwd, 4096) == NULL) return -1; if (chdir(path) < 0) return -1; ro = 1; d = opendir("."); if (d == NULL) return -1; data = (dir_data_t *)malloc(sizeof(dir_data_t)); if (data == NULL) return -1; data->path = strdup(path); data->dpb = &_dpb; memset(data->dir, 0xe5, DIR_SIZE(data->dpb)); memset(data->au, 0, (data->dpb->drm + 1) * sizeof(long)); memset(data->filename, 0, (data->dpb->drm + 1) * sizeof(char *)); a = 0; while (242) { dirent = readdir(d); if (dirent == NULL) break; if (dirent->d_name[0] == '.') continue; if (strcmp(dirent->d_name, SYSTEM_NAME) == 0) continue; if (stat(dirent->d_name, &statbuf) < 0) continue; if (!S_ISREG(statbuf.st_mode)) continue; if (statbuf.st_size > DISK_SIZE(data->dpb)) continue; data->size[a] = statbuf.st_size; data->filename[a] = strdup(dirent->d_name); a++; } closedir(d); if (chdir(pwd) < 0) printf("can't restore working directory!\n"); // FIXME: idx = 0; au = FIRST_AU(data->dpb); for (a = 0;(a <= data->dpb->drm) && (data->filename[a] != NULL);a++) { data->au[a] = au; idx += set_directory_entry(data, idx, au, data->size[a], data->filename[a]); au += SIZE_TO_AU(data->dpb, data->size[a]); } #if 0 { FILE *f; f = fopen("/tmp/dir", "wb"); fwrite(data->dir, 1, DIR_SIZE, f); fclose(f); } #endif prop->read_only = ro; prop->head_count = 2; prop->cylinder_count = 80; prop->sector_size = 1024; prop->sectors_per_cylinder = 5; prop->data = data; prop->loader = &_loader; _sector_data_head = NULL; return 0; } static void loader_dir_close(libdisk_prop_t *prop) { dir_data_t *data; sector_data_t *sector_data; if (prop == NULL) return; if (prop->data == NULL) return; data = (dir_data_t *)prop->data; free(data); while (_sector_data_head != NULL) { sector_data = _sector_data_head; _sector_data_head = sector_data->next; free(sector_data->data); free(sector_data); } prop->data = NULL; } static int read_block(dir_data_t *data, unsigned char *buf, int idx, long offset, int len) { FILE *f; char pwd[4096]; // FIXME: fix getcwd()! printf("read_block(): '%s' [%ld]\n", data->filename[idx], offset); if (getcwd(pwd, 4096) == NULL) return -1; if (chdir(data->path) < 0) return -1; f = fopen(data->filename[idx], "rb"); if (f == NULL) return -1; if (fseek(f, offset, SEEK_SET) < 0) return -1; memset(buf, '\0', len); fread(buf, 1, len, f); fclose(f); if (chdir(pwd) < 0) printf("can't restore working directory!\n"); // FIXME: return len; } static int write_block(dir_data_t *data, unsigned char *buf, int idx, long offset, int len) { FILE *f; char pwd[4096]; // FIXME: fix getcwd()! printf("write_block(): '%s' [%ld]\n", data->filename[idx], offset); if (getcwd(pwd, 4096) == NULL) return -1; if (chdir(data->path) < 0) return -1; f = fopen(data->filename[idx], "r+b"); if (f == NULL) return -1; if (fseek(f, offset, SEEK_SET) < 0) return -1; fwrite(buf, 1, len, f); fclose(f); if (chdir(pwd) < 0) printf("can't restore working directory!\n"); // FIXME: return len; } static int read_system_block(char *path, unsigned char *buf, int block, int len) { FILE *f; char pwd[4096]; // FIXME: fix getcwd()! printf("read_system_block(): block %d\n", block); if (getcwd(pwd, 4096) == NULL) return -1; if (chdir(path) < 0) return -1; f = fopen(SYSTEM_NAME, "rb"); if (f == NULL) return -1; if (fseek(f, block * 1024, SEEK_SET) < 0) return -1; memset(buf, '\0', len); fread(buf, 1, len, f); fclose(f); if (chdir(pwd) < 0) printf("can't restore working directory!\n"); // FIXME: return len; } static int write_system_block(char *path, unsigned char *buf, int block, int len) { FILE *f; char pwd[4096]; // FIXME: fix getcwd()! printf("write_system_block(): block %d\n", block); if (getcwd(pwd, 4096) == NULL) return -1; if (chdir(path) < 0) return -1; f = fopen(SYSTEM_NAME, "r+b"); if (f == NULL) return -1; if (fseek(f, block * 1024, SEEK_SET) < 0) return -1; fwrite(buf, 1, len, f); fclose(f); if (chdir(pwd) < 0) printf("can't restore working directory!\n"); // FIXME: return len; } static int is_system_sector(libdisk_dpb_t *dpb, int c, int h, int s) { return c < dpb->ofs; } static int is_directory_sector(libdisk_dpb_t *dpb, int c, int h, int s) { /* * Get allocation unit index translated by number of system tracks * so we get index 0 for the first directory sector. The directory * block allocation mask can only store 16 bits, so the maximum * index of a directory allocation unit is 15. */ int dir_al = CHS_TO_AU(dpb, c - dpb->ofs, h, s); if (dir_al > 15) return 0; int dir_al_mask = (dpb->al0 << 8) | dpb->al1; return dir_al_mask & (1 << (15 - dir_al)); } static int find_index(dir_data_t *data, int c, int h, int s) { int a; int au = CHS_TO_AU(data->dpb, c - data->dpb->ofs, h, s); for (a = data->dpb->drm;a >= 0;a--) { if (data->au[a] == 0) continue; if (data->dir[32 * a] == 0xe5) // skip deleted continue; if (data->au[a] <= au) break; } return a; } static int loader_dir_read_sector(libdisk_prop_t *prop, unsigned char *buf, int len) { int h, c, s; dir_data_t *data; if (prop == NULL) return -1; if (prop->data == NULL) return -1; h = prop->head; c = prop->cylinder; s = prop->sector; data = (dir_data_t *)prop->data; if (is_system_sector(data->dpb, c, h, s)) { int block = CHS_TO_SECT(data->dpb, c, h, s); return read_system_block(data->path, buf, block, len); } if (is_directory_sector(data->dpb, c, h, s)) { int block = CHS_TO_SECT(data->dpb, c - data->dpb->ofs, h, s); memcpy(buf, &data->dir[block * len], len); return len; } /* * normal data sector */ int idx = find_index(data, c, h, s); if (idx < 0) { printf("*** allocation unit not found for sector C/H/S %d/%d/%d ***\n", c, h, s); //memset(buf, 0xe5, len); //int block = CHS_TO_SECT(data->dpb, c, h, s); //memcpy(buf, _debug_sector_buffer + len * block, len); return len; } int au_ofs = AU_TO_OFFSET(data->dpb, data->au[idx], c - data->dpb->ofs, h, s); return read_block(data, buf, idx, len * au_ofs, len); } static int loader_dir_write_sector(libdisk_prop_t *prop, unsigned char *buf, int len) { int h = prop->head; int c = prop->cylinder; int s = prop->sector; dir_data_t *data = (dir_data_t *)prop->data; printf("loader_dir_write_sector(): C/H/S = %d/%d/%d, len = %d\n", c, h, s, len); dump_sector(buf, len); int block = CHS_TO_SECT(data->dpb, c, h, s); if (is_system_sector(data->dpb, c, h, s)) { write_system_block(data->path, buf, block, len); } else if (is_directory_sector(data->dpb, c, h, s)) { int block = CHS_TO_SECT(data->dpb, c - data->dpb->ofs, h, s); memcpy(&data->dir[block * len], buf, len); } else { int idx = find_index(data, c, h, s); if (idx < 0) { cache_sector_data(data, c, h, s, buf, len); } else { int au_ofs = AU_TO_OFFSET(data->dpb, data->au[idx], c - data->dpb->ofs, h, s); return write_block(data, buf, idx, len * au_ofs, len); } } return len; } static void cache_sector_data(dir_data_t *data, int c, int h, int s, unsigned char *buf, int len) { sector_data_t *sector_data; sector_data = malloc(sizeof(sector_data_t)); sector_data->c = c; sector_data->h = h; sector_data->s = s; sector_data->au = CHS_TO_AU(data->dpb, c - data->dpb->ofs, h, s); sector_data->len = len; sector_data->next = NULL; sector_data->data = malloc(len); memcpy(sector_data->data, buf, len); if (_sector_data_head == NULL) { _sector_data_head = _sector_data_last = sector_data; } else { _sector_data_last->next = sector_data; _sector_data_last = sector_data; } } // DEBUG static void dump_sector(unsigned char *sector, int len) { int a, b, blen; unsigned char buf[16]; a = 0; while (a < len) { for (b = 0;b < 16;b++) { if ((a + b) >= len) break; buf[b] = sector[a++]; if (a >= len) { printf("\n"); return; } blen = b + 1; } printf("%04x: ", a); for (b = 0;b < 16;b++) { if (b < blen) { printf("%02x ", buf[b]); } else { printf(" "); } if (b == 7) printf("- "); } printf(" | "); for (b = 0;b < blen;b++) { printf("%c", (isprint(buf[b])) ? buf[b] : '.'); if (b == 7) printf(" - "); } printf("\n"); if (blen != 16) break; } printf("\n"); } void loader_dir_init(void) { libdisk_register_loader(&_loader); } KCemu-0.5.1/src/libdisk/Makefile.in0000644001050700006200000004604311412404773016474 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ bin_PROGRAMS = tdtodump$(EXEEXT) subdir = src/libdisk DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libdisk_a_AR = $(AR) $(ARFLAGS) libdisk_a_LIBADD = am_libdisk_a_OBJECTS = disk.$(OBJEXT) teledisk.$(OBJEXT) \ load_dir.$(OBJEXT) load_cdm.$(OBJEXT) load_td0.$(OBJEXT) \ load_22dsk.$(OBJEXT) libdisk_a_OBJECTS = $(am_libdisk_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_tdtodump_OBJECTS = tdtodump.$(OBJEXT) tdtodump_OBJECTS = $(am_tdtodump_OBJECTS) tdtodump_DEPENDENCIES = libdisk.a DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libdisk_a_SOURCES) $(tdtodump_SOURCES) DIST_SOURCES = $(libdisk_a_SOURCES) $(tdtodump_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = extract-system-tracks.sh noinst_LIBRARIES = libdisk.a AM_CPPFLAGS = \ -DDEBUG -DLINUX INCLUDES = \ -I../../include libdisk_a_SOURCES = \ disk.c \ teledisk.c \ load_dir.c \ load_cdm.c \ load_td0.c \ load_22dsk.c tdtodump_SOURCES = \ tdtodump.c tdtodump_LDADD = \ libdisk.a all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libdisk/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libdisk/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libdisk.a: $(libdisk_a_OBJECTS) $(libdisk_a_DEPENDENCIES) -rm -f libdisk.a $(libdisk_a_AR) libdisk.a $(libdisk_a_OBJECTS) $(libdisk_a_LIBADD) $(RANLIB) libdisk.a install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) tdtodump$(EXEEXT): $(tdtodump_OBJECTS) $(tdtodump_DEPENDENCIES) @rm -f tdtodump$(EXEEXT) $(LINK) $(tdtodump_OBJECTS) $(tdtodump_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_22dsk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_cdm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_dir.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_td0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tdtodump.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/teledisk.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-noinstLIBRARIES ctags distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/fileio/0000755001050700006200000000000011412404772014245 5ustar glaubitzfbedvKCemu-0.5.1/src/fileio/kc2raw.c0000644001050700006200000000251311345001576015603 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "fileio/load.h" int main(int argc, char **argv) { fileio_prop_t *prop; if (argc != 3) { printf("usage: %s infile outfile\n", argv[0]); exit(1); } fileio_init(); if (fileio_load_file(argv[1], &prop) < 0) { printf("can't load file '%s'\n", argv[1]); return 1; } if (fileio_save_raw_prop(argv[2], prop) < 0) { printf("can't save file '%s'\n", argv[2]); return 1; } return 0; } KCemu-0.5.1/src/fileio/save_IMG.c0000644001050700006200000000273411345001576016051 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "fileio/loadP.h" int fileio_save_img(const char *filename, const unsigned char *data, int size) { int a; int len; FILE *out; out = fopen(filename, "wb"); if (out == NULL) return 1; len = size; while (len > 0) { a = 128; if (len < a) a = len; data++; if (fwrite(data, 1, 128, out) != 128) return 1; data += 128; len -= 129; } fclose(out); return 0; } int fileio_save_img_prop(const char *filename, fileio_prop_t *prop) { return fileio_save_img(filename, prop->data, prop->size); } KCemu-0.5.1/src/fileio/test_load.c0000644001050700006200000000405311345001576016371 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "fileio/load.h" #define FILE_TAP "/home/tp/projects/KCemu-data/KC-Office/wp1990/wp1990.tap" #define FILE_GPF "/home/tp/projects/kc85/emu/PRG/ladder2.gpf" #define FILE_IMG "/home/tp/projects/KCemu/PRG/BENNION.tape" #define FILE_BAS "/home/tp/projects/KCemu/PRG/kc-basic-programs/labyrint" #define FILE_PBAS "/home/tp/projects/KCemu/PRG/ts+ve.prg" #define FILE_XXX "/home/tp/projects/KCemu/PRG/bennion_rbs_0x0200_0x46c0.prg" int main(int argc, char **argv) { int a, ret; fileio_prop_t *prop; fileio_init(); if (argc > 1) { for (a = 1;a < argc;a++) { ret = fileio_load_file(argv[a], &prop); fileio_debug_dump(prop, 1); } } else { ret = fileio_load_file(FILE_TAP, &prop); fileio_debug_dump(prop, 1); ret = fileio_load_file(FILE_GPF, &prop); fileio_debug_dump(prop, 1); ret = fileio_load_file(FILE_IMG, &prop); fileio_debug_dump(prop, 1); ret = fileio_load_file(FILE_BAS, &prop); fileio_debug_dump(prop, 1); ret = fileio_load_file(FILE_PBAS, &prop); fileio_debug_dump(prop, 1); ret = fileio_load_file(FILE_XXX, &prop); fileio_debug_dump(prop, 1); } return 0; } KCemu-0.5.1/src/fileio/load_HS.c0000644001050700006200000000774111345001576015733 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "fileio/loadP.h" static void calc_check_sum(unsigned char *data) { int a; int sum; sum = 0; for (a = 0;a < 34;a += 2) sum += (data[a + 1] << 8) | data[a]; data[34] = sum & 0xff; data[35] = (sum >> 8) & 0xff; } static int loader_HS_check(const char *filename, unsigned char *data, long size) { int load, end; /* * HeaderSave: * * 00h - 01h: load address * 02h - 03h: end address * 04h - 05h: start address * 06h - 0bh: free for additional info * 0ch: file type * 0dh - 0fh: signature 0d3h, 0d3h, 0d3h * 10h - 1fh: file name * * file type: * * C - COM file (with autostart) * T - TEXT file * B - BASIC program * M - COM file (no autostart) * S - SOURCE file (assembler) * P - PASCAL program * D - DATA file * I - introduction, information * E - EPROM data * SPACE - no type * */ if ((data[0x0d] != 0xd3) || (data[0x0e] != 0xd3) || (data[0x0f] != 0xd3)) return 0; load = (data[1] << 8) | data[0]; end = (data[3] << 8) | data[2]; if (end <= load) return 0; return 1; } static int loader_HS_load(const char *filename, unsigned char *data, long size, fileio_prop_t **prop) { int a, addr, len; fileio_prop_t *p; unsigned char *src, *dst; *prop = (fileio_prop_t *)malloc(sizeof(fileio_prop_t)); if (*prop == NULL) return -1; p = *prop; memset(p, 0, sizeof(fileio_prop_t)); p->autostart = 0; p->valid = FILEIO_V_LOAD_ADDR; p->load_addr = (data[1] << 8) | data[0]; switch (data[0x0c]) { case 'C': p->autostart = 1; /* fall through */ case 'M': case 'X': case 'Y': case 'Z': p->type = FILEIO_TYPE_COM; p->valid |= FILEIO_V_START_ADDR | FILEIO_V_AUTOSTART; p->start_addr = (data[5] << 8) | data[4]; break; case 'B': p->type = FILEIO_TYPE_BAS; break; default: p->type = FILEIO_TYPE_UNKNOWN; break; } memcpy(p->name, &data[0x10], 11); p->name[11] = '\0'; for (a = 10;(a > 0) && (p->name[a] == ' ');a--) p->name[a] = '\0'; p->size = 36 * ((size + 31) / 32); p->data = (unsigned char *)malloc(p->size); if (p->data == 0) return -1; memset(p->data, 0, p->size); src = data; dst = p->data; dst[0] = 0xe0; dst[1] = 0x00; memcpy(&dst[2], src, 32); calc_check_sum(dst); size -= 32; addr = p->load_addr; while (size > 0) { src += 32; dst += 36; dst[0] = addr & 0xff; dst[1] = (addr >> 8) & 0xff; len = (size < 32) ? size : 32; memcpy(&dst[2], src, len); calc_check_sum(dst); size -= 32; addr += 32; } return 0; } static const char * loader_HS_get_type(void) { return "HeaderSave"; } static const char * loader_HS_get_name(void) { return "loader for HeaderSave images"; } static file_loader_t loader = { loader_HS_check, loader_HS_load, loader_HS_get_type, loader_HS_get_name }; void loader_HS_init(void) { fileio_register_loader(&loader); } KCemu-0.5.1/src/fileio/load_UNKNOWN.c0000644001050700006200000000746211345001576016560 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "fileio/loadP.h" static int loader_UNKNOWN_check(const char *filename, unsigned char *data, long size) { return 1; } static int str2int(const char *str) { int a; unsigned long value; char *endptr, buf[11]; strncpy(buf, str, 10); buf[10] = '\0'; a = 2; while ((buf[a] != '\0') && (strchr("0123456789abcdefABCDEF", buf[a]) != NULL)) a++; buf[a] = '\0'; if (a < 3) return -1; value = strtoul(buf, &endptr, 0); if (*endptr == '\0') if ((value >= 0) && (value <= 0xffff)) return value; return -1; } static int loader_UNKNOWN_load(const char *filename, unsigned char *data, long size, fileio_prop_t **prop) { int a; const char *ptr; unsigned long val, xsize; unsigned short load, start; xsize = size + (size + 127) / 128; a = 0; load = 0; start = 0; ptr = strstr(filename, "0x"); if (ptr != NULL) { val = str2int(ptr); if (val != -1) { load = val; a = 1; } } if (a == 1) { ptr = strstr(ptr + 1, "0x"); if (ptr != NULL) { val = str2int(ptr); if (val != -1) { start = val; a = 2; } } } *prop = (fileio_prop_t *)malloc(sizeof(fileio_prop_t)); if (*prop == NULL) return -1; memset(*prop, 0, sizeof(fileio_prop_t)); (*prop)->type = FILEIO_TYPE_UNKNOWN; (*prop)->valid = FILEIO_V_NONE; (*prop)->load_addr = 0; (*prop)->start_addr = 0xffff; switch (a) { case 2: (*prop)->start_addr = start; (*prop)->valid |= FILEIO_V_AUTOSTART; (*prop)->valid |= FILEIO_V_START_ADDR; /* fall through */ case 1: (*prop)->load_addr = load; (*prop)->valid |= FILEIO_V_LOAD_ADDR; (*prop)->type = FILEIO_TYPE_COM; break; } (*prop)->autostart = (a == 2); /* * guess a name for the kc file header and make it all upper case */ ptr = strrchr(filename, '/'); if (ptr) ptr++; else ptr = filename; memcpy((*prop)->name, ptr, 11); (*prop)->name[11] = '\0'; for (a = 0;a < 11;a++) (*prop)->name[a] = toupper((*prop)->name[a]); /* * copy data... */ (*prop)->size = size + 128; (*prop)->data = (unsigned char *)malloc(xsize + 129); if ((*prop)->data == 0) return -1; *(*prop)->data = 0; // block number fill_header_COM((*prop)->data + 1, *prop); fileio_copy_blocks((*prop)->data + 129, data, size, 1); return 0; } static const char * loader_UNKNOWN_get_type(void) { return "UNKNOWN"; } static const char * loader_UNKNOWN_get_name(void) { return "fallback loader for unknown file types"; } static file_loader_t loader = { loader_UNKNOWN_check, loader_UNKNOWN_load, loader_UNKNOWN_get_type, loader_UNKNOWN_get_name }; void loader_UNKNOWN_init(void) { fileio_register_loader(&loader); } KCemu-0.5.1/src/fileio/load_BASICODE.c0000644001050700006200000000613711345001576016570 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "fileio/loadP.h" static int loader_BASICODE_check(const char *filename, unsigned char *data, long size) { /* * BASICODE */ if (size >= 5) if (memcmp(data, "1000 ", 5) == 0) return 1; return 0; } static void loader_BASICODE_set_filename(unsigned char *data, const char *filename) { int a, c; const char *name; static const char *allowed_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ����0123456789+-()"; name = strrchr(filename, '/'); if (name == NULL) name = filename; a = 0; while (a < 8) { if (*name == '\0') break; c = toupper(*name++); if (c == '.') break; if (strchr(allowed_chars, c) != NULL) data[a++] = c; } data[a] = '\0'; } static int loader_BASICODE_load(const char *filename, unsigned char *data, long size, fileio_prop_t **prop) { int newline; long a, xsize; unsigned char c, *sptr, *dptr; *prop = (fileio_prop_t *)malloc(sizeof(fileio_prop_t)); if (*prop == NULL) return -1; memset(*prop, 0, sizeof(fileio_prop_t)); (*prop)->type = FILEIO_TYPE_BASICODE; (*prop)->valid = FILEIO_V_NONE; (*prop)->load_addr = 0; (*prop)->start_addr = 0; (*prop)->autostart = 0; loader_BASICODE_set_filename((*prop)->name, filename); (*prop)->data = (unsigned char *)malloc(size); if ((*prop)->data == 0) return -1; sptr = data; dptr = (*prop)->data; newline = xsize = 0; for (a = 0;a < size;a++) { c = *sptr++; /* * basicode newline is 0dh */ if (c == 0x0a) c = 0x0d; /* * remove multiple newlines */ if (c == 0x0d) { if (newline) continue; else newline = 1; } else { newline = 0; } *dptr = c; dptr++; xsize++; } (*prop)->size = xsize; return 0; } static const char * loader_BASICODE_get_type(void) { return "BASICODE"; } static const char * loader_BASICODE_get_name(void) { return "loader for BASICODE files (ASCII)"; } static file_loader_t loader = { loader_BASICODE_check, loader_BASICODE_load, loader_BASICODE_get_type, loader_BASICODE_get_name }; void loader_BASICODE_init(void) { fileio_register_loader(&loader); } KCemu-0.5.1/src/fileio/load_BIN.c0000644001050700006200000001016611345001576016024 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "fileio/loadP.h" #define CHECK_SIG(s) \ ((data[1] == (s)) && (data[2] == (s)) && (data[3] == (s))) static int loader_BIN_check(const char *filename, unsigned char *data, long size) { int a; unsigned char crc; if (size >= 130) { if ((data[0] != 0x00) && (data[0] != 0x01)) return 0; crc = 0; for (a = 1;a < 129;a++) crc += data[a]; if (crc == data[129]) return 1; } return 0; } static void copy_blocks(unsigned char *dptr, const unsigned char *sptr, long size) { while (size >= 130) { memcpy(dptr, sptr, 129); dptr += 129; sptr += 130; size -= 130; } } static int loader_BIN_load(const char *filename, unsigned char *data, long size, fileio_prop_t **prop) { int a; long xsize; *prop = (fileio_prop_t *)malloc(sizeof(fileio_prop_t)); if (*prop == NULL) return -1; memset(*prop, 0, sizeof(fileio_prop_t)); xsize = 129 * (size / 130); (*prop)->load_addr = 0; (*prop)->start_addr = 0; (*prop)->autostart = 0; if (CHECK_SIG(0xd3)) { (*prop)->type = FILEIO_TYPE_BAS; memcpy((*prop)->name, data + 4, 8); (*prop)->name[8] = '\0'; for (a = 7;(a > 0) && (*prop)->name[a] == ' ';a--) (*prop)->name[a] = '\0'; } else if (CHECK_SIG(0xd4)) { (*prop)->type = FILEIO_TYPE_DATA; memcpy((*prop)->name, data + 4, 8); (*prop)->name[8] = '\0'; for (a = 7;(a > 0) && (*prop)->name[a] == ' ';a--) (*prop)->name[a] = '\0'; } else if (CHECK_SIG(0xd5)) { (*prop)->type = FILEIO_TYPE_LIST; memcpy((*prop)->name, data + 4, 8); (*prop)->name[8] = '\0'; for (a = 7;(a > 0) && (*prop)->name[a] == ' ';a--) (*prop)->name[a] = '\0'; } else if (CHECK_SIG(0xd7)) { (*prop)->type = FILEIO_TYPE_PROT_BAS; memcpy((*prop)->name, data + 4, 8); (*prop)->name[8] = '\0'; for (a = 7;(a > 0) && (*prop)->name[a] == ' ';a--) (*prop)->name[a] = '\0'; } else { (*prop)->type = FILEIO_TYPE_COM; (*prop)->valid = (FILEIO_V_LOAD_ADDR | FILEIO_V_START_ADDR | FILEIO_V_AUTOSTART); (*prop)->load_addr = data[18] | (data[19] << 8); (*prop)->start_addr = data[22] | (data[23] << 8); (*prop)->autostart = (data[17] > 2); memcpy((*prop)->name, data + 1, 11); (*prop)->name[11] = '\0'; /* * strip trailing COM */ if ((data[8] == 'C') && (data[9] == 'O') && (data[10] == 'M')) (*prop)->name[8] = '\0'; } /* * the kc85/1 method to disable autostart is to set * the start address to 0xffff which contains 0xc9 (RET) * of cause this will not catch all cases... */ if ((*prop)->start_addr == 0xffff) (*prop)->autostart = 0; (*prop)->size = xsize; (*prop)->data = (unsigned char *)malloc(xsize); if ((*prop)->data == 0) return -1; copy_blocks((*prop)->data, data, size); return 0; } static const char * loader_BIN_get_type(void) { return "BIN"; } static const char * loader_BIN_get_name(void) { return "loader for binary tape files (block size 130 bytes)"; } static file_loader_t loader = { loader_BIN_check, loader_BIN_load, loader_BIN_get_type, loader_BIN_get_name }; void loader_BIN_init(void) { fileio_register_loader(&loader); } KCemu-0.5.1/src/fileio/kc2img.c0000644001050700006200000000251311345001576015566 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "fileio/load.h" int main(int argc, char **argv) { fileio_prop_t *prop; if (argc != 3) { printf("usage: %s infile outfile\n", argv[0]); exit(1); } fileio_init(); if (fileio_load_file(argv[1], &prop) < 0) { printf("can't load file '%s'\n", argv[1]); return 1; } if (fileio_save_img_prop(argv[2], prop) < 0) { printf("can't save file '%s'\n", argv[2]); return 1; } return 0; } KCemu-0.5.1/src/fileio/load_TAPE.c0000644001050700006200000000762711345001576016155 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "fileio/loadP.h" static int check_addr(unsigned char *data, long size) { unsigned short load, end, start, x; /* * finally look if specified addresses are plausible */ x = data[16]; load = data[17] | (data[18] << 8); end = data[19] | (data[20] << 8); start = data[21] | (data[22] << 8); if (load >= end) return 0; if ((end - load - 1) > size) return 0; if (x > 2) if ((start < load) || (start >= end)) return 0; return 1; } static int loader_TAPE_check(const char *filename, unsigned char *data, long size) { /* * standard kc tape image (128 bytes/block no checksum) * This is somewhat tricky because we don't have a simple * signature to check against. Instead we test some * constraints that should detect most of the tape images. */ if (size > 128) if ((data[16] >= 2) && (data[16] <= 0x0a)) return check_addr(data, size - 128); return 0; } static int loader_TAPE_load(const char *filename, unsigned char *data, long size, fileio_prop_t **prop) { long xsize; *prop = (fileio_prop_t *)malloc(sizeof(fileio_prop_t)); if (*prop == NULL) return -1; memset(*prop, 0, sizeof(fileio_prop_t)); xsize = 129 * ((size + 127) / 128); (*prop)->type = FILEIO_TYPE_COM; (*prop)->valid = (FILEIO_V_LOAD_ADDR | FILEIO_V_START_ADDR | FILEIO_V_AUTOSTART); (*prop)->load_addr = data[17] | (data[18] << 8); (*prop)->start_addr = data[21] | (data[22] << 8); (*prop)->autostart = (data[16] > 2); memcpy((*prop)->name, data, 11); (*prop)->name[11] = '\0'; /* * strip trailing COM */ if ((data[8] == 'C') && (data[9] == 'O') && (data[10] == 'M')) (*prop)->name[8] = '\0'; /* * the kc85/1 method to disable autostart is to set * the start address to 0xffff which contains 0xc9 (RET) * of cause this will not catch all cases... */ if ((*prop)->start_addr == 0xffff) (*prop)->autostart = 0; (*prop)->size = xsize; (*prop)->data = (unsigned char *)malloc(xsize); if ((*prop)->data == 0) return -1; *(*prop)->data = 0; // block number /* * FIXME: fill_header_COM() doesn't handle KC85/1 filenames correctly */ //fill_header_COM((*prop)->data + 1, *prop); //fileio_copy_blocks((*prop)->data + 129, data + 128, size - 128, 1); switch (fileio_get_kctype()) { case FILEIO_KC85_1: fileio_copy_blocks((*prop)->data, data, size, 0); break; case FILEIO_KC85_3: fileio_copy_blocks((*prop)->data, data, size, 1); break; case FILEIO_Z1013: return -1; } return 0; } static const char * loader_TAPE_get_type(void) { return "TAPE"; } static const char * loader_TAPE_get_name(void) { return "loader for raw KC-Tape images"; } static file_loader_t loader = { loader_TAPE_check, loader_TAPE_load, loader_TAPE_get_type, loader_TAPE_get_name }; void loader_TAPE_init(void) { fileio_register_loader(&loader); } KCemu-0.5.1/src/fileio/Makefile.am0000644001050700006200000000146410527416075016313 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in bin_PROGRAMS = kc2img kc2tap kc2wav kc2raw noinst_PROGRAMS = test-load noinst_LIBRARIES = libfileio.a INCLUDES = \ -I../../include AM_CPPFLAGS = \ -DVERSION=\"$(VERSION)\" \ -DFILEIO_DEBUG libfileio_a_SOURCES = \ load.c \ load_AF.c \ load_GPF.c \ load_SSS.c \ load_BIN.c \ load_HS.c \ load_TAPE.c \ load_BASIC.c \ load_BASICODE.c \ load_UNKNOWN.c \ save_IMG.c \ save_TAP.c \ save_WAV.c \ save_RAW.c kc2img_SOURCES = kc2img.c kc2img_LDADD = libfileio.a $(INTLLIBS) kc2tap_SOURCES = kc2tap.c kc2tap_LDADD = libfileio.a $(INTLLIBS) kc2wav_SOURCES = kc2wav.c kc2wav_LDADD = libfileio.a $(INTLLIBS) kc2raw_SOURCES = kc2raw.c kc2raw_LDADD = libfileio.a $(INTLLIBS) test_load_SOURCES = test_load.c test_load_LDADD = libfileio.a $(INTLLIBS) KCemu-0.5.1/src/fileio/load_AF.c0000644001050700006200000001407311345001576015703 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "fileio/loadP.h" static int check_signature(const char *data) { if (strncmp(data, "KC-TAPE by AF", 13) == 0) return 1; return 0; } static int loader_AF_check(const char *filename, unsigned char *data, long size) { /* * files from the KC-Emulator by Arne Fitzenreiter */ if (size >= (16 + 128)) /* file signature + first block */ return check_signature((const char *)&data[1]); return 0; } static void set_type(unsigned char *data, fileio_prop_t *prop) { int load, start, autostart; load = 0; start = 0; autostart = 0; if ((data[1] == 0xd3) && (data[2] == 0xd3) && (data[3] == 0xd3)) { prop->type = FILEIO_TYPE_BAS; prop->valid = FILEIO_V_NONE; memcpy(prop->name, data + 4, 8); prop->name[8] = '\0'; } else if ((data[1] == 0xd4) && (data[2] == 0xd4) && (data[3] == 0xd4)) { prop->type = FILEIO_TYPE_DATA; prop->valid = FILEIO_V_NONE; memcpy(prop->name, data + 4, 8); prop->name[8] = '\0'; } else if ((data[1] == 0xd5) && (data[2] == 0xd5) && (data[3] == 0xd5)) { prop->type = FILEIO_TYPE_LIST; prop->valid = FILEIO_V_NONE; memcpy(prop->name, data + 4, 8); prop->name[8] = '\0'; } else if ((data[1] == 0xd7) && (data[2] == 0xd7) && (data[3] == 0xd7)) { prop->type = FILEIO_TYPE_PROT_BAS; prop->valid = FILEIO_V_NONE; memcpy(prop->name, data + 4, 8); prop->name[8] = '\0'; } else { prop->type = FILEIO_TYPE_COM; prop->valid = (FILEIO_V_LOAD_ADDR | FILEIO_V_START_ADDR | FILEIO_V_AUTOSTART); memcpy(prop->name, data + 1, 11); prop->name[11] = '\0'; load = data[18] | (data[19] << 8); start = data[22] | (data[23] << 8); autostart = (data[17] > 2); } prop->load_addr = load; prop->start_addr = start; prop->autostart = autostart; } /* * check if we have the last block of the current file * * for machine code we simply check the block counter but * basic files seem to be sometimes larger than 255 blocks * so in case of basic files we check for the basic end * marker in the current block (three zero bytes) */ static int check_end(unsigned char *data, int type) { int a; int is_last_block = 0; switch (type) { case FILEIO_TYPE_BAS: case FILEIO_TYPE_PROT_BAS: for (a = 1;a < 127;a++) if ((data[a] | data[a + 1] | data[a + 2]) == 0) is_last_block = 1; break; default: if ((*data) == 0xff) is_last_block = 1; break; } return is_last_block; } /* * return number of bytes used from the original file or -1 on error */ static long fill_prop(unsigned char *data, long size, fileio_prop_t *prop) { long len; int first; len = 0; first = 1; while (242) { if (size < 129) return -1; len += 129; if (first) { first = 0; set_type(data, prop); } if (check_end(data, prop->type)) { prop->size = len; return len; } data += 129; size -= 129; } } /* * return number of bytes used from the original file or -1 on error */ static int do_load(unsigned char *data, unsigned long size, fileio_prop_t *prop) { long len; len = fill_prop(data, size, prop); if (len < 0) return -1; prop->data = (unsigned char *)malloc(prop->size); if (prop->data == NULL) return -1; memcpy(prop->data, data, prop->size); return prop->size; } static int loader_AF_load(const char *filename, unsigned char *data, long size, fileio_prop_t **prop) { int olen; unsigned char *ptr; fileio_prop_t *tmp, *prop_ptr, *prop_lptr; ptr = data; prop_ptr = 0; prop_lptr = 0; while (size > 0) { /* * ignore trailing garbage if we don't find * file header (might be caused by basic files * which often store the last block twice) * * so we don't simply bail out here but instead * skip one block of 129 bytes and try to go on... */ if (!check_signature((const char *)&ptr[1])) { ptr += 129; size -= 129; continue; } ptr += 16; /* skip header... */ size -= 16; if (size < 0) break; tmp = (fileio_prop_t *)malloc(sizeof(fileio_prop_t)); if (tmp == NULL) return -1; memset(tmp, 0, sizeof(fileio_prop_t)); olen = do_load(ptr, size, tmp); if (olen < 0) { free(tmp); *prop = prop_ptr; return -1; } if (prop_ptr == 0) prop_ptr = prop_lptr = tmp; else { prop_lptr->next = tmp; prop_lptr = prop_lptr->next; } size -= olen; ptr += olen; } *prop = prop_ptr; return 0; } static const char * loader_AF_get_type(void) { return "AF"; } static const char * loader_AF_get_name(void) { return "loader for KC85/3+4 Emulator by Arne Fitzenreiter"; } static file_loader_t loader = { loader_AF_check, loader_AF_load, loader_AF_get_type, loader_AF_get_name }; void loader_AF_init(void) { fileio_register_loader(&loader); } KCemu-0.5.1/src/fileio/load.c0000644001050700006200000001556111345001576015340 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include "fileio/loadP.h" static fileio_kctype_t kctype; static file_loader_t *loaders[MAX_FILE_LOADERS]; void fileio_init(void) { fileio_set_kctype(FILEIO_KC85_3); memset(loaders, 0, sizeof(loaders)); /* * order is importend * first check for types with unique signatures * unsafe guesses come last */ loader_AF_init(); loader_GPF_init(); loader_BASIC_init(); loader_BASICODE_init(); loader_SSS_init(); loader_HS_init(); loader_BIN_init(); loader_TAPE_init(); loader_UNKNOWN_init(); /* fallback */ } fileio_kctype_t fileio_get_kctype(void) { return kctype; } void fileio_set_kctype(fileio_kctype_t type) { kctype = type; } int fileio_register_loader(file_loader_t *loader) { int a; for (a = 0;a < MAX_FILE_LOADERS;a++) if (loaders[a] == NULL) { loaders[a] = loader; return 1; } return 0; } int fileio_load_file(const char *filename, fileio_prop_t **prop) { int a, ret; FILE *f; unsigned char *data; struct stat stat_buf; if (filename == NULL) return -1; if (prop == NULL) return -1; *prop = NULL; if (stat(filename, &stat_buf) != 0) return -1; if (!S_ISREG(stat_buf.st_mode)) return -1; data = (unsigned char *)malloc(stat_buf.st_size); if (data == 0) return -1; f = fopen(filename, "rb"); if (f == NULL) { free(data); return -1; } if (fread(data, 1, stat_buf.st_size, f) != stat_buf.st_size) { free(data); return -1; } ret = -1; for (a = 0;a < MAX_FILE_LOADERS;a++) { if (loaders[a]) if (loaders[a]->check) { /* printf("trying %s...\n", loaders[a]->get_name()); */ if (loaders[a]->check(filename, data, stat_buf.st_size)) { /* printf("using %s.\n", loaders[a]->get_name()); */ ret = loaders[a]->load(filename, data, stat_buf.st_size, prop); (*prop)->filetype = loaders[a]->get_type(); break; } } } free(data); return ret; } void fileio_free_prop(fileio_prop_t **prop) { fileio_prop_t *ptr; for (ptr = *prop;ptr != NULL;ptr = ptr->next) { free(ptr->data); } } long fileio_get_image_z1013(fileio_prop_t *prop, unsigned char *buf) { int a, b, len; len = prop->size - 32; a = 36; b = 0; while (len-- > 0) { switch (a % 36) { case 0: case 1: case 34: case 35: break; default: buf[b] = prop->data[a]; b++; break; } a++; } return b; } long fileio_get_image(fileio_prop_t *prop, unsigned char *buf) { int a, b, len; if (fileio_get_kctype() == FILEIO_Z1013) return fileio_get_image_z1013(prop, buf); b = 0; switch (prop->type) { case FILEIO_TYPE_COM: case FILEIO_TYPE_UNKNOWN: a = 130; len = prop->size - 128; break; case FILEIO_TYPE_BAS: case FILEIO_TYPE_PROT_BAS: case FILEIO_TYPE_DATA: case FILEIO_TYPE_LIST: a = 14; len = prop->size - 13; break; case FILEIO_TYPE_BASICODE: a = 0; len = prop->size; break; } while (len-- > 0) { buf[b] = prop->data[a]; b++; a++; if ((a % 129) == 0) a++; } return b; } void fill_header_COM(unsigned char *data, fileio_prop_t *prop) { int a, c, end; memset(data, 0, 128); memcpy(data, " COM", 11); for (a = 0;a < 8;a++) { c = toupper(prop->name[a]); if (c == 0) break; data[a] = c; } if ((prop->valid & FILEIO_V_LOAD_ADDR) == FILEIO_V_LOAD_ADDR) { end = prop->load_addr + prop->size + 1; data[16] = 2; data[17] = prop->load_addr & 0xff; data[18] = (prop->load_addr >> 8) & 0xff; data[19] = end & 0xff; data[20] = (end >> 8) & 0xff; } if ((prop->valid & FILEIO_V_START_ADDR) == FILEIO_V_START_ADDR) { data[16] = 3; data[21] = prop->start_addr & 0xff; data[22] = (prop->start_addr >> 8) & 0xff; } } void fileio_copy_blocks(unsigned char *dptr, const unsigned char *sptr, long size, int block) { long len; while (size > 0) { if (size > 128) *dptr = block++; else *dptr = 0xff; len = (size > 128) ? 128 : size; memcpy(dptr + 1, sptr, len); dptr += 129; sptr += 128; size -= 128; } } void fileio_debug_dump(fileio_prop_t *prop, int write_file) { FILE *f; char buf[100]; const char *type; fileio_prop_t *ptr; printf("fileio: dumping file properties...\n"); for (ptr = prop;ptr != NULL;ptr = ptr->next) { switch (ptr->type) { case FILEIO_TYPE_UNKNOWN: type = "(UNKNOWN)"; break; case FILEIO_TYPE_COM: type = "(COM)"; break; case FILEIO_TYPE_BAS: type = "(BASIC)"; break; case FILEIO_TYPE_PROT_BAS: type = "(BASIC*)"; break; default: type = "(?)"; break; } printf("fileio: %-14s %-10s - ", ptr->name, type); printf("%04x-%04lx/", ptr->load_addr, ptr->load_addr + ptr->size + 1); if (ptr->autostart) printf("%04x", ptr->start_addr); else printf(" - "); printf(" : %5ld bytes [%s]", ptr->size, ptr->filetype); if (write_file) { sprintf(buf, ".out-%s", ptr->name); f = fopen(buf, "wb"); if (f) { while (ptr->size > 0) { ptr->data++; ptr->size--; if (ptr->size == 0) break; fwrite(ptr->data, 1, 128, f); ptr->data += 128; ptr->size -= 128; } fclose(f); printf(" -> '%s'", buf); } } printf("\n"); } printf("fileio: done.\n"); } void fileio_show_config(void) { int a; printf("available fileio plugins:\n"); for (a = 0;a < MAX_FILE_LOADERS;a++) { if (loaders[a]) printf(" %s\n", loaders[a]->get_name()); } } KCemu-0.5.1/src/fileio/kc2wav.c0000644001050700006200000000301611345001576015606 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "fileio/load.h" int main(int argc, char **argv) { int arg_idx = 1; fileio_prop_t *prop; if ((argc < 3) || (argc > 4)) { printf("usage: %s [-1] infile outfile\n", argv[0]); exit(1); } fileio_init(); if (strcmp(argv[1], "-1") == 0) { fileio_set_kctype(FILEIO_KC85_1); arg_idx++; } if (fileio_load_file(argv[arg_idx], &prop) < 0) { printf("can't load file '%s'\n", argv[arg_idx]); return 1; } if (fileio_save_wav_prop(argv[arg_idx + 1], prop) < 0) { printf("can't save file '%s'\n", argv[arg_idx + 1]); return 1; } return 0; } KCemu-0.5.1/src/fileio/save_RAW.c0000644001050700006200000000512411345001576016062 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "fileio/loadP.h" char * make_filename(const char *filename, int load, int start) { int a; char *buf, *ptr; if ((load < 0) && (start >= 0)) load = 0; buf = (char *)malloc(strlen(filename) + 20); ptr = strrchr(filename, '.'); if (ptr == NULL) { strcpy(buf, filename); if (load >= 0) { strcat(buf, "_0x"); snprintf(buf + strlen(buf), 5, "%04x", load); } if (start >= 0) { strcat(buf, "_0x"); snprintf(buf + strlen(buf), 5, "%04x", start); } strcat(buf, ".img"); } else { a = ptr - filename; strncpy(buf, filename, a); buf[a] = '\0'; if (load >= 0) { strcat(buf, "_0x"); snprintf(buf + strlen(buf), 5, "%04x", load); } if (start >= 0) { strcat(buf, "_0x"); snprintf(buf + strlen(buf), 5, "%04x", start); } strcat(buf, ptr); } return buf; } int fileio_save_raw(const char *filename, const unsigned char *data, int size, int load, int start) { int a; int len; FILE *out; char *name; name = make_filename(filename, load, start); out = fopen(name, "wb"); free(name); if (out == NULL) return 1; len = size; while (len > 0) { a = 128; if (len < a) a = len; data++; if (fwrite(data, 1, 128, out) != 128) return 1; data += 128; len -= 129; } fclose(out); return 0; } int fileio_save_raw_prop(const char *filename, fileio_prop_t *prop) { int load = -1; int start = -1; if (prop->valid & FILEIO_V_LOAD_ADDR) load = prop->load_addr; if (prop->valid & FILEIO_V_START_ADDR) start = prop->start_addr; return fileio_save_raw(filename, prop->data, prop->size, load, start); } KCemu-0.5.1/src/fileio/save_WAV.c0000644001050700006200000001412611345001576016070 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include "fileio/loadP.h" #define RATE (44100) #define BIT_0 (2400) #define BIT_1 (1200) #define BIT_S (600) typedef struct wav_header { uint32_t MainChunkID; // it will be 'RIFF' uint32_t Length; uint32_t ChunkTypeID; // it will be 'WAVE' uint32_t SubChunkID; // it will be 'fmt ' uint32_t SubChunkLength; uint16_t AudioFormat; uint16_t NumChannels; uint32_t SampleFreq; uint32_t BytesPerSec; uint16_t BytesPerSample; uint16_t BitsPerSample; uint32_t DataChunkID; // it will be 'data' uint32_t DataLength; } wav_header_t; static int _value = -1; static int _start_block = 1; struct tape_buf { int blockno; unsigned char *buf; struct tape_buf *next; }; static int write_silence(FILE *out, int samples) { int a; for (a = 0;a < samples;a++) if (fputc(0x80, out) == EOF) return -1; return a; } static void write_bit(FILE *out) { unsigned char c; c = 0x80 - (126 * _value); fwrite(&c, 1, 1, out); } static long write_bits(FILE *out, int freq, int count, int *sync) { int a, b; double fact; long flen = 0; switch (freq) { case BIT_0: fact = 120; break; case BIT_1: fact = 120; break; case BIT_S: fact = 120; break; default: fact = 120; break; } for (a = 0;a < count;a++) { for (b = 0;b < 2;b++) { while (*sync < RATE) { *sync += freq * 2; write_bit(out); flen++; } _value = -_value; *sync -= RATE; } } return flen; } static long write_byte(FILE *out, unsigned char b, int *sync) { int a; long flen = 0; for (a = 0;a < 8;a++) { if (b & (1 << a)) flen += write_bits(out, BIT_1, 1, sync); // 1 bit else flen += write_bits(out, BIT_0, 1, sync); // 0 bit } flen += write_bits(out, BIT_S, 1, sync); // sync bit return flen; } static long write_block(FILE *out, int block, unsigned char *buf, int sync_bits) { int a; int sync = -1; long flen = 0; unsigned char crc = 0; //printf("[%02x] ", block); fflush(stdout); flen += write_bits(out, BIT_1, sync_bits, &sync); flen += write_bits(out, BIT_S, 1, &sync); // sync bit flen += write_byte(out, block, &sync); // block number for (a = 0;a < 128;a++) { crc += buf[a]; flen += write_byte(out, buf[a], &sync); // data } flen += write_byte(out, crc, &sync); // checksum return flen; } static long write_file(FILE *out, const unsigned char *data, int size) { long flen; int a, len; int sync_bits; struct tape_buf *first, *buffer, *tmp; flen = 0; first = 0; buffer = 0; a = 0; len = size; while (len > 0) { tmp = (struct tape_buf *)malloc(sizeof(struct tape_buf)); tmp->buf = (unsigned char *)malloc(129); tmp->next = 0; memset(tmp->buf, 0, 129); if (len > 129) memcpy(tmp->buf, data + a, 129); else memcpy(tmp->buf, data + a, len); a += 129; len -= 129; tmp->blockno = tmp->buf[0]; if (buffer != 0) buffer->next = tmp; if (first == 0) first = tmp; buffer = tmp; } buffer->blockno = 0xff; sync_bits = 8000; for (buffer = first;buffer != 0;buffer = buffer->next) { flen += write_block(out, buffer->blockno, buffer->buf + 1, sync_bits); sync_bits = 200; } return flen; } static int _fileio_save_wav(FILE *out, const unsigned char *data, int size) { wav_header_t header; long flen, start_silence, end_silence; switch (fileio_get_kctype()) { case FILEIO_KC85_1: _start_block = 0; break; case FILEIO_KC85_3: _start_block = 1; break; case FILEIO_Z1013: // FIXME: not implemented return -1; } start_silence = RATE / 2; end_silence = RATE * 2; header.MainChunkID = 'R' | 'I' << 8 | 'F' << 16 | 'F' << 24; header.ChunkTypeID = 'W' | 'A' << 8 | 'V' << 16 | 'E' << 24; header.SubChunkID = 'f' | 'm' << 8 | 't' << 16 | ' ' << 24; header.SubChunkLength = 16; header.AudioFormat = 1; header.NumChannels = 1; header.SampleFreq = RATE; header.BytesPerSec = 5512; header.BytesPerSample = 1; header.BitsPerSample = 8; header.DataChunkID = 'd' | 'a' << 8 | 't' << 16 | 'a' << 24; header.DataLength = 0; header.Length = header.DataLength + 44 - 8; if (fwrite(&header, 1, sizeof(header), out) != sizeof(header)) return -1; if (write_silence(out, start_silence) != start_silence) return -1; flen = write_file(out, data, size); if (write_silence(out, end_silence) != end_silence) return -1; header.DataLength = flen + start_silence + end_silence; header.Length = header.DataLength + 44 - 8; if (fseek(out, 0, SEEK_SET) != 0) return -1; if (fwrite(&header, 1, sizeof(header), out) != sizeof(header)) return -1; return 0; } int fileio_save_wav(const char *filename, const unsigned char *data, int size) { int ret; FILE *out; out = fopen(filename, "wb"); if (out == NULL) return -1; ret = _fileio_save_wav(out, data, size); fclose(out); return ret; } int fileio_save_wav_prop(const char *filename, fileio_prop_t *prop) { return fileio_save_wav(filename, prop->data, prop->size); } KCemu-0.5.1/src/fileio/save_TAP.c0000644001050700006200000000260111345001576016052 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "fileio/loadP.h" int fileio_save_tap(const char *filename, const unsigned char *data, int size) { FILE *out; out = fopen(filename, "wb"); if (out == NULL) return 1; if (fwrite("\xc3KC-TAPE by AF. ", 1, 16, out) != 16) return 1; if (fwrite(data, 1, size, out) != size) return 1; fclose(out); return 0; } int fileio_save_tap_prop(const char *filename, fileio_prop_t *prop) { return fileio_save_tap(filename, prop->data, prop->size); } KCemu-0.5.1/src/fileio/load_SSS.c0000644001050700006200000000720411345001576016063 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "fileio/loadP.h" /* * raw basic files as found on www.robotron-net.de * in fact there are simply the first 11 bytes missing * those contain the basic marker bytes (3 times 0xd3) and * the filename (8 bytes padded with spaces) */ static int loader_SSS_check(const char *filename, unsigned char *data, long size) { int len; const char *name; len = data[0] | (data[1] << 8); /* too restricting... if (size != ((len + 127) & ~127)) return 0; */ if (len > size) return 0; if ((len + 129) < size) return 0; if (data[3] != 4) return 0; len = strlen(filename); if (len >= 4) { name = filename + len - 4; if (strcmp(name, ".sss") == 0) return 1; if (strcmp(name, ".SSS") == 0) return 1; } return 0; } static void loader_SSS_set_filename(unsigned char *data, const char *filename) { int a, c; const char *name; static const char *allowed_chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ����0123456789+-()"; name = strrchr(filename, '/'); if (name == NULL) name = filename; a = 0; while (a < 8) { if (*name == '\0') break; c = toupper(*name++); if (c == '.') break; if (strchr(allowed_chars, c) != NULL) data[a++] = c; } data[a] = '\0'; } static int loader_SSS_load(const char *filename, unsigned char *data, long size, fileio_prop_t **prop) { int b; long xsize, len; unsigned char *sptr, *dptr; *prop = (fileio_prop_t *)malloc(sizeof(fileio_prop_t)); if (*prop == NULL) return -1; memset(*prop, 0, sizeof(fileio_prop_t)); size += 11; xsize = size + (size + 127) / 128; (*prop)->type = FILEIO_TYPE_BAS; (*prop)->valid = FILEIO_V_NONE; (*prop)->load_addr = 0; (*prop)->start_addr = 0; (*prop)->autostart = 0; (*prop)->size = xsize; loader_SSS_set_filename((*prop)->name, filename); (*prop)->data = (unsigned char *)malloc(xsize); if ((*prop)->data == 0) return -1; sptr = data; dptr = (*prop)->data; b = 1; while (size > 0) { *dptr++ = b++; len = (size > 128) ? 128 : size; if (b == 2) // first block as b is incremented above !!! { memset(dptr, 0xd3, 3); memset(dptr + 3, 0x20, 8); memcpy(dptr + 3, (*prop)->name, strlen((char *)(*prop)->name)); dptr += 11; len -= 11; } memcpy(dptr, sptr, len); dptr += len; sptr += len; size -= 128; } return 0; } static const char * loader_SSS_get_type(void) { return "BASIC"; } static const char * loader_SSS_get_name(void) { return "loader for raw BASIC files (*.sss)"; } static file_loader_t loader = { loader_SSS_check, loader_SSS_load, loader_SSS_get_type, loader_SSS_get_name }; void loader_SSS_init(void) { fileio_register_loader(&loader); } KCemu-0.5.1/src/fileio/load_GPF.c0000644001050700006200000000521511345001576016027 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "fileio/loadP.h" static int loader_GPF_check(const char *filename, unsigned char *data, long size) { /* * files from the GEMINI Emulator */ if (size > 128) if ((data[2] == 'B') && (data[3] == ':') && (data[7] == 'E') && (data[12] == 'S')) { return 1; } return 0; } static int loader_GPF_load(const char *filename, unsigned char *data, long size, fileio_prop_t **prop) { int a; const char *ptr; *prop = (fileio_prop_t *)malloc(sizeof(fileio_prop_t)); if (*prop == NULL) return -1; memset(*prop, 0, sizeof(fileio_prop_t)); (*prop)->type = FILEIO_TYPE_COM; (*prop)->valid = (FILEIO_V_LOAD_ADDR | FILEIO_V_START_ADDR | FILEIO_V_AUTOSTART); (*prop)->load_addr = data[ 4] | (data[ 5] << 8); (*prop)->start_addr = data[14] | (data[15] << 8); (*prop)->autostart = 1; ptr = strrchr(filename, '/'); if (ptr) ptr++; else ptr = filename; memcpy((*prop)->name, ptr, 11); (*prop)->name[11] = '\0'; for (a = 0;a < 11;a++) (*prop)->name[a] = toupper((*prop)->name[a]); (*prop)->size = size; (*prop)->data = (unsigned char *)malloc(size); if ((*prop)->data == 0) return -1; fill_header_COM((*prop)->data, *prop); memcpy((*prop)->data + 128, data + 128, size - 128); return 0; } static const char * loader_GPF_get_type(void) { return "GEMINI"; } static const char * loader_GPF_get_name(void) { return "loader for GEMINI-Emulator files"; } static file_loader_t loader = { loader_GPF_check, loader_GPF_load, loader_GPF_get_type, loader_GPF_get_name }; void loader_GPF_init(void) { fileio_register_loader(&loader); } KCemu-0.5.1/src/fileio/load_BASIC.c0000644001050700006200000000537611345001576016244 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "fileio/loadP.h" static int loader_BASIC_check(const char *filename, unsigned char *data, long size) { /* * BASIC */ if (size > 12) if ((data[0] == 0xd3) && (data[1] == 0xd3) && (data[2] == 0xd3)) return 1; /* * protected BASIC */ if (size > 12) if ((data[0] == 0xd7) && (data[1] == 0xd7) && (data[2] == 0xd7)) return 1; return 0; } static int loader_BASIC_load(const char *filename, unsigned char *data, long size, fileio_prop_t **prop) { int b; long xsize, len; unsigned char *sptr, *dptr; *prop = (fileio_prop_t *)malloc(sizeof(fileio_prop_t)); if (*prop == NULL) return -1; memset(*prop, 0, sizeof(fileio_prop_t)); switch (*data) { case 0xd3: (*prop)->type = FILEIO_TYPE_BAS; break; case 0xd7: (*prop)->type = FILEIO_TYPE_PROT_BAS; break; default: return -1; } xsize = size + (size + 127) / 128; (*prop)->valid = FILEIO_V_NONE; (*prop)->load_addr = 0; (*prop)->start_addr = 0; (*prop)->autostart = 0; (*prop)->size = xsize; memcpy((*prop)->name, data + 3, 8); (*prop)->name[8] = '\0'; (*prop)->data = (unsigned char *)malloc(xsize); if ((*prop)->data == 0) return -1; sptr = data; dptr = (*prop)->data; b = 1; while (size > 0) { *dptr++ = b++; len = (size > 128) ? 128 : size; memcpy(dptr, sptr, len); dptr += 128; sptr += 128; size -= 128; } return 0; } static const char * loader_BASIC_get_type(void) { return "BASIC"; } static const char * loader_BASIC_get_name(void) { return "loader for standard BASIC files"; } static file_loader_t loader = { loader_BASIC_check, loader_BASIC_load, loader_BASIC_get_type, loader_BASIC_get_name }; void loader_BASIC_init(void) { fileio_register_loader(&loader); } KCemu-0.5.1/src/fileio/kc2tap.c0000644001050700006200000000251311345001576015576 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "fileio/load.h" int main(int argc, char **argv) { fileio_prop_t *prop; if (argc != 3) { printf("usage: %s infile outfile\n", argv[0]); exit(1); } fileio_init(); if (fileio_load_file(argv[1], &prop) < 0) { printf("can't load file '%s'\n", argv[1]); return 1; } if (fileio_save_tap_prop(argv[2], prop) < 0) { printf("can't save file '%s'\n", argv[2]); return 1; } return 0; } KCemu-0.5.1/src/fileio/Makefile.in0000644001050700006200000005364511412404772016327 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ bin_PROGRAMS = kc2img$(EXEEXT) kc2tap$(EXEEXT) kc2wav$(EXEEXT) \ kc2raw$(EXEEXT) noinst_PROGRAMS = test-load$(EXEEXT) subdir = src/fileio DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libfileio_a_AR = $(AR) $(ARFLAGS) libfileio_a_LIBADD = am_libfileio_a_OBJECTS = load.$(OBJEXT) load_AF.$(OBJEXT) \ load_GPF.$(OBJEXT) load_SSS.$(OBJEXT) load_BIN.$(OBJEXT) \ load_HS.$(OBJEXT) load_TAPE.$(OBJEXT) load_BASIC.$(OBJEXT) \ load_BASICODE.$(OBJEXT) load_UNKNOWN.$(OBJEXT) \ save_IMG.$(OBJEXT) save_TAP.$(OBJEXT) save_WAV.$(OBJEXT) \ save_RAW.$(OBJEXT) libfileio_a_OBJECTS = $(am_libfileio_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_kc2img_OBJECTS = kc2img.$(OBJEXT) kc2img_OBJECTS = $(am_kc2img_OBJECTS) am__DEPENDENCIES_1 = kc2img_DEPENDENCIES = libfileio.a $(am__DEPENDENCIES_1) am_kc2raw_OBJECTS = kc2raw.$(OBJEXT) kc2raw_OBJECTS = $(am_kc2raw_OBJECTS) kc2raw_DEPENDENCIES = libfileio.a $(am__DEPENDENCIES_1) am_kc2tap_OBJECTS = kc2tap.$(OBJEXT) kc2tap_OBJECTS = $(am_kc2tap_OBJECTS) kc2tap_DEPENDENCIES = libfileio.a $(am__DEPENDENCIES_1) am_kc2wav_OBJECTS = kc2wav.$(OBJEXT) kc2wav_OBJECTS = $(am_kc2wav_OBJECTS) kc2wav_DEPENDENCIES = libfileio.a $(am__DEPENDENCIES_1) am_test_load_OBJECTS = test_load.$(OBJEXT) test_load_OBJECTS = $(am_test_load_OBJECTS) test_load_DEPENDENCIES = libfileio.a $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libfileio_a_SOURCES) $(kc2img_SOURCES) $(kc2raw_SOURCES) \ $(kc2tap_SOURCES) $(kc2wav_SOURCES) $(test_load_SOURCES) DIST_SOURCES = $(libfileio_a_SOURCES) $(kc2img_SOURCES) \ $(kc2raw_SOURCES) $(kc2tap_SOURCES) $(kc2wav_SOURCES) \ $(test_load_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libfileio.a INCLUDES = \ -I../../include AM_CPPFLAGS = \ -DVERSION=\"$(VERSION)\" \ -DFILEIO_DEBUG libfileio_a_SOURCES = \ load.c \ load_AF.c \ load_GPF.c \ load_SSS.c \ load_BIN.c \ load_HS.c \ load_TAPE.c \ load_BASIC.c \ load_BASICODE.c \ load_UNKNOWN.c \ save_IMG.c \ save_TAP.c \ save_WAV.c \ save_RAW.c kc2img_SOURCES = kc2img.c kc2img_LDADD = libfileio.a $(INTLLIBS) kc2tap_SOURCES = kc2tap.c kc2tap_LDADD = libfileio.a $(INTLLIBS) kc2wav_SOURCES = kc2wav.c kc2wav_LDADD = libfileio.a $(INTLLIBS) kc2raw_SOURCES = kc2raw.c kc2raw_LDADD = libfileio.a $(INTLLIBS) test_load_SOURCES = test_load.c test_load_LDADD = libfileio.a $(INTLLIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/fileio/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/fileio/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libfileio.a: $(libfileio_a_OBJECTS) $(libfileio_a_DEPENDENCIES) -rm -f libfileio.a $(libfileio_a_AR) libfileio.a $(libfileio_a_OBJECTS) $(libfileio_a_LIBADD) $(RANLIB) libfileio.a install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) kc2img$(EXEEXT): $(kc2img_OBJECTS) $(kc2img_DEPENDENCIES) @rm -f kc2img$(EXEEXT) $(LINK) $(kc2img_OBJECTS) $(kc2img_LDADD) $(LIBS) kc2raw$(EXEEXT): $(kc2raw_OBJECTS) $(kc2raw_DEPENDENCIES) @rm -f kc2raw$(EXEEXT) $(LINK) $(kc2raw_OBJECTS) $(kc2raw_LDADD) $(LIBS) kc2tap$(EXEEXT): $(kc2tap_OBJECTS) $(kc2tap_DEPENDENCIES) @rm -f kc2tap$(EXEEXT) $(LINK) $(kc2tap_OBJECTS) $(kc2tap_LDADD) $(LIBS) kc2wav$(EXEEXT): $(kc2wav_OBJECTS) $(kc2wav_DEPENDENCIES) @rm -f kc2wav$(EXEEXT) $(LINK) $(kc2wav_OBJECTS) $(kc2wav_LDADD) $(LIBS) test-load$(EXEEXT): $(test_load_OBJECTS) $(test_load_DEPENDENCIES) @rm -f test-load$(EXEEXT) $(LINK) $(test_load_OBJECTS) $(test_load_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kc2img.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kc2raw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kc2tap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kc2wav.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_AF.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_BASIC.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_BASICODE.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_BIN.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_GPF.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_HS.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_SSS.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_TAPE.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_UNKNOWN.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/save_IMG.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/save_RAW.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/save_TAP.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/save_WAV.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test_load.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-noinstLIBRARIES \ clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS ctags \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binPROGRAMS install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags uninstall uninstall-am uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/util/0000755001050700006200000000000011412404774013755 5ustar glaubitzfbedvKCemu-0.5.1/src/util/tape-basicode.c0000644001050700006200000001673311345001576016631 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "libaudio/libaudio.h" #define STATE_NO_SYNC (0) #define STATE_SYNC (1) #define STATE_BIT (2) #define STATE_BIT_SYNC (3) static int _state; static int _counter; static float _lock = 1e20; static FILE *f = NULL; static char filename[100]; static int filename_idx = 0; static int _verbose = 0; static int _byte_idx; static unsigned char _buf[130]; void new_file(void) { while (242) { snprintf(filename, 100, "output-%04d.img", filename_idx++); if (access(filename, F_OK) != 0) break; if (filename_idx > 9999) { printf("out of filenames!\n"); exit(1); } } if (f != NULL) fclose(f); f = fopen(filename, "wb"); if (f == NULL) { printf("can't write file '%s'\n", filename); exit(1); } printf("writing to file '%s'\n", filename); _lock = 1e20; } void set_state(int state) { if (_verbose > 1) printf("set_state(): %d\n", state); switch (state) { case STATE_NO_SYNC: _byte_idx = 0; memset(_buf, 0, 130); _buf[129] = 0xff; break; case STATE_SYNC: break; case STATE_BIT: break; case STATE_BIT_SYNC: break; } _state = state; } int c(int byte) { return isprint(byte) ? byte : '.'; } void write_byte(int byte) { if (f != NULL) fputc(byte, f); if (_verbose > 0) { if (byte == 0x0d) printf("\n"); else printf("%c", isprint(byte) ? byte : '.'); fflush(stdout); } if (_verbose > 1) printf("BYTE: %02x '%c' (%d)\n", byte, isprint(byte) ? byte : '.', _byte_idx); } void handle_byte(int byte) { static int idx = 0; static int crc = 0; static int state = 0; switch (state) { case 0: if (byte == 0x02) { idx = 1; state = 1; crc = (0x80 ^ byte); write_byte(byte); } break; case 1: idx++; crc ^= (0x80 ^ byte); write_byte(byte); if ((byte == 0x03) && (idx > 2)) state = 2; break; case 2: state = 0; write_byte(byte); if (crc == byte) printf("\nCRC ok.\n"); else printf("\nCRC ERROR: calculated %02x, in file %02x\n", crc, byte); set_state(STATE_NO_SYNC); exit(0); new_file(); return; } set_state(STATE_BIT_SYNC); } void handle_NO_SYNC(float val) { int a; float v, p; static int idx = 0, cnt = 0; static float sum = 0; static float buf[10] = { 0.0, }; v = 0; for (a = 0;a < 10;a++) v += buf[a]; v /= 10; buf[idx++] = val; if (idx >= 10) idx = 0; p = (100.0 * (v - val)) / v; if ((p > 30.0) || (p < -30)) { cnt = 0; sum = 0; } else { cnt++; sum += val; } if (v > 20 * _lock) new_file(); if (_verbose > 1) printf("NO SYNC: %6.2f, %6.2f, %10.2f, %d\n", val, v, p, cnt); if (cnt > 1000) { idx = 0; cnt = 0; for (a = 0;a < 10;a++) buf[a] = 0.0; _lock = sum / 1000; printf("."); fflush(stdout); if (_verbose > 1) printf("LOCK: %.2f\n", _lock); set_state(STATE_SYNC); } #if 0 if ((4 * val) < 80) { for (a = 0;a < (4 * v);a++) printf(" "); printf("#\n"); } #endif } void handle_SYNC(float val) { float p; static int cnt = 0; p = (100.0 * (val - _lock)) / _lock; if (_verbose > 1) printf("SYNC: %6.2f, %6.2f => %6.2f\n", val, _lock, p); if (p > 50.0) { cnt++; } else if (p < -30.0) { set_state(STATE_NO_SYNC); } else { cnt = 0; } if (cnt == 2) { cnt = 0; set_state(STATE_BIT); return; } } void handle_BIT_SYNC(float val) { float p; static int cnt = 0; p = (100.0 * (val - _lock)) / _lock; if (_verbose > 1) printf("BIT SYNC: %6.2f, %6.2f => %6.2f\n", val, _lock, p); if (p > 50) cnt++; if (cnt == 2) { cnt = 0; set_state(STATE_BIT); } } void handle_BIT(float val) { int bit; float p, l; static float sum; static int cnt = 0; static int idx = 0; static int byte = 0; if (cnt == 0) { sum = val; cnt++; return; } else { cnt++; sum += val; } l = 2.0 * _lock; p = (100.0 * (sum - l)) / l; bit = -1; if ((cnt == 2) && (p > 50)) { if (_verbose > 1) printf("BIT 0: %6.2f %6.2f, %6.2f (%d)\n", val, sum, p, idx); cnt = 0; bit = 0; } if (cnt == 4) { if (_verbose > 1) printf("BIT 1: %6.2f %6.2f, %6.2f (%d)\n", val, sum, p, idx); cnt = 0; bit = 1; } if (bit < 0) return; byte >>= 1; byte = (byte & 0x1ff) | (bit << 9); idx++; if (idx == 10) { idx = 0; handle_byte((byte & 0xff) ^ 0x80); if ((byte & 0x300) != 0x300) printf("BYTE ERROR\n"); } } void handle_zero_transition(void) { float c = _counter; // printf("COUNTER: %d\n", _counter); switch (_state) { case STATE_NO_SYNC: handle_NO_SYNC(c); break; case STATE_SYNC: handle_SYNC(c); break; case STATE_BIT: handle_BIT(c); break; case STATE_BIT_SYNC: handle_BIT_SYNC(c); break; } _counter = 0; } void handle_sample(long sample) { #define LENGTH (3) long v; int a, b, c; static int x = -1; static int idx = 0; static long buf[LENGTH] = { 0, }; if (sample < -32000) sample = 32000; if (sample > 32000) sample = 32000; buf[idx] = sample; idx = (idx + 1) % LENGTH; v = 0; for (a = 0;a < LENGTH;a++) v += buf[a]; v /= LENGTH; v = sample; if (_verbose > 2) { b = 0; for (a = 0;a < 78;a++) { c = (v + 32768) / (65536 / 78); if (a == c) { printf("#"); b++; continue; } if (a == (78 / 2)) { printf("|"); b++; continue; } if (b == 2) break; printf(" "); } printf("\n"); } _counter++; if (x < 0) { if (v > 0) { handle_zero_transition(); x = 1; } } else { if (v < 0) { handle_zero_transition(); x = -1; } } } int main(int argc, char **argv) { int a, c, channels; libaudio_prop_t *prop; libaudio_init(LIBAUDIO_TYPE_ALL); new_file(); _counter = 0; set_state(STATE_NO_SYNC); for (a = 1;a < argc;a++) { if (strcmp("-v", argv[a]) == 0) { _verbose++; continue; } prop = libaudio_open(argv[a]); channels = libaudio_get_channels(prop); while (242) { c = libaudio_read_sample(prop); if (c == EOF) break; if (channels == 2) { c += libaudio_read_sample(prop); c /= 2; } handle_sample(c - 32768); } libaudio_close(prop); } return 0; } KCemu-0.5.1/src/util/tape-rename.c0000644001050700006200000000356511345001576016326 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include static int _verbose = 0; void do_rename(const char *filename) { FILE *f; int a, len; unsigned char crc; unsigned char buf[130]; char name[100], type[100]; f = fopen(filename, "rb"); if (f == NULL) return; len = fread(buf, 1, 130, f); if (len != 130) { printf("# i/o error reading first block of file '%s'\n", filename); return; } crc = 0; for (a = 1;a < 129;a++) crc += buf[a]; if (crc != buf[129]) { printf("# crc error: in file %02xh, calculated %02xh\n", buf[129], crc); return; } if (check_file_type(name, type, buf)) printf("mv '%s' '%s' # type = %s\n", filename, name, type); else printf("# can't determine type of file '%s'\n", filename); } int main(int argc, char **argv) { int a; if (argc == 1) { printf("usage: %s file [file ...]\n", argv[0]); exit(1); } for (a = 1;a < argc;a++) { if (strcmp("-v", argv[a]) == 0) { _verbose++; continue; } do_rename(argv[a]); } return 0; } KCemu-0.5.1/src/util/tape-type.c0000644001050700006200000000515111345001576016031 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include int check_file_type(char *name, char *type, unsigned char *buf) { int a; const char *t = NULL; if ((buf[1] == 0xd3) && (buf[2] == 0xd3) && (buf[3] == 0xd3)) { t = "BASIC"; memcpy(name, &buf[4], 8); name[8] = '\0'; } if ((buf[1] == 0xd4) && (buf[2] == 0xd4) && (buf[3] == 0xd4)) { t = "DATA"; memcpy(name, &buf[4], 8); name[8] = '\0'; } if ((buf[1] == 0xd5) && (buf[2] == 0xd5) && (buf[3] == 0xd5)) { t = "LIST"; memcpy(name, &buf[4], 8); name[8] = '\0'; } if ((buf[1] == 0xd7) && (buf[2] == 0xd7) && (buf[3] == 0xd7)) { t = "BASIC*"; memcpy(name, &buf[4], 8); name[8] = '\0'; } if ((buf[9] == 'C') && (buf[10] == 'O') && (buf[11] == 'M')) { t = "COM"; memcpy(name, &buf[1], 8); name[8] = '\0'; } if ((buf[9] == 'A') && (buf[10] == 'S') && (buf[11] == 'M')) { t = "ASM"; memcpy(name, &buf[1], 8); name[8] = '\0'; } if ((buf[9] == 'T') && (buf[10] == 'X') && (buf[11] == 'T')) { t = "TXT"; memcpy(name, &buf[1], 8); name[8] = '\0'; } if ((buf[9] == 'P') && (buf[10] == 'A') && (buf[11] == 'S')) { t = "PAS"; memcpy(name, &buf[1], 8); name[8] = '\0'; } if ((buf[9] == 'S') && (buf[10] == 'C') && (buf[11] == 'R')) { t = "SCR"; memcpy(name, &buf[1], 8); name[8] = '\0'; } if ((buf[9] == '\0') && (buf[10] == '\0') && (buf[11] == '\0')) if (strchr("ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789", buf[1]) != NULL) { t = "(none)"; memcpy(name, &buf[1], 8); name[8] = '\0'; } if (t == NULL) return 0; for (a = 7;(a > 0) && name[a] == ' ';a--) name[a] = '\0'; strcpy(type, t); return 1; } KCemu-0.5.1/src/util/make-font.c0000644001050700006200000000467611345001576016015 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include static unsigned char __font[2048]; int reverse(int byte) { int a, ret; ret = 0; for (a = 0;a < 8;a++) { ret <<= 1; ret |= byte & 1; byte >>= 1; } return ret; } void print_char(int c) { int a; printf("STARTCHAR char%d\n", c); printf("ENCODING %d\n", c); printf("SWIDTH 1000 0\n"); printf("DWIDTH 8 0\n"); printf("BBX 8 8 0 -2\n"); printf("BITMAP\n"); for (a = 0;a < 8;a++) { //printf("%02X\n", reverse(__font[8 * c + a])); printf("%02X\n", __font[8 * c + a]); } printf("ENDCHAR\n"); } int main(int argc, char **argv) { FILE *f; int a, size, b1, b2; size = 8; if (argc < 3) { printf("usage: %s \n", argv[0]); exit(1); } f = fopen(argv[1], "rb"); if (f == NULL) { printf("can't open file `%s'!\n", argv[1]); exit(1); } if (fread(__font, 1, 2048, f) != 2048) { printf("could not read 2048 bytes from font file!\n"); exit(1); } if (argc >= 4) size = atoi(argv[3]); if (size < 8) size = 8; b1 = (size - 8) / 2; b2 = (size - 8) - b1; printf("STARTFONT 2.1\n" "FONT %s\n" "SIZE %d 72 72\n" "FONTBOUNDINGBOX 8 %d 0 -2\n" "STARTPROPERTIES 9\n" "POINT_SIZE 8\n" "PIXEL_SIZE 1\n" "RESOLUTION_X 72\n" "RESOLUTION_Y 72\n" "FONT_ASCENT %d\n" "FONT_DESCENT %d\n" "AVERAGE_WIDTH 8\n" "SPACING \"M\"\n" "DEFAULT_CHAR 32\n" "ENDPROPERTIES\n" "CHARS 256\n", argv[2], size, size, 7 + b1, 1 + b2); for (a = 0;a < 256;a++) print_char(a); printf("ENDFONT\n"); return 0; } KCemu-0.5.1/src/util/disk-tool.c0000644001050700006200000000241611345001576016027 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include void dump_sector(int c, int h, int s) { int a; putchar(c); // acyl putchar(h); // asid putchar(c); // lcyl putchar(h); // lsid putchar(s); // lsec putchar(3); // llen putchar(0); // count low putchar(4); // count high for (a = 0;a < 1024;a++) putchar(0xe5); } int main(void) { int c, h, s; for (c = 0;c < 80;c++) for (h = 0;h < 2;h++) for (s = 1;s < 6;s++) dump_sector(c, h, s); return 0; } KCemu-0.5.1/src/util/dump2img.c0000644001050700006200000000707211345001576015651 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include /* * AnaDisk 2.07 26-Aug-92 * * * DUMP DISKETTE TO A DOS FILE * * Dump provides a facility to read selected areas of a diskette and * write them to a DOS file. The range of cylinders to be "dumped" * to diskette, as well as the side of the diskette may be speci- * fied. This function is not limited to DOS diskettes. * * Each sector written to the file is optionally preceded by an 8- * byte header record of the following form: * * +------+------+------+------+------+------+---------+ * | ACYL | ASID | LCYL | LSID | LSEC | LLEN | COUNT | * +------+------+------+------+------+------+---------+ * * ACYL Actual cylinder, 1 byte * ASID Actual side, 1 byte * LCYL Logical cylinder; cylinder as read, 1 byte * LSID Logical side; or side as read, 1 byte * LSEC Sector number as read, 1 byte * LLEN Length code as read, 1 byte * COUNT Byte count of data to follow, 2 bytes. If zero, * no data is contained in this sector. */ int dump_header(void) { int acyl, asid, lcyl, lsid, lsec, llen, c, count; acyl = getchar(); if (acyl == EOF) return -1; asid = getchar(); if (asid == EOF) return -1; lcyl = getchar(); if (lcyl == EOF) return -1; lsid = getchar(); if (lsid == EOF) return -1; lsec = getchar(); if (lsec == EOF) return -1; llen = getchar(); if (llen == EOF) return -1; c = getchar(); if (c == EOF) return -1; count = c; c = getchar(); if (c == EOF) return -1; count |= (c << 8); fprintf(stderr, "H/C/S: %d/%d/%d\n", lsid, lcyl, lsec); fprintf(stderr, "+------+------+------+------+------+------+-----------+\n"); fprintf(stderr, "| acyl | asid | lcyl | lsid | lsec | llen | count |\n"); fprintf(stderr, "| %3d | %3d | %3d | %3d | %3d | %3d | %9d |\n", acyl, asid, lcyl, lsid, lsec, llen, count); fprintf(stderr, "+------+------+------+------+------+------+-----------+\n"); return count; } int dump_sector(void) { unsigned char buf[16]; int a, b, c, len, blen, ret; len = dump_header(); if (len < 0) return -1; a = 0; ret = 0; while (a < len) { for (b = 0;b < 16;b++) { if ((a + b) >= len) break; c = getchar(); if (c == EOF) { ret = -1; break; } buf[b] = c; blen = b + 1; } for (b = 0;b < 16;b++) if (b < blen) fputc(buf[b], stdout); if (blen != 16) break; a += 16; } return ret; } int main(void) { while (242) { if (dump_sector() < 0) break; } return 0; } KCemu-0.5.1/src/util/Makefile.am0000644001050700006200000000407110552024652016010 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in # bin_PROGRAMS = wav2kc noinst_PROGRAMS = disk-tool tape-tool tape-check tape-check-bc tape-merge tape-test tape-basicode tape-split tape-rename basic-decode make-font tp-type dump2txt dump2img # send_file show-wav ft disp-wav wavtokc audio2kc LIBS= AM_CPPFLAGS = \ -DDEBUG INCLUDES = \ -I../../include `gtk-config --cflags` #wav2kc_SOURCES = \ # wav2kc.c #wavtokc_SOURCES = \ # wavtokc2.c wav2kc.c #wavtokc_LDADD = \ # -lm #audio2kc_SOURCES = \ # audio2kc.c # #audio2kc_LDADD = \ # -laudiofile #send_file_SOURCES = \ # send_file.c #show_wav_SOURCES = \ # show-wav.c #show_wav_LDFLAGS = \ # `gtk-config --libs` #ft_SOURCES = \ # ft.c #ft_LDADD = \ # -lm #disp_wav_SOURCES = \ # disp-wav.c #disp_wav_LDADD = \ # -lncurses disk_tool_SOURCES = \ disk-tool.c tape_tool_SOURCES = \ tape-tool.c tape-type.c tape_tool_LDADD = \ ../libaudio/libaudio.a \ $(SNDFILE_LIBS) \ $(AUDIOFILE_LIBS) \ $(MP3LAME_LIBS) \ $(VORBIS_LIBS) \ $(F_L_A_C_LIBS) tape_test_SOURCES = \ tape-test.c tape_test_LDADD = \ ../libaudio/libaudio.a \ $(SNDFILE_LIBS) \ $(AUDIOFILE_LIBS) \ $(MP3LAME_LIBS) \ $(VORBIS_LIBS) \ $(F_L_A_C_LIBS) tape_basicode_SOURCES = \ tape-basicode.c tape_basicode_LDADD = \ ../libaudio/libaudio.a \ $(SNDFILE_LIBS) \ $(AUDIOFILE_LIBS) \ $(MP3LAME_LIBS) \ $(VORBIS_LIBS) \ $(F_L_A_C_LIBS) tape_split_SOURCES = \ tape-split.c tape_check_SOURCES = \ tape-check.c tape-type.c tape_check_bc_SOURCES = \ tape-check-bc.c tape_merge_SOURCES = \ tape-merge.c basic_decode_SOURCES = \ basic-decode.c basic_decode_LDADD = \ ../fileio/libfileio.a make_font_SOURCES = \ make-font.c make_font_LDADD = \ $(INTLLIBS) tape_rename_SOURCES = \ tape-rename.c tape-type.c tp_type_SOURCES = \ tp-type.c KCemu-0.5.1/src/util/dump2txt.c0000644001050700006200000000732511345001576015715 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include /* * AnaDisk 2.07 26-Aug-92 * * * DUMP DISKETTE TO A DOS FILE * * Dump provides a facility to read selected areas of a diskette and * write them to a DOS file. The range of cylinders to be "dumped" * to diskette, as well as the side of the diskette may be speci- * fied. This function is not limited to DOS diskettes. * * Each sector written to the file is optionally preceded by an 8- * byte header record of the following form: * * +------+------+------+------+------+------+---------+ * | ACYL | ASID | LCYL | LSID | LSEC | LLEN | COUNT | * +------+------+------+------+------+------+---------+ * * ACYL Actual cylinder, 1 byte * ASID Actual side, 1 byte * LCYL Logical cylinder; cylinder as read, 1 byte * LSID Logical side; or side as read, 1 byte * LSEC Sector number as read, 1 byte * LLEN Length code as read, 1 byte * COUNT Byte count of data to follow, 2 bytes. If zero, * no data is contained in this sector. */ int dump_header(void) { int acyl, asid, lcyl, lsid, lsec, llen, c, count; acyl = getchar(); if (acyl == EOF) return -1; asid = getchar(); if (asid == EOF) return -1; lcyl = getchar(); if (lcyl == EOF) return -1; lsid = getchar(); if (lsid == EOF) return -1; lsec = getchar(); if (lsec == EOF) return -1; llen = getchar(); if (llen == EOF) return -1; c = getchar(); if (c == EOF) return -1; count = c; c = getchar(); if (c == EOF) return -1; count |= (c << 8); printf("H/C/S: %d/%d/%d\n", lsid, lcyl, lsec); printf("+------+------+------+------+------+------+-----------+\n"); printf("| acyl | asid | lcyl | lsid | lsec | llen | count |\n"); printf("| %3d | %3d | %3d | %3d | %3d | %3d | %9d |\n", acyl, asid, lcyl, lsid, lsec, llen, count); printf("+------+------+------+------+------+------+-----------+\n"); return count; } int dump_sector(void) { unsigned char buf[16]; int a, b, c, len, blen, ret; len = dump_header(); if (len < 0) return -1; a = 0; ret = 0; while (a < len) { for (b = 0;b < 16;b++) { if ((a + b) >= len) break; c = getchar(); if (c == EOF) { ret = -1; break; } buf[b] = c; blen = b + 1; } printf("%04x: ", a); for (b = 0;b < 16;b++) { if (b < blen) { printf("%02x ", buf[b]); } else { printf(" "); } if (b == 7) printf("- "); } printf(" | "); for (b = 0;b < blen;b++) { printf("%c", (isprint(buf[b])) ? buf[b] : '.'); if (b == 7) printf(" - "); } printf("\n"); if (blen != 16) break; a += 16; } printf("\n"); return ret; } int main(void) { while (242) { if (dump_sector() < 0) break; } return 0; } KCemu-0.5.1/src/util/tape-tool.c0000644001050700006200000002775111345001576016037 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "libaudio/libaudio.h" #define STATE_NO_SYNC (0) #define STATE_SYNC (1) #define STATE_BIT (2) #define STATE_BIT_SYNC (3) static int _state; static int _counter; static float _lock = 1e20; static FILE *f = NULL; static char filename[100]; static int filename_idx = 0; static int _verbose = 0; static int _byte_idx; static unsigned char _buf[130]; void new_file(void) { while (242) { snprintf(filename, 100, "output-%04d.img", filename_idx++); if (access(filename, F_OK) != 0) break; if (filename_idx > 9999) { printf("out of filenames!\n"); exit(1); } } if (f != NULL) fclose(f); f = fopen(filename, "wb"); if (f == NULL) { printf("can't write file '%s'\n", filename); exit(1); } printf("- writing to file '%s'\n", filename); _lock = 1e20; } void set_state(int state) { if (_verbose > 1) printf("set_state(): %d\n", state); switch (state) { case STATE_NO_SYNC: _byte_idx = 0; memset(_buf, 0, 130); _buf[129] = 0xff; break; case STATE_SYNC: break; case STATE_BIT: break; case STATE_BIT_SYNC: break; } _state = state; } void handle_block(void) { int a, b; unsigned char crc; char name[100], type[100]; if (_byte_idx == 0) return; if (f != NULL) { fwrite(_buf, 1, 130, f); fflush(f); } crc = 0; for (a = 1;a < 129;a++) crc += _buf[a]; if ((_buf[0] == 0) || (_buf[0] == 1)) if (check_file_type(name, type, _buf)) printf("*\n* FILE: '%s' [%s]\n*\n", name, type); printf("+ BLOCK: %3d (%02x) [%3d], CRC = %02x / %02x%s%s\n", _buf[0], _buf[0], _byte_idx, _buf[129], crc, (_buf[129] != crc) ? " *** CRC ERROR ***" : "", (_byte_idx != 130) ? " *** INCOMPLETE DATA ***" : ""); if (_verbose > 0) for (a = 0;a < 8;a++) { printf("%02x:", 16 * a); for (b = 0;b < 16;b++) { printf(" %02x", _buf[16 * a + b + 1]); if (b == 7) printf(" "); } printf(" | "); for (b = 0;b < 16;b++) { printf("%c", isprint(_buf[16 * a + b + 1]) ? _buf[16 * a + b + 1] : '.'); if (b == 7) printf(" "); } printf("\n"); } _byte_idx = 0; } void handle_byte(int byte) { if (_verbose > 1) printf("BYTE: %02x '%c' (%d)\n", byte, isprint(byte) ? byte : '.', _byte_idx); _buf[_byte_idx++] = byte; if (_byte_idx == 130) { handle_block(); set_state(STATE_NO_SYNC); } else set_state(STATE_BIT_SYNC); } void handle_NO_SYNC(float val) { int a; float v, p; static int idx = 0, cnt = 0; static float buf[10] = { 0.0, }; v = 0; for (a = 0;a < 10;a++) v += buf[a]; v /= 10; buf[idx++] = val; if (idx >= 10) idx = 0; p = (100.0 * (v - val)) / v; if (p > 25.0) cnt = 0; else if (p < -25.0) cnt = 0; else cnt++; if (v > 20 * _lock) new_file(); if (_verbose > 1) printf("NO SYNC: %6.2f, %6.2f, %10.2f, %d\n", val, v, p, cnt); if (cnt > 100) { idx = 0; cnt = 0; for (a = 0;a < 10;a++) buf[a] = 0.0; _lock = v; if (_verbose > 1) printf("LOCK: %.2f\n", _lock); set_state(STATE_SYNC); } } void handle_SYNC(float val) { float p; static int cnt = 0; p = (100.0 * (val - _lock)) / _lock; if (_verbose > 1) printf("SYNC: %6.2f, %6.2f => %6.2f\n", val, _lock, p); if (p > 30.0) { cnt++; } else if (p < -30.0) { handle_block(); set_state(STATE_NO_SYNC); } else { cnt = 0; } if (cnt == 2) { cnt = 0; set_state(STATE_BIT); return; } } void handle_BIT_SYNC(float val) { float p; static int cnt = 0; p = (100.0 * (val - _lock)) / _lock; if (_verbose > 1) printf("BIT SYNC: %6.2f, %6.2f => %6.2f\n", val, _lock, p); if (p < -30.0) { handle_block(); set_state(STATE_NO_SYNC); return; } if (cnt == 0) { cnt++; } else { cnt = 0; set_state(STATE_BIT); } } void handle_BIT(float val) { int bit; float p, l; static float sum; static int cnt = 0; static int idx = 0; static int byte = 0; if (cnt == 0) { sum = val; cnt++; return; } else { sum += val; cnt = 0; } l = 2.0 * _lock; p = (100.0 * (sum - l)) / l; if (p < -18.0) bit = 0; else if (p > 60.0) bit = -1; // STOP-BIT else bit = 128; if (_verbose > 1) printf("BIT: %6.2f, %6.2f => %3d (%d)\n", sum, p, bit, idx); byte >>= 1; byte = (byte & 0x7f) | (bit & 0x80); idx++; if (idx == 8) { idx = 0; handle_byte(byte); } } void handle_zero_transition(int tics) { static float c = 0; c = tics; switch (_state) { case STATE_NO_SYNC: handle_NO_SYNC(c); break; case STATE_SYNC: handle_SYNC(c); break; case STATE_BIT: handle_BIT(c); break; case STATE_BIT_SYNC: handle_BIT_SYNC(c); break; } } void show_sample(int sample, int fill, const char *text) { int a, b, c; b = 0; for (a = 0;a < 78;a++) { c = (sample + 32768) / (65536 / 78); if (a == c) { printf("#"); b++; continue; } if (a == (78 / 2)) { printf("|"); b++; continue; } if (!fill && (b == 2)) break; printf(" "); } printf(text); } int find_zero_transition(int *buf, int len, int min, int max) { int a; int zero = (min + max) / 2; if (min == 40000) return 0; for (a = 0;a < len;a++) { if ((buf[a] <= zero) && (buf[a + 1] > zero)) return len - a; if ((buf[a] >= zero) && (buf[a + 1] < zero)) return len - a; } return len / 2; } void handle_sample(int sample) { #define LENGTH (3) long v; int a; static int x = -1; static int idx = 0; static long buf[LENGTH] = { 0, }; if (sample < -32000) sample = -32000; if (sample > 32000) sample = 32000; buf[idx] = sample; idx = (idx + 1) % LENGTH; v = 0; for (a = 0;a < LENGTH;a++) v += buf[a]; v /= LENGTH; if (_verbose > 2) show_sample(v, 0, "\n"); _counter++; if (x < 0) { if (v > 0) { handle_zero_transition(_counter); x = 1; _counter = 0; } } else { if (v < 0) { handle_zero_transition(_counter); x = -1; _counter = 0; } } } void handle_sample2(int sample) { #define LEN (1000) int a, z; int tics = -1; static int x = 1; static int idx = 0; static int cnt = 0; static int min = 40000; static int max = -40000; static int counter = 0; static int old_counter = 0; static int buf[LEN]; counter++; for (a = LEN - 1;a > 0;a--) buf[a] = buf[a - 1]; buf[0] = sample; if (_verbose > 2) show_sample(sample, 1, ""); if (_verbose > 1) printf("%8d, %8d, %8d, %8d (%8d) - %d %8d / %8d ", cnt, old_counter, counter, sample, idx, x, min, max); idx++; if (x) { if (sample > max) { cnt = 0; max = sample; } else { cnt++; if ((max - sample) > 20000) { z = find_zero_transition(buf, idx, min, max); tics = 0; if (_verbose > 1) printf("max %d, %d", tics, z); min = 40000; idx = 0; x = 0; } } } else { if (sample < min) { cnt = 0; min = sample; } else { cnt++; if ((sample - min) > 20000) { z = find_zero_transition(buf, idx, min, max); tics = 0; if (_verbose > 1) printf("min %d, %d", tics, z); max = -40000; idx = 0; x = 1; } } } if (_verbose > 1) printf("\n"); //if (tics > 0) //handle_zero_transition(tics); } void fastloader(int counter) { int bit; float v; static int x = 0; static int cnt = 0; static int state = 0; static int crc = 0xff; static int byte = 0; static int byte_cnt = 0; static int lock = 0; static int old_counter = 0; static float sum = 0; static int block = 0; bit = counter >= lock ? : 0; if (bit == 1) { x = 0; if (_verbose > 2) printf(" => %d | %4d | %d", state, counter, bit); } else { if (x == 0) { if (_verbose > 2) printf(" => %d | %4d | ?", state, counter); x = counter; return; } if (_verbose > 2) printf(" => %d | %4d | %d", state, x + counter, bit); x = 0; } switch (state) { case 0: v = (counter - old_counter); v = (100.0 * v) / old_counter; old_counter = counter; if (v < 20) { cnt++; sum += counter; } else { cnt = 0; sum = 0; } if (cnt > 200) { cnt = 0; state = 1; block = 0; lock = (int)((3 * (sum / 200.0)) / 4 + 0.5); printf("LOCK: %.2f => %d\n", sum / 200.0, lock); sum = 0; } break; case 1: if ((cnt > 0) && (bit == 1)) { cnt = 0; state = 0; } else { if (bit == 0) cnt++; } if (cnt == 2) { cnt = 0; byte = 0; state = 2; byte_cnt = 0; } break; case 2: cnt++; byte >>= 1; byte |= (bit == 1) ? 256 : 0; if (cnt == 9) { byte_cnt++; if ((byte_cnt > 1) && (((byte_cnt - 1) % 17) == 0)) { printf("CRC = %02x, calculated: %02x (byte_cnt = %d, block = %d) %s\n", byte / 2, crc, byte_cnt, block, (byte / 2) == crc ? "OK" : "*** ERROR ***"); if (byte_cnt == 137) { block++; if (f != NULL) { fputc((crc + 1) % 0xff, f); fflush(f); } state = 1; crc = 0xff; } } else { if (byte_cnt > 1) crc = (crc + (byte / 2)) & 0xff; if (f != NULL) { fputc((byte / 2) & 0xff, f); fflush(f); } printf(" BYTE %02x (%d)", (byte / 2) & 0xff, byte_cnt); printf(" %c", isprint((byte / 2) & 0xff) ? (byte / 2) & 0xff : '.'); if (byte & 1) printf(" [ERROR]"); printf("\n"); } cnt = 0; byte = 0; } break; } } void handle_sample3(int sample) { int a; float v; static float vv; static int x = -1; static int idx = 0; static long buf[LENGTH] = { 0, }; static int old_sample = 0; //vv += (sample - old_sample); //vv *= 0.8; v = sample; if (v > 30000) v = 30000; if (v < -30000) v = -30000; if (_verbose > 2) { show_sample((int)v, 1, ""); printf("%10.2f", v); } _counter++; if (x < 0) { if (v > 0) { fastloader(_counter); x = 1; _counter = 0; } } else { if (v < 0) { fastloader(_counter); x = -1; _counter = 0; } } old_sample = sample; if (_verbose > 2) printf("\n"); } int main(int argc, char **argv) { int a, c, channels; libaudio_prop_t *prop; libaudio_init(LIBAUDIO_TYPE_ALL); new_file(); _counter = 0; set_state(STATE_NO_SYNC); for (a = 1;a < argc;a++) { if (strcmp("-v", argv[a]) == 0) { _verbose++; continue; } prop = libaudio_open(argv[a]); channels = libaudio_get_channels(prop); while (242) { c = libaudio_read_sample(prop); if (c == EOF) break; if (channels == 2) { c += libaudio_read_sample(prop); c /= 2; } handle_sample(c - 32768); } libaudio_close(prop); } return 0; } KCemu-0.5.1/src/util/tape-check.c0000644001050700006200000000552311345001576016130 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include static int verbose = 0; int check(const char *filename) { int a; int len; int ret; FILE *f; int error; int block = -1; int first = -1; int blocks; int blocks_ok; long offset; unsigned char crc; unsigned char buf[130]; char name[100], type[100]; ret = 1; offset = 0; blocks = 0; blocks_ok = 0; f = fopen(filename, "rb"); if (f == NULL) return 0; printf("\n* checking file '%s'...\n", filename); while (242) { len = fread(buf, 1, 130, f); if (len == 0) break; if (len != 130) { printf(" i/o error\n"); exit(1); } crc = 0; for (a = 1;a < 129;a++) crc += buf[a]; blocks++; if (buf[129] != crc) ret = 0; else blocks_ok++; error = 0; if (block > 0) if ((((block + 1) & 0xff) != buf[0]) && (buf[0] != 0xff)) { ret = 0; error = 1; } block = buf[0]; if ((block == 0) || (block == 1)) if (check_file_type(name, type, buf)) printf("\n FILE: '%s' [%s]\n", name, type); if (first < 0) first = block; if ((buf[129] != crc) || error || verbose) printf(" BLOCK %3d (%02x), CRC = %02x / %02x [%8ld]%s%s\n", block, block, buf[129], crc, offset, (buf[129] != crc) ? " *** CRC ERROR ***" : "", error ? " *** BLOCK ERROR ***" : ""); offset += len; } if (blocks == 0) { printf(" empty file.\n"); } else { printf(" first block: %3d (%02x)\n", first, first); printf(" last block: %3d (%02x)\n", block, block); printf(" %d blocks, %d ok.\n", blocks, blocks_ok); } return ret; } int main(int argc, char **argv) { int a; if (argc == 1) { printf("usage: %s file [file ...]\n", argv[0]); exit(1); } for (a = 1;a < argc;a++) { if (strcmp("-v", argv[a]) == 0) { verbose = 1; continue; } if (check(argv[a])) printf(" all ok.\n"); else printf(" has errors!\n"); } return 0; } KCemu-0.5.1/src/util/tp-type.c0000644001050700006200000000262311345001576015524 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include int main(void) { int c; while (242) { c = fgetc(stdin); if (c == EOF) break; if (c == 0x1a) break; c = c & 0x7f; switch (c) { case 0x02: continue; case 0x05: continue; case 0x11: continue; case 0x12: continue; case 0x19: continue; case 0x1e: continue; case 0x0f: c = '-'; break; case 0x1f: c = '-'; break; case '{': c = '�'; break; case '|': c = '�'; break; case '}': c = '�'; break; case ']': c = '�'; break; case '~': c = '�'; break; } fputc(c, stdout); } return 0; } KCemu-0.5.1/src/util/tape-check-bc.c0000644001050700006200000000356611345001576016517 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include static int verbose = 0; int check(const char *filename) { int c; int crc; int last; int bytes; FILE *f; f = fopen(filename, "rb"); if (f == NULL) return 0; printf("\n* checking file '%s'...\n", filename); crc = 0; last = 0; bytes = 0; while (242) { c = fgetc(f); if (c == EOF) break; bytes++; crc ^= (0x80 ^ last); last = c; if (verbose > 0) printf(" %8d, %02x, %02x\n", bytes, c, crc ^ c); } printf(" %d bytes.\n", bytes); if (crc == last) printf(" CRC (%02x) ok.\n", crc); else printf(" CRC ERROR: file crc is %02x, calculated %02x!\n", last, crc); return crc == last; } int main(int argc, char **argv) { int a; if (argc == 1) { printf("usage: %s file [file ...]\n", argv[0]); exit(1); } for (a = 1;a < argc;a++) { if (strcmp("-v", argv[a]) == 0) { verbose = 1; continue; } if (check(argv[a])) printf(" all ok.\n"); else printf(" has errors!\n"); } return 0; } KCemu-0.5.1/src/util/basic-decode.c0000644001050700006200000001614611345001576016431 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include static int _binary = 0; static int _verbose = 0; static struct token { int val; const char *text; } token[] = { { 0x80, "END" }, { 0x81, "FOR" }, { 0x82, "NEXT" }, { 0x83, "DATA" }, { 0x84, "INPUT" }, { 0x85, "DIM" }, { 0x86, "READ" }, { 0x87, "LET" }, { 0x88, "GOTO" }, { 0x89, "RUN" }, { 0x8a, "IF" }, { 0x8b, "RESTORE" }, { 0x8c, "GOSUB" }, { 0x8d, "RETURN" }, { 0x8e, "REM" }, { 0x8f, "STOP" }, { 0x90, "OUT" }, { 0x91, "ON" }, { 0x92, "NULL" }, { 0x93, "WAIT" }, { 0x94, "DEF" }, { 0x95, "POKE" }, { 0x96, "DOKE" }, { 0x97, "AUTO" }, { 0x98, "LINES" }, { 0x99, "CLS" }, { 0x9a, "WIDTH" }, { 0x9b, "BYE" }, { 0x9c, "!" }, { 0x9d, "CALL" }, { 0x9e, "PRINT" }, { 0x9f, "CONT" }, { 0xa0, "LIST" }, { 0xa1, "CLEAR" }, { 0xa2, "CLOAD" }, { 0xa3, "CSAVE" }, { 0xa4, "NEW" }, { 0xa5, "TAB(" }, { 0xa6, "TO" }, { 0xa7, "FN" }, { 0xa8, "SPC(" }, { 0xa9, "THEN" }, { 0xaa, "NOT" }, { 0xab, "STEP" }, { 0xac, "+" }, { 0xad, "-" }, { 0xae, "*" }, { 0xaf, "/" }, { 0xb0, "^" }, { 0xb1, "AND" }, { 0xb2, "OR" }, { 0xb3, ">" }, { 0xb4, "=" }, { 0xb5, "<" }, { 0xb6, "SGN" }, { 0xb7, "INT" }, { 0xb8, "ABS" }, { 0xb9, "USR" }, { 0xba, "FRE" }, { 0xbb, "INP" }, { 0xbc, "POS" }, { 0xbd, "SQR" }, { 0xbe, "RND" }, { 0xbf, "LN" }, { 0xc0, "EXP" }, { 0xc1, "COS" }, { 0xc2, "SIN" }, { 0xc3, "TAN" }, { 0xc4, "ATN" }, { 0xc5, "PEEK" }, { 0xc6, "DEEK" }, { 0xc7, "PI" }, { 0xc8, "LEN" }, { 0xc9, "STR$" }, { 0xca, "VAL" }, { 0xcb, "ASC" }, { 0xcc, "CHR$" }, { 0xcd, "LEFT$" }, { 0xce, "RIGHT$" }, { 0xcf, "MID$" }, { 0xd0, "LOAD" }, { 0xd1, "TRON" }, { 0xd2, "TROFF" }, { 0xd3, "EDIT" }, { 0xd4, "ELSE" }, { 0xd5, "INKEY$" }, { 0xd6, "JOYST" }, { 0xd7, "STRING$" }, { 0xd8, "INSTR" }, { 0xd9, "RENUM" }, { 0xda, "DELETE" }, { 0xdb, "PAUSE" }, { 0xdc, "BEEP" }, { 0xdd, "WINDOW" }, { 0xde, "BORDER" }, { 0xdf, "INK" }, { 0xe0, "PAPER" }, { 0xe1, "AT" }, { 0xe2, "PSET" }, { 0xe3, "LINE" }, { 0xe4, "CIRCLE" }, { 0xe5, "!" }, { 0xe6, "PAINT" }, { 0xe7, "LABEL" }, { 0xe8, "SIZE" }, { 0xe9, "ZERO" }, { 0xea, "HOME" }, { 0xeb, "!" }, { 0xec, "GCLS" }, { 0xed, "SCALE" }, { 0xee, "SCREEN" }, { 0xef, "POINT" }, { 0xf0, "XPOS" }, { 0xf1, "!" }, { 0xf2, "YPOS" }, { 0x00, NULL } }; typedef struct decode_state { int state; int size; int addr; int last; int len; int lineno; unsigned char *line; char *text; int cnt; } decode_state_t; static decode_state_t decode_state; const char * decode_token(int byte) { int a; static char buf[5]; for (a = 0;token[a].val != 0;a++) if (token[a].val == byte) return token[a].text; //fprintf(stderr, "can't decode token %02x\n", byte); snprintf(buf, 5, "[%02x]", byte); return buf; } void print_line(decode_state_t *s) { if (s->last != 0) if (s->last != (s->addr - s->len - 5)) fprintf(stderr, "decode error, address calculation error\n"); if (_verbose > 1) printf("[%04xh-%04xh] : %5d %s\n", s->addr - s->len - 5, s->addr - 1, s->lineno, s->text); else printf("%5d %s\n", s->lineno, s->text); s->last = s->addr; } void decode_byte(int byte) { char *ptr; decode_state_t *s = &decode_state; if (byte == EOF) { if (s->state == 8) { if (_verbose > 0) printf("%d bytes after basic end\n", s->cnt); } else { fprintf(stderr, "decode error, reached EOF\n"); } return; } switch (s->state) { case 0: s->cnt = 0; s->last = 0; s->size = byte; s->state++; break; case 1: s->size += 256 * byte; s->state++; break; case 2: s->addr = byte; s->state++; break; case 3: s->addr += 256 * byte; s->state++; if (s->addr == 0) s->state = 8; break; case 4: s->lineno = byte; s->state++; break; case 5: s->lineno += 256 * byte; s->state++; s->len = 0; s->line = (unsigned char *)malloc(160); s->text = (char *)malloc(1000); s->text[0] = '\0'; break; case 6: if (byte == 0) { s->state = 2; print_line(s); } else { s->line[s->len++] = byte; if (byte & 0x80) strcat(s->text, decode_token(byte)); else { ptr = strrchr(s->text, '\0'); ptr[0] = isprint(byte) ? byte : (_binary ? byte : '.'); ptr[1] = '\0'; ptr++; } if (byte == '"') s->state = 7; } break; case 7: if (byte == 0) { s->state = 2; print_line(s); } else { s->line[s->len++] = byte; ptr = strrchr(s->text, '\0'); ptr[0] = isprint(byte) ? byte : (_binary ? byte : '.'); ptr[1] = '\0'; ptr++; if (byte == '"') s->state = 6; } break; case 8: s->cnt++; break; } } void decode(fileio_prop_t *prop) { int a; int size; unsigned char *d = prop->data; if ((prop->type != FILEIO_TYPE_BAS) && (prop->type != FILEIO_TYPE_PROT_BAS)) { printf("file '%s' is not a basic file.\n", prop->name); return; } size = prop->size; if (_verbose > 0) { printf("======================\n"); printf("filename : '%s'\n", prop->name); printf("file size : %d\n", size); printf("basic size: %d\n", 256 * d[13] + d[12]); printf("----------------------\n\n"); } a = 12; decode_state.state = 0; while (a <= size) { decode_byte(d[a++]); if ((a % 129) == 0) a++; } decode_byte(EOF); if (_verbose > 0) printf("======================\n\n"); } int main(int argc, char **argv) { int a; fileio_prop_t *prop; fileio_init(); for (a = 1;a < argc;a++) { if (strcmp("-1", argv[a]) == 0) { fileio_set_kctype(FILEIO_KC85_1); continue; } if (strcmp("-3", argv[a]) == 0) { fileio_set_kctype(FILEIO_KC85_3); continue; } if (strcmp("-a", argv[a]) == 0) { _binary = 0; continue; } if (strcmp("-b", argv[a]) == 0) { _binary = 1; continue; } if (strcmp("-v", argv[a]) == 0) { _verbose++; continue; } if (fileio_load_file(argv[a], &prop) == 0) decode(prop); } return 0; } KCemu-0.5.1/src/util/tape-split.c0000644001050700006200000000371411345001576016206 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include static int verbose = 0; void split(const char *filename) { int a; int len; FILE *f, *f2; unsigned char crc; unsigned char buf[130]; char fbuf[1000]; f = fopen(filename, "rb"); if (f == NULL) return; printf("\n* splitting file '%s'...\n", filename); while (242) { len = fread(buf, 1, 130, f); if (len == 0) break; if (len != 130) { printf(" i/o error\n"); exit(1); } crc = 0; for (a = 1;a < 129;a++) crc += buf[a]; if (buf[129] != crc) continue; snprintf(fbuf, 1000, "%04d_%s", buf[0], filename); printf(" BLOCK %3d (%02x), CRC = %02x => %s\n", buf[0], buf[0], buf[129], fbuf); f2 = fopen(fbuf, "wb"); if (f2 != NULL) { fwrite(buf, 1, 130, f2); fclose(f2); } } fclose(f); } int main(int argc, char **argv) { int a; if (argc == 1) { printf("usage: %s file [file ...]\n", argv[0]); exit(1); } for (a = 1;a < argc;a++) { if (strcmp("-v", argv[a]) == 0) { verbose = 1; continue; } split(argv[a]); } return 0; } KCemu-0.5.1/src/util/tape-test.c0000644001050700006200000000344711345001576016035 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "libaudio/libaudio.h" static long _x = 0; static long buf[40]; static long diff[40]; void x() { int a, z; static int zz = 0; static float val = 0; z = 0; for (a = 1;a < 10;a++) { z += diff[20 - a]; z += diff[20 + a]; } val += z - zz; val *= .8; printf("%ld %ld %.2f\n", _x++, 0, val); } void handle_sample2(long sample) { int a; for (a = 1;a < 40;a++) buf[a - 1] = buf[a]; buf[39] = sample; for (a = 1;a < 40;a++) diff[a - 1] = buf[a] - buf[a - 1]; x(); } int main(int argc, char **argv) { int a, c, channels; libaudio_prop_t *prop; libaudio_init(LIBAUDIO_TYPE_ALL); for (a = 1;a < argc;a++) { prop = libaudio_open(argv[a]); while (242) { c = libaudio_read_sample(prop); if (c == EOF) break; handle_sample2(c - 32768); } libaudio_close(prop); } return 0; } KCemu-0.5.1/src/util/tape-merge.c0000644001050700006200000000522411345001576016150 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include typedef struct data { FILE *f; const char *filename; unsigned char buf[130]; struct data *next; } data_t; static FILE *out = NULL; static data_t *data = NULL; int check(const unsigned char *buf) { int a; unsigned char crc; crc = 0; for (a = 1;a < 129;a++) crc += buf[a]; if (crc == buf[129]) return 1; return 0; } int read_block(void) { int len; int block; int written; data_t *ptr; block = -1; written = 0; for (ptr = data;ptr != NULL;ptr = ptr->next) { len = fread(ptr->buf, 1, 130, ptr->f); if (len == 0) return 1; if (len != 130) { printf("i/o error\n"); exit(1); } if (block < 0) { block = ptr->buf[0]; printf("BLOCK %3d (%02x) ", block, block); } if (block != ptr->buf[0]) { printf("block %d not found in file %s\n", block, ptr->filename); exit(1); } if (!written && check(ptr->buf)) { printf("%s", ptr->filename); written = 1; fwrite(ptr->buf, 1, 130, out); } } if (!written) { printf("no block found with valid crc, using file %s", data->filename); fwrite(data->buf, 1, 130, out); } printf("\n"); return 0; } int main(int argc, char **argv) { int a; data_t *ptr; if (argc < 3) { printf("usage: %s output file [file ...]\n", argv[0]); exit(1); } if (access(argv[1], F_OK) == 0) { printf("output file already exists, abort.\n"); exit(1); } out = fopen(argv[1], "wb"); if (out == NULL) exit(1); for (a = 2;a < argc;a++) { ptr = (data_t *)malloc(sizeof(data_t)); if (ptr == NULL) exit(1); ptr->f = fopen(argv[a], "rb"); ptr->filename = argv[a]; ptr->next = data; data = ptr; } while (!read_block()); return 0; } KCemu-0.5.1/src/util/Makefile.in0000644001050700006200000005734711412404774016042 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # bin_PROGRAMS = wav2kc VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ noinst_PROGRAMS = disk-tool$(EXEEXT) tape-tool$(EXEEXT) \ tape-check$(EXEEXT) tape-check-bc$(EXEEXT) tape-merge$(EXEEXT) \ tape-test$(EXEEXT) tape-basicode$(EXEEXT) tape-split$(EXEEXT) \ tape-rename$(EXEEXT) basic-decode$(EXEEXT) make-font$(EXEEXT) \ tp-type$(EXEEXT) dump2txt$(EXEEXT) dump2img$(EXEEXT) subdir = src/util DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am_basic_decode_OBJECTS = basic-decode.$(OBJEXT) basic_decode_OBJECTS = $(am_basic_decode_OBJECTS) basic_decode_DEPENDENCIES = ../fileio/libfileio.a am_disk_tool_OBJECTS = disk-tool.$(OBJEXT) disk_tool_OBJECTS = $(am_disk_tool_OBJECTS) disk_tool_LDADD = $(LDADD) dump2img_SOURCES = dump2img.c dump2img_OBJECTS = dump2img.$(OBJEXT) dump2img_LDADD = $(LDADD) dump2txt_SOURCES = dump2txt.c dump2txt_OBJECTS = dump2txt.$(OBJEXT) dump2txt_LDADD = $(LDADD) am_make_font_OBJECTS = make-font.$(OBJEXT) make_font_OBJECTS = $(am_make_font_OBJECTS) am__DEPENDENCIES_1 = make_font_DEPENDENCIES = $(am__DEPENDENCIES_1) am_tape_basicode_OBJECTS = tape-basicode.$(OBJEXT) tape_basicode_OBJECTS = $(am_tape_basicode_OBJECTS) tape_basicode_DEPENDENCIES = ../libaudio/libaudio.a \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_tape_check_OBJECTS = tape-check.$(OBJEXT) tape-type.$(OBJEXT) tape_check_OBJECTS = $(am_tape_check_OBJECTS) tape_check_LDADD = $(LDADD) am_tape_check_bc_OBJECTS = tape-check-bc.$(OBJEXT) tape_check_bc_OBJECTS = $(am_tape_check_bc_OBJECTS) tape_check_bc_LDADD = $(LDADD) am_tape_merge_OBJECTS = tape-merge.$(OBJEXT) tape_merge_OBJECTS = $(am_tape_merge_OBJECTS) tape_merge_LDADD = $(LDADD) am_tape_rename_OBJECTS = tape-rename.$(OBJEXT) tape-type.$(OBJEXT) tape_rename_OBJECTS = $(am_tape_rename_OBJECTS) tape_rename_LDADD = $(LDADD) am_tape_split_OBJECTS = tape-split.$(OBJEXT) tape_split_OBJECTS = $(am_tape_split_OBJECTS) tape_split_LDADD = $(LDADD) am_tape_test_OBJECTS = tape-test.$(OBJEXT) tape_test_OBJECTS = $(am_tape_test_OBJECTS) tape_test_DEPENDENCIES = ../libaudio/libaudio.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_tape_tool_OBJECTS = tape-tool.$(OBJEXT) tape-type.$(OBJEXT) tape_tool_OBJECTS = $(am_tape_tool_OBJECTS) tape_tool_DEPENDENCIES = ../libaudio/libaudio.a $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) am_tp_type_OBJECTS = tp-type.$(OBJEXT) tp_type_OBJECTS = $(am_tp_type_OBJECTS) tp_type_LDADD = $(LDADD) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(basic_decode_SOURCES) $(disk_tool_SOURCES) dump2img.c \ dump2txt.c $(make_font_SOURCES) $(tape_basicode_SOURCES) \ $(tape_check_SOURCES) $(tape_check_bc_SOURCES) \ $(tape_merge_SOURCES) $(tape_rename_SOURCES) \ $(tape_split_SOURCES) $(tape_test_SOURCES) \ $(tape_tool_SOURCES) $(tp_type_SOURCES) DIST_SOURCES = $(basic_decode_SOURCES) $(disk_tool_SOURCES) dump2img.c \ dump2txt.c $(make_font_SOURCES) $(tape_basicode_SOURCES) \ $(tape_check_SOURCES) $(tape_check_bc_SOURCES) \ $(tape_merge_SOURCES) $(tape_rename_SOURCES) \ $(tape_split_SOURCES) $(tape_test_SOURCES) \ $(tape_tool_SOURCES) $(tp_type_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ # send_file show-wav ft disp-wav wavtokc audio2kc LIBS = LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AM_CPPFLAGS = \ -DDEBUG INCLUDES = \ -I../../include #wav2kc_SOURCES = \ # wav2kc.c #wavtokc_SOURCES = \ # wavtokc2.c wav2kc.c #wavtokc_LDADD = \ # -lm #audio2kc_SOURCES = \ # audio2kc.c # #audio2kc_LDADD = \ # -laudiofile #send_file_SOURCES = \ # send_file.c #show_wav_SOURCES = \ # show-wav.c #show_wav_LDFLAGS = \ # `gtk-config --libs` #ft_SOURCES = \ # ft.c #ft_LDADD = \ # -lm #disp_wav_SOURCES = \ # disp-wav.c #disp_wav_LDADD = \ # -lncurses disk_tool_SOURCES = \ disk-tool.c tape_tool_SOURCES = \ tape-tool.c tape-type.c tape_tool_LDADD = \ ../libaudio/libaudio.a \ $(SNDFILE_LIBS) \ $(AUDIOFILE_LIBS) \ $(MP3LAME_LIBS) \ $(VORBIS_LIBS) \ $(F_L_A_C_LIBS) tape_test_SOURCES = \ tape-test.c tape_test_LDADD = \ ../libaudio/libaudio.a \ $(SNDFILE_LIBS) \ $(AUDIOFILE_LIBS) \ $(MP3LAME_LIBS) \ $(VORBIS_LIBS) \ $(F_L_A_C_LIBS) tape_basicode_SOURCES = \ tape-basicode.c tape_basicode_LDADD = \ ../libaudio/libaudio.a \ $(SNDFILE_LIBS) \ $(AUDIOFILE_LIBS) \ $(MP3LAME_LIBS) \ $(VORBIS_LIBS) \ $(F_L_A_C_LIBS) tape_split_SOURCES = \ tape-split.c tape_check_SOURCES = \ tape-check.c tape-type.c tape_check_bc_SOURCES = \ tape-check-bc.c tape_merge_SOURCES = \ tape-merge.c basic_decode_SOURCES = \ basic-decode.c basic_decode_LDADD = \ ../fileio/libfileio.a make_font_SOURCES = \ make-font.c make_font_LDADD = \ $(INTLLIBS) tape_rename_SOURCES = \ tape-rename.c tape-type.c tp_type_SOURCES = \ tp-type.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/util/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/util/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) basic-decode$(EXEEXT): $(basic_decode_OBJECTS) $(basic_decode_DEPENDENCIES) @rm -f basic-decode$(EXEEXT) $(LINK) $(basic_decode_OBJECTS) $(basic_decode_LDADD) $(LIBS) disk-tool$(EXEEXT): $(disk_tool_OBJECTS) $(disk_tool_DEPENDENCIES) @rm -f disk-tool$(EXEEXT) $(LINK) $(disk_tool_OBJECTS) $(disk_tool_LDADD) $(LIBS) dump2img$(EXEEXT): $(dump2img_OBJECTS) $(dump2img_DEPENDENCIES) @rm -f dump2img$(EXEEXT) $(LINK) $(dump2img_OBJECTS) $(dump2img_LDADD) $(LIBS) dump2txt$(EXEEXT): $(dump2txt_OBJECTS) $(dump2txt_DEPENDENCIES) @rm -f dump2txt$(EXEEXT) $(LINK) $(dump2txt_OBJECTS) $(dump2txt_LDADD) $(LIBS) make-font$(EXEEXT): $(make_font_OBJECTS) $(make_font_DEPENDENCIES) @rm -f make-font$(EXEEXT) $(LINK) $(make_font_OBJECTS) $(make_font_LDADD) $(LIBS) tape-basicode$(EXEEXT): $(tape_basicode_OBJECTS) $(tape_basicode_DEPENDENCIES) @rm -f tape-basicode$(EXEEXT) $(LINK) $(tape_basicode_OBJECTS) $(tape_basicode_LDADD) $(LIBS) tape-check$(EXEEXT): $(tape_check_OBJECTS) $(tape_check_DEPENDENCIES) @rm -f tape-check$(EXEEXT) $(LINK) $(tape_check_OBJECTS) $(tape_check_LDADD) $(LIBS) tape-check-bc$(EXEEXT): $(tape_check_bc_OBJECTS) $(tape_check_bc_DEPENDENCIES) @rm -f tape-check-bc$(EXEEXT) $(LINK) $(tape_check_bc_OBJECTS) $(tape_check_bc_LDADD) $(LIBS) tape-merge$(EXEEXT): $(tape_merge_OBJECTS) $(tape_merge_DEPENDENCIES) @rm -f tape-merge$(EXEEXT) $(LINK) $(tape_merge_OBJECTS) $(tape_merge_LDADD) $(LIBS) tape-rename$(EXEEXT): $(tape_rename_OBJECTS) $(tape_rename_DEPENDENCIES) @rm -f tape-rename$(EXEEXT) $(LINK) $(tape_rename_OBJECTS) $(tape_rename_LDADD) $(LIBS) tape-split$(EXEEXT): $(tape_split_OBJECTS) $(tape_split_DEPENDENCIES) @rm -f tape-split$(EXEEXT) $(LINK) $(tape_split_OBJECTS) $(tape_split_LDADD) $(LIBS) tape-test$(EXEEXT): $(tape_test_OBJECTS) $(tape_test_DEPENDENCIES) @rm -f tape-test$(EXEEXT) $(LINK) $(tape_test_OBJECTS) $(tape_test_LDADD) $(LIBS) tape-tool$(EXEEXT): $(tape_tool_OBJECTS) $(tape_tool_DEPENDENCIES) @rm -f tape-tool$(EXEEXT) $(LINK) $(tape_tool_OBJECTS) $(tape_tool_LDADD) $(LIBS) tp-type$(EXEEXT): $(tp_type_OBJECTS) $(tp_type_DEPENDENCIES) @rm -f tp-type$(EXEEXT) $(LINK) $(tp_type_OBJECTS) $(tp_type_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic-decode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disk-tool.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dump2img.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dump2txt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/make-font.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tape-basicode.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tape-check-bc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tape-check.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tape-merge.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tape-rename.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tape-split.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tape-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tape-tool.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tape-type.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tp-type.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstPROGRAMS ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am `gtk-config --cflags` # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/kc/0000755001050700006200000000000011412404772013373 5ustar glaubitzfbedvKCemu-0.5.1/src/kc/gide.cc0000644001050700006200000004400711345001576014617 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/gide.h" #include "sys/sysdep.h" #include "libdbg/dbg.h" using namespace std; /* * Information taken from IDE-TCJ.txt and GIDE.txt, written * by Tilmann Reh. * * (see http://www.gaby.de/gide/ for the orignal GIDE interface and * http://www.iee.et.tu-dresden.de/~kc-club/gide/gide.html for the * description of the KC Club version) * */ GIDE::GIDE(void) { _cylinder = 0; _sector = 0; _head = 0; _drive = 0; _sector_count = 1; _rtc_register = 0; // the classical Seagate ST-157A _hard_disk_config[0].nr_of_cylinders = 560; _hard_disk_config[0].nr_of_heads = 6; _hard_disk_config[0].nr_of_sectors = 26; _hard_disk_config[0].name = "KCemu virtual hard disk (ST-157A)"; _hard_disk_config[0].filename = Preferences::instance()->get_string_value("hard_disk_1", NULL); // MyZ80 hard disk format _hard_disk_config[1].nr_of_cylinders = 512; _hard_disk_config[1].nr_of_heads = 1; _hard_disk_config[1].nr_of_sectors = 32; _hard_disk_config[1].name = "KCemu virtual hard disk (MyZ80)"; _hard_disk_config[1].filename = Preferences::instance()->get_string_value("hard_disk_2", NULL); DBG(2, form("KCemu/GIDE/image", "GIDE::GIDE(): hard disk 1: (C/H/S) = (%d/%d/%d) -> '%s'\n", _hard_disk_config[0].nr_of_cylinders, _hard_disk_config[0].nr_of_heads, _hard_disk_config[0].nr_of_sectors, _hard_disk_config[0].filename)); DBG(2, form("KCemu/GIDE/image", "GIDE::GIDE(): hard disk 2: (C/H/S) = (%d/%d/%d) -> '%s'\n", _hard_disk_config[1].nr_of_cylinders, _hard_disk_config[1].nr_of_heads, _hard_disk_config[1].nr_of_sectors, _hard_disk_config[1].filename)); _error = 0; set_status(GIDE_STATUS_ALL, GIDE_STATUS_READY | GIDE_STATUS_SEEK_COMPLETE | GIDE_STATUS_DATA_REQUEST); } GIDE::~GIDE(void) { } void GIDE::set_drive_id_word(byte_t *buf, int val) { buf[0] = val & 0xff; buf[1] = (val >> 8) & 0xff; } void GIDE::set_drive_id_string(byte_t *buf, int maxlen, const char *str) { int idx = -1; do { idx++; if (((idx & 1) == 0) && (str[idx] == 0)) break; buf[idx] = str[idx ^ 1]; } while ((idx < maxlen) && (str[idx] != 0)); } void GIDE::set_drive_id(void) { memset(_sector_buffer, 0, 512); set_drive_id_word(&_sector_buffer[0x00], 0x0101); // configuration word set_drive_id_word(&_sector_buffer[0x02], _hard_disk_config[_drive].nr_of_cylinders); set_drive_id_word(&_sector_buffer[0x06], _hard_disk_config[_drive].nr_of_heads); set_drive_id_word(&_sector_buffer[0x0c], _hard_disk_config[_drive].nr_of_sectors); set_drive_id_word(&_sector_buffer[0x09], 0x4000); // nr of unformatted bytes per physical track set_drive_id_word(&_sector_buffer[0x0a], 0x0200); // nr of unformatted bytes per sector set_drive_id_string(&_sector_buffer[0x14], 20, KCEMU_VERSION); set_drive_id_string(&_sector_buffer[0x2e], 8, "KCemu"); set_drive_id_string(&_sector_buffer[0x36], 40, _hard_disk_config[_drive].name); } bool GIDE::seek(FILE *file, int cylinder, int head, int sector) { int offset = 0x0100; // MyZ80 compatible offset int heads = _hard_disk_config[_drive].nr_of_heads; int sectors = _hard_disk_config[_drive].nr_of_sectors; offset += (_sector - 1) * 512; offset += _head * sectors * 512; offset += _cylinder * heads * sectors * 512; return fseek(file, offset, SEEK_SET) == 0; } void GIDE::set_status(byte_t mask, byte_t val) { byte_t status = (_status & ~mask) | val; DBG(2, form("KCemu/GIDE/status", "GIDE::set_status(): mask = %02xh, val = %02xh [%02xh -> %02xh]\n", mask, val, _status, status)); _status = status; } /* * Occupied I/O addresses: * * x4 reserved for IDE expansion board * x5 RTC access * x6 IDE alternate status / digital output register * x7 IDE drive address register * x8 IDE data register * x9 IDE error/feature register * xA IDE sector count register * xB IDE sector number register * xC IDE cylinder low register * xD IDE cylinder high register * xE IDE drive/head register * xF IDE command/status register * * Wherein "x" represents the base address selected by J1. A plugged-on * jumper sets the according address bit to zero, while removing a jumper * sets it to a one. It should be noted that addresses x0 to x3 are not * used at all - there will be no conflicts if any other I/O devices use * these four addresses. * * * The sixteen RTC registers are accessed by 16-bit I/O instructions, * using the following addressing scheme: * * y0x5 seconds, units * y1x5 seconds, tens * y2x5 minutes, units * y3x5 minutes, tens * y4x5 hours, units * y5x5 hours, tens & AM/PM flag * y6x5 day, units * y7x5 day, tens * y8x5 month, units * y9x5 month, tens * yAx5 year, units * yBx5 year, tens * yCx5 day of week * yDx5 control register D (status/control) * yEx5 control register E (pulse output control) * yFx5 control register F (master control) * * Wherein "x" represents the jumper selectable base address, and "y" is * a "don't care". Each RTC register consists of 4 bits only, so the * highermost four data bits are ignored during RTC writes and undefined * during RTC reads. * * * NOTE: on KC85/4 "x" must be 0 * * * IDE-Registers: * * /CS0 /CS1 A2 A1 A0 Addr. Read Function Write Function * ---------------------------------------------------------------------- * 0 1 0 0 0 1F0 Data Register Data Register * 0 1 0 0 1 1F1 Error Register (Write Precomp Reg.) * 0 1 0 1 0 1F2 Sector Count Sector Count * 0 1 0 1 1 1F3 Sector Number Sector Number * 0 1 1 0 0 1F4 Cylinder Low Cylinder Low * 0 1 1 0 1 1F5 Cylinder High Cylinder High * 0 1 1 1 0 1F6 SDH Register SDH Register * 0 1 1 1 1 1F7 Status Register Command Register * 1 0 1 1 0 3F6 Alternate Status Digital Output * 1 0 1 1 1 3F7 Drive Address Not Used * */ byte_t GIDE::in(word_t addr) { byte_t val = 0xff; switch (addr & 0x0f) { case 0x05: val = in_rtc(addr); break; case 0x08: val = in_data(); break; case 0x09: val = in_error(); break; case 0x0a: val = in_sector_count(); break; case 0x0b: val = in_sector_number(); break; case 0x0c: val = in_cylinder_low(); break; case 0x0d: val = in_cylinder_high(); break; case 0x0e: val = in_drive_head(); break; case 0x0f: val = in_status(); break; default: break; } DBG(2, form("KCemu/GIDE/in", "GIDE::in(): addr = %04x, val = %02x\n", addr, val)); return val; } void GIDE::out(word_t addr, byte_t val) { DBG(2, form("KCemu/GIDE/out", "GIDE::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 0x0f) { case 0x05: out_rtc(addr, val); break; case 0x06: out_digital_output(val); break; case 0x08: out_data(val); break; case 0x0a: out_sector_count(val); break; case 0x0b: out_sector_number(val); break; case 0x0c: out_cylinder_low(val); break; case 0x0d: out_cylinder_high(val); break; case 0x0e: out_drive_head(val); break; case 0x0f: out_command(val); break; default: break; } } byte_t GIDE::in_data(void) { static int x = 0; byte_t val = 0; val = _sector_buffer[x & 0x1ff]; DBG(2, form("KCemu/GIDE/in", "GIDE::in(): DATA READ %02xh [%c] (%3d)\n", val, isprint(val) ? val : '.', x)); x++; if (x == 512) { x = 0; set_status(GIDE_STATUS_DATA_REQUEST, 0); } return val; } byte_t GIDE::in_error(void) { return _error; } byte_t GIDE::in_sector_count() { DBG(2, form("KCemu/GIDE/in_sector_count", "GIDE::in(): SECTOR COUNT %02xh (%d)\n", _sector_count, _sector_count)); return _sector_count; } byte_t GIDE::in_sector_number() { DBG(2, form("KCemu/GIDE/in_sector_number", "GIDE::in(): SECTOR NUMBER %02xh (%d)\n", _sector, _sector)); return _sector; } byte_t GIDE::in_cylinder_low() { DBG(2, form("KCemu/GIDE/in_cylinder_low", "GIDE::in(): CYLINDER LOW %02xh (%04xh / %d)\n", _cylinder & 0xff, _cylinder, _cylinder)); return _cylinder & 0xff; } byte_t GIDE::in_cylinder_high() { DBG(2, form("KCemu/GIDE/in_cylinder_high", "GIDE::in(): CYLINDER LOW %02xh (%04xh / %d)\n", (_cylinder >> 8) & 0xff, _cylinder, _cylinder)); return (_cylinder >> 8) & 0xff; } byte_t GIDE::in_drive_head() { byte_t val = (_drive << 4) | _head; DBG(2, form("KCemu/GIDE/in_drive_head", "GIDE::out(): DRIVE/HEAD %02xh\n" "GIDE::out(): Extension Bit: %d\n" "GIDE::out(): Sector Size: %d\n" "GIDE::out(): Drive: %d\n" "GIDE::out(): Head: %d\n", val, (val >> 7) & 1, // fixed, do not append CRC (val >> 6) & 3, // fixed, 512 bytes (val >> 4) & 1, (val ) & 15)); return val; } /* * The read-only status register contains eight single-bit * flags. It is updated at the completion of each command. If * the busy bit is active, no other bits are valid. The index * bit is valid independent of the applied command. The bit * flags are: * * Bit 7: Busy flag. When this flag is set, the task file * registers must not be accessed due to internal * operations. * Bit 6: Drive ready. This bit is set when the drive is up * to speed and ready to accept a command. When * there is an error, this bit is not updated until * the next read of the status register, so it can be * used to determine the cause of the error. * Bit 5: Drive write fault. Similar to "drive ready", this * bit is not updated after an error. * Bit 4: Drive seek complete. This bit is set when the * actuator of the drive's head is on track. This * bit also is updated similarly to "drive ready". * Bit 3: Data request. This bit indicates that the drive * is ready for a data transfer. * Bit 2: Corrected data flag. Set when there was a * correctable data error and the data has been * corrected. * Bit 1: Index. This bit is active once per disk * revolution. May be used to determine rotational * speed. * Bit 0: Error flag. This bit is set whenever an error * occurs. The other bits in the status register and * the bits in the error register will then contain * further information about the cause of the error. * */ byte_t GIDE::in_status(void) { return _status; } void GIDE::out_data(byte_t val) { static int x = 0; FILE *file; _sector_buffer[x & 0x1ff] = val; DBG(2, form("KCemu/GIDE/out_data", "GIDE::out(): DATA WRITE %02xh [%c] (%3d)\n", val, isprint(val) ? val : '.', x)); x++; if (x == 512) { x = 0; set_status(GIDE_STATUS_DATA_REQUEST, 0); file = fopen(_hard_disk_config[_drive].filename, "rb+"); if (file == NULL) file = fopen(_hard_disk_config[_drive].filename, "wb+"); if (file != NULL) { if (seek(file, _cylinder, _head, _sector)) fwrite(_sector_buffer, 1, 512, file); fclose(file); } } } void GIDE::out_digital_output(byte_t val) { DBG(2, form("KCemu/GIDE/out_digital_output", "GIDE::out(): DIGITAL OUTPUT %02xh: reset: %d, interrupt enable: %d\n", val, (val > 2) & 1, (val > 1) & 1)); } void GIDE::out_command(byte_t val) { bool ok; FILE *file; switch (val) { case 0x20: DBG(2, form("KCemu/GIDE/out_command", "GIDE::out(): %02xh: READ SECTORS WITH RETRY\n", val)); set_status(GIDE_STATUS_DATA_REQUEST, GIDE_STATUS_DATA_REQUEST); ok = false; memset(_sector_buffer, 0, 512); file = fopen(_hard_disk_config[_drive].filename, "rb"); if (file != NULL) { if (seek(file, _cylinder, _head, _sector)) if (fread(_sector_buffer, 1, 512, file) == 512) ok = true; fclose(file); } if (!ok) memset(_sector_buffer, 0xe5, 512); break; case 0x30: DBG(2, form("KCemu/GIDE/out_command", "GIDE::out(): %02xh: WRITE SECTORS\n", val)); set_status(GIDE_STATUS_DATA_REQUEST, GIDE_STATUS_DATA_REQUEST); break; case 0x90: DBG(2, form("KCemu/GIDE/out_command", "GIDE::out(): %02xh: EXECUTE DIAGNOSTICS\n", val)); if (_hard_disk_config[1].filename == NULL) _error = 0x81; // no error for first hd, no slave else _error = 0x01; // no error, slave present break; case 0x91: DBG(2, form("KCemu/GIDE/out_command", "GIDE::out(): %02xh: SET DRIVE PARAMETERS\n", val)); break; case 0xe1: DBG(2, form("KCemu/GIDE/out_command", "GIDE::out(): %02xh: SET IDLE MODE\n", val)); break; case 0xec: DBG(2, form("KCemu/GIDE/out_command", "GIDE::out(): %02xh: IDENTIFY DRIVE\n", val)); _error = 0x00; set_status(GIDE_STATUS_DATA_REQUEST, GIDE_STATUS_DATA_REQUEST); set_drive_id(); break; } } void GIDE::out_sector_count(byte_t val) { _sector_count = val; DBG(2, form("KCemu/GIDE/out_sector_count", "GIDE::out(): SECTOR COUNT %02xh (%d)\n", val, val)); } void GIDE::out_sector_number(byte_t val) { _sector = val; DBG(2, form("KCemu/GIDE/out_sector_number", "GIDE::out(): SECTOR NUMBER %02xh (%d)\n", val, val)); } void GIDE::out_cylinder_low(byte_t val) { _cylinder = (_cylinder & 0xff00) | val; DBG(2, form("KCemu/GIDE/out_cylinder_low", "GIDE::out(): CYLINDER LOW %02xh (%04xh / %d)\n", val, _cylinder, _cylinder)); } void GIDE::out_cylinder_high(byte_t val) { _cylinder = (_cylinder & 0x00ff) | (val << 8); DBG(2, form("KCemu/GIDE/out_cylinder_high", "GIDE::out(): CYLINDER HIGH %02xh (%04xh / %d)\n", val, _cylinder, _cylinder)); } /* * The SDH register is a special register serving several * functions. SDH is an abbreviation for "Sector size, Drive * and Head". The bits of this register are arranged as * follows: * * Bit 7: Historical: Extension Bit. When zero, CRC data is * appended to the sector's data fields. When set to * one, no CRC data is appended. Since today's * drives always use ECC error correction, this bit * must always be set (no CRC). * Bit 6-5: Sector Size. Since today's drives always have 512- * byte sectors (unchangeable by the user) because * PCs are not able to support other sizes, these * bits must always be 0-1. * Bit 4: Drive. This bit distinguishes between the two * connected drives when using the master-slave * chain. Single drives are always accessed with the * drive bit set to zero. * Bit 3-0: Head number. These four bits contain the head * number (that is, the disk surface number) for all * following accesses. Similar to the cylinder and * sector number, these bits are updated by the * drive. The head number field is also used for * drive initialization to specify the number of * heads. */ void GIDE::out_drive_head(byte_t val) { DBG(2, form("KCemu/GIDE/out_drive_head", "GIDE::out(): DRIVE/HEAD %02xh\n" "GIDE::out(): Extension Bit: %d\n" "GIDE::out(): Sector Size: %d\n" "GIDE::out(): Drive: %d\n" "GIDE::out(): Head: %d\n", val, (val >> 7) & 1, (val >> 6) & 3, (val >> 4) & 1, (val ) & 15)); _head = val & 15; _drive = (val >> 4) & 1; } byte_t GIDE::in_rtc(word_t addr) { byte_t val = 0xff; int year, month, day, hour, minute, second; sys_localtime(&year, &month, &day, &hour, &minute, &second); switch ((addr >> 8) & 0x0f) { case 0x00: val = second % 10; break; case 0x01: val = second / 10; break; case 0x02: val = minute % 10; break; case 0x03: val = minute / 10; break; case 0x04: val = hour % 10; break; case 0x05: val = hour / 10; break; case 0x06: val = day % 10; break; case 0x07: val = day / 10; break; case 0x08: val = month % 10; break; case 0x09: val = month / 10; break; case 0x0a: val = year % 10; break; case 0x0b: val = (year / 10) % 10; break; case 0x0c: // day of the week val = 0x00; break; case 0x0d: // control D val = 0x00; break; case 0x0e: // control E val = 0x00; break; case 0x0f: // control F val = GIDE_RTC_REG_F_12_24; break; } DBG(2, form("KCemu/GIDE/RTC/in", "GIDE::in_rtc(): addr = %04x, val = %02x\n", addr, val)); return val; } void GIDE::out_rtc(word_t addr, byte_t val) { DBG(2, form("KCemu/GIDE/RTC/out", "GIDE::out_rtc(): addr = %04x, val = %02x\n", addr, val)); _rtc_register = val; } KCemu-0.5.1/src/kc/mod_512k.cc0000644001050700006200000000256711345001576015235 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/mod_512k.h" Module512k::Module512k(Module512k &tmpl) : ModuleSegmentedMemory(tmpl) { } Module512k::Module512k(const char *name, byte_t id) : ModuleSegmentedMemory(name, id, 32, 0x4000) { } Module512k::~Module512k(void) { } int Module512k::get_segment_index(word_t addr, byte_t val) { return (val >> 2) & 0x1f; } word_t Module512k::get_base_address(word_t addr, byte_t val) { return (val & 0x80) ? 0x8000 : 0x4000; } ModuleInterface * Module512k::clone(void) { return new Module512k(*this); } KCemu-0.5.1/src/kc/mod_auto.cc0000644001050700006200000000342511345001576015515 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/mod_auto.h" #include "libdbg/dbg.h" using namespace std; ModuleAutoStart::ModuleAutoStart(ModuleAutoStart &tmpl) : ModuleROM(tmpl) { } ModuleAutoStart::ModuleAutoStart(byte_t *rom, const char *name, dword_t size, byte_t id) : ModuleROM(rom, name, size, id) { } ModuleAutoStart::~ModuleAutoStart(void) { } word_t ModuleAutoStart::get_addr(byte_t val) { return (val & 0xe0) << 8; } dword_t ModuleAutoStart::get_size(byte_t val) { return PAGE_SIZE; } byte_t * ModuleAutoStart::get_rom_ptr(byte_t val) { dword_t page = (val >> 2) & 0x07; DBG(2, form("KCemu/ModuleAutoStart/page", "ModuleAutoStart: val = %02xh, page = %d, size = %04xh (PAGE_SIZE = %04xh)\n", val, page, _size, PAGE_SIZE)); if ((page * PAGE_SIZE) > _size) return NULL; return _rom + (page * PAGE_SIZE); } ModuleInterface * ModuleAutoStart::clone(void) { return new ModuleAutoStart(*this); } KCemu-0.5.1/src/kc/pio2.cc0000644001050700006200000001051411345001576014554 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/pio2.h" #include "kc/tape.h" #include "kc/memory2.h" #include "libdbg/dbg.h" #define memory ((Memory2 *)memory) PIO2::PIO2(void) { _irq[A] = _irq[B] = 0; _value[A] = _value[B] = 0; _irq_vector[A] = _irq_vector[B] = 0; _ready[A] = _ready[B] = 1; _strobe[A] = _strobe[B] = 0; _irq_enable[A] = _irq_enable[B] = 0; _irq_active[A] = _irq_active[B] = 0; } PIO2::~PIO2(void) { } byte_t PIO2::in(word_t addr) { DBG(2, form("KCemu/PIO/2/in", "PIO2::in(): addr = %04x\n", addr)); switch (addr & 3) { case 0: return in_A_DATA(); case 1: return in_B_DATA(); case 2: return in_A_CTRL(); case 3: return in_B_CTRL(); } return 0; // shouldn't be reached } void PIO2::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/2/out", "PIO2::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } void PIO2::change_A(byte_t changed, byte_t val) { if (changed & 0x01) { DBG(2, form("KCemu/PIO/2/change/A", "PIO A: CAOS ROM E [%d]\n", (val & 1))); memory->enableCAOS(val & 0x01); } if (changed & 0x02) { DBG(2, form("KCemu/PIO/2/change/A", "PIO A: RAM 0 [%d]\n", ((val >> 1) & 1))); memory->enableRAM(val & 0x02); } if (changed & 0x04) { DBG(2, form("KCemu/PIO/2/change/A", "PIO A: IRM [%d]\n", ((val >> 2) & 1))); memory->enableIRM(val & 0x04); } if (changed & 0x08) { DBG(2, form("KCemu/PIO/2/change/A", "PIO A: write protect RAM 0 [%d]\n", ((val >> 3) & 1))); memory->protectRAM(val & 0x08); } if (changed & 0x10) { DBG(2, form("KCemu/PIO/2/change/A", "PIO A: K OUT (unused) [%d]\n", ((val >> 4) & 1))); } if (changed & 0x20) { DBG(2, form("KCemu/PIO/2/change/A", "PIO A: LED [%d]\n", ((val >> 5) & 1))); } if (changed & 0x40) { DBG(2, form("KCemu/PIO/2/change/A", "PIO A: TAPE Power [%d]\n", ((val >> 6) & 1))); tape->power((val >> 6) & 1); } } void PIO2::change_B(byte_t changed, byte_t val) { if (changed & 0x01) { DBG(2, form("KCemu/PIO/2/change/B", "PIO B: flip-flop [%d]\n", (val & 1))); } if (changed & 0x0e) { DBG(2, form("KCemu/PIO/2/change/B", "PIO B: volume [%d]\n", ((val >> 1) & 7))); } if (changed & 0x10) { DBG(2, form("KCemu/PIO/2/change/B", "PIO B: unused 0x10 [%d]\n", ((val >> 4) & 1))); } if (changed & 0x20) { DBG(2, form("KCemu/PIO/2/change/B", "PIO B: RAM 8 [%d]\n", ((val >> 5) & 1))); } if (changed & 0x40) { DBG(2, form("KCemu/PIO/2/change/B", "PIO B: RAM 8 write protect [%d]\n", ((val >> 6) & 1))); } if (changed & 0x80) { DBG(2, form("KCemu/PIO/2/change/B", "PIO B: foreground blink [%d]\n", ((val >> 6) & 1))); } } void PIO2::tape_callback(byte_t val) { strobe_A(); } KCemu-0.5.1/src/kc/ctc_dio.cc0000644001050700006200000000512611345001576015312 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/ctc_dio.h" #include "libdbg/dbg.h" CTC_DIO::CTC_DIO(void) { } CTC_DIO::~CTC_DIO(void) { } byte_t CTC_DIO::in(word_t addr) { DBG(2, form("KCemu/CTC/DIO/in", "CTC_DIO::in(): addr = %04x\n", addr)); switch (addr & 3) { case 0: return c_in(0); case 1: return c_in(1); case 2: return c_in(2); case 3: return c_in(3); } return 0; // shouldn't be reached } void CTC_DIO::out(word_t addr, byte_t val) { DBG(2, form("KCemu/CTC/DIO/out", "CTC_DIO::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: c_out(0, val); break; case 1: c_out(1, val); break; case 2: c_out(2, val); break; case 3: c_out(3, val); break; } } bool CTC_DIO::irq_0(void) { DBG(2, form("KCemu/CTC_DIO/irq/0", "CTC::irq_0()\n")); trigger(1); return true; } bool CTC_DIO::irq_1(void) { DBG(2, form("KCemu/CTC_DIO/irq/1", "CTC::irq_1()\n")); return true; } bool CTC_DIO::irq_2(void) { DBG(2, form("KCemu/CTC_DIO/irq/2", "CTC::irq_2()\n")); return true; } bool CTC_DIO::irq_3(void) { DBG(2, form("KCemu/CTC_DIO/irq/3", "CTC::irq_3()\n")); return true; } long CTC_DIO::counter_value_0(void) { return 0; } long CTC_DIO::counter_value_1(void) { return 0; } long CTC_DIO::counter_value_2(void) { return 0; } long CTC_DIO::counter_value_3(void) { return 0; } void CTC_DIO::trigger_irq(int channel) { CTC_Base::trigger_irq(channel); } void CTC_DIO::add_callback(unsigned long long offset, Callback *cb, void *data) { CTC_Base::add_callback(offset, cb, data); } KCemu-0.5.1/src/kc/mod_64k.cc0000644001050700006200000000522711345001576015153 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/kc.h" #include "kc/mod_64k.h" Module64k::Module64k(Module64k &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _val = 0; _group[0] = NULL; _group[1] = NULL; _group[2] = NULL; _group[3] = NULL; _ram = new byte_t[RAM_SIZE]; if (_ram) { memset(_ram, 0, RAM_SIZE); set_valid(true); } } Module64k::Module64k(const char *name, byte_t id) : ModuleInterface(name, id, KC_MODULE_KC_85_3) { int a; _val = 0; _ram = new byte_t[RAM_SIZE]; if (_ram) { for (a = 0;a < SEGMENTS;a++) _group[a] = NULL; memset(_ram, 0, RAM_SIZE); set_valid(true); } } Module64k::~Module64k(void) { int a; for (a = 0;a < SEGMENTS;a++) if (_group[a]) memory->unregister_memory(_group[a]); delete[] _ram; } void Module64k::m_out(word_t addr, byte_t val) { int a; word_t mem; char buf[100]; if (((_val & 0xc3) ^ (val & 0xc3)) == 0) return; for (a = 0;a < SEGMENTS;a++) if (_group[a]) { memory->unregister_memory(_group[a]); _group[a] = 0; } if (val & 3) { mem = (val & 0xc0) << 8; for (a = 0;a < SEGMENTS;a++) { sprintf(buf, "%s (%d)", get_name(), a); _group[a] = memory->register_memory(buf, mem, SEGMENT_SIZE, &_ram[a * SEGMENT_SIZE], (addr >> 8), (val & 2) == 0); mem = (mem + SEGMENT_SIZE) & (RAM_SIZE - 1); } } _val = val; } ModuleInterface * Module64k::clone(void) { return new Module64k(*this); } void Module64k::reset(bool power_on) { if (power_on) Memory::scratch_mem(_ram, RAM_SIZE); } KCemu-0.5.1/src/kc/disk_io.cc0000644001050700006200000000601111345001576015321 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/disk_io.h" #include "libdbg/dbg.h" FloppyIO::FloppyIO(void) { _bit[0] = _bit[1] = _bit[2] = _bit[3] = 0; } FloppyIO::~FloppyIO(void) { } /* * BIT 7 6 5 4 3 2 1 0 * | | | | * | | | - Freigabe des Prozessors * | | --- Setzen des Prozessors in Dauer-RESET * | ----- Ausgabe RESET-Impuls * ------- Ausgabe NMI-Impuls */ byte_t FloppyIO::in(word_t addr) { byte_t val = _val; DBG(2, form("KCemu/FloppyIO/in", "FloppyIO::in(): addr = %04x, val = %02x\n", addr, val)); return val; } void FloppyIO::out(word_t addr, byte_t val) { int a; DBG(2, form("KCemu/FloppyIO/out", "FloppyIO::out(): addr = %04x, val = %02x\n", addr, val)); for (a = 0;a < 3;a++) { if (val & (1 << a)) { _bit[a] = true; /* * Hmm, the manual says activation is done after a 1/0 * transition but this doen't really works :-( */ activate(a); } else { _bit[a] = false; } } _val = val; } void FloppyIO::activate(int bit_nr) { switch (bit_nr) { case 0: DBG(2, form("KCemu/FloppyIO/activate", "FloppyIO::activate(): bit = %d, start processor\n", bit_nr)); z80->start_floppy_cpu(); break; case 1: DBG(2, form("KCemu/FloppyIO/activate", "FloppyIO::activate(): bit = %d, halt processor\n", bit_nr)); z80->halt_floppy_cpu(false); break; case 2: DBG(2, form("KCemu/FloppyIO/activate", "FloppyIO::activate(): bit = %d, trigger RESET\n", bit_nr)); break; case 3: DBG(2, form("KCemu/FloppyIO/activate", "FloppyIO::activate(): bit = %d, trigger NMI\n", bit_nr)); break; default: DBG(0, form("KCemu/warning", "FloppyIO::activate(): bit = %d ???\n", bit_nr)); break; } } KCemu-0.5.1/src/kc/c80/0000755001050700006200000000000011412404772013765 5ustar glaubitzfbedvKCemu-0.5.1/src/kc/c80/memory.cc0000644001050700006200000000527011345001576015610 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/types.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/c80/memory.h" using namespace std; MemoryC80::MemoryC80(void) : Memory() { load_rom(SystemROM::ROM_KEY_SYSTEM, &_rom_monitor); if (!load_rom(SystemROM::ROM_KEY_USER, &_rom_user)) memset(_rom_user, 0xff, 0x400); memory_group_t mem[] = { { &_m_scr, "-", 0x0000, 0x10000, 0, 256, 0, 1, -1 }, { &_m_rom_monitor, "Monitor", 0x0000, 0x0400, &_rom_monitor[0], 1, 1, 1, -1 }, { &_m_rom_user, "User ROM", 0x0400, 0x0400, &_rom_user[0], 1, 1, 1, -1 }, { &_m_ram_mirror, "RAM (mirror)", 0x0800, 0x0400, &_ram[0], 1, 0, 1, -1 }, { &_m_ram, "RAM", 0x0c00, 0x0400, &_ram[0], 1, 0, 1, -1 }, { 0, }, }; init_memory_groups(mem); reset(true); z80->register_ic(this); } MemoryC80::~MemoryC80(void) { z80->unregister_ic(this); delete _m_scr; delete _m_rom_monitor; delete _m_rom_user; delete _m_ram_mirror; delete _m_ram; } byte_t MemoryC80::memRead8(word_t addr) { return _memrptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK]; } void MemoryC80::memWrite8(word_t addr, byte_t val) { _memwptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK] = val; } byte_t * MemoryC80::get_irm(void) { return 0; } byte_t * MemoryC80::get_char_rom(void) { return 0; } void MemoryC80::reset(bool power_on) { if (!power_on) return; scratch_mem(&_ram[0], 0x0400); } void MemoryC80::dumpCore(void) { ofstream os; os.open("core.z80"); cerr << "Memory: dumping core..." << endl; if (!os) { cerr << "Memory: can't write 'core.z80'" << endl; return; } for (int a = 0;a < 0x10000;a++) os.put(memRead8(a)); os.close(); cerr << "Memory: done." << endl; } KCemu-0.5.1/src/kc/c80/display.cc0000644001050700006200000000503211345001576015741 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/c80/display.h" #include "libdbg/dbg.h" DisplayC80::DisplayC80(void) { _idx = 0; _reset = true; for (int a = 0;a < C80_NR_OF_LEDS;a++) _led_value[a] = 0; } DisplayC80::~DisplayC80(void) { } byte_t DisplayC80::get_led_value(int idx) { return _led_value[idx]; } void DisplayC80::callback(void *data) { long idx = (long)data; DBG(2, form("KCemu/DisplayC80/callback", "DisplayC80::callback(): idx = %d\n", idx)); if ((idx > 0) && (idx < 9)) { _led_value[idx - 1] = pio->in_B_DATA(); DBG(2, form("KCemu/DisplayC80/callback", "DisplayC80::callback(): LED: [%d] %02x %02x %02x %02x - %02x %02x %02x %02x\n", idx - 1, _led_value[7], _led_value[6], _led_value[5], _led_value[4], _led_value[3], _led_value[2], _led_value[1], _led_value[0])); } pio->set_A_EXT(0x10, 0x10); } int DisplayC80::callback_A_in(void) { return -1; } int DisplayC80::callback_B_in(void) { return -1; } void DisplayC80::callback_A_out(byte_t val) { int a5 = (val >> 5) & 1; DBG(2, form("KCemu/DisplayC80/out_A", "DisplayC80::out_A(): val = %02x, A5 = %d\n", val, a5)); if (a5) { _idx = 0; _reset = true; } else { _reset = false; } } void DisplayC80::callback_B_out(byte_t val) { DBG(2, form("KCemu/DisplayC80/out_B", "DisplayC80::out_B(): val = %02x, idx = %d, reset = %d\n", val, _idx, _reset)); if (_reset) return; _idx++; z80->addCallback(C80_DISPLAY_CB_OFFSET, this, (void *)_idx); pio->set_A_EXT(0x10, 0x00); pio->strobe_B(); } KCemu-0.5.1/src/kc/c80/pio.cc0000644001050700006200000000631511345001576015070 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/c80/pio.h" #include "libdbg/dbg.h" PIOC80_1::PIOC80_1(void) { } PIOC80_1::~PIOC80_1(void) { } byte_t PIOC80_1::in(word_t addr) { byte_t val = 0xff; static byte_t last_key = 0x07; switch (addr & 3) { case 0: val = in_A_DATA(); if (last_key != (val & 0x07)) { DBG(2, form("KCemu/PIO/c80/in_key", "PIOC80_1::in(): addr = %04x, val = %02x, [ %d : %d : %d ]\n", addr, val, (val & 4) >> 2, (val & 2) >> 1, val & 1)); last_key = val & 0x07; } break; case 1: val = in_B_DATA(); break; case 2: val = in_A_CTRL(); break; case 3: val = in_B_CTRL(); break; } DBG(2, form("KCemu/PIO/c80/in", "PIOC80_1::in(): addr = %04x, val = %02x\n", addr, val)); return val; } void PIOC80_1::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/c80/out", "PIOC80_1::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } void PIOC80_1::change_A(byte_t changed, byte_t val) { } void PIOC80_1::change_B(byte_t changed, byte_t val) { } PIOC80_2::PIOC80_2(void) { } PIOC80_2::~PIOC80_2(void) { } byte_t PIOC80_2::in(word_t addr) { byte_t val = 0xff; switch (addr & 3) { case 0: val = in_A_DATA(); break; case 1: val = in_B_DATA(); break; case 2: val = in_A_CTRL(); break; case 3: val = in_B_CTRL(); break; } DBG(2, form("KCemu/PIO/c80/in", "PIOC80_2::in(): addr = %04x, val = %02x\n", addr, val)); return val; } void PIOC80_2::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/c80/out", "PIOC80_2::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } void PIOC80_2::change_A(byte_t changed, byte_t val) { } void PIOC80_2::change_B(byte_t changed, byte_t val) { } KCemu-0.5.1/src/kc/c80/Makefile.am0000644001050700006200000000027611131675406016030 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in noinst_LIBRARIES = libc80.a INCLUDES = -I../../../include libc80_a_SOURCES = \ pio.cc \ memory.cc \ display.cc \ keyboard.cc KCemu-0.5.1/src/kc/c80/keyboard.cc0000644001050700006200000000446511345001576016105 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/z80.h" #include "kc/keys.h" #include "kc/c80/keydef.h" #include "kc/c80/keyboard.h" #include "cmd/cmd.h" #include "libdbg/dbg.h" KeyboardC80::KeyboardC80(void) { init(); z80->register_ic(this); } KeyboardC80::~KeyboardC80(void) { z80->unregister_ic(this); } void KeyboardC80::init(void) { _key = 0; } int KeyboardC80::decode_key(int keysym, bool press) { return __keys[keysym]; } void KeyboardC80::keyPressed(int keysym, int keycode) { if (_key != 0) return; _key = decode_key(keysym, true); DBG(2, form("KCemu/keyboard/c80/key_press", "##### Keyboard: keyPressed [%03x/%02x] {%02x}\n", keysym, keycode, _key)); } void KeyboardC80::keyReleased(int keysym, int keycode) { DBG(2, form("KCemu/keyboard/c80/key_released", "##### Keyboard: keyReleased [%03x/%02x] {%02x}\n", keysym, keycode, _key)); _key = 0; if (keysym == 0x1b) CMD_EXEC("emu-reset"); } void KeyboardC80::replayString(const char *text) { } void KeyboardC80::callback(void *data) { } void KeyboardC80::reset(bool power_on) { init(); } void KeyboardC80::reti(void) { } int KeyboardC80::callback_A_in(void) { if (_key == 0) return -1; int col = ~pio->in_B_DATA(); if (col & (_key & 0xff)) pio->set_A_EXT(0x07, (~(_key >> 8)) & 0x07); else pio->set_A_EXT(0x07, 0x07); return -1; } int KeyboardC80::callback_B_in(void) { return -1; } KCemu-0.5.1/src/kc/c80/Makefile.in0000644001050700006200000004105211412404772016034 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/kc/c80 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libc80_a_AR = $(AR) $(ARFLAGS) libc80_a_LIBADD = am_libc80_a_OBJECTS = pio.$(OBJEXT) memory.$(OBJEXT) display.$(OBJEXT) \ keyboard.$(OBJEXT) libc80_a_OBJECTS = $(am_libc80_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(libc80_a_SOURCES) DIST_SOURCES = $(libc80_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libc80.a INCLUDES = -I../../../include libc80_a_SOURCES = \ pio.cc \ memory.cc \ display.cc \ keyboard.cc all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/kc/c80/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/kc/c80/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libc80.a: $(libc80_a_OBJECTS) $(libc80_a_DEPENDENCIES) -rm -f libc80.a $(libc80_a_AR) libc80.a $(libc80_a_OBJECTS) $(libc80_a_LIBADD) $(RANLIB) libc80.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/display.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyboard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/kc/pio_vdip.cc0000644001050700006200000000556711345001576015530 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/vdip.h" #include "kc/pio_vdip.h" #include "libdbg/dbg.h" PIO_VDIP::PIO_VDIP(void) { _data_out = 0xff; } PIO_VDIP::~PIO_VDIP(void) { } byte_t PIO_VDIP::in(word_t addr) { byte_t val = 0xff; switch (addr & 3) { case 0: val = vdip->read_byte(); break; case 1: val = in_B_DATA(); break; case 2: val = in_A_CTRL(); break; case 3: val = in_B_CTRL(); break; } DBG(2, form("KCemu/PIO/VDIP/in", "PIO_VDIP::in(): %04xh: addr = %04x, val = %02x\n", z80->getPC(), addr, val)); return val; } void PIO_VDIP::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/VDIP/out", "PIO_VDIP::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: _data_out = val; DBG(2, form("KCemu/PIO/VDIP/data_out", "PIO_VDIP::out(): addr = %04x, val = %02x ('%c')\n", addr, val, isprint(val) ? val : '.')); out_A_DATA(val); break; case 1: DBG(2, form("KCemu/PIO/VDIP/ctrl_out", "PIO_VDIP::out(): addr = %04x, val = %02x, RXF# = %d, TXE# = %d, RD# = %d, WR# = %d, RESET = %d\n", addr, val, val & 1, (val >> 1) & 1, (val >> 2) & 1, (val >> 3) & 1, (val >> 6) & 1)); out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } void PIO_VDIP::change_A(byte_t changed, byte_t val) { } void PIO_VDIP::change_B(byte_t changed, byte_t val) { if (changed & 0x04) { if (val & 0x04) vdip->read_end(); // RD# L->H else vdip->latch_byte(); // RD# H->L } if (changed & 0x08) { if (val & 0x08) vdip->write_byte(_data_out); // WR# L->H else vdip->write_end(); // WR# H->L } // if ((changed & 0x40) && (val & 0x40)) // RESET H->L // { // vdip->reset(); // } } KCemu-0.5.1/src/kc/gdc.cc0000644001050700006200000003677411345001576014460 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/gdc.h" #include "libdbg/dbg.h" using namespace std; GDC::GDC(void) : InterfaceCircuit("VIS") { reset(true); z80->register_ic(this); } GDC::~GDC(void) { z80->unregister_ic(this); } byte_t GDC::in(word_t addr) { byte_t val = 0xff; switch (addr & 0x01) { case 0x00: /* * status register * * bit 0 (0x01): 0 not ready, 1 ready ? [17a1h] * bit 1 (0x02): 0 ready, 1 not ready ? [1fa7h] * bit 2 (0x04): 0 not ready, 1 ready ? [1797h] * bit 5 (0x20): 1 while vertical retrace */ val = _control; break; case 0x01: if ((_cmd & 0xe4) == 0xa0) { if ((_ridx & 1) == 0) val = _mem[_ptr]; else { val = _col[_ptr]; _ptr = (_ptr + 1) & 0xffff; } //printf("RDAT: %4d, ptr = %04x, val = %02x\n", _ridx, _ptr, val); } else if (_cmd == 0xe0) { switch (_ridx) { case 0: val = _ptr & 0xff; break; case 1: val = (_ptr >> 8) & 0xff; break; default: val = 0; break; } //printf("CURD: %4d, ptr = %04x, val = %02x\n", _ridx, _ptr, val); } else val = _mem[_ptr]; _ridx++; DBG(2, form("KCemu/GDC/in_data", "GDC::in(): %04xh cmd = %02x, val = %02x\n", addr, _cmd, val)); default: break; } DBG(2, form("KCemu/GDC/in", "GDC::in(): %04xh val = %02x\n", addr, val)); return val; } void GDC::out(word_t addr, byte_t val) { switch (addr & 0x01) { case 0x00: _arg[_idx++] = val; break; case 0x01: info(); _idx = 0; _ridx = 0; _cmd = val; break; } DBG(2, form("KCemu/GDC/out", "GDC::out(): %04xh: %04xh val = %02x [%c]\n", z80->getPC(), addr, val, isprint(val) ? val : '.')); if (_cmd == 0x00) // RESET _screen_on = 0; if ((_cmd & 0xfe) == 0x0e) // SYNC _screen_on = _cmd & 1; if ((_cmd & 0xfe) == 0x6e) // VSYNC ; if ((_cmd == 0x4b) && (_idx == 3)) // CCHAR { _nr_of_lines = _arg[0] & 0x1f; _cursor_top = _arg[1] & 0x1f; _cursor_bottom = (_arg[2] & 0xf8) >> 3; } if (_cmd == 0x6b) // START ; if ((_cmd & 0xfe) == 0x0c) // BCTRL _screen_on = _cmd & 1; if (_cmd == 0x46) // ZOOM ; if (_cmd == 0x49) // CURS { if (_idx == 2) { _ptr = ((int)_arg[1] * 256 + _arg[0]); _pptr = 0; } else if (_idx == 3) { _ptr = (_ptr & 0xffff) | ((_arg[2] & 0x03) << 16); _pptr = (_arg[2] >> 4) & 0x0f; _mask = 1 << _pptr; _mask_c = _mask >> 8; } } if (((_cmd & 0xf0) == 0x70) && (_idx > 0)) // PRAM { int idx = (_cmd & 0x0f) + _idx - 1; if (idx < 16) _pram[idx] = val; } if (_cmd == 0x47) // PITCH ; if (((_cmd & 0xe4) == 0x20) && (_idx > 0)) // WDAT { switch (_cmd & 0x18) { case 0x00: /* type 00 - two byte transfer */ if (_idx & 1) _mem[_ptr] = (_mask & val) | (~_mask & _mem[_ptr]); else { _col[_ptr] = (_mask_c & val) | (~_mask_c & _col[_ptr]); _ptr = (_ptr + 1) & 0xffff; while ((_idx == 2) && _figs_dc > 0) { _mem[_ptr] = (_mask & _arg[0]) | (~_mask & _mem[_ptr]); _col[_ptr] = (_mask_c & _arg[1]) | (~_mask_c & _col[_ptr]); _ptr = (_ptr + 1) & 0xffff; _figs_dc--; } } break; case 0x08: /* type 01 - invalid */ break; case 0x10: /* type 10 - low byte of word */ _mem[_ptr] = (_mask & val) | (~_mask & _mem[_ptr]); _ptr = (_ptr + 1) & 0xffff; break; case 0x18: /* type 11 - high byte of word */ _col[_ptr] = (_mask_c & val) | (~_mask_c & _col[_ptr]); _ptr = (_ptr + 1) & 0xffff; break; } } if ((_cmd == 0x4a) && (_idx > 0)) // MASK { if (_idx == 1) { /* * the z1013 gdc driver only loads the lower byte * into the mask register :-( */ _mask = _arg[0]; } else { _mask = _arg[0] | (_arg[1] << 8); _mask_c = _arg[1]; } } if ((_cmd == 0x4c) && (_idx > 2)) // FIGS _figs_dc = _arg[1] | ((_arg[2] & 0x3f) << 8); if (_cmd == 0x6c) // FIGD ; if (_cmd == 0x68) // GCHRD ; if ((_cmd & 0xe4) == 0xa0) // RDAT _figs_dc = 0; if (_cmd == 0xe0) // CURD ; if (_cmd == 0xc0) // LPRD ; if ((_cmd & 0xe4) == 0xa4) // DMAR ; if ((_cmd & 0xe4) == 0x24) // DMAW ; } byte_t GDC::get_mem(int addr) { return _mem[addr & 0xffff]; } byte_t GDC::get_col(int addr) { return _col[addr & 0xffff]; } bool GDC::get_cursor(int addr) { if (addr != _ptr) return false; return true; } bool GDC::get_cursor(int addr, int line) { if (addr != _ptr) return false; if (line < _cursor_top) return false; if (line > _cursor_bottom) return false; return true; } int GDC::get_nr_of_lines(void) { return _nr_of_lines; } int GDC::get_screen_on(void) { return _screen_on; } long GDC::get_pram_SAD(int idx) { if ((idx < 0) || (idx > 3)) return 0; return _pram[4 * idx] | (_pram[4 * idx + 1] << 8) | ((_pram[4 * idx + 2] & 3) << 16); } long GDC::get_pram_LEN(int idx) { if ((idx < 0) || (idx > 3)) return 0; return ((_pram[4 * idx + 2] & 0xf0) >> 4) | ((_pram[4 * idx + 3] & 0x3f) << 4); } void GDC::v_retrace(bool value) { if (value) _control |= 0x20; else _control &= ~0x20; } void GDC::info(void) { switch (_cmd) { case 0x00: DBG(2, form("KCemu/GDC/RESET", "GDC: RESET ------------------------------- %02x\n" "GDC: RESET mode %s\n" "GDC: RESET -------------------------------\n", _cmd, ((_arg[0] & 0x20) ? ((_arg[0] & 0x02) ? " invalid" : "character") : ((_arg[0] & 0x02) ? " graphic": " mixed")) )); break; case 0x0e: case 0x0f: DBG(2, form("KCemu/GDC/SYNC", "GDC: SYNC -------------------------------- %02x\n" "GDC: SYNC display on/off %s\n" "GDC: SYNC mode (C/G) %s (%d/%d)\n" "GDC: SYNC retrace (I/S) %s (%d/%d)\n" "GDC: SYNC refresh (D) %s\n" "GDC: SYNC drawing (F) %s\n" "GDC: SYNC --------------------------------\n", _cmd, (_cmd & 1) ? " on" : "off", ((_arg[0] & 0x20) ? ((_arg[0] & 0x02) ? " invalid" : "character") : ((_arg[0] & 0x02) ? " graphic" : " mixed")), (_arg[0] & 0x20) >> 5, // C (_arg[0] & 0x02) >> 1, // G ((_arg[0] & 0x08) ? ((_arg[0] & 0x01) ? "zeilensprung" : "doppelbild") : ((_arg[0] & 0x01) ? "invalid" : "kein zeilensprung")), (_arg[0] & 0x08) >> 3, // I (_arg[0] & 0x01), // S ((_arg[0] & 0x04) ? "yes" : " no"), ((_arg[0] & 0x10) ? "retrace only" : " always") )); break; case 0x6e: case 0x6f: DBG(2, form("KCemu/GDC/VSYNC", "GDC: VSYNC ------------------------------- %02x\n" "GDC: VSYNC external sync %s\n" "GDC: VSYNC -------------------------------\n", _cmd, (_cmd & 1) ? "master" : " slave")); break; case 0x4b: DBG(2, form("KCemu/GDC/CCHAR", "GDC: CCHAR ------------------------------- %02x\n" "GDC: CCHAR display cursor %s\n" "GDC: CCHAR number of lines %5d\n" "GDC: CCHAR cursor top %5d\n" "GDC: CCHAR cursor bottom %5d\n" "GDC: CCHAR steady cursor %s\n" "GDC: CCHAR cursor blink frequency %5d\n" "GDC: CCHAR -------------------------------\n", _cmd, (_arg[0] & 0x80) ? " on" : "off", _nr_of_lines, _cursor_top, _cursor_bottom, (_arg[1] & 0x20) ? " on" : "off", ((_arg[1] & 0xc0) >> 6) | ((_arg[2] & 0x07) << 2))); break; case 0x6b: DBG(2, form("KCemu/GDC/START", "GDC: START ------------------------------- %02x\n" "GDC: START -------------------------------\n", _cmd)); break; case 0x0c: case 0x0d: DBG(2, form("KCemu/GDC/BCTRL", "GDC: BCTRL ------------------------------- %02x\n" "GDC: BCTRL display on/off %s\n" "GDC: BCTRL -------------------------------\n", _cmd, (_cmd & 1) ? " on" : "off")); break; case 0x46: DBG(2, form("KCemu/GDC/ZOOM", "GDC: ZOOM -------------------------------- %02x\n" "GDC: ZOOM --------------------------------\n", _cmd)); break; case 0x49: DBG(2, form("KCemu/GDC/CURS", "GDC: CURS -------------------------------- %02x\n" "GDC: CURS set cursor to addr: %05x\n" "GDC: CURS point address: %02x\n" "GDC: CURS --------------------------------\n", _cmd, _ptr, _pptr)); break; case 0x70: case 0x71: case 0x72: case 0x73: case 0x74: case 0x75: case 0x76: case 0x77: case 0x78: case 0x79: case 0x7a: case 0x7b: case 0x7c: case 0x7d: case 0x7e: case 0x7f: DBG(2, form("KCemu/GDC/PRAM", "GDC: PRAM -------------------------------- %02x\n" "GDC: PRAM write starting at register %2d\n" "GDC: PRAM register 0: %04x %04x %04x %04x\n" "GDC: PRAM register 4: %04x %04x %04x %04x\n" "GDC: PRAM register 8: %04x %04x %04x %04x\n" "GDC: PRAM register 12: %04x %04x %04x %04x\n" "GDC: PRAM SAD/LEN 1 %010x/%010x\n" "GDC: PRAM IM/WD 1 %s/%d\n" "GDC: PRAM SAD/LEN 2 %010x/%010x\n" "GDC: PRAM IM/WD 2 %s/%d\n" "GDC: PRAM SAD/LEN 3 %010x/%010x\n" "GDC: PRAM IM/WD 3 %s/%d\n" "GDC: PRAM SAD/LEN 4 %010x/%010x\n" "GDC: PRAM IM/WD 4 %s/%d\n" "GDC: PRAM --------------------------------\n", _cmd, _cmd & 15, _pram[ 0], _pram[ 1], _pram[ 2], _pram[ 3], _pram[ 4], _pram[ 5], _pram[ 6], _pram[ 7], _pram[ 8], _pram[ 9], _pram[10], _pram[11], _pram[12], _pram[13], _pram[14], _pram[15], _pram[0] | (_pram[1] << 8) | ((_pram[2] & 3) << 16), ((_pram[2] & 0xf0) >> 4) | ((_pram[3] & 0x3f) << 4), ((_pram[3] & 0x40) >> 6) ? " graphic" : "character", (_pram[3] & 0x80) >> 7, _pram[4] | (_pram[5] << 8) | ((_pram[6] & 3) << 16), ((_pram[6] & 0xf0) >> 4) | ((_pram[7] & 0x3f) << 4), ((_pram[7] & 0x40) >> 6) ? " graphic" : "character", (_pram[7] & 0x80) >> 7, _pram[8] | (_pram[9] << 8) | ((_pram[10] & 3) << 16), ((_pram[10] & 0xf0) >> 4) | ((_pram[11] & 0x3f) << 4), ((_pram[11] & 0x40) >> 6) ? " graphic" : "character", (_pram[11] & 0x80) >> 7, _pram[12] | (_pram[13] << 8) | ((_pram[14] & 3) << 16), ((_pram[14] & 0xf0) >> 4) | ((_pram[15] & 0x3f) << 4), ((_pram[15] & 0x40) >> 6) ? " graphic" : "character", (_pram[15] & 0x80) >> 7)); break; case 0x47: DBG(2, form("KCemu/GDC/PITCH", "GDC: PITCH ------------------------------- %02x\n" "GDC: PITCH line width %5d\n" "GDC: PITCH -------------------------------\n", _cmd, _arg[0])); break; case 0x20: case 0x21: case 0x22: case 0x23: case 0x28: case 0x29: case 0x2a: case 0x2b: case 0x30: case 0x31: case 0x32: case 0x33: case 0x38: case 0x39: case 0x3a: case 0x3b: DBG(2, form("KCemu/GDC/WDAT", "GDC: WDAT -------------------------------- %02x\n" "GDC: WDAT type %d\n" "GDC: WDAT MOD %d\n" "GDC: WDAT arg[0] 0x%02x\n" "GDC: WDAT arg[1] 0x%02x\n" "GDC: WDAT --------------------------------\n", _cmd, (_cmd & 0x18) >> 3, (_cmd & 3), _arg[0], _arg[1])); break; case 0x4a: DBG(2, form("KCemu/GDC/MASK", "GDC: MASK -------------------------------- %02x\n" "GDC: MASK mask %04x\n" "GDC: MASK --------------------------------\n", _cmd, _mask)); break; case 0x4c: DBG(2, form("KCemu/GDC/FIGS", "GDC: FIGS -------------------------------- %02x\n" "GDC: FIGS count %05d\n" "GDC: FIGS --------------------------------\n", _cmd, _figs_dc)); break; case 0x6c: DBG(2, form("KCemu/GDC/FIGD", "GDC: FIGD -------------------------------- %02x\n" "GDC: FIGD --------------------------------\n", _cmd)); break; case 0x68: DBG(2, form("KCemu/GDC/GCHRD", "GDC: GCHRD ------------------------------- %02x\n" "GDC: GCHRD -------------------------------\n", _cmd)); break; case 0xa0: case 0xa1: case 0xa2: case 0xa3: case 0xa8: case 0xa9: case 0xaa: case 0xab: case 0xb0: case 0xb1: case 0xb2: case 0xb3: case 0xb8: case 0xb9: case 0xba: case 0xbb: DBG(2, form("KCemu/GDC/RDAT", "GDC: RDAT -------------------------------- %02x\n" "GDC: RDAT type %d\n" "GDC: RDAT MOD %d\n" "GDC: RDAT --------------------------------\n", _cmd, (_cmd & 0x18) >> 3, (_cmd & 3))); break; case 0xe0: DBG(2, form("KCemu/GDC/CURD", "GDC: CURD -------------------------------- %02x\n" "GDC: CURD --------------------------------\n", _cmd)); break; case 0xc0: DBG(2, form("KCemu/GDC/LPRD", "GDC: LPRD -------------------------------- %02x\n" "GDC: LPRD --------------------------------\n", _cmd)); break; case 0xa4: case 0xa5: case 0xa6: case 0xa7: case 0xac: case 0xad: case 0xae: case 0xaf: case 0xb4: case 0xb5: case 0xb6: case 0xb7: case 0xbc: case 0xbd: case 0xbe: case 0xbf: DBG(2, form("KCemu/GDC/DMAR", "GDC: DMAR -------------------------------- %02x\n" "GDC: DMAR type %d\n" "GDC: DMAR MOD %d\n" "GDC: DMAR --------------------------------\n", _cmd, (_cmd & 0x18) >> 3, (_cmd & 3))); break; case 0x24: case 0x25: case 0x26: case 0x27: case 0x2c: case 0x2d: case 0x2e: case 0x2f: case 0x34: case 0x35: case 0x36: case 0x37: case 0x3c: case 0x3d: case 0x3e: case 0x3f: DBG(2, form("KCemu/GDC/DMAW", "GDC: DMAW -------------------------------- %02x\n" "GDC: DMAW type %d\n" "GDC: DMAW MOD %d\n" "GDC: DMAW --------------------------------\n", _cmd, (_cmd & 0x18) >> 3, (_cmd & 3))); break; default: cout << "CMD: 0x" << hex << (int)_cmd << " -"; for (int a = 0;a < _idx;a++) cout << " 0x" << hex << (int)_arg[a]; cout << endl; } } void GDC::reti(void) { } void GDC::irqreq(void) { } word_t GDC::irqack(void) { return IRQ_NOT_ACK; } void GDC::reset(bool power_on) { _idx = 0; _ptr = 0; _pptr = 0; _mask = 0; _mask_c = 0; _control = 5; _figs_dc = 0; _screen_on = 0; _nr_of_lines = 0; _cursor_top = 1; _cursor_bottom = 0; memset(_pram, 0, 16); memset(_mem, 0x20, 65536); // FIXME: handle screen blanking memset(_col, 0x00, 65536); } KCemu-0.5.1/src/kc/fdc0s.cc0000644001050700006200000000446711345001576014714 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/z80.h" #include "kc/fdc0s.h" #include "libdbg/dbg.h" FDC0S::FDC0S(void) { } FDC0S::~FDC0S(void) { } long long FDC0S::get_counter() { return z80->getCounter(); } void FDC0S::add_callback(unsigned long long offset, Callback *cb, void *data) { z80->addCallback(offset, cb, data); } byte_t FDC0S::in(word_t addr) { byte_t val; switch (addr & 0xff) { case 0xf0: // CFDC -- fdc control val = get_msr(); break; case 0xf1: // DFDC -- fdc data val = in_data(addr); break; case 0xf2: // MOAUS -- drive motor off break; case 0xf4: // MOAUS -- drive motor on (device 1) break; case 0xf6: // MOTON -- drive motor on (device 0) break; case 0xf8: // TC -- terminal count break; case 0xfa: // FDCRES -- fdc reset break; default: DBG(2, form("KCemu/FDC/in_unhandled", "FDC::in(): addr = %04x\n", addr)); break; } return val; } void FDC0S::out(word_t addr, byte_t val) { switch (addr & 0xff) { case 0xf1: out_data(addr, val); break; case 0xf8: // TC -- terminal count set_terminal_count(1); set_state(FDC_STATE_RESULT); set_input_gate(0x40, 0x00); break; default: DBG(2, form("KCemu/FDC/out_unhandled", "FDC::out(): addr = %04x, val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); break; } } KCemu-0.5.1/src/kc/mod_boot.cc0000644001050700006200000000476111345001576015514 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/memory1.h" #include "kc/memory7.h" #include "kc/mod_boot.h" using namespace std; ModuleBOOT::ModuleBOOT(ModuleBOOT &tmpl) : ModuleROM1(tmpl) { _romdi_handling = tmpl._romdi_handling; switch (Preferences::instance()->get_kc_type()) { case KC_TYPE_85_1: ((Memory1 *)memory)->register_memory_handler(this); break; case KC_TYPE_87: ((Memory7 *)memory)->register_memory_handler(this); break; default: break; } reset(true); } ModuleBOOT::ModuleBOOT(const char *filename, const char *name, word_t addr, dword_t size, bool set_romdi) : ModuleROM1(filename, name, addr, size, set_romdi) { _romdi_handling = set_romdi; } ModuleBOOT::~ModuleBOOT(void) { switch (Preferences::instance()->get_kc_type()) { case KC_TYPE_85_1: ((Memory1 *)memory)->unregister_memory_handler(this); break; case KC_TYPE_87: ((Memory7 *)memory)->unregister_memory_handler(this); break; default: break; } } ModuleInterface * ModuleBOOT::clone(void) { return new ModuleBOOT(*this); } byte_t ModuleBOOT::memory_read_byte(word_t addr) { return 0xff; } void ModuleBOOT::memory_write_byte(word_t addr, byte_t val) { if (addr < 0xf800) return; bool state = (addr & 0x0400) == 0; set_active(state); } void ModuleBOOT::set_active(bool active) { if (is_active() == active) return; if (_romdi_handling) set_romdi(active); ModuleROM1::set_active(active); } void ModuleBOOT::reset(bool power_on) { set_active(true); } KCemu-0.5.1/src/kc/memory.cc0000644001050700006200000003377211345001576015226 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/kc.h" #include "kc/memory.h" #include "sys/sysdep.h" #include "ui/status.h" #include "libdbg/dbg.h" using namespace std; byte_t *MemArea::_scratch_r; byte_t *MemArea::_scratch_w; unsigned int Memory::seed_x; /* the seeds for... */ unsigned int Memory::seed_y; /* ...the pseudo random... */ unsigned int Memory::seed_z; /* ...number generator */ MemArea::MemArea(MemAreaGroup *group, byte_t *mem, word_t addr, int prio, bool ro) { if (!_scratch_r) { _scratch_r = new byte_t[PAGE_SIZE]; _scratch_w = new byte_t[PAGE_SIZE]; memset(_scratch_r, 0xff, PAGE_SIZE); } _group = group; _addr = addr; _prio = prio; _readonly = ro; _read_through = false; _write_through = false; _mem = mem; if (_mem) { _active = false; _mem_r = _mem; _mem_w = ro ? _scratch_w : _mem; } else { _active = true; _mem_r = _scratch_r; _mem_w = _scratch_w; } } MemArea::~MemArea(void) { } void MemArea::set_active(bool active) { if (!_mem) return; _active = active; } void MemArea::set_readonly(bool ro) { if (!_mem) return; _readonly = ro; _mem_w = ro ? _scratch_w : _mem; } void MemArea::set_read_through(bool rt) { _read_through = rt; } void MemArea::set_write_through(bool wt) { _write_through = wt; } const char * MemArea::get_name(void) { return _group->get_name(); } word_t MemArea::get_addr(void) { return _addr; } int MemArea::get_prio(void) { return _prio; } MemAreaGroup::MemAreaGroup(const char *name, word_t addr, dword_t size, byte_t *mem, int prio, bool ro) { _active = false; _prio = prio; _readonly = ro; _name = strdup(name); _addr = addr; _size = size; _mem = mem; } MemAreaGroup::~MemAreaGroup(void) { free(_name); } void MemAreaGroup::set_active(bool active) { _active = active; for (mem_area_list_t::iterator it = _l.begin();it != _l.end();it++) (*it)->set_active(active); } void MemAreaGroup::set_readonly(bool ro) { _readonly = ro; for (mem_area_list_t::iterator it = _l.begin();it != _l.end();it++) (*it)->set_readonly(ro); } void MemAreaGroup::set_read_through(bool rt) { _read_through = rt; for (mem_area_list_t::iterator it = _l.begin();it != _l.end();it++) (*it)->set_read_through(rt); } void MemAreaGroup::set_write_through(bool wt) { _write_through = wt; for (mem_area_list_t::iterator it = _l.begin();it != _l.end();it++) (*it)->set_write_through(wt); } void MemAreaGroup::add(MemAreaPtr *area_ptr[]) { int a; byte_t *mem; word_t addr; MemArea *area; mem = _mem; addr = _addr; for (a = MemArea::PAGE_INDEX(_addr);a < MemArea::PAGE_INDEX(_addr + _size);a++) { area = new MemArea(this, mem, addr, _prio, _readonly); area_ptr[a]->add(area); _l.push_back(area); if (_mem) mem += MemArea::PAGE_SIZE; addr += MemArea::PAGE_SIZE; } } void MemAreaGroup::remove(MemAreaPtr *area_ptr[]) { word_t addr; mem_area_list_t::iterator it; for (it = _l.begin();it != _l.end();it++) { addr = (*it)->get_addr() / MemArea::PAGE_SIZE; area_ptr[addr]->remove(*it); } _l.erase(_l.begin(), _l.end()); } MemAreaPtr::MemAreaPtr(void) { } void MemAreaPtr::add(MemArea *area) { int prio; mem_area_list_t::iterator it; prio = area->get_prio(); for (it = _l.begin();it != _l.end();it++) if ((*it)->get_prio() > prio) break; _l.insert(it, area); } void MemAreaPtr::remove(MemArea *area) { _l.remove(area); } void MemAreaPtr::info(void) { mem_area_list_t::iterator it; /* * display registered memory areas but don't list the fallback * entry that comes as the last entry */ for (it = _l.begin();it != --(_l.end());it++) { cerr << " [\"" << (*it)->get_name() << "\" " << ((*it)->is_active() ? 'A' : 'a') << ((*it)->is_readonly() ? 'R' : 'r') << " ]"; } } byte_t * MemAreaPtr::get_read_ptr(void) { for (mem_area_list_t::iterator it = _l.begin();it != _l.end();it++) if ((*it)->is_active()) if (!(*it)->is_read_through()) return (*it)->get_read_ptr(); return 0; } byte_t * MemAreaPtr::get_write_ptr(void) { for (mem_area_list_t::iterator it = _l.begin();it != _l.end();it++) if ((*it)->is_active()) if (!(*it)->is_write_through()) return (*it)->get_write_ptr(); return 0; } Memory::Memory(void) : InterfaceCircuit("Memory") { unsigned int seed1 = time(NULL); unsigned int seed2 = time(NULL) >> 3; unsigned int seed3 = time(NULL) / 5; mem_rand_seed(seed1, seed2, seed3); for (int a = 0;a < MemArea::PAGES;a++) _mem_ptr[a] = new MemAreaPtr(); } Memory::~Memory(void) { for (int a = 0;a < MemArea::PAGES;a++) delete _mem_ptr[a]; } void Memory::init_memory_groups(memory_group_t mem[]) { for (memory_group_t *mptr = &mem[0];mptr->name;mptr++) { *(mptr->group) = NULL; if ((mptr->model >= 0) && (mptr->model != Preferences::instance()->get_kc_variant())) continue; *(mptr->group) = new MemAreaGroup(mptr->name, mptr->addr, mptr->size, mptr->mem, mptr->prio, mptr->ro); (*(mptr->group))->add(get_mem_ptr()); if (mptr->active) (*(mptr->group))->set_active(true); } reload_mem_ptr(); } bool Memory::load_rom(const char *key, void *buf) { DBG(1, form("KCemu/Memory/load_rom", "Memory::load_rom(): loading rom for key '%s'\n", key)); SystemType *system = Preferences::instance()->get_system_type(); const SystemROM *rom = system->get_rom(key); if (rom == NULL) { cerr << "ROM with key '" << key << "' not defined for system of type '" << system->get_name() << "'\n"; exit(1); } const char *romfile = Preferences::instance()->get_string_value(key, NULL); if (romfile == NULL) { DBG(1, form("KCemu/Memory/load_rom", "Memory::load_rom(): profile has no entry for key '%s'\n", key)); } else { DBG(1, form("KCemu/Memory/load_rom", "Memory::load_rom(): got filename from profile '%s'\n", romfile)); if (sys_isabsolutepath(romfile) && (access(romfile, R_OK) != 0)) { DBG(1, form("KCemu/Memory/load_rom", "Memory::load_rom(): rom from profile ('%s') is not readable, using default\n", romfile)); romfile = NULL; } } if (romfile == NULL) { const ROMEntry * rom_entry = rom->get_default_rom(); if (rom_entry == NULL) rom_entry = rom->get_roms().front(); romfile = rom_entry->get_filename().c_str(); DBG(1, form("KCemu/Memory/load_rom", "Memory::load_rom(): using default filename '%s'\n", romfile)); } string rompath; // must be still in scope when calling load_rom() below... if (!sys_isabsolutepath(romfile)) { string datadir(kcemu_datadir); string romdir = datadir + system->get_rom_directory() + "/"; rompath = romdir + romfile; romfile = rompath.c_str(); DBG(1, form("KCemu/Memory/load_rom", "Memory::load_rom(): resolving relative path to '%s'\n", romfile)); } return load_rom(romfile, buf, rom->get_size(), rom->is_mandatory()); } bool Memory::load_rom(const char *filename, void *buf, long len, bool force) { ifstream is; DBG(1, form("KCemu/Memory/load_rom", "Memory::load_rom(): loading '%s' (size = %04xh, force = %s)\n", filename, len, force ? "yes" : "no")); is.open(filename, ios::in | ios::binary); if (!is) { DBG(1, form("KCemu/Memory/load_rom", "Memory::load_rom(): can't open rom file '%s'\n", filename)); if (!force) return false; cerr << "can't open file '" << filename << "'\n"; exit(1); } is.read((char *)buf, len); if (!is) { DBG(1, form("KCemu/Memory/load_rom", "Memory::load_rom(): failed to load rom from '%s'\n", filename)); if (force) { cerr << "error while reading '" << filename << "'\n"; exit(1); } } is.close(); return !(!is); // ;-) } void Memory::loadRAM(const char *filename) { if (filename == NULL) return; long addr = 0; const char *ptr = strstr(filename, "0x"); if (ptr != NULL) addr = strtol(ptr, NULL, 0) & 0xffff; loadRAM(filename, addr); } void Memory::loadRAM(const char *filename, word_t addr) { ifstream is; is.open(filename, ios::in | ios::binary); if (!is) return; loadRAM(&is, addr); } bool Memory::loadRAM(istream *is, word_t addr) { int c; while (242) { c = is->get(); if (c == EOF) break; memWrite8(addr++, c); } return true; } bool Memory::loadRAM_Z1013(istream *is, word_t addr) { int a, c; /* * skip header */ for (a = 0;a < 36;a++) c = is->get(); a = 0; while (242) { c = is->get(); if (c == EOF) break; if (((a % 36) > 1) && ((a % 36) < 34)) memWrite8(addr++, c); a++; } return true; } bool Memory::loadRAM(istream *is, bool with_block_nr) { int a, c, idx; unsigned char buf[129], *ptr; unsigned short load_addr, end_addr; /* read header */ if (with_block_nr) { for (a = 0;a < 129;a++) buf[a] = is->get(); // workaround for memstream problems ptr = &buf[1]; } else { for (a = 0;a < 128;a++) buf[a] = is->get(); // workaround for memstream problems ptr = &buf[0]; } if (!(*is)) return false; a = 0; if ((ptr[0] == 0xd3) && (ptr[1] == 0xd3) && (ptr[2] == 0xd3)) { load_addr = 0x0401; end_addr = load_addr + (ptr[11] | (ptr[12] << 8)); switch (Preferences::instance()->get_kc_type()) { case KC_TYPE_85_1: case KC_TYPE_87: memWrite8(0x03d7, end_addr & 0xff); memWrite8(0x03d8, end_addr >> 8); break; case KC_TYPE_85_2: case KC_TYPE_85_3: case KC_TYPE_85_4: memWrite8(0x03d7, end_addr & 0xff); memWrite8(0x03d8, end_addr >> 8); memWrite8(0x03d9, end_addr & 0xff); memWrite8(0x03da, end_addr >> 8); memWrite8(0x03db, end_addr & 0xff); memWrite8(0x03dc, end_addr >> 8); break; default: break; } for (;a < 115;a++) memWrite8(load_addr++, ptr[a + 13]); } else { load_addr = (ptr[17] & 0xff) | ((ptr[18] << 8) & 0xff00); //cout << __PRETTY_FUNCTION__ << ": load_addr = " << load_addr << endl; } idx = 0; while (242) { c = is->get(); if (c == EOF) break; if ((!with_block_nr) || (idx > 0)) { memWrite8(load_addr++, c); a++; } idx++; if (idx == 129) idx = 0; } //cout << __PRETTY_FUNCTION__ << ": len = " << a << endl; return true; } MemAreaPtr ** Memory::get_mem_ptr(void) { return _mem_ptr; } MemAreaGroup * Memory::register_memory(const char *name, word_t addr, dword_t size, byte_t *mem, int prio, bool ro) { MemAreaGroup *group; group = new MemAreaGroup(name, addr, size, mem, prio, ro); group->add(get_mem_ptr()); group->set_active(true); reload_mem_ptr(); return group; } void Memory::unregister_memory(MemAreaGroup *group) { group->remove(get_mem_ptr()); reload_mem_ptr(); delete group; } void Memory::reload_mem_ptr(void) { for (int a = 0;a < MemArea::PAGES;a++) { _memrptr[a] = _mem_ptr[a]->get_read_ptr(); _memwptr[a] = _mem_ptr[a]->get_write_ptr(); } } void * Memory::get_page_addr_r(word_t addr) { word_t a = addr >> MemArea::PAGE_SHIFT; return _memrptr[a]; } void * Memory::get_page_addr_w(word_t addr) { word_t a = addr >> MemArea::PAGE_SHIFT; return _memwptr[a]; } void Memory::scratch_mem(byte_t *ptr, int len) { while (len-- > 0) *ptr++ = mem_rand(); } void Memory::dump(word_t addr) { int a, b, c; for (a = 0;a < 8;a++) { cerr << hex << setw(4) << setfill('0') << (addr + 16 * a) << ": "; for (b = 0;b < 16;b++) { cerr << hex << setw(2) << setfill('0') << memRead8(addr + 16 * a + b) << " "; if (b == 7) cerr << ": "; } cerr << " "; for (b = 0;b < 16;b++) { c = memRead8(addr + 16 * a + b); if (c > 0x20 && c < 0x80) { cerr << (char)c; } else { cerr << '.'; } } cerr << endl; } } void Memory::info(void) { cerr << " Memory:" << endl; cerr << " -------" << endl << endl; word_t addr = 0; for (int a = 0;a < MemArea::PAGES;a++) { if (_mem_ptr[a]->size() > 1) { cerr << " " << hex << setw(4) << setfill('0') << addr << "h:"; _mem_ptr[a]->info(); cerr << endl; } addr += MemArea::PAGE_SIZE; } cerr << endl << endl; } /* * returns x(n) + z(n) where x(n) = x(n-1) + x(n-2) mod 2^32 * z(n) = 30903 * z(n-1) + carry mod 2^16 * Simple, fast, and very good. Period > 2^60 * * http://remus.rutgers.edu/~rhoads/Code/code.html */ unsigned int Memory::mem_rand() { unsigned int v = seed_x * seed_y; seed_x = seed_y; seed_y = v; seed_z = (seed_z & 65535) * 30903 + (seed_z >> 16); return (seed_y + (seed_z & 65535)); } void Memory::mem_rand_seed(unsigned int seed1, unsigned int seed2, unsigned int seed3) { seed_x = (seed1<<1) | 1; seed_x = seed_x * 3 * seed_x; seed_y = (seed2<<1) | 1; seed_z = seed3; } KCemu-0.5.1/src/kc/mod_192k.cc0000644001050700006200000001664611345001576015244 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/mod_192k.h" using namespace std; /** * 192 KByte RAM/EPROM Modul * * http://vpohlers.tripod.com/192k_modul.htm */ Module192k::Module192k(Module192k &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { init(); _master = false; if (tmpl._rom_D2 == NULL) return; _rom_D2 = tmpl._rom_D2; _rom_D3 = tmpl._rom_D3; _rom_D5 = tmpl._rom_D5; _ram_D1 = new byte_t[0x8000]; _ram_D4 = new byte_t[0x8000]; _ram_D6 = new byte_t[0x4000]; memset(_ram_D1, 0, 0x8000); memset(_ram_D4, 0, 0x8000); memset(_ram_D6, 0, 0x4000); struct { MemAreaGroup **group; const char *name; word_t addr; dword_t size; byte_t *mem; int prio; bool ro; bool active; } *mptr, m[] = { { &_m_4000, "RAM D1", 0x4000, 0x2000, &_ram_D1[0x0000], 10, 0, 1 }, { &_m_6000, "RAM D1", 0x6000, 0x2000, &_ram_D1[0x2000], 10, 0, 1 }, { &_m_8000, "RAM D1", 0x8000, 0x2000, &_ram_D1[0x4000], 10, 0, 1 }, { &_m_a000, "RAM D1", 0xa000, 0x2000, &_ram_D1[0x6000], 10, 0, 1 }, { &_m_c000[ 0], "ROMC D2 (Bank 0)", 0xc000, 0x2000, &_rom_D2[0x0000], 10, 1, 1 }, { &_m_c000[ 1], "ROMC D2 (Bank 1)", 0xc000, 0x2000, &_rom_D2[0x2000], 10, 1, 0 }, { &_m_c000[ 2], "ROMC D2 (Bank 2)", 0xc000, 0x2000, &_rom_D2[0x4000], 10, 1, 0 }, { &_m_c000[ 3], "ROMC D2 (Bank 3)", 0xc000, 0x2000, &_rom_D2[0x6000], 10, 1, 0 }, { &_m_c000[ 4], "ROMC D2 (Bank 4)", 0xc000, 0x2000, &_rom_D2[0x8000], 10, 1, 0 }, { &_m_c000[ 5], "ROMC D2 (Bank 5)", 0xc000, 0x2000, &_rom_D2[0xa000], 10, 1, 0 }, { &_m_c000[ 6], "ROMC D2 (Bank 6)", 0xc000, 0x2000, &_rom_D2[0xc000], 10, 1, 0 }, { &_m_c000[ 7], "ROMC D2 (Bank 7)", 0xc000, 0x2000, &_rom_D2[0xe000], 10, 1, 0 }, { &_m_c000[ 8], "ROMC D3 (Bank 8)", 0xc000, 0x2000, &_rom_D3[0x0000], 10, 1, 0 }, { &_m_c000[ 9], "ROMC D3 (Bank 9)", 0xc000, 0x2000, &_rom_D3[0x2000], 10, 1, 0 }, { &_m_c000[10], "ROMC D3 (Bank 10)", 0xc000, 0x2000, &_rom_D3[0x4000], 10, 1, 0 }, { &_m_c000[11], "ROMC D3 (Bank 11)", 0xc000, 0x2000, &_rom_D3[0x6000], 10, 1, 0 }, { &_m_c000[12], "RAMC D4 (Bank 12)", 0xc000, 0x2000, &_ram_D4[0x0000], 10, 0, 0 }, { &_m_c000[13], "RAMC D4 (Bank 13)", 0xc000, 0x2000, &_ram_D4[0x2000], 10, 0, 0 }, { &_m_c000[14], "RAMC D4 (Bank 14)", 0xc000, 0x2000, &_ram_D4[0x4000], 10, 0, 0 }, { &_m_c000[15], "RAMC D4 (Bank 15)", 0xc000, 0x2000, &_ram_D4[0x6000], 10, 0, 0 }, { &_m_e000[ 0], "ROME D5 (Bank 0)", 0xe000, 0x0800, &_rom_D5[0x0000], 10, 1, 1 }, { &_m_e000[ 1], "ROME D5 (Bank 1)", 0xe000, 0x0800, &_rom_D5[0x0800], 10, 1, 0 }, { &_m_e000[ 2], "ROME D5 (Bank 2)", 0xe000, 0x0800, &_rom_D5[0x1000], 10, 1, 0 }, { &_m_e000[ 3], "ROME D5 (Bank 3)", 0xe000, 0x0800, &_rom_D5[0x1800], 10, 1, 0 }, { &_m_e000[ 4], "ROME D5 (Bank 4)", 0xe000, 0x0800, &_rom_D5[0x2000], 10, 1, 0 }, { &_m_e000[ 5], "ROME D5 (Bank 5)", 0xe000, 0x0800, &_rom_D5[0x2800], 10, 1, 0 }, { &_m_e000[ 6], "ROME D5 (Bank 6)", 0xe000, 0x0800, &_rom_D5[0x3000], 10, 1, 0 }, { &_m_e000[ 7], "ROME D5 (Bank 7)", 0xe000, 0x0800, &_rom_D5[0x3800], 10, 1, 0 }, { &_m_e000[ 8], "RAME D5 (Bank 8)", 0xe000, 0x0800, &_ram_D6[0x0000], 10, 0, 0 }, { &_m_e000[ 9], "RAME D5 (Bank 9)", 0xe000, 0x0800, &_ram_D6[0x0800], 10, 0, 0 }, { &_m_e000[10], "RAME D5 (Bank 10)", 0xe000, 0x0800, &_ram_D6[0x1000], 10, 0, 0 }, { &_m_e000[11], "RAME D5 (Bank 11)", 0xe000, 0x0800, &_ram_D6[0x1800], 10, 0, 0 }, { &_m_e000[12], "RAME D5 (Bank 12)", 0xe000, 0x0800, &_ram_D6[0x2000], 10, 0, 0 }, { &_m_e000[13], "RAME D5 (Bank 13)", 0xe000, 0x0800, &_ram_D6[0x2800], 10, 0, 0 }, { &_m_e000[14], "RAME D5 (Bank 14)", 0xe000, 0x0800, &_ram_D6[0x3000], 10, 0, 0 }, { &_m_e000[15], "RAME D5 (Bank 15)", 0xe000, 0x0800, &_ram_D6[0x3800], 10, 0, 0 }, { 0, }, }; for (mptr = &m[0];mptr->name;mptr++) { *(mptr->group) = memory->register_memory(mptr->name, mptr->addr, mptr->size, mptr->mem, mptr->prio, mptr->ro); (*(mptr->group))->set_active(mptr->active); } _portg = ports->register_ports(get_name(), 0xff, 1, this, 0); set_valid(true); } Module192k::Module192k(const char *d2, const char *d3, const char *d5, const char *name) : ModuleInterface(name, 0, KC_MODULE_KC_85_1) { init(); _master = true; _rom_D2 = new byte_t[65536]; _rom_D3 = new byte_t[32768]; _rom_D5 = new byte_t[16384]; memset(_rom_D2, 0, 65536); memset(_rom_D3, 0, 32768); memset(_rom_D5, 0, 16384); bool valid = true; if (!Memory::load_rom(d2, _rom_D2, 65536, false)) valid = false; if (!Memory::load_rom(d3, _rom_D3, 32768, false)) valid = false; if (!Memory::load_rom(d5, _rom_D5, 8192, false)) valid = false; if (!Memory::load_rom(d5, _rom_D5 + 8192, 8192, false)) valid = false; if (!valid) { delete[] _rom_D2; delete[] _rom_D3; delete[] _rom_D5; _rom_D2 = NULL; _rom_D3 = NULL; _rom_D5 = NULL; } set_valid(valid); } Module192k::~Module192k(void) { if (_portg) ports->unregister_ports(_portg); if (_master) { if (_rom_D2) delete[] _rom_D2; if (_rom_D3) delete[] _rom_D3; if (_rom_D5) delete[] _rom_D5; } if (_m_4000) memory->unregister_memory(_m_4000); if (_m_6000) memory->unregister_memory(_m_6000); if (_m_8000) memory->unregister_memory(_m_8000); if (_m_a000) memory->unregister_memory(_m_a000); for (int a = 0;a < 16;a++) { if (_m_c000[a]) memory->unregister_memory(_m_c000[a]); if (_m_e000[a]) memory->unregister_memory(_m_e000[a]); } } void Module192k::init(void) { _val = 0; _portg = NULL; _ram_D1 = NULL; _ram_D4 = NULL; _ram_D6 = NULL; _rom_D2 = NULL; _rom_D3 = NULL; _rom_D5 = NULL; _m_4000 = NULL; _m_6000 = NULL; _m_8000 = NULL; _m_a000 = NULL; for (int a = 0;a < 16;a++) _m_c000[a] = _m_e000[a] = NULL; } void Module192k::m_out(word_t addr, byte_t val) { } ModuleInterface * Module192k::clone(void) { return new Module192k(*this); } byte_t Module192k::in(word_t addr) { return 0xff; } void Module192k::out(word_t addr, byte_t val) { _m_c000[(_val >> 4) & 0x0f]->set_active(false); _m_c000[(val >> 4) & 0x0f]->set_active(true); _m_e000[_val & 0x0f]->set_active(false); _m_e000[val & 0x0f]->set_active(true); _val = val; memory->reload_mem_ptr(); } void Module192k::reset(bool power_on) { /* * initialize memory bank switch after reset / power on */ out(0xff, 0); } KCemu-0.5.1/src/kc/ports4.cc0000644001050700006200000001110111345001576015127 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/ports4.h" #include "kc/memory4.h" #include "libdbg/dbg.h" #define memory ((Memory4 *)memory) Ports4::Ports4(void) { for (int a = 0;a < NR_PORTS;a++) inout[a] = -1; } Ports4::~Ports4(void) { } byte_t Ports4::in(word_t addr) { byte_t a = addr & 0xff; byte_t val = inout[a]; switch (a) { case 0x84: case 0x86: break; default: DBG(0, form("KCemu/internal_error", "Ports4: called in() with undefined address %04xh\n", addr)); break; } DBG(2, form("KCemu/Ports/4/in", "Ports4: in() addr = %04x (returning %02x)\n", addr, val)); return val; } void Ports4::out(word_t addr, byte_t val) { byte_t a = addr & 0xff; DBG(2, form("KCemu/Ports/4/out", "Ports4: out() addr = %04x, val = %02x\n", addr, val)); switch (a) { case 0x84: if (inout[0x84] < 0) inout[0x84] = ~val; change_0x84(inout[0x84] ^ val, val); break; case 0x86: if (inout[0x86] < 0) inout[0x86] = ~val; change_0x86(inout[0x86] ^ val, val); break; default: DBG(0, form("KCemu/internal_error", "Ports4: called out() with undefined address %04xh (val = %02xh)\n", addr, val)); break; } inout[addr & 0xff] = val; } void Ports4::change_0x84(byte_t changed, byte_t val) { if (changed & 0x01) { DBG(2, form("KCemu/Ports/4/change/84", "Ports 0x84: display screen %d\n", val & 1)); memory->displaySCREEN_1(val & 0x01); } if (changed & 0x02) { DBG(2, form("KCemu/Ports/4/change/84", "Ports 0x84: pixel/ color %d\n", (val >> 1) & 1)); memory->enableCOLOR(val & 0x02); } if (changed & 0x04) { DBG(2, form("KCemu/Ports/4/change/84", "Ports 0x84: access screen %d\n", (val >> 2) & 1)); memory->enableSCREEN_1(val & 0x04); } if (changed & 0x08) { DBG(2, form("KCemu/Ports/4/change/84", "Ports 0x84: high resolution %d\n", (val >> 3) & 1)); } if (changed & 0xf0) { DBG(2, form("KCemu/Ports/4/change/84", "Ports 0x84: access RAM8 segment %d\n", (val >> 4) & 0x0f)); memory->selectRAM_8((val >> 4) & 0x0f); } } void Ports4::change_0x86(byte_t changed, byte_t val) { if (changed & 0x01) { DBG(2, form("KCemu/Ports/4/change/86", "Ports 0x86: RAM 4 %d\n", val & 1)); memory->enableRAM_4(val & 0x01); } if (changed & 0x02) { DBG(2, form("KCemu/Ports/4/change/86", "Ports 0x86: write protect RAM 4 %d\n", (val >> 1) & 1)); memory->protectRAM_4(val & 0x02); } if (changed & 0x04) { DBG(2, form("KCemu/Ports/4/change/86", "Ports 0x86: unused 0x04 %d\n", (val >> 2) & 1)); } if (changed & 0x08) { DBG(2, form("KCemu/Ports/4/change/86", "Ports 0x86: unused 0x08 %d\n", (val >> 3) & 1)); } if (changed & 0x10) { DBG(2, form("KCemu/Ports/4/change/86", "Ports 0x86: unused 0x10 %d\n", (val >> 4) & 1)); } if (changed & 0x60) { DBG(2, form("KCemu/Ports/4/change/86", "Ports 0x86: BASIC/USER ROM bank %d\n", (val >> 5) & 3)); memory->selectROM_C((val >> 5) & 3); } if (changed & 0x80) { DBG(2, form("KCemu/Ports/4/change/86", "Ports 0x86: CAOS C %d\n", (val >> 7) & 1)); memory->enableCAOS_C(val & 0x80); } } KCemu-0.5.1/src/kc/z80_fdc.cc0000644001050700006200000001072411345001576015143 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/ports.h" #include "kc/cb_list.h" #include "kc/z80_fdc.h" #include "libdbg/dbg.h" #define MEM_SIZE (65536) byte_t fdc_mem[MEM_SIZE]; static Z80_FDC *self; // for the signal handler static void signalHandler(int sig); Z80_FDC::Z80_FDC(void) { self = this; _context = z80ex_create(z80ex_mread_cb, this, z80ex_mwrite_cb, this, z80ex_pread_cb, this, z80ex_pwrite_cb, this, z80ex_intread_cb, this); z80ex_reset(_context); _debug = false; signal(SIGINT, signalHandler); } Z80_FDC::~Z80_FDC(void) { } void Z80_FDC::do_execute(void) { if (_debug) { int addr = getPC(); char buf[80]; int t, t2; int base_addr = addr; printf("FDC: %04X: ", addr); addr += z80ex_dasm(buf, 80, 0, &t, &t2, z80ex_dasm_readbyte_cb, addr, &base_addr); printf("%-15s t=%d", buf, t); if (t2) printf("/%d", t2); printf("\n"); } _counter += z80ex_step(_context); } void Z80_FDC::execute(void) { static int x = 40000; static int calls = 8; do_execute(); do_execute(); if (--calls == 0) { calls = 8; do_execute(); } _cb_list.run_callbacks(_counter); if (--x == 0) { x = 40000; if (DBG_check("KCemu/Z80core2/trace")) { x = 500; } } } long long Z80_FDC::get_counter() { return _counter; } byte_t Z80_FDC::trigger_irq(byte_t irq_vector) { _next_irq = irq_vector; z80ex_int(_context); return 0; } void Z80_FDC::add_callback(unsigned long long offset, Callback *cb, void *data) { _cb_list.add_callback(_counter + offset, cb, data); } void Z80_FDC::register_ic(InterfaceCircuit *h) { _ic_list.push_back(h); } void Z80_FDC::unregister_ic(InterfaceCircuit *h) { _ic_list.remove(h); } void Z80_FDC::reset(bool power_on) { if (power_on) memset(fdc_mem, 0, MEM_SIZE); z80ex_reset(_context); z80ex_set_reg(_context, regPC, 0xfc00); _cb_list.clear(); for (ic_list_t::iterator it = _ic_list.begin(); it != _ic_list.end(); it++) (*it)->reset(power_on); } void Z80_FDC::power_on() { reset(true); } bool Z80_FDC::trace(void) { return false; } void Z80_FDC::trace(bool value) { } Z80EX_BYTE Z80_FDC::z80ex_dasm_readbyte_cb(Z80EX_WORD addr, void *user_data) { return fdc_mem[(addr & 0xffff)]; } Z80EX_BYTE Z80_FDC::z80ex_mread_cb(Z80EX_CONTEXT *cpu, Z80EX_WORD addr, int m1_state, void *user_data) { return fdc_mem[(addr & 0xffff)]; } void Z80_FDC::z80ex_mwrite_cb(Z80EX_CONTEXT *cpu, Z80EX_WORD addr, Z80EX_BYTE value, void *user_data) { fdc_mem[(addr & 0xffff)] = value; } Z80EX_BYTE Z80_FDC::z80ex_pread_cb(Z80EX_CONTEXT *cpu, Z80EX_WORD port, void *user_data) { byte_t value = fdc_ports->in(port); DBG(3, form("KCemu/Z80FDC/InZ80", "InZ80(): %04x: %04x -> %02x\n", Z80_GetPC(), port, value)); return value; } void Z80_FDC::z80ex_pwrite_cb(Z80EX_CONTEXT *cpu, Z80EX_WORD port, Z80EX_BYTE value, void *user_data) { DBG(3, form("KCemu/Z80FDC/OutZ80", "OutZ80(): %04x: %04x -> %02x\n", Z80_GetPC(), port, value)); fdc_ports->out(port, value); } Z80EX_BYTE Z80_FDC::z80ex_intread_cb(Z80EX_CONTEXT *cpu, void *user_data) { Z80_FDC *z80 = (Z80_FDC *) user_data; return z80->_next_irq; } static void signalHandler(int sig) { static bool flag = false; std::cout << "\n *** signal caught (" << sig << ") ***\n\n"; signal(sig, signalHandler); flag = !flag; self->_debug = flag; } KCemu-0.5.1/src/kc/mod_disk.cc0000644001050700006200000000710611345001576015477 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/mod_disk.h" #include "libdbg/dbg.h" ModuleDisk::ModuleDisk(ModuleDisk &tmpl) : ModuleROM(tmpl) { _val = 0; _slot = tmpl._slot; } ModuleDisk::ModuleDisk(const char *rom_key, const char *name, byte_t id, int slot) : ModuleROM(rom_key, name, id) { _val = 0; _slot = slot; } ModuleDisk::~ModuleDisk(void) { } word_t ModuleDisk::get_addr(byte_t val) { return (val & 0x20) ? 0xe000 : 0xc000; } /* * SWITCH FC kk------------------- * | * | * --------------------------------- * Bit | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | * --------------------------------- * | | | Bit 1/0 * | | ---- ROM on/off * | ----------- Kopplung on/off * ------------------- Basisadresse E000/C000 * */ void ModuleDisk::m_out(word_t addr, byte_t val) { bool unreg, reg; if (((_val & 0x25) ^ (val & 0x25)) == 0) return; word_t map_addr = get_addr(val); DBG(2, form("KCemu/ModuleDisk/out", "ModuleDisk::out(): %s: addr = %04x, val = %02x, old val = %02x\n", get_name(), addr, val, _val)); // The module interface allows us to snoop on slots F8 and FC at // the same time. So we can disable the memory of the not accessed // slot. reg = unreg = false; if (((addr >> 8) & 0xfc) != _slot) { DBG(2, form("KCemu/ModuleDisk/out", "ModuleDisk::out(): %s: I/O to module on other port detected!\n", get_name())); reg = false; unreg = true; } else { if ((_val & 0x20) ^ (val & 0x20)) { DBG(2, form("KCemu/ModuleDisk/out", "ModuleDisk::out(): %s: new map address is %04x\n", get_name(), map_addr)); reg = unreg = true; } if ((_val & 0x04) ^ (val & 0x04)) { DBG(2, form("KCemu/ModuleDisk/out", "ModuleDisk::out(): %s: shared memory is now %s\n", get_name(), (val & 0x04) ? "on" : "off")); } if ((_val & 0x01) ^ (val & 0x01)) { if (val & 1) reg = true; else reg = false; } } if (unreg) if (_group) { if (_group) memory->unregister_memory(_group); _group = 0; } if (reg) _group = memory->register_memory(get_name(), map_addr, _size, _rom, (addr >> 8), true); _val = val; } ModuleInterface * ModuleDisk::clone(void) { return new ModuleDisk(*this); } KCemu-0.5.1/src/kc/mod_rom.cc0000644001050700006200000000555711345001576015352 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/mod_rom.h" #include "libdbg/dbg.h" using namespace std; ModuleROM::ModuleROM(ModuleROM &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _val = 0; _size = tmpl._size; _group = NULL; _rom = new byte_t[_size]; if (_rom) { memcpy(_rom, tmpl._rom, _size); set_valid(true); } } ModuleROM::ModuleROM(const char *rom_key, const char *name, byte_t id) : ModuleInterface(name, id, KC_MODULE_KC_85_3) { _size = 0x2000; _rom = new byte_t[_size]; // FIXME: need to get size from type info _group = NULL; set_valid(Memory::load_rom(rom_key, _rom)); } ModuleROM::ModuleROM(const char *filename, const char *name, dword_t size, byte_t id) : ModuleInterface(name, id, KC_MODULE_KC_85_3) { _rom = new byte_t[size]; _size = size; _group = NULL; set_valid(Memory::load_rom(filename, _rom, size, false)); } ModuleROM::ModuleROM(byte_t *rom, const char *name, dword_t size, byte_t id) : ModuleInterface(name, id, KC_MODULE_KC_85_3) { _id = id; _size = size; _rom = new byte_t[size]; _group = NULL; memcpy(_rom, rom, size); set_valid(true); } ModuleROM::~ModuleROM(void) { if (_group) memory->unregister_memory(_group); delete[] _rom; } word_t ModuleROM::get_addr(byte_t val) { return 0xc000; } dword_t ModuleROM::get_size(byte_t val) { return _size; } byte_t * ModuleROM::get_rom_ptr(byte_t val) { return _rom; } void ModuleROM::m_out(word_t addr, byte_t val) { if (_val == val) return; byte_t *rom = get_rom_ptr(val); if (_group) { memory->unregister_memory(_group); _group = 0; } if ((val & 1) && (rom != NULL)) { _group = memory->register_memory(get_name(), get_addr(val), get_size(val), rom, (addr >> 8), true); } _val = val; } ModuleInterface * ModuleROM::clone(void) { return new ModuleROM(*this); } void ModuleROM::reset(bool power_on) { } KCemu-0.5.1/src/kc/mod_ramf.cc0000644001050700006200000001147211345001576015473 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/mod_ramf.h" ModuleRAMFloppy::ModuleRAMFloppy(ModuleRAMFloppy &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _addr = 0; _ram = NULL; _portg = NULL; _master = &tmpl; _port = _master->allocate_port(); if (_port < 0) { char buf[1024]; snprintf(buf, sizeof(buf), _("It's not possible to have more than two RAM-Floppy\n" "modules. The first one is running on port 98h and\n" "the second one on port 58h.")); set_error_text(buf); return; } _ram = new byte_t[0x40000]; for (int a = 0;a < 0x20000;a++) _ram[a] = 0xe5; init(); _portg = ports->register_ports(get_name(), _port, 8, this, 0); set_valid(true); } ModuleRAMFloppy::ModuleRAMFloppy(const char *name) : ModuleInterface(name, 0, KC_MODULE_Z1013) { _addr = 0; _port = -1; _ram = NULL; _portg = NULL; _master = NULL; _disk_a = -0x98; _disk_b = -0x58; set_valid(true); } ModuleRAMFloppy::~ModuleRAMFloppy(void) { if (_portg) ports->unregister_ports(_portg); if (_port >= 0) if (_master) _master->release_port(_port); delete[] _ram; } void ModuleRAMFloppy::read_file(const char *filename, long size) { int c; FILE *f; if ((_addr + size) >= 0x3ff00) return; f = fopen(filename, "rb"); if (f == NULL) return; while (242) { c = fgetc(f); if (c == EOF) break; if (_addr >= 0x3ff00) break; _ram[_addr++] = c; } _addr = (_addr + 0xff) & 0x3ff00; _ram[1] = (_addr >> 16) & 0x03; _ram[2] = (_addr >> 8) & 0xff; fclose(f); } void ModuleRAMFloppy::init(void) { int len; DIR *dir; struct stat statbuf; struct dirent *entry; char *dirname, *filename; if (kcemu_homedir == NULL) return; _addr = 0x0100; _ram[0] = _port; _ram[1] = 0; _ram[2] = 0; len = strlen(kcemu_homedir) + 21; dirname = new char[len]; snprintf(dirname, len, "%s/.z1013-ramfloppy_%02x", kcemu_homedir, _port & 0xff); dir = opendir(dirname); if (dir == NULL) { delete[] dirname; return; } while (242) { entry = readdir(dir); if (entry == NULL) break; len = strlen(dirname) + strlen(entry->d_name) + 2; filename = new char[len]; snprintf(filename, len, "%s/%s", dirname, entry->d_name); if (stat(filename, &statbuf) == 0) if (S_ISREG(statbuf.st_mode)) read_file(filename, statbuf.st_size); delete[] filename; } closedir(dir); delete[] dirname; } int ModuleRAMFloppy::allocate_port(void) { if (_disk_a < 0) { _disk_a = -_disk_a; return _disk_a; } if (_disk_b < 0) { _disk_b = -_disk_b; return _disk_b; } return -1; } void ModuleRAMFloppy::release_port(int port) { if (_disk_a == port) _disk_a = -_disk_a; if (_disk_b == port) _disk_b = -_disk_b; } void ModuleRAMFloppy::m_out(word_t addr, byte_t val) { } ModuleInterface * ModuleRAMFloppy::clone(void) { return new ModuleRAMFloppy(*this); } void ModuleRAMFloppy::reset(bool power_on) { } byte_t ModuleRAMFloppy::in(word_t addr) { byte_t ret = 0xff; switch (addr & 7) { case 0: case 1: case 2: case 3: _addr = (_addr & 0xffff) | ((addr & 3) << 16); ret = _ram[_addr]; _addr = (_addr & 0xff00) | (((_addr & 0xff) + 1) & 0xff); break; default: break; } return ret; } void ModuleRAMFloppy::out(word_t addr, byte_t val) { switch (addr & 7) { case 0: case 1: case 2: case 3: _addr = (_addr & 0xffff) | ((addr & 3) << 16); _ram[_addr] = val; _addr = (_addr & 0xff00) | (((_addr & 0xff) + 1) & 0xff); break; case 6: _addr = (_addr & 0xff) | (val << 8); break; case 7: _addr = (_addr & 0xff00) | val; break; default: break; } } KCemu-0.5.1/src/kc/pio6.cc0000644001050700006200000000623711345001576014567 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/pio6.h" #include "kc/poly880.h" #include "libdbg/dbg.h" PIO6_1::PIO6_1(void) { _led_value = 0; set_B_EXT(0xff, 0x00); } PIO6_1::~PIO6_1(void) { } byte_t PIO6_1::in(word_t addr) { byte_t val = 0xff; switch (addr & 3) { case 0: val = in_A_DATA(); break; case 1: val = in_A_CTRL(); break; case 2: val = in_B_DATA(); break; case 3: val = in_B_CTRL(); break; } DBG(2, form("KCemu/PIO/6a/in", "PIO6_1::in(): addr = %04x, val = %02x\n", addr, val)); return val; } void PIO6_1::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/6a/out", "PIO6_1::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); _led_value = val; break; case 1: out_A_CTRL(val); break; case 2: out_B_DATA(val); break; case 3: out_B_CTRL(val); break; } } void PIO6_1::change_A(byte_t changed, byte_t val) { } void PIO6_1::change_B(byte_t changed, byte_t val) { poly880->set_scon((val & 64) == 64); //printf("port B: %02x %s %s\n", val, (val & 4) ? "MOUT" : "mout", (val & 64) ? "SCON" : "scon"); } byte_t PIO6_1::get_led_value(void) { return _led_value; } PIO6_2::PIO6_2(void) { } PIO6_2::~PIO6_2(void) { } byte_t PIO6_2::in(word_t addr) { byte_t val = 0xff; switch (addr & 3) { case 0: val = in_A_DATA(); break; case 1: val = in_A_CTRL(); break; case 2: val = in_B_DATA(); break; case 3: val = in_B_CTRL(); break; } DBG(2, form("KCemu/PIO/6b/in", "PIO6_2::in(): addr = %04x, val = %02x\n", addr, val)); return val; } void PIO6_2::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/6b/out", "PIO6_2::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_A_CTRL(val); break; case 2: out_B_DATA(val); break; case 3: out_B_CTRL(val); break; } } void PIO6_2::change_A(byte_t changed, byte_t val) { } void PIO6_2::change_B(byte_t changed, byte_t val) { } KCemu-0.5.1/src/kc/mod_segm.cc0000644001050700006200000000662211345001576015502 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/mod_segm.h" ModuleSegmentedMemory::ModuleSegmentedMemory(ModuleSegmentedMemory &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _val = 0; _group = NULL; _master = false; _is_rom = tmpl._is_rom; _segments = tmpl.get_segment_count(); _segment_size = tmpl.get_segment_size(); if (is_rom()) { _mem = tmpl._mem; set_valid(true); } else { int mem_size = get_segment_count() * get_segment_size(); _mem = new byte_t[mem_size]; if (_mem) { reset(true); set_valid(true); } } } ModuleSegmentedMemory::ModuleSegmentedMemory(const char *name, byte_t id, int segments, int segment_size) : ModuleInterface(name, id, KC_MODULE_KC_85_3) { _val = 0; _mem = NULL; _group = NULL; _master = true; _is_rom = false; _segments = segments; _segment_size = segment_size; set_valid(true); } ModuleSegmentedMemory::ModuleSegmentedMemory(const char *name, byte_t id, int segments, int segment_size, const char *filename) : ModuleInterface(name, id, KC_MODULE_KC_85_3) { int mem_size = segments * segment_size; _val = 0; _group = NULL; _master = true; _is_rom = true; _segments = segments; _segment_size = segment_size; _mem = new byte_t[mem_size]; set_valid(Memory::load_rom(filename, _mem, mem_size, false)); } ModuleSegmentedMemory::~ModuleSegmentedMemory(void) { if (_group) memory->unregister_memory(_group); if (_master && _mem) delete[] _mem; } bool ModuleSegmentedMemory::is_rom(void) { return _is_rom; } int ModuleSegmentedMemory::get_segment_count(void) { return _segments; } int ModuleSegmentedMemory::get_segment_size(void) { return _segment_size; } void ModuleSegmentedMemory::m_out(word_t addr, byte_t val) { if (_val == val) return; _val = val; if (_group) { memory->unregister_memory(_group); _group = NULL; } if (_val & 1) { char buf[100]; int idx = get_segment_index(addr, val); word_t mem = get_base_address(addr, val); bool ro = is_rom() ? true : (_val & 2) == 0; snprintf(buf, sizeof(buf), "%s (%d)", get_name(), idx); _group = memory->register_memory(buf, mem, get_segment_size(), &_mem[idx * get_segment_size()], 0x10, ro); } } void ModuleSegmentedMemory::reset(bool power_on) { if (is_rom()) return; if (power_on) Memory::scratch_mem(_mem, get_segment_count() * get_segment_size()); } KCemu-0.5.1/src/kc/vdip.cc0000644001050700006200000002245611345001576014655 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/pio.h" #include "kc/z80.h" #include "kc/vdip.h" #include "kc/prefs/prefs.h" #include "cmd/cmd.h" #include "libdbg/dbg.h" class CMD_vdip_attach : public CMD { private: VDIP *_vdip; static const char * _path; protected: long get_slot_no(CMD_Args *args) { long n = 0; if (args && args->has_arg("slot")) n = args->get_long_arg("slot"); return n; } public: CMD_vdip_attach(VDIP *vdip) : CMD("vdip-attach") { _vdip = vdip; register_cmd("vdip-attach", 0); register_cmd("vdip-detach", 2); } void execute(CMD_Args *args, CMD_Context context) { const char *filename; filename = NULL; switch (context) { /* * vdip-attach */ case 0: if (!args) args = new CMD_Args(); filename = args->get_string_arg("filename"); if (!filename) { args->set_long_arg("ui-file-select-dir-only", 1); args->set_string_arg("ui-file-select-title", _("Select root directory...")); if (_path) args->set_string_arg("ui-file-select-path", _path); args->add_callback("ui-file-select-CB-ok", this, 1); CMD_EXEC_ARGS("ui-file-select", args); return; } break; /* * ui-file-select-CB-ok */ case 1: if (args) filename = args->get_string_arg("filename"); break; /* * vdip-detach */ case 2: if (get_slot_no(args) == 0) _vdip->set_root(""); return; } if (filename) _vdip->set_root(filename); } }; const char * CMD_vdip_attach::_path = NULL; VDIP::VDIP(void) : Callback("Vinculum USB") { const char *vdip_root_1 = kcemu_vdip_root; if (vdip_root_1 == NULL) vdip_root_1 = Preferences::instance()->get_string_value("vdip_root_1", NULL); if (vdip_root_1 == NULL) vdip_root_1 = ""; _pio = NULL; _file = NULL; _root = vdip_root_1; _cmd = NULL; _cwd = new StringList(); _attach_cmd = new CMD_vdip_attach(this); reset(); } VDIP::~VDIP(void) { } string VDIP::get_firmware_version(void) const { return "03.66VDAPF"; } bool VDIP::is_short_command_set(void) const { return _short_command_set; } void VDIP::set_short_command_set(bool val) { _short_command_set = val; } bool VDIP::is_binary_mode(void) const { return _binary_mode; } void VDIP::set_binary_mode(bool val) { _binary_mode = val; } FILE * VDIP::get_file(void) const { return _file; } void VDIP::set_file(FILE *file) { _file = file; } void VDIP::register_pio(PIO *pio) { _pio = pio; reset(); } string VDIP::get_root(void) const { return _root; } void VDIP::set_root(string root) { bool had_disk = has_disk(); _root = root; if (_pio) { if (had_disk != has_disk()) { if (has_disk()) _output_buffer = is_short_command_set() ? "DD2\r" : "Device Detected P2\r"; else _output_buffer = is_short_command_set() ? "DR2\r" : "Device Removed P2\r"; set_pio_ext_b(0x02); z80->addCallback(20000, this, NULL); } } CMD_Args *args = new CMD_Args(); args->set_long_arg("slot", 0); args->set_string_arg("filename", _root.c_str()); CMD_EXEC_ARGS("ui-vdip-update-MSG", args); delete args; } bool VDIP::has_disk(void) { return !_root.empty(); } bool VDIP::is_root(void) { return _cwd->size() == 0; } string VDIP::get_cwd(void) const { string cwd = get_root() + "/" + _cwd->join('/'); return cwd; } string VDIP::get_path(string dir) const { string path = get_cwd() + "/" + dir; return path; } void VDIP::chdir_up(void) { if (_cwd->size() > 0) _cwd->pop_back(); } void VDIP::chdir_root(void) { _cwd->clear(); } void VDIP::chdir(string dir) { _cwd->push_back(dir); } void VDIP::set_pio_ext_b(byte_t val) { _pio_ext = val; _pio->set_B_EXT(0x03, _pio_ext); } void VDIP::callback(void *data) { _pio->strobe_B(); } void VDIP::reset(void) { _reset = false; _binary_mode = true; _short_command_set = false; _input_data = -1; _input_buffer = ""; _input = false; _output = -1; _output_buffer = "\rVer " + get_firmware_version() + " On-Line:\r"; if (has_disk()) _output_buffer += "Device Detected P2\rNo Upgrade\r"; _output_buffer += "D:\\>\r"; _pio_ext = 0; _cwd->clear(); if (_file) { fclose(_file); _file = NULL; } if (_pio) { set_pio_ext_b(0x02); z80->addCallback(20000, this, NULL); } } byte_t VDIP::read_byte(void) { if (_reset) return 0xff; int a = _output; _output = -1; DBG(2, form("KCemu/VDIP/read_byte", "VDIP: %04xh [%10Ld]: read_byte -> %02x ('%c')\n", z80->getPC(), z80->getCounter(), a & 0xff, isprint(a) ? a : '.')); return a; } void VDIP::latch_byte(void) { if (_reset) return; if (!_output_buffer.empty()) { _output = _output_buffer.at(0); _output_buffer = _output_buffer.substr(1); } DBG(2, form("KCemu/VDIP/latch_byte", "VDIP: %04xh [%10Ld]: latch_byte -> %02x ('%c')\n", z80->getPC(), z80->getCounter(), _output & 0xff, isprint(_output) ? _output : '.')); } void VDIP::read_end(void) { if (_reset) return; DBG(2, form("KCemu/VDIP/read_end", "VDIP: %04xh [%10Ld]: read_end, output buffer size = %d\n", z80->getPC(), z80->getCounter(), _output_buffer.length())); if (_output_buffer.empty()) set_pio_ext_b(0x01); else z80->addCallback(50, this, NULL); } VDIP_CMD * VDIP::decode_command(string buf) { StringList *list = NULL; VDIP_CMD *vdip_cmd = NULL; if (buf.length() == 0) { vdip_cmd = VDIP_CMD::create_command(this, CMD_EMPTY); } else { list = new StringList(buf, ' '); string cmd = list->front(); if (cmd.length() == 1) vdip_cmd = VDIP_CMD::create_command(this, (vdip_command_t)(cmd.at(0) & 0xff)); else vdip_cmd = VDIP_CMD::create_command(this, list->front()); } if (list && (list->size() > 1)) { list->pop_front(); vdip_cmd->set_args(list); } return vdip_cmd; } void VDIP::write_byte(byte_t val) { if (_reset) return; _input_data = val; DBG(2, form("KCemu/VDIP/write_byte", "VDIP: %04xh [%10Ld]: write_byte <- %02xh ('%c'), input buffer size = %d\n", z80->getPC(), z80->getCounter(), val, isprint(val) ? val : '.', _input_buffer.length())); } void VDIP::write_end(void) { if (_reset) return; DBG(2, form("KCemu/VDIP/write_end", "VDIP: %04xh [%10Ld]: write_end <- %02x ('%c'), input buffer size = %d, CMD = %s\n", z80->getPC(), z80->getCounter(), _input_data, isprint(_input_data) ? _input_data: '.', _input_buffer.length(), _cmd == NULL ? "" : "active")); if (_cmd != NULL) { _cmd->handle_input(_input_data); } else if (_input_data < 0) { // ignore bogus signals on startup } else if (_input_data != 0x0d) { _input_buffer += _input_data; _input_data = -1; } else { string text; for (unsigned int a = 0; a < _input_buffer.length(); a++) text += isprint(_input_buffer.at(a)) ? _input_buffer.at(a) : '.'; text += " ["; for (unsigned int a = 0; a < _input_buffer.length(); a++) { char buf[10]; snprintf(buf, sizeof (buf), "%02x ", _input_buffer.at(a) & 0xff); text += buf; } text += "]"; DBG(2, form("KCemu/VDIP/execute", "VDIP: %04xh [%10Ld]: execute command: %s\n", z80->getPC(), z80->getCounter(), text.c_str())); _cmd = decode_command(_input_buffer); _cmd->exec(); } if (_cmd != NULL) { string response = _cmd->get_response(_input_buffer); if (response.length() > 0) { _input = false; _input_buffer = ""; _output_buffer = response; set_pio_ext_b(0x02); z80->addCallback(1000, this, NULL); delete _cmd; _cmd = NULL; } } } int VDIP::callback_A_in(void) { return _output; } int VDIP::callback_B_in(void) { return -1; } void VDIP::callback_A_out(byte_t val) { } void VDIP::callback_B_out(byte_t val) { } KCemu-0.5.1/src/kc/tape.cc0000644001050700006200000012002211345001576014630 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include /* FIXME */ #include #include #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/memstream.h" #include "kc/z80.h" #include "kc/tape.h" #include "kc/memory.h" #include "kc/basicrun.h" #include "sys/sysdep.h" #include "ui/ui.h" #include "ui/error.h" #include "ui/status.h" #include "libdbg/dbg.h" #define TAPE_IF() (ui->getTapeInterface()) using namespace std; class CMD_tape_load : public CMD { private: Tape *_t; public: CMD_tape_load(Tape *t) : CMD("tape-load") { _t = t; register_cmd("tape-load", 0); register_cmd("tape-run", 1); register_cmd("tape-delete", 2); } void execute(CMD_Args *args, CMD_Context context) { bool ret; istream *is; word_t addr; const char *name; char *shortname; char buf[1000]; kct_file_props_t props; if (!args) return; name = args->get_string_arg("tape-filename"); if (!name) return; switch (context) { case 0: case 1: is = _t->read(name, &props); if (!is) return; if (Preferences::instance()->get_kc_type() == KC_TYPE_Z1013) ret = memory->loadRAM_Z1013(is, props.load_addr); else ret = memory->loadRAM(is, true); if (!ret) break; shortname = sys_basename(name); snprintf(buf, sizeof(buf), _("File `%s' loaded."), shortname); free(shortname); Status::instance()->setMessage(buf); if (context != 1) break; switch (props.type) { case KCT_TYPE_BAS: case KCT_TYPE_BAS_P: switch (Preferences::instance()->get_kc_type()) { case KC_TYPE_85_1: case KC_TYPE_87: /* * write autostart routine into tape buffer */ addr = 0x100; for (int a = 0;a < basicrun_len;a++) memory->memWrite8(addr + a, basicrun[a]); z80->jump(addr); break; default: break; } break; case KCT_TYPE_COM: z80->jump(props.start_addr); break; default: break; } TAPE_IF()->tapeNext(); break; case 2: _t->remove(name); break; } } }; class CMD_tape_attach : public CMD { private: Tape *_t; static const char * _path; public: CMD_tape_attach(Tape *t) : CMD("tape-attach") { _t = t; register_cmd("tape-attach", 0); register_cmd("tape-detach", 3); } void execute(CMD_Args *args, CMD_Context context) { bool create; char buf[1000]; tape_error_t err; char *shortname; const char *filename; create = false; filename = NULL; switch (context) { /* * tape-attach */ case 0: if (!args) args = new CMD_Args(); filename = args->get_string_arg("filename"); if (!filename) { args->set_string_arg("ui-file-select-title", _("Select tape-archive...")); if (_path) args->set_string_arg("ui-file-select-path", _path); args->add_callback("ui-file-select-CB-ok", this, 1); args->add_callback("ui-file-select-CB-cancel", this, 1); CMD_EXEC_ARGS("ui-file-select", args); return; } break; /* * ui-file-select-CB */ case 1: if (args) filename = args->get_string_arg("filename"); break; /* * ui-dialog-yes-no-CB-yes */ case 2: if (args) filename = args->get_string_arg("filename"); create = true; break; /* * tape-detach */ case 3: tape->detach(); CMD_EXEC("ui-tape-detached"); return; } if (filename) { _path = filename; err = tape->attach(filename, create); switch (err) { case TAPE_NOENT: if (!create) { args->set_string_arg("ui-dialog-title", _("create file?")); args->set_string_arg("ui-dialog-text", _("The file '%s' doesn't exist.\n" "Do you want to create it?")); args->set_string_arg("ui-dialog-text-arg", "filename"); args->add_callback("ui-dialog-yes-no-CB-yes", this, 2); CMD_EXEC_ARGS("ui-dialog-yes-no", args); } break; case TAPE_OK: case TAPE_OK_READONLY: shortname = sys_basename(filename); snprintf(buf, sizeof(buf), _("tape-archive `%s' attached."), shortname); free(shortname); Status::instance()->setMessage(buf); /* args should have 'filename' still set here! */ CMD_EXEC_ARGS("ui-tape-attached", args); break; default: Status::instance()->setMessage(_("Can't attach tape-archive.")); break; } } } }; const char * CMD_tape_attach::_path = NULL; class CMD_tape_export : public CMD { private: Tape *_t; static const char * _path; public: CMD_tape_export(Tape *t) : CMD("tape-export") { _t = t; register_cmd("tape-export"); register_cmd("tape-export-wav", 2); } void execute(CMD_Args *args, CMD_Context context) { char buf[1000]; const char *filename, *tapename; filename = 0; tapename = args->get_string_arg("tape-filename"); if (!tapename) return; switch (context) { case 0: if (!args) args = new CMD_Args(); filename = args->get_string_arg("filename"); if (!filename) { args->set_string_arg("ui-file-select-title", _("Export As...")); if (_path) args->set_string_arg("ui-file-select-path", _path); args->add_callback("ui-file-select-CB-ok", this, 1); args->add_callback("ui-file-select-CB-cancel", this, 1); CMD_EXEC_ARGS("ui-file-select", args); } /* fall through */ case 1: if (args) filename = args->get_string_arg("filename"); if (!filename) return; _path = filename; if (tape->export_tap(tapename, filename) == TAPE_OK) { sprintf(buf, _("File `%s' saved."), filename); Status::instance()->setMessage(buf); } else { Status::instance()->setMessage(_("Can't export file.")); } break; case 2: if (!args) args = new CMD_Args(); filename = args->get_string_arg("filename"); if (!filename) { args->set_string_arg("ui-file-select-title", _("Export As...")); if (_path) args->set_string_arg("ui-file-select-path", _path); args->add_callback("ui-file-select-CB-ok", this, 3); args->add_callback("ui-file-select-CB-cancel", this, 3); CMD_EXEC_ARGS("ui-file-select", args); } /* fall through */ case 3: if (args) filename = args->get_string_arg("filename"); if (!filename) return; _path = filename; if (tape->export_wav(tapename, filename) == TAPE_OK) { sprintf(buf, _("File `%s' saved."), filename); Status::instance()->setMessage(buf); } else { Status::instance()->setMessage(_("Can't export file.")); } break; } } }; const char * CMD_tape_export::_path = NULL; class CMD_tape_add_file : public CMD { private: Tape *_t; static const char * _path; public: CMD_tape_add_file(Tape *t) : CMD("tape-add-file") { _t = t; register_cmd("tape-add-file", 0); register_cmd("tape-rename-file", 3); } void execute(CMD_Args *args, CMD_Context context) { CMD_Args *a; fileio_prop_t *prop; kct_file_type_t type; const char *filename, *tapename; filename = 0; if (args) filename = args->get_string_arg("filename"); switch (context) { case 0: if (!filename) { a = new CMD_Args(); a->set_string_arg("ui-file-select-title", _("Select file...")); if (_path) a->set_string_arg("ui-file-select-path", _path); a->add_callback("ui-file-select-CB-ok", this, 1); CMD_EXEC_ARGS("ui-file-select", a); return; } /* fall through */ case 1: if (!filename) return; _path = filename; _t->add(filename); break; case 2: /* * this is the callback entry ui-tape-name-edit-CB-ok * which is used by the function add_file() */ prop = (fileio_prop_t *)args->get_pointer_arg("prop"); tapename = args->get_string_arg("tape-filename"); type = (kct_file_type_t)args->get_long_arg("type"); _t->add_file(tapename, prop, type, KCT_MACHINE_ALL); break; case 3: if (!filename) return; tapename = args->get_string_arg("tape-filename"); if (!tapename) return; _t->rename(filename, tapename); break; } } }; const char * CMD_tape_add_file::_path = NULL; class CMD_tape_play : public CMD { private: Tape *_t; public: CMD_tape_play(Tape *t) : CMD("tape-play") { _t = t; register_cmd("tape-play", 0); register_cmd("tape-record", 1); register_cmd("tape-stop", 2); } void execute(CMD_Args *args, CMD_Context context) { int delay; const char *name; switch (context) { case 0: if (!args) return; name = args->get_string_arg("tape-filename"); if (!name) return; delay = 0; if (args->has_arg("tape-play-delay")) delay = args->get_long_arg("tape-play-delay"); _t->play(name, delay); break; case 1: _t->record(); break; case 2: _t->stop(); break; } } }; static void dump_buf(const char *buf, int block) { int a, b; cout << "tape block dump: block " << hex << setw(2) << setfill('0') << block << "h [saved block number: " << hex << setw(2) << setfill('0') << (((int)*buf) & 0xff) << "h]" << endl; for (a = 0;a < 128;a += 16) { cout << hex << setw(2) << setfill('0') << a << ":"; for (b = 0;b < 16;b++) { cout << " " << hex << setw(2) << setfill('0') << (buf[a + b + 1] & 0xff); if (b == 8) cout << " -"; } cout << " | "; for (b = 0;b < 16;b++) { cout << (isprint(buf[a + b + 1]) ? buf[a + b + 1] : '.'); if (b == 8) cout << " - "; } cout << endl; } } Tape::Tape(int bit_0, int bit_1, int bit_s, int start_block) : Callback("Tape") { BIT_0 = bit_0; BIT_1 = bit_1; BIT_S = bit_s; _start_block = start_block; _record = false; _power = 0; /* FIXME: */ _flip_flop = 0; _bits = -1; _state = 0; _sync = 2; _tape_cb = 0; _cmd_tape_load = new CMD_tape_load(this); _cmd_tape_play = new CMD_tape_play(this); _cmd_tape_attach = new CMD_tape_attach(this); _cmd_tape_export = new CMD_tape_export(this); _cmd_tape_add_file = new CMD_tape_add_file(this); } Tape::~Tape() { delete _cmd_tape_load; delete _cmd_tape_play; delete _cmd_tape_attach; delete _cmd_tape_export; delete _cmd_tape_add_file; } void Tape::set_tape_callback(TapeCallback *tape_cb) { _tape_cb = tape_cb; } void Tape::power(bool val) { _power = val; DBG(1, form("KCemu/Tape/power", "Tape::power(): Power %s\n", _power ? "on" : "off")); TAPE_IF()->tapePower(_power); } void Tape::record(void) { _record = true; _sync = 2; _sync_count = 200; _flip_flop = 0; _byte_counter = 0; _state = 0; _play = false; _record = true; _os = new memstream(); } void Tape::play(const char *name, int delay) { long offset; kct_file_props_t props; DBG(1, form("KCemu/Tape/play", "Tape::play(): name = '%s', delay = %d seconds\n", name, delay)); if (name == NULL) return; _play = true; _record = false; _init = 4000; _last_block = 0; _record = false; _state = 0; _byte_counter = BLOCK_SIZE; _bytes_read = 0; _flip_flop = 0; _is = _kct_file.read(name, &props); _file_size = props.size; _file_type = props.type; if (_is == NULL) { DBG(1, form("KCemu/Tape/play", "Tape::play(): _is == NULL")); stop(); } else { offset = get_delay(delay); DBG(1, form("KCemu/Tape/play", "Tape::play(): trigger offset is %ld\n", offset)); z80->addCallback(offset, this, (void *)2); } } const char * Tape::get_filename(byte_t *data) { int a; static char filename[9]; memcpy(filename, data, 8); filename[8] = '\0'; for (a = 7;(a > 0) && (filename[a] != ' ');a++) filename[a] = '\0'; return filename; } bool Tape::check_addr(byte_t *data, long size) { unsigned short load, end, start, x; /* * finally look if specified addresses are plausible */ x = data[17]; load = data[18] | (data[19] << 8); end = data[20] | (data[21] << 8); start = data[22] | (data[23] << 8); if (load >= end) return false; if ((end - load - 1) > size) return false; if (x > 2) if ((start < load) || (start >= end)) return false; return true; } bool Tape::check_com(byte_t *data, long size) { int a; if ((data[9] == 'C') && (data[10] == 'O') && (data[11] == 'M')) if ((data[17] >= 2) && (data[18] <= 0x0a)) return check_addr(data, size - 129); for (a = 1;a < 9;a++) { if (data[a] == '\0') break; if ((data[a] >= 'A') && (data[a] <= 'Z')) continue; if ((data[a] >= 'a') && (data[a] <= 'z')) continue; if (strchr(" .&+", data[a]) != NULL) continue; break; } if (a > 1) return check_addr(data, size - 129); return false; } void Tape::stop(void) { byte_t *ptr; ofstream os; int load, start; kct_file_type_t type; const char *filename; _play = false; _record = false; TAPE_IF()->tapeProgress(0); if (!_os) return; if (((memstream *)_os)->size() == 0) return; os.open("/tmp/kcemu.output", ios::out | ios::binary); if (!os) cout << "Tape::stop(): can't open output file" << endl; else { ptr = (byte_t *)((memstream *)_os)->str(); DBG(1, form("KCemu/Tape/write", "Tape::stop(): writing output file (%d bytes)\n", ((memstream *)_os)->size())); os.write((char *)ptr, ((memstream *)_os)->size()); load = 0; start = 0; filename = "FILE"; if ((ptr[1] == 0xd3) && (ptr[2] == 0xd3) && (ptr[3] == 0xd3)) { type = KCT_TYPE_BAS; filename = get_filename(ptr + 4); } else if ((ptr[1] == 0xd4) && (ptr[2] == 0xd4) && (ptr[3] == 0xd4)) { type = KCT_TYPE_DATA; filename = get_filename(ptr + 4); } else if ((ptr[1] == 0xd5) && (ptr[2] == 0xd5) && (ptr[3] == 0xd5)) { type = KCT_TYPE_LIST; filename = get_filename(ptr + 4); } else if ((ptr[1] == 0xd7) && (ptr[2] == 0xd7) && (ptr[3] == 0xd7)) { type = KCT_TYPE_BAS_P; filename = get_filename(ptr + 4); } else { if (check_com(ptr, ((memstream *)_os)->size())) { type = KCT_TYPE_COM; load = ptr[18] | (ptr[19] << 8); start = ptr[22] | (ptr[23] << 8); filename = get_filename(ptr + 1); } else { type = KCT_TYPE_BIN; } } DBG(1, form("KCemu/Tape/write", "Tape::stop(): type = %s, load = %04xh, start = %04xh\n", _kct_file.type_name(type), load, start)); _kct_file.write(filename, ptr, ((memstream *)_os)->size(), load, start, type, KCT_MACHINE_ALL); update_tape_list(); os.close(); } delete _os; _os = NULL; } void Tape::seek(int percent) { unsigned long offset; DBG(1, form("KCemu/Tape/seek", "Tape::seek(): seek to %d percent\n", percent)); if (!_is) return; offset = (percent * _file_size) / 100; offset -= (offset % 129); DBG(1, form("KCemu/Tape/seek", "Tape::seek(): new offset is %ld (file size is %ld)\n", offset, _file_size)); _is->seekg(offset); } long Tape::get_delay(int seconds) { return 600 * BIT_S * seconds; } void Tape::callback(void *data) { long edge = (long)data; if (_play) do_play(edge); } void Tape::do_play_bic(int edge) { static int bit; static byte_t byte; static int bytes; if (_state == 0) { _state++; bytes = 0; } if (_init > 0) { _init--; z80->addCallback(600, this, (void *)1); z80->addCallback(1200, this, (void *)0); return; } if (_init == 0) { bit = 0; _init = -1; z80->addCallback(1300, this, (void *)1); z80->addCallback(2600, this, (void *)0); return; } if (_is == NULL) return; if (bit == 0) { bytes++; byte = _is->get(); int peek = ((memstream *)_is)->peek(); // FIXME: bug in memstream if (peek == EOF) return; } if (bit < 8) { if (byte & (1 << bit)) { z80->addCallback( 600, this, (void *)1); z80->addCallback(1200, this, (void *)1); z80->addCallback(1800, this, (void *)1); z80->addCallback(2400, this, (void *)0); } else { z80->addCallback(1300, this, (void *)1); z80->addCallback(2600, this, (void *)0); } } else { z80->addCallback( 600, this, (void *)1); z80->addCallback(1200, this, (void *)1); z80->addCallback(1800, this, (void *)1); z80->addCallback(2400, this, (void *)0); } bit++; if (bit == 10) { bit = 0; _init = 0; if (bytes == 16) _init = 4000; } if ((bytes % 128) == 127) TAPE_IF()->tapeProgress((100 * bytes) / _file_size); } void Tape::do_play_z1013(int edge) { static int idx; static int bidx; static int byte; static int bytes; static int blocks; static int hs_flag; if (_is == NULL) return; switch (_state) { case 0: // SYNC z80->addCallback(1500, this, (void *)1); z80->addCallback(3000, this, (void *)0); if (_init > 0) { _init--; } else { idx = 20; bytes = 0; blocks = 0; hs_flag = 0; _state++; } break; case 1: // BLOCK SYNC z80->addCallback(1550, this, (void *)1); z80->addCallback(3100, this, (void *)0); if (idx > 0) { idx--; } else { idx = 20; _state++; } break; case 2: // BLOCK START z80->addCallback(775, this, (void *)1); z80->addCallback(1550, this, (void *)0); bidx = 0; _state++; break; case 3: // BLOCK DATA if (bidx == 0) { byte = _is->get(); if (byte == EOF) return; if (blocks == 0) { if ((bytes == 15) && (byte == 0xd3)) hs_flag++; if ((bytes == 16) && (byte == 0xd3)) hs_flag++; if ((bytes == 17) && (byte == 0xd3)) hs_flag++; } //cout << hex << setw(2) << setfill('0') << (int)byte << " "; bytes++; } if (byte & (1 << bidx)) { z80->addCallback(775, this, (void *)0); } else { z80->addCallback(387, this, (void *)1); z80->addCallback(775, this, (void *)0); } bidx++; if (bidx == 8) { bidx = 0; if ((bytes % 36) == 0) { _state = 1; if (hs_flag == 3) { // long sync after first header save block idx = 1000; hs_flag = 0; } //cout << endl; TAPE_IF()->tapeProgress((100 * bytes) / _file_size); blocks++; } } break; } } void Tape::do_play_basicode(int edge) { static int idx; static int bidx; static int byte; static int bytes; static int checksum; static int done; if (_is == NULL) return; switch (_state) { case 0: // SYNC HEADER if (_init > 0) { _init = 0; idx = 12000; } z80->addCallback(BIT_0, this, (void *)1); z80->addCallback(2 * BIT_0, this, (void *)0); if (--idx == 0) { idx = 20; byte = 0x82; // START BYTE bytes = 0; bidx = 0; checksum = 0; done = 0; _state++; } break; case 1: // PROGRAM DATA if (bidx == 11) { if (done) { // END SYNC idx = 400; z80->addCallback(BIT_0, this, (void *)1); z80->addCallback(2 * BIT_0, this, (void *)0); _state = 3; return; } else if (byte == 0x83) // END BYTE { byte = checksum; done = 1; } else { byte = _is->get(); if (byte == EOF) byte = 0x83; // END BYTE else byte ^= 0x80; } bytes++; bidx = 0; } switch (bidx) { case 0: // START BIT checksum ^= byte; z80->addCallback(BIT_1, this, (void *)1); z80->addCallback(2 * BIT_1, this, (void *)0); if ((bytes % 256) == 255) TAPE_IF()->tapeProgress((100 * bytes) / _file_size); break; case 9: // STOP BITS case 10: z80->addCallback(BIT_0, this, (void *)1); z80->addCallback(2 * BIT_0, this, (void *)0); break; default: // DATA BITS 0 - 7 if (byte & (1 << (bidx - 1))) { z80->addCallback(BIT_0, this, (void *)1); z80->addCallback(2 * BIT_0, this, (void *)0); _state++; } else { z80->addCallback(BIT_1, this, (void *)1); z80->addCallback(2 * BIT_1, this, (void *)0); } break; } bidx++; break; case 2: // second wave for 1 bits z80->addCallback(BIT_0, this, (void *)1); z80->addCallback(2 * BIT_0, this, (void *)0); _state--; break; case 3: // SYNC TRAILER if (idx > 0) { idx--; z80->addCallback(BIT_0, this, (void *)1); z80->addCallback(2 * BIT_0, this, (void *)0); } break; } } void Tape::do_play(int edge) { int len; if (_tape_cb) _tape_cb->tape_callback(edge); if (edge == 1) { /* * rising edge of signal */ return; } if (edge == 2) { /* * trigger signal to get everything running... * this comes (delayed) from the automatic playing so we * ignore this if power is off */ DBG(1, form("KCemu/Tape/play", "Tape::play(): got first signal (power = %d)\n", _power)); if (!_power) return; } if (_file_type == KCT_TYPE_BASICODE) { do_play_basicode(edge); return; } switch (Preferences::instance()->get_kc_type()) { case KC_TYPE_A5105: do_play_bic(edge); return; case KC_TYPE_Z1013: do_play_z1013(edge); return; default: break; } /* * sync tape and computer */ if (_init) { _init--; z80->addCallback(BIT_1, this, (void *)1); z80->addCallback(2 * BIT_1, this, (void *)0); //if (_init < 8) //cout << 'I' << flush; if (_init == 0) { _bits = 0; //cout << '\n' << flush; } return; } /* * check for new block */ if (_byte_counter == BLOCK_SIZE) { if (_last_block) { TAPE_IF()->tapeNext(); /* * end of file */ return; } if (_is == NULL) { /* * abort if no input stream */ DBG(1, form("KCemu/Tape/play", "Tape::play(): no input stream\n")); return; } _bytes_read = ((memstream *)_is)->tellg(); // FIXME: bug in memstream /* * start_block is 0 for KC 85/1, KC 87 .COM files * 1 for KC 85/1, KC 87 basic files * 1 for KC 85/3, KC 85/4 all files */ //_block = _bytes_read / 128; //if (_file_type == KCT_TYPE_BAS) //_block += 1; //else //_block += _start_block; _byte_counter = 0; memset(_buf, 0, 129); /* * use get() for now; read() / gcount() is broken for * the current memstream class */ len = 0; while (len < 129) { int c = _is->get(); if (c == EOF) break; _buf[len++] = c; } _block = _buf[0]; TAPE_IF()->tapeProgress((100 * _bytes_read) / _file_size); if (_block > _start_block) { _init = 200; if (_file_type == KCT_TYPE_LIST) _init = 2000; } else { _init = 4000; } int peek = ((memstream *)_is)->peek(); // FIXME: bug in memstream if ((len != 129) || (peek == EOF)) { /* * last block */ DBG(1, form("KCemu/Tape/play", "Tape::play(): len = %d, peek() = %d\n", len, peek)); _last_block = 1; delete _is; _is = NULL; } DBG(1, form("KCemu/Tape/play", "Tape::play(): starting tape block %d [%d/%d]\n", _block, _bytes_read, _file_size)); z80->addCallback(BIT_1, this, (void *)1); z80->addCallback(2 * BIT_1, this, (void *)0); return; } /* * handle special bytes: * * byte 0: block number * byte 129: checksum */ if (_bits == -1) { _bits = 8; switch (_byte_counter) { case 0: _byte = _block; _crc = 0; break; case 129: _byte = _crc; break; default: _byte = _buf[_byte_counter]; // _buf[0] is block number! _crc += _byte; break; } _byte_counter++; //if ((_byte_counter % 8) == 0) //cout << '\n' << flush; } /* * sync bit */ if (_bits == 0) { //cout << 'S' << flush; z80->addCallback(BIT_S, this, (void *)1); z80->addCallback(2 * BIT_S, this, (void *)0); } else { if (_byte & (1 << (8 - _bits))) { /* * 1 bit */ //cout << '1' << flush; z80->addCallback(BIT_1, this, (void *)1); z80->addCallback(2 * BIT_1, this, (void *)0); } else { /* * 0 bit */ //cout << '0' << flush; z80->addCallback(BIT_0, this, (void *)1); z80->addCallback(2 * BIT_0, this, (void *)0); } } _bits--; } void Tape::tape_signal_bic(long diff) { int bit_type; static int byte, obit; if (diff > 1000) bit_type = 0; else bit_type = 1; if (_sync > 0) { if (bit_type == 1) _sync--; else _sync = 100; return; } if ((_sync == 0) && (bit_type == 1)) { _bits = 11; _byte_counter = 0; return; } _sync = -1; if (_flip_flop == 0) _flip_flop++; else if (obit == bit_type) _flip_flop++; if ((bit_type == 0) && (_flip_flop == 2)) { byte >>= 1; _flip_flop = 0; byte &= 0x3ff; _bits--; } else if ((bit_type == 1) && (_flip_flop == 4)) { byte >>= 1; _flip_flop = 0; byte |= 0x400; _bits--; } if (_bits == 0) { _bits = 11; if (byte & 1) { _sync = 100; cout << "SYNC" << endl; } else { _byte = (byte >> 1) & 0xff; cout << "byte: " << hex << (int)_byte << " - " << (int)byte << endl; _os->write((const char *)&_byte, 1); } } obit = bit_type; } void Tape::tape_signal_z1013(long diff) { int bit, sum; static int idx; static int sync; static int byte; static int bidx; static int state = 0; static bool first; static byte_t buf[36]; if (diff > 20000) { state = 0; sync = 100; return; } switch (state) { case 0: // SYNC if (sync > 0) { if (diff > 1200) sync--; else sync = 100; } if (sync == 0) { sync = 100; state++; } break; case 1: // BLOCK SYNC if (diff > 1200) break; if (diff < 580) { sync = 100; state = 0; break; } state++; break; case 2: // BLOCK START if ((diff < 580) || (diff > 1200)) { sync = 100; state = 0; break; } idx = 0; bidx = 0; first = false; state++; break; case 3: // BLOCK DATA if (diff > 1200) { sync = 100; state = 0; break; } bit = (diff > 580) ? 128 : 0; if (bit == 0) { if (first) { first = false; } else { first = true; break; } } bidx++; byte >>= 1; byte = (byte & 0x7f) | bit; if (bidx == 8) { bidx = 0; buf[idx++] = byte; if (idx == 36) { sum = 0; for (idx = 0;idx < 34;idx += 2) sum += buf[idx] | (buf[idx + 1] << 8); sum &= 0xffff; //for (idx = 0;idx < 36;idx++) //cout << hex << setw(2) << setfill('0') << (int)buf[idx] << " "; //cout << "=> " << (sum & 0xff) << " " << ((sum >> 8) & 0xff) << endl; for (idx = 0;idx < 36;idx++) _os->write((const char *)&buf[idx], 1); idx = 0; state = 1; } } break; } } void Tape::tape_signal(void) { long diff; int bit_type; static unsigned long long c_old, c_new; if (!_power) return; /* * abort if no output stream */ if (_os == NULL) return; if (!_record) return; c_new = z80->getCounter(); diff = c_new - c_old; c_old = c_new; switch (Preferences::instance()->get_kc_type()) { case KC_TYPE_A5105: tape_signal_bic(diff); return; case KC_TYPE_Z1013: tape_signal_z1013(diff); return; default: break; } if (diff < ((BIT_0 + BIT_1) / 2)) bit_type = 0; else if (diff > ((BIT_S + BIT_1) / 2)) bit_type = 2; else bit_type = 1; if (_sync > 0) { /* * skip sync block */ if (bit_type == 1) return; /* * skip first stop bit */ if (bit_type == 2) { _sync--; cout << '*' << flush; _bits = 8; _byte_counter = 0; } else { cout << '?' << flush; } return; } if (++_flip_flop == 2) { _flip_flop = 0; switch (bit_type) { case 0: /* 0 bit */ DBG(2, form("KCemu/Tape/record", "0")); _byte >>= 1; _byte &= 0x7f; _bits--; break; case 1: /* 1 bit */ DBG(2, form("KCemu/Tape/record", "1")); _byte >>= 1; _byte |= 0x80; _bits--; break; case 2: /* separator bit */ DBG(2, form("KCemu/Tape/record", "S")); _bits = 8; break; } if (_bits == 0) { _bits = -1; switch (_state) { case 0: /* * block number */ _state++; _block = _byte; _buf[0] = _byte; memset(&_buf[1], 0, 128); _crc_calculated = 0; DBG(1, form("KCemu/Tape/block-info", "Tape output: block %02x\n", _block)); break; case 1: /* * block data */ _buf[_byte_counter + 1] = _byte; _byte_counter++; _crc_calculated += _byte; if (_byte_counter == 128) { _byte_counter = 0; _state++; dump_buf((char *)_buf, _block); } break; case 2: /* * block crc */ _state++; _crc = _byte; if (_crc_calculated == _crc) _os->write((char *)_buf, 129); else DBG(0, form("KCemu/Tape/block-info", "Tape output: wrong crc: %04x != %04x\n", _crc, _crc_calculated)); break; case 3: /* * skip one byte ?!? */ _state = 0; _sync = 2; break; } } } } tape_error_t Tape::attach(const char *filename, bool create) { KCTDir *dir; kct_error_t err; _kct_file.close(); if (create) { DBG(0, form("KCemu/Tape/attach", "Tape::attach(): create (%s)\n", filename)); if (_kct_file.create(filename) != KCT_OK) return TAPE_ERROR; } else { DBG(0, form("KCemu/Tape/attach", "Tape::attach(): open (%s)\n", filename)); err = _kct_file.open(filename); switch (err) { case KCT_OK: case KCT_OK_READONLY: break; case KCT_ERROR_NOENT: return TAPE_NOENT; default: return TAPE_ERROR; } } dir = _kct_file.readdir(); TAPE_IF()->tapeAttach(""); for (KCTDir::iterator it = dir->begin();it != dir->end();it++) { DBG(1, form("KCemu/Tape/attach", "Tape::attach(): %s (0x%02x)\n", (*it)->name, (*it)->type)); TAPE_IF()->tapeAddFile((*it)->name, (*it)->load_addr, (*it)->start_addr, (*it)->uncompressed_size, (*it)->type); } if (_kct_file.is_readonly()) return TAPE_OK_READONLY; return TAPE_OK; } tape_error_t Tape::detach(void) { DBG(0, form("KCemu/Tape/detach", "Tape::detach(): close\n")); stop(); _kct_file.close(); TAPE_IF()->tapeDetach(); TAPE_IF()->tapeProgress(0); return TAPE_OK; } tape_error_t Tape::add(const char *name) { fileio_prop_t *ptr, *prop; if (fileio_load_file(name, &prop) != 0) return TAPE_ERROR; if (DBG_check("KCemu/Tape/add")) fileio_debug_dump(prop, 0); for (ptr = prop;ptr != NULL;ptr = ptr->next) { kct_file_type_t type; switch (ptr->type) { case FILEIO_TYPE_COM: type = KCT_TYPE_COM; DBG(0, form("KCemu/Tape/add", "Tape::add(): '%s' %04x/%04x [COM]\n", (const char *)&ptr->name[0], ptr->load_addr, ptr->start_addr)); break; case FILEIO_TYPE_BAS: type = KCT_TYPE_BAS; DBG(0, form("KCemu/Tape/add", "Tape::add(): '%s' [BAS]\n", (const char *)&ptr->name[0])); break; case FILEIO_TYPE_DATA: type = KCT_TYPE_DATA; DBG(0, form("KCemu/Tape/add", "Tape::add(): '%s' [DATA]\n", (const char *)&ptr->name[0])); break; case FILEIO_TYPE_LIST: type = KCT_TYPE_LIST; DBG(0, form("KCemu/Tape/add", "Tape::add(): '%s' [LIST]\n", (const char *)&ptr->name[0])); break; case FILEIO_TYPE_PROT_BAS: type = KCT_TYPE_BAS_P; DBG(0, form("KCemu/Tape/add", "Tape::add(): '%s' [BAS_P]\n", (const char *)&ptr->name[0])); break; case FILEIO_TYPE_BASICODE: type = KCT_TYPE_BASICODE; DBG(0, form("KCemu/Tape/add", "Tape::add(): '%s' [BASICODE]\n", (const char *)&ptr->name[0])); break; default: Error::instance()->info(_("The format of the selected file is not recognized.")); DBG(0, form("KCemu/Tape/add", "Tape::add(): '%s' %04x/%04x [ignored]\n", (const char *)&ptr->name[0], ptr->load_addr, ptr->start_addr)); return TAPE_ERROR; } add_file((const char *)&ptr->name[0], ptr, type, KCT_MACHINE_ALL); } update_tape_list(); fileio_free_prop(&prop); return TAPE_OK; } tape_error_t Tape::add_file(const char *name, fileio_prop_t *prop, kct_file_type_t type, kct_machine_type_t machine) { char buf[1000]; kct_error_t err; CMD_Args *args = 0; err = _kct_file.write(name, prop->data, prop->size, prop->load_addr, prop->start_addr, type, KCT_MACHINE_ALL); if (err != KCT_ERROR_EXIST) { snprintf(buf, 1000, _("File `%s' [%s] added."), name, prop->filetype); Status::instance()->setMessage(buf); return TAPE_OK; } if (args == 0) args = new CMD_Args(); args->set_string_arg("tape-rename-title", _("The file you selected has a name that is already\n" "present in the current tape archive.\n" "\n" "Please select a different name to add this file\n" "to the tape archive or use the cancel button to\n" "skip this file.")); args->set_string_arg("tape-filename", name); args->set_pointer_arg("prop", prop); args->set_long_arg("type", type); args->add_callback("ui-tape-name-edit-CB-ok", _cmd_tape_add_file, 2); CMD_EXEC_ARGS("ui-tape-name-edit", args); return TAPE_OK; } void Tape::update_tape_list(void) { KCTDir *dir; /* * FIXME: update tape listing */ dir = _kct_file.readdir(); TAPE_IF()->tapeAttach(""); for (KCTDir::iterator it = dir->begin();it != dir->end();it++) { TAPE_IF()->tapeAddFile((*it)->name, (*it)->load_addr, (*it)->start_addr, (*it)->uncompressed_size, (*it)->type); } } tape_error_t Tape::add_raw(const char *filename, const char *tape_filename, const char *kc_filename, unsigned short load, unsigned short start, bool autostart) { FILE *f; int len; unsigned char buf[65536 + 256]; if ((f = fopen(filename, "rb")) == NULL) { cerr << "can't open `" << filename << "'" << endl; return TAPE_ERROR; } memset(buf, 0, 128); len = fread(buf + 128, 1, 65536, f); fclose(f); strcpy((char *)buf, kc_filename); buf[17] = load & 0xff; buf[18] = (load >> 8) & 0xff; load += len + 1; buf[19] = load & 0xff; buf[20] = (load >> 8) & 0xff; if (autostart) { buf[16] = 3; buf[21] = start & 0xff; buf[22] = (start >> 8) & 0xff; } else { buf[16] = 2; buf[21] = 0xff; buf[22] = 0xff; } _kct_file.write(tape_filename, buf, len + 128, load, start, KCT_TYPE_COM, KCT_MACHINE_ALL); update_tape_list(); return TAPE_OK; } tape_error_t Tape::rename(const char *from, const char *to) { if (_kct_file.rename(from, to) != KCT_OK) return TAPE_ERROR; update_tape_list(); return TAPE_OK; } tape_error_t Tape::remove(const char *name) { int idx; //cout << "Tape::remove(): [1] " << name << endl; // FIXME: using the index internal to the user interface // is kinda ugly if (name == NULL) { idx = TAPE_IF()->tapeGetSelected(); name = TAPE_IF()->tapeGetName(idx); if (name == NULL) return TAPE_ERROR; } //cout << "Tape::remove(): [2] " << name << endl; _kct_file.remove(name); TAPE_IF()->tapeRemoveFile(idx); update_tape_list(); return TAPE_OK; } tape_error_t Tape::export_tap(const char *name, const char *filename) { int ret; byte_t *buf; istream *is; unsigned int a; kct_file_props_t props; is = tape->read(name, &props); if (!is) return TAPE_ERROR; buf = new byte_t[props.size]; for (a = 0;a < props.size;a++) buf[a] = is->get(); delete is; ret = fileio_save_tap(filename, buf, props.size); delete[] buf; if (ret < 0) return TAPE_ERROR; return TAPE_OK; } tape_error_t Tape::export_wav(const char *name, const char *filename) { int ret; byte_t *buf; istream *is; unsigned int a; kct_file_props_t props; is = tape->read(name, &props); if (!is) return TAPE_ERROR; buf = new byte_t[props.size]; for (a = 0;a < props.size;a++) buf[a] = is->get(); delete is; ret = fileio_save_wav(filename, buf, props.size); delete[] buf; if (ret < 0) return TAPE_ERROR; return TAPE_OK; } istream * Tape::read(const char *name, kct_file_props_t *props) { return _kct_file.read(name, props); } KCemu-0.5.1/src/kc/timer.cc0000644001050700006200000000172211345001576015024 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/timer.h" Timer::Timer(const char *name) : Callback(name) { } Timer::~Timer(void) { } KCemu-0.5.1/src/kc/ports.cc0000644001050700006200000000676111345001576015063 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/z80.h" #include "kc/ports.h" #include "libdbg/dbg.h" using namespace std; NullPort::NullPort(const char *name) { _name = strdup(name); } NullPort::~NullPort(void) { free(_name); } byte_t NullPort::in(word_t addr) { byte_t val = 0xff; DBG(2, form("KCemu/Ports/NullPort/in", "%s: in() addr = %04x (returning %02x)\n", _name, addr, val)); return val; } void NullPort::out(word_t addr, byte_t val) { DBG(2, form("KCemu/Ports/NullPort/out", "%s: out() addr = %04x, val = %02x\n", _name, addr, val)); } PortGroup::PortGroup(const char *name, PortInterface *p, byte_t start, word_t len, int prio) { _p = p; _start = start; _len = len; _prio = prio; _name = strdup(name); _active = true; } PortGroup::~PortGroup(void) { free(_name); } Ports::Ports(void) { } Ports::~Ports(void) { } void Ports::insert(port_list_t *l, PortGroup *group) { int prio; port_list_t::iterator it; prio = group->get_prio(); for (it = l->begin();it != l->end();it++) if ((*it)->get_prio() > prio) break; l->insert(it, group); } PortGroup * Ports::register_ports(const char *name, byte_t start, word_t len, PortInterface *p, int prio) { int a; PortGroup *portg = new PortGroup(name, p, start, len, prio); for (a = start;a < (len + start);a++) insert(&_port_list[a], portg); reload_prt_ptr(); return portg; } void Ports::unregister_ports(PortGroup *p) { int a; for (a = p->get_start();a < (p->get_len() + p->get_start());a++) _port_list[a].remove(p); reload_prt_ptr(); } void Ports::reload_prt_ptr(void) { port_list_t::iterator it; for (int a = 0;a < NR_PORTS;a++) { for (it = _port_list[a].begin();it != _port_list[a].end();it++) if ((*it)->is_active()) { _port_ptr[a] = (*it)->get_port_if(); break; } } } byte_t Ports::in(word_t addr) { return _port_ptr[addr & 0xff]->in(addr); } void Ports::out(word_t addr, byte_t val) { _port_ptr[addr & 0xff]->out(addr, val); } void Ports::info(void) { int a; port_list_t::iterator it; cerr << " Ports:" << endl; cerr << " ------" << endl << endl; for (a = 0;a < NR_PORTS;a++) { if (_port_list[a].size() > 1) { cerr << " " << hex << setw(2) << setfill('0') << a << "h:"; /* * display registered ports but don't list the fallback * entry that comes as the last entry */ for (it = _port_list[a].begin();it != --(_port_list[a].end());it++) cerr << " [\"" << (*it)->get_name() << "\" " << ((*it)->is_active() ? 'A' : 'a') << " ]"; cout << endl; } } } KCemu-0.5.1/src/kc/pio9.cc0000644001050700006200000000416111345001576014564 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/pio9.h" #include "libdbg/dbg.h" PIO9::PIO9(void) { } PIO9::~PIO9(void) { } byte_t PIO9::in(word_t addr) { byte_t val; switch (addr & 3) { case 0: val = in_A_DATA(); break; case 1: val = in_B_DATA(); break; case 2: val = in_A_CTRL(); break; case 3: val = in_B_CTRL(); break; } DBG(2, form("KCemu/PIO/9/in", "PIO9::in(): %04xh: addr = %04x, val = %02x\n", z80->getPC(), addr, val)); return val; } void PIO9::out(word_t addr, byte_t val) { DBG(3, form("KCemu/PIO/9/out", "PIO9::out(): %04xh: addr = %04x, val = %02x\n", z80->getPC(), addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } void PIO9::change_A(byte_t changed, byte_t val) { } void PIO9::change_B(byte_t changed, byte_t val) { } void PIO9::tape_callback(byte_t val) { static int x = 0; //cout << "PIO9::tape_callback(): " << hex << (int)val << endl; set_B_EXT(0x80, x); x = 0x80 - x; } KCemu-0.5.1/src/kc/pio.cc0000644001050700006200000003403511345001576014476 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/pio.h" #include "kc/z80.h" #include "kc/tape.h" #include "kc/memory.h" #include "libdbg/dbg.h" //#define PIO_OUT_CTRL_DEBUG using namespace std; PIO::PIO(void) : InterfaceCircuit("PIO") { _first_out[A] = true; _first_out[B] = true; _cb_a_in = 0; _cb_a_out = 0; _cb_b_in = 0; _cb_b_out = 0; reset(true); z80->register_ic(this); _z80_irq_mask = z80->get_irq_mask(); } PIO::~PIO(void) { z80->unregister_ic(this); } void PIO::reset(bool power_on) { _irq[A] = _irq[B] = 0; _value[A] = _value[B] = 0; _irq_vector[A] = _irq_vector[B] = 0; _ready[A] = _ready[B] = 1; _strobe[A] = _strobe[B] = 0; _mode[A] = _mode[B] = MODE_INPUT; _irq_enable[A] = _irq_enable[B] = 0; _irq_active[A] = _irq_active[B] = 0; _ext[A] = 0xff; _ext[B] = 0xff; _ext_fn[A] = 0; _ext_fn[B] = 0; _bit_mode[A] = 0; _bit_mode[B] = 0; _bit_mode_follows[A] = false; _bit_mode_follows[B] = false; _irq_mask[A] = 0xff; _irq_mask[B] = 0xff; _irq_h_l[A] = 0; _irq_h_l[B] = 0; _irq_and_or[A] = 0; _irq_and_or[B] = 0; _irq_mask_follows[A] = false; _irq_mask_follows[B] = false; } byte_t PIO::in_A_DATA(void) { int cb; byte_t ret; cb = -1; if (_cb_a_in) cb = _cb_a_in->callback_A_in(); if (_mode[A] == MODE_CONTROL) { if (cb >= 0) _ext[A] = cb; ret = (_value[A] & ~_bit_mode[A]) | (_ext[A] & _bit_mode[A]); DBG(2, form("KCemu/PIO/A/in_DATA", "PIO::in(): %04xh: port A DATA (mode %d): val = %02x, mask = %02x, ext = %02x\n", z80->getPC(), _mode[A], ret, _bit_mode[A], _ext[A])); } else { ret = _value[A]; if (cb >= 0) ret = cb; DBG(2, form("KCemu/PIO/A/in_DATA", "PIO::in(): %04xh: port A DATA (mode %d): val = %02x\n", z80->getPC(), _mode[A], ret)); } return ret; } byte_t PIO::in_B_DATA(void) { int cb; byte_t ret; cb = -1; if (_cb_b_in) cb = _cb_b_in->callback_B_in(); if (_mode[B] == MODE_CONTROL) { if (cb >= 0) _ext[B] = cb; ret = (_value[B] & ~_bit_mode[B]) | (_ext[B] & _bit_mode[B]); DBG(2, form("KCemu/PIO/B/in_DATA", "PIO::in(): %04xh: port B DATA (mode %d): val = %02x, mask = %02x, ext = %02x\n", z80->getPC(), _mode[B], ret, _bit_mode[B], _ext[B])); } else { ret = _value[B]; if (cb >= 0) ret = cb; DBG(2, form("KCemu/PIO/B/in_DATA", "PIO::in(): %04xh: port B DATA (mode %d): val = %02x\n", z80->getPC(), _mode[B], ret)); } return ret; } byte_t PIO::in_A_CTRL(void) { byte_t ret = 0xff; DBG(2, form("KCemu/PIO/A/in_CTRL", "PIO::in(): %04xh: port A CTRL (mode %d): val = %02x\n", z80->getPC(), _mode[A], ret)); return ret; /* FIXME: */ } byte_t PIO::in_B_CTRL(void) { byte_t ret = 0xff; DBG(2, form("KCemu/PIO/B/in_CTRL", "PIO::in(): %04xh: port B CTRL (mode %d): val = %02x\n", z80->getPC(), _mode[B], ret)); return ret; /* FIXME: */ } void PIO::out_A_DATA(byte_t val) { DBG(2, form("KCemu/PIO/A/out_DATA", "PIO::out(): %04xh: port A DATA (mode %d): val = %02x\n", z80->getPC(), _mode[B], val)); if (_mode[A] == MODE_INPUT) { _value[A] = val; return; } if (_first_out[A]) { _value[A] = ~val; _first_out[A] = false; } change_A(_value[A] ^ val, val); _value[A] = val; _ready[A] = 1; if (_cb_a_out) _cb_a_out->callback_A_out(val); } void PIO::out_B_DATA(byte_t val) { DBG(2, form("KCemu/PIO/B/out_DATA", "PIO::out(): %04xh: port B DATA (mode %d): val = %02x\n", z80->getPC(), _mode[B], val)); if (_mode[B] == MODE_INPUT) { _value[B] = val; return; } if (_first_out[B]) { _value[B] = ~val; _first_out[B] = false; } change_B(_value[B] ^ val, val); _value[B] = val; _irq[B] = 1; _ready[B] = 1; if (_cb_b_out) _cb_b_out->callback_B_out(val); } void PIO::out_CTRL(int port, byte_t val) { byte_t old_mode; char p = (port == A) ? 'A' : 'B'; if (port == A) { DBG(2, form("KCemu/PIO/A/out_CTRL", "PIO::out(): %04xh: port A CTRL (mode %d): val = %02x\n", z80->getPC(), _mode[A], val)); } else { DBG(2, form("KCemu/PIO/B/out_CTRL", "PIO::out(): %04xh: port B CTRL (mode %d): val = %02x\n", z80->getPC(), _mode[B], val)); } /* * bit mode * * +-----+-----+-----+-----+-----+-----+-----+-----+ * | IO7 | IO6 | IO5 | IO4 | IO3 | IO2 | IO1 | IO0 | * +-----+-----+-----+-----+-----+-----+-----+-----+ */ if (_bit_mode_follows[port]) { _bit_mode[port] = val; _bit_mode_follows[port] = false; DBG(2, form("KCemu/PIO/control", "PIO: %04xh: [%c] new bit mode: %02x (0 = out/ 1 = in)\n", z80->getPC(), p, _bit_mode[port])); return; } /* * interrupt mask (for bit input/output) * * +-----+-----+-----+-----+-----+-----+-----+-----+ * | MB7 | MB6 | MB5 | MB4 | MB3 | MB2 | MB1 | MB0 | * +-----+-----+-----+-----+-----+-----+-----+-----+ */ if (_irq_mask_follows[port]) { /* * we store the mask negated because a bit set to 0 means * this bit is used! */ _irq_mask[port] = ~val; _irq_mask_follows[port] = false; DBG(2, form("KCemu/PIO/control", "PIO: %04xh: [%c] new irq mask (inverted): %02x\n", z80->getPC(), p, _irq_mask[port])); return; } /* * interrupt vector * * +----+----+----+----+----+----+----+---+ * | V7 | V6 | V5 | V4 | V3 | V2 | V1 | 0 | * +----+----+----+----+----+----+----+---+ */ if ((val & 1) == 0) { _irq_vector[port] = val; DBG(2, form("KCemu/PIO/control", "PIO: %04xh: [%c] new irq vector: 0x%02x\n", z80->getPC(), p, val)); return; } switch (val & 0x0f) { /* * interrupt enable/disable * * +----+---+---+---+---+---+---+---+ * | EI | X | X | X | 0 | 0 | 1 | 1 | * +----+---+---+---+---+---+---+---+ */ case 0x03: _irq[port] = (val >> 7) & 0x01; if (_irq[port]) { DBG(2, form("KCemu/PIO/control", "PIO: %04xh: [%c] irq enabled\n", z80->getPC(), p)); _irq_enable[port] = 1; } else { DBG(2, form("KCemu/PIO/control", "PIO: %04xh: [%c] irq disabled\n", z80->getPC(), p)); _irq_enable[port] = 0; } break; /* * interrupt control word * * +----+-----+-----+----+---+---+---+---+ * | EI | A/O | H/L | MF | 0 | 1 | 1 | 1 | * +----+-----+-----+----+---+---+---+---+ */ case 0x07: _irq[port] = (val >> 7) & 1; if (_irq[port]) { DBG(2, form("KCemu/PIO/control", "PIO: %04xh: [%c] irq enabled\n", z80->getPC(), p)); _irq_enable[port] = 1; } else { DBG(2, form("KCemu/PIO/control", "PIO: %04xh: [%c] irq disabled\n", z80->getPC(), p)); _irq_enable[port] = 0; } _irq_and_or[port] = (val >> 6) & 1; DBG(2, form("KCemu/PIO/control", "PIO: %04xh: [%c] AND/OR mode set to %s\n", z80->getPC(), p, _irq_and_or[port] ? "AND" : "OR")); _irq_h_l[port] = (val >> 5) & 1; DBG(2, form("KCemu/PIO/control", "PIO: %04xh: [%c] H/L mode set to %c\n", z80->getPC(), p, _irq_h_l[port] ? 'H' : 'L')); if (val & 0x10) { _irq_mask_follows[port] = true; DBG(2, form("KCemu/PIO/control", "PIO: %04xh: [%c] irq mask will be set with next control write\n", z80->getPC(), p)); } break; /* * mode control word * * +----+----+---+---+---+---+---+---+ * | M1 | M0 | X | X | 1 | 1 | 1 | 1 | * +----+----+---+---+---+---+---+---+ */ case 0x0f: old_mode = _mode[port]; _mode[port] = (val >> 6) & 0x03; switch (_mode[port]) { case MODE_OUTPUT: DBG(2, form("KCemu/PIO/control", "PIO: %04xh: [%c] new mode: %d - BYTE OUTPUT\n", z80->getPC(), p, _mode[port])); break; case MODE_INPUT: DBG(2, form("KCemu/PIO/control", "PIO: %04xh: [%c] new mode: %d - BYTE INPUT\n", z80->getPC(), p, _mode[port])); break; case MODE_BIDIRECTIONAL: DBG(2, form("KCemu/PIO/control", "PIO: %04xh: [%c] new mode: %d - BIDIRECTIONAL\n", z80->getPC(), p, _mode[port])); break; case MODE_CONTROL: DBG(2, form("KCemu/PIO/control", "PIO: %04xh: [%c] new mode: %d - CONTROL (bit mode)\n", z80->getPC(), p, _mode[port])); _bit_mode_follows[port] = true; break; } if (old_mode == MODE_INPUT) { if (port == A) out_A_DATA(_value[A]); else out_B_DATA(_value[B]); } break; default: DBG(2, form("KCemu/PIO/control", "PIO: %04xh: [%c] ??? unknown control byte %02x (%d)\n", z80->getPC(), p, val, val)); break; } } void PIO::out_A_CTRL(byte_t val) { out_CTRL(A, val); } void PIO::out_B_CTRL(byte_t val) { out_CTRL(B, val); } void PIO::set_EXT(int port, byte_t mask, byte_t val) { byte_t old; char p = "AB"[port]; /* if (_irq_active[port] ) { cout << "PIO::set_EXT() - irq active" << endl; return; } */ old = _ext_fn[port]; _ext[port] = ((_ext[port] & ~mask) | (val & mask)); if (_irq_and_or[port]) { /* AND */ if (_irq_h_l[port]) _ext_fn[port] = ((_ext[port] & _irq_mask[port]) == _irq_mask[port]); else _ext_fn[port] = ((_ext[port] & _irq_mask[port]) == 0); } else { /* OR */ if (_irq_h_l[port]) _ext_fn[port] = ((_ext[port] & _irq_mask[port]) != 0); else _ext_fn[port] = ((_ext[port] & _irq_mask[port]) != _irq_mask[port]); } bool do_trigger_irq = (old == 0) && (_ext_fn[port] == 1); DBG(2, form("KCemu/PIO/external", "PIO: %04xh: [%c] _ext_fn: A/O = %d, H/L = %d, mask = 0x%02x, old = %02x, _ext_fn = %02x%s\n", z80->getPC(), p, _irq_and_or[port], _irq_h_l[port], _irq_mask[port], old, _ext_fn[port], do_trigger_irq ? " IRQ!" : "")); if (do_trigger_irq) trigger_irq(port); } void PIO::set_A_EXT(byte_t mask, byte_t val) { set_EXT(A, mask, val); } void PIO::set_B_EXT(byte_t mask, byte_t val) { set_EXT(B, mask, val); } void PIO::trigger_irq(int port) { if (_irq_enable[port]) { _strobe[port] = 1; irq(); } } void PIO::irqreq(void) { DBG(2, form("KCemu/PIO/reti", "PIO::irqreq(): %04xh\n", z80->getPC())); z80->set_irq_line(_z80_irq_mask); } word_t PIO::irqack(void) { if (_strobe[A]) { _strobe[A] = 0; _irq_active[A] = 1; z80->reset_irq_line(_z80_irq_mask); return _irq_vector[A]; } if (_irq_active[A]) return IRQ_NOT_ACK; if (_strobe[B]) { _strobe[B] = 0; _irq_active[B] = 1; z80->reset_irq_line(_z80_irq_mask); return _irq_vector[B]; } return IRQ_NOT_ACK; } void PIO::reti(void) { //cout.form("PIO: reti - A: %d, B: %d\n", _irq_active[a], _irq_active[B]); if (_irq_active[A]) _irq_active[A] = 0; if (_irq_active[B]) _irq_active[B] = 0; if (_strobe[A]) { trigger_irq(A); return; } if (_strobe[B]) trigger_irq(B); } void PIO::strobe_A(void) { //_strobe[A] = 1; this blocks the keyboard when the tape loader is active trigger_irq(A); } void PIO::strobe_B(void) { //_strobe[B] = 1; trigger_irq(B); } int PIO::ready_A(void) { return _ready[A]; } int PIO::ready_B(void) { return _ready[B]; } void PIO::register_callback_A_in(PIOCallbackInterface *cbi) { _cb_a_in = cbi; } void PIO::register_callback_A_out(PIOCallbackInterface *cbi) { _cb_a_out = cbi; } void PIO::register_callback_B_in(PIOCallbackInterface *cbi) { _cb_b_in = cbi; } void PIO::register_callback_B_out(PIOCallbackInterface *cbi) { _cb_b_out = cbi; } void PIO::info(void) { cout << " PIO:" << endl; cout << " ---- port A port B" << endl; cout << "\tmode: " << (int)_mode[A] << " " << (int)_mode[B] << endl; cout << "\tirq vector: " << hex << setfill('0') << setw(2) << (int)_irq_vector[A] << "h " << hex << setfill('0') << setw(2) << (int)_irq_vector[B] << "h" << endl; cout << "\tirq enabled: " << ((_irq[A])?"yes":"no ") << " " << ((_irq[B])?"yes":"no ") << endl; cout << "\tstrobe: " << (int)_strobe[A] << " " << (int)_strobe[B] << endl; cout << "\tready: " << (int)_ready[A] << " " << (int)_ready[B] << endl; cout << "\tvalue: " << hex << setfill('0') << setw(2) << (int)_value[A] << "h " << hex << setfill('0') << setw(2) << (int)_value[B] << "h" << endl; cout << "\text_mask: " << hex << setfill('0') << setw(2) << (int)_bit_mode[A] << "h " << hex << setfill('0') << setw(2) << (int)_bit_mode[B] << "h" << endl; cout << "\text: " << hex << setfill('0') << setw(2) << (int)_ext[A] << "h " << hex << setfill('0') << setw(2) << (int)_ext[B] << "h" << endl << endl; } KCemu-0.5.1/src/kc/ctc_base.cc0000644001050700006200000000454711345001576015457 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/z80.h" #include "kc/ctc_base.h" #include "libdbg/dbg.h" CTC_Base::CTC_Base(void) : CTC("CTC") { z80->register_ic(this); _z80_irq_mask = z80->get_irq_mask(); } CTC_Base::~CTC_Base(void) { z80->unregister_ic(this); } long long CTC_Base::get_counter() { return z80->getCounter(); } void CTC_Base::irqreq(void) { DBG(2, form("KCemu/CTC/reti", "CTC_Base::irqreq()\n")); z80->set_irq_line(_z80_irq_mask); } word_t CTC_Base::irqack(void) { int a, b; int vector = IRQ_NOT_ACK; DBG(2, form("KCemu/CTC/reti", "CTC_Base::irqack(): active: %d %d %d %d - pending: %d %d %d %d\n", _irq_active[0], _irq_active[1], _irq_active[2], _irq_active[3], _irq_pending[0], _irq_pending[1], _irq_pending[2], _irq_pending[3])); for (a = 0;a < 4;a++) { if (_irq_pending[a]) { _irq_active[a] = 1; _irq_pending[a] = 0; vector = getIRQVector(a); DBG(2, form("KCemu/CTC/reti", "CTC_Base::irqack(): channel = %d, irq_vector = %02xh\n", a, vector)); break; } } b = 0; for (a = 0;a < 4;a++) if (_irq_pending[a]) b++; if (b == 0) z80->reset_irq_line(_z80_irq_mask); return vector; } void CTC_Base::trigger_irq(int channel) { int a; for (a = 0;a < channel;a++) if (_irq_active[a]) return; irq(); } void CTC_Base::add_callback(unsigned long long offset, Callback *cb, void *data) { z80->addCallback(offset, cb, data); } KCemu-0.5.1/src/kc/pio3.cc0000644001050700006200000001023611345001576014556 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/pio3.h" #include "kc/tape.h" #include "kc/memory3.h" #include "libdbg/dbg.h" #define memory ((Memory3 *)memory) PIO3::PIO3(void) { } PIO3::~PIO3(void) { } byte_t PIO3::in(word_t addr) { byte_t ret = 0xff; switch (addr & 3) { case 0: ret = in_A_DATA(); break; case 1: ret = in_B_DATA(); break; case 2: ret = in_A_CTRL(); break; case 3: ret = in_B_CTRL(); break; } DBG(2, form("KCemu/PIO/3/in", "PIO3::in(): addr = %04x, val = %02x\n", addr, ret)); return ret; } void PIO3::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/3/out", "PIO3::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } byte_t PIO3::in_A_DATA(void) { byte_t ret = PIO::in_A_DATA(); if (_mode[A] == MODE_INPUT) ret = 0x07; return ret; } void PIO3::change_A(byte_t changed, byte_t val) { if (changed & 0x01) { DBG(2, form("KCemu/PIO/3/change/A", "PIO A: CAOS ROM [%d]\n", (val & 1))); memory->enableCAOS_E(val & 1); } if (changed & 0x02) { DBG(2, form("KCemu/PIO/3/change/A", "PIO A: RAM [%d]\n", ((val >> 1) & 1))); memory->enableRAM((val >> 1) & 1); } if (changed & 0x04) { DBG(2, form("KCemu/PIO/3/change/A", "PIO A: IRM [%d]\n", ((val >> 2) & 1))); memory->enableIRM((val >> 2) & 1); } if (changed & 0x08) { DBG(2, form("KCemu/PIO/3/change/A", "PIO A: RAM PROTECT [%d]\n", ((val >> 3) & 1))); memory->protectRAM((val >> 3) & 1); } if (changed & 0x10) { DBG(2, form("KCemu/PIO/3/change/A", "PIO A: - [%d]\n", ((val >> 4) & 1))); } if (changed & 0x20) { DBG(2, form("KCemu/PIO/3/change/A", "PIO A: LED TAPE [%d]\n", ((val >> 5) & 1))); } if (changed & 0x40) { DBG(2, form("KCemu/PIO/3/change/A", "PIO A: TAPE Power [%d]\n", ((val >> 6) & 1))); tape->power((val >> 6) & 1); } if (changed & 0x80) { DBG(2, form("KCemu/PIO/3/change/A", "PIO A: BASIC ROM [%d]\n", ((val >> 7) & 1))); memory->enableBASIC_C(val & 0x80); } } void PIO3::change_B(byte_t changed, byte_t val) { if (changed & 0x1f) { DBG(2, form("KCemu/PIO/3/change/B", "PIO B: volume [%d]\n", (val & 0x1f))); } if (changed & 0x20) { DBG(2, form("KCemu/PIO/3/change/B", "PIO B: unused [%d]\n", ((val >> 5) & 1))); } if (changed & 0x40) { DBG(2, form("KCemu/PIO/3/change/B", "PIO B: unused [%d]\n", ((val >> 6) & 1))); } if (changed & 0x80) { DBG(2, form("KCemu/PIO/3/change/B", "PIO B: foreground blink [%d]\n", ((val >> 6) & 1))); } } void PIO3::tape_callback(byte_t val) { strobe_A(); } KCemu-0.5.1/src/kc/memory2.cc0000644001050700006200000000606611345001576015304 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/types.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/memory2.h" #include "ui/ui.h" using namespace std; Memory2::Memory2(void) : Memory() { _access_color = false; load_rom(SystemROM::ROM_KEY_CAOSE, &_rom_caos); memory_group_t mem[] = { { &_m_scr, "-", 0x0000, 0x10000, 0, 256, 0, 1, -1 }, { &_m_ram, "RAM 0", 0x0000, 0x4000, &_ram[0], 0, 0, 1, -1 }, { &_m_irm, "IRM", 0x8000, 0x4000, &_irm[0], 1, 0, 1, -1 }, { &_m_caos, "CAOS", 0xe000, 0x2000, &_rom_caos[0], 2, 1, 1, -1 }, { 0, }, }; init_memory_groups(mem); reset(true); z80->register_ic(this); } Memory2::~Memory2(void) { z80->unregister_ic(this); } byte_t Memory2::memRead8(word_t addr) { if (_m_irm->is_active() && (addr >= 0x8000) && (addr <= 0xc000)) ui->memory_read(addr); return _memrptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK]; } void Memory2::memWrite8(word_t addr, byte_t val) { if (_m_irm->is_active() && (addr >= 0x8000) && (addr <= 0xc000)) ui->memory_write(addr); _memwptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK] = val; } byte_t * Memory2::get_irm(void) { return (byte_t *)_irm; } byte_t * Memory2::get_char_rom(void) { return (byte_t *)0; } void Memory2::dumpCore(void) { #if 0 ofstream os; os.open("core.z80"); cout.form("Memory: dumping core...\n"); if (!os) { cerr << "can't write 'core.z80'\n"; exit(0); } os.write(&_ram[0], 0x4000); os.write(&_irm[0], 0x4000); os.close(); cout.form("Memory: done.\n"); #endif } void Memory2::enableCAOS(int v) { _m_caos->set_active(v); reload_mem_ptr(); } void Memory2::enableIRM(int v) { _m_irm->set_active(v); reload_mem_ptr(); } void Memory2::enableRAM(int v) { _m_ram->set_active(v); reload_mem_ptr(); } void Memory2::protectRAM(int v) { _m_ram->set_readonly(!v); reload_mem_ptr(); } void Memory2::reset(bool power_on) { _m_ram->set_readonly(false); _m_ram->set_active(true); _m_irm->set_active(true); _m_caos->set_active(true); reload_mem_ptr(); if (!power_on) return; scratch_mem(&_ram[0], 0x4000); scratch_mem(&_irm[0], 0x4000); } KCemu-0.5.1/src/kc/keyb9.cc0000644001050700006200000000647711345001576014743 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/z80.h" #include "kc/keys.h" #include "kc/keyb9.h" #include "kc/keyb9k.h" #include "cmd/cmd.h" Keyboard9::Keyboard9(void) { init(); z80->register_ic(this); } Keyboard9::~Keyboard9(void) { z80->unregister_ic(this); } void Keyboard9::init(void) { int a; for (a = 0;a < MAX_KEYS;a++) { _keybuf[a].sym = -1; _keybuf[a].code = -1; } } int Keyboard9::decode_key(int keysym, bool press) { return keysym; } void Keyboard9::keyPressed(int keysym, int keycode) { int a; int k; byte_t c1, c2, r1, r2; k = decode_key(keysym, true); if (k == -1) return; k = __keys[k]; c1 = r1 = 0; for (a = 0;a < MAX_KEYS;a++) { if (_keybuf[a].code != -1) { r1 |= 1 << (((__keys[_keybuf[a].sym] >> 4) & 0x0f) - 1); c1 |= 1 << (((__keys[_keybuf[a].sym] ) & 0x0f) - 1); } if (k != 0) if (_keybuf[a].code == -1) { _keybuf[a].sym = k & 0xff; _keybuf[a].code = keycode; r2 = 1 << (((k >> 4) & 0x0f) - 1); c2 = 1 << (((k ) & 0x0f) - 1); k >>= 8; } } #if 0 cout.form("##### Keyboard: keyPressed [%02x/%02x] " "r/c: [%02x/%02x]=>[%02x/%02x] -", keysym, keycode, r1, c1, r1 | r2, c1 | c2); for (a = 0;a < MAX_KEYS;a++) if (_keybuf[a].code != -1) cout.form(" {%02d:%02x}", a, _keybuf[a].code); cout.form("\n"); #endif } void Keyboard9::keyReleased(int keysym, int keycode) { int a; if (keysym == -1) { for (a = 0;a < MAX_KEYS;a++) _keybuf[a].code = -1; return; } for (a = 0;a < MAX_KEYS;a++) if (_keybuf[a].code == keycode) _keybuf[a].code = -1; #if 0 cout.form("##### Keyboard: keyReleased [%02x/%02x] -", keysym, keycode); for (a = 0;a < MAX_KEYS;a++) if (_keybuf[a].code != -1) cout.form(" {%02d:%02x}", a, _keybuf[a].code); cout.form("\n"); #endif } void Keyboard9::replayString(const char *text) { } void Keyboard9::callback(void *data) { } void Keyboard9::reset(bool power_on) { init(); } void Keyboard9::reti(void) { } void Keyboard9::set_val(byte_t val) { _line = val; } byte_t Keyboard9::get_val() { int a, c; c = 0; for (a = 0;a < MAX_KEYS;a++) { if (_keybuf[a].code == -1) continue; if (_line == (((_keybuf[a].sym >> 4) & 0x0f) - 1)) c |= 1 << ((_keybuf[a].sym & 0x0f) - 1); } return ~c; } KCemu-0.5.1/src/kc/mod_ram.cc0000644001050700006200000000413411345001576015322 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/kc.h" #include "kc/mod_ram.h" ModuleRAM::ModuleRAM(ModuleRAM &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _val = 0; _group = NULL; _ram = new byte_t[RAM_SIZE]; if (_ram) { memset(_ram, 0, RAM_SIZE); set_valid(true); } } ModuleRAM::ModuleRAM(const char *name, byte_t id) : ModuleInterface(name, id, KC_MODULE_KC_85_3) { _ram = new byte_t[RAM_SIZE]; if (_ram) { _group = 0; memset(_ram, 0, RAM_SIZE); set_valid(true); } } ModuleRAM::~ModuleRAM(void) { if (_group) memory->unregister_memory(_group); delete[] _ram; } void ModuleRAM::m_out(word_t addr, byte_t val) { if (((_val & 0xc3) ^ (val & 0xc3)) == 0) return; word_t a = (val & 0xc0) << 8; if (_group) { memory->unregister_memory(_group); _group = 0; } if (val & 3) _group = memory->register_memory(get_name(), a, RAM_SIZE, _ram, (addr >> 8), (val & 2) == 0); _val = val; } ModuleInterface * ModuleRAM::clone(void) { return new ModuleRAM(*this); } void ModuleRAM::reset(bool power_on) { if (power_on) Memory::scratch_mem(_ram, RAM_SIZE); } KCemu-0.5.1/src/kc/keyb8.cc0000644001050700006200000000376411345001576014736 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/z80.h" #include "kc/keys.h" #include "kc/keyb8.h" #include "kc/keyb8k.h" #include "cmd/cmd.h" Keyboard8::Keyboard8(void) { init(); z80->register_ic(this); } Keyboard8::~Keyboard8(void) { z80->unregister_ic(this); } void Keyboard8::init(void) { } void Keyboard8::keyPressed(int keysym, int keycode) { _key = __keys[keysym]; } void Keyboard8::keyReleased(int keysym, int keycode) { _key = 0; if (keysym == 0x1b) CMD_EXEC("emu-reset"); if (keysym == 0x108) CMD_EXEC("emu-nmi"); if (keysym == 0x10a) CMD_EXEC("lc80-key-f10"); if (keysym == 0x10b) CMD_EXEC("lc80-key-f11"); if (keysym == 0x10c) CMD_EXEC("lc80-key-f12"); } void Keyboard8::replayString(const char *text) { } void Keyboard8::callback(void *data) { } int Keyboard8::callback_A_in(void) { return -1; } int Keyboard8::callback_B_in(void) { byte_t b; unsigned int c; b = ~pio->in_B_DATA(); b >>= 2; c = 0xf0; if (_key & b) c = (~(_key & 0xf00) >> 4); pio2->set_B_EXT(0xf0, c); return c; } void Keyboard8::reset(bool power_on) { init(); } void Keyboard8::reti(void) { } KCemu-0.5.1/src/kc/mod_dio.cc0000644001050700006200000000440511345001576015317 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/daisy.h" #include "kc/ctc_dio.h" #include "kc/pio_dio.h" #include "kc/mod_dio.h" ModuleDIO::ModuleDIO(ModuleDIO &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _ctc = new CTC_DIO; _pio = new PIO_DIO; _portg_ctc = NULL; _portg_pio = NULL; set_valid(true); } ModuleDIO::ModuleDIO(const char *name, byte_t id) : ModuleInterface(name, id, KC_MODULE_KC_85_3) { _ctc = NULL; _pio = NULL; _portg_ctc = NULL; _portg_pio = NULL; set_valid(true); } ModuleDIO::~ModuleDIO(void) { if (_ctc != NULL) delete _ctc; if (_pio != NULL) delete _pio; } /* byte_t ModuleDIO::m_in(word_t addr) { return 0x00; }*/ void ModuleDIO::m_out(word_t addr, byte_t val) { if (val & 1) { if (_portg_ctc == NULL) { _portg_ctc = ports->register_ports("CTC DIO", 0x00, 4, _ctc, 0); daisy->add_last(_ctc); } if (_portg_pio == NULL) { _portg_pio = ports->register_ports("PIO DIO", 0x04, 4, _pio, 0); daisy->add_last(_pio); } } else { if (_portg_ctc != NULL) { ports->unregister_ports(_portg_ctc); daisy->remove(_ctc); } _portg_ctc = NULL; if (_portg_pio != NULL) { ports->unregister_ports(_portg_pio); daisy->remove(_pio); } _portg_pio = NULL; } } ModuleInterface * ModuleDIO::clone(void) { return new ModuleDIO(*this); } void ModuleDIO::reset(bool power_on) { } KCemu-0.5.1/src/kc/svg.cc0000644001050700006200000002455311345001576014512 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/kc.h" #include "kc/svg.h" #include "kc/tape.h" #include "kc/keyb9.h" #include "kc/memory9.h" #include "libdbg/dbg.h" /* * * +-----+---------------------+-----------------------------------+ * | REG | Function | Bit | * | | | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | * +-----+---------------------+-----------------------------------+ * | 0 | Tonfrequenz Kanal A | FL (A) | * | 1 | | x | x | x | x | FH(A) | * +-----+---------------------+-----------------------------------+ * | 2 | Tonfrequenz Kanal B | FL (B) | * | 3 | | x | x | x | x | FH(B) | * +-----+---------------------+-----------------------------------+ * | 4 | Tonfrequenz Kanal C | FL (C) | * | 5 | | x | x | x | x | FH(C) | * +-----+---------------------+-----------------------------------+ * | 6 | Rauschfrequenz | x | x | x | RP | * +-----+---------------------+-----------------------------------+ * | 7 | Auswahl Ton- bzw. | | Rauschen | Ton | * | | Rauschkanal | x | x | C | B | A | C | B | A | * +-----+---------------------+-----------------------------------+ * | 8 | A | x | x | x | H | L(A) | * | 9 | Lautst�rke Kanal B | x | x | x | H | L(B) | * | 10 | C | x | x | x | H | L(C) | * +-----+---------------------+-----------------------------------+ * | 11 | H�llkurvenfrequenz | FHL | * | 12 | | FHH | * +-----+---------------------+-----------------------------------+ * | 13 | H�llkurvenform | x | x | x | HKF | * +-----+---------------------+-----------------------------------+ * * Parameter f�r Tonfrequenz * FW = 3750000 / (32 + F) * FL(n) = FW | 256 * FH(n) = FW mod 256 * F - reale Tonfrequenz (in Hz) * Rauschparameter * RP = 3750000 / 32 * F * RF - Rauschparameter (0...31) * F - maximaler Frequenzanteil im Rauschen * */ SVG::SVG(void) { _val_a0 = 0; _val_a1 = 0; _val_a8 = 0; _val_aa = 0; _val_ab = 0; for (int a = 0;a < 4;a++) _page_info[a] = 0; for (int a = 0;a < 14;a++) _sound_reg[a] = 0; for (int a = 0;a < 3;a++) _sound_val[a] = 0; for (int a = 0;a < 3;a++) _sound_freq[a] = 0; } SVG::~SVG(void) { } byte_t SVG::in(word_t addr) { byte_t val = 0xff; switch (addr & 0xff) { case 0xa0: val = _val_a0; DBG(2, form("KCemu/SVG/in_A8", "SVG::in(a0h): %04xh val = %02x (%d)\n", addr, val, val)); break; case 0xa1: val = _val_a1; DBG(2, form("KCemu/SVG/in_A1", "SVG::in(a1h): %04xh val = %02x (%d)\n", addr, val, val)); break; case 0xa8: val = _val_a8; DBG(2, form("KCemu/SVG/in_A8", "SVG::in(a8h): %04xh val = %02x (%d)\n", addr, val, val)); break; case 0xa9: /* * keyboard input */ val = ((Keyboard9 *)keyboard)->get_val(); DBG(2, form("KCemu/SVG/in_A9", "SVG::in(a9h): %04xh val = %02x (%d)\n", addr, val, val)); break; case 0xaa: val = _val_aa; DBG(2, form("KCemu/SVG/in_AA", "SVG::in(aah): %04xh val = %02x (%d)\n", addr, val, val)); break; case 0xab: val = _val_ab; DBG(2, form("KCemu/SVG/in_AB", "SVG::in(abh): %04xh val = %02x (%d)\n", addr, val, val)); break; } DBG(2, form("KCemu/SVG/in", "SVG::in(%02xh): %04xh val = %02x (%d)\n", addr & 0xff, addr, val, val)); return val; } void SVG::out(word_t addr, byte_t val) { int bit; DBG(2, form("KCemu/SVG/out", "SVG::out(): %04xh val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); switch (addr & 0xff) { case 0xa0: /* * select sound register */ DBG(2, form("KCemu/SVG/out_A0", "SVG::out(): %04xh val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); _val_a0 = val; break; case 0xa1: /* * sound register parameter */ DBG(2, form("KCemu/SVG/out_A1", "SVG::out(): %04xh val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); _val_a1 = val; _sound_reg[_val_a0] = val; _sound_val[A] = _sound_reg[0] | ((_sound_reg[1] & 0x0f) << 8); _sound_val[B] = _sound_reg[2] | ((_sound_reg[3] & 0x0f) << 8); _sound_val[C] = _sound_reg[4] | ((_sound_reg[5] & 0x0f) << 8); _sound_freq[A] = _sound_val[A] == 0 ? 0 : 3750000 / (_sound_val[A] * 32); _sound_freq[B] = _sound_val[B] == 0 ? 0 : 3750000 / (_sound_val[B] * 32); _sound_freq[C] = _sound_val[C] == 0 ? 0 : 3750000 / (_sound_val[C] * 32); DBG(2, form("KCemu/SVG/SOUND", "SVG::out(): SOUND reg %2d = %02xh %3d /" " %02x %02x-%02x %02x-%02x %02x-%02x" "/%02x/%02x %02x %02x-%02x %02x-%02x\n", _val_a0, val, val, _sound_reg[ 0], _sound_reg[ 1], _sound_reg[ 2], _sound_reg[ 3], _sound_reg[ 4], _sound_reg[ 5], _sound_reg[ 6], _sound_reg[ 7], _sound_reg[ 8], _sound_reg[ 9], _sound_reg[10], _sound_reg[11], _sound_reg[12], _sound_reg[13])); DBG(2, form("KCemu/SVG/SOUNDREGS", "SVG: SOUND: ------------------------------------\n" "SVG: SOUND: Channel Select = %c%c%c\n" "SVG: SOUND: Noise Channel Select = %c%c%c\n" "SVG: SOUND: Envelope Select = %c%c%c\n" "SVG: SOUND: Frequency / Loudness (A) = %d / %d -> %dHz\n" "SVG: SOUND: Frequency / Loudness (B) = %d / %d -> %dHz\n" "SVG: SOUND: Frequency / Loudness (C) = %d / %d -> %dHz\n" "SVG: SOUND: Noise Frequency = %d\n" "SVG: SOUND: Envelope Frequency = %d\n" "SVG: SOUND: Envelope type = %d\n" "SVG: SOUND: ------------------------------------\n", (_sound_reg[7] & 1) ? 'A' : 'a', (_sound_reg[7] & 2) ? 'B' : 'b', (_sound_reg[7] & 4) ? 'C' : 'c', (_sound_reg[7] & 8) ? 'A' : 'a', (_sound_reg[7] & 16) ? 'B' : 'b', (_sound_reg[7] & 32) ? 'C' : 'c', (_sound_reg[8] & 16) ? 'A' : 'a', (_sound_reg[9] & 16) ? 'B' : 'b', (_sound_reg[10] & 16) ? 'C' : 'c', _sound_val[A], _sound_reg[8] & 0x0f, _sound_freq[0], _sound_val[B], _sound_reg[9] & 0x0f, _sound_freq[1], _sound_val[C], _sound_reg[10] & 0x0f, _sound_freq[2], _sound_reg[6] & 0x1f, _sound_reg[11] | (_sound_reg[12] << 8), _sound_reg[13] & 0x1f)); break; /* * change memory configuration: * * +---------+---------+---------+---------+ * | | | | | * | Page 3 | Page 2 | Page 1 | Page 0 | * | | | | | * +----+----+----+----+----+----+----+----+ * | | | | * | | | | * +---------+---------+---------+------- 00 - Slot 0 * 01 - Slot 1 * 02 - Slot 2 * 03 - Slot 3 * */ case 0xa8: DBG(2, form("KCemu/SVG/out_A8", "SVG::out(): %04xh val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); if ((_val_a8 & 0x03) != (val & 0x03)) set_page(0, val & 0x03); if ((_val_a8 & 0x0c) != (val & 0x0c)) set_page(1, (val & 0x0c) >> 2); if ((_val_a8 & 0x30) != (val & 0x30)) set_page(2, (val & 0x30) >> 4); if ((_val_a8 & 0xc0) != (val & 0xc0)) set_page(3, (val & 0xc0) >> 6); _val_a8 = val; break; case 0xaa: DBG(2, form("KCemu/SVG/out_AA", "SVG::out(): %04xh val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); /* * bit 0: output keyboard * bit 1: output keyboard * bit 2: output keyboard * bit 3: output keyboard * bit 4: tape motor (0 = on / 1 = off) * bit 5: tape data * bit 6: green led * bit 7: key click (0 = off / 1 = on) * */ ((Keyboard9 *)keyboard)->set_val(val & 15); _val_aa = val; break; case 0xab: DBG(2, form("KCemu/SVG/out_AB", "SVG::out(): %04xh val = %02x %d%d%d%d%d%d%d%d\n", addr, val, (val & 128) >> 7, (val & 64) >> 6, (val & 32) >> 5, (val & 16) >> 4, (val & 8) >> 3, (val & 4) >> 2, (val & 2) >> 1, (val & 1))); bit = val & 1; switch (val & 0x0e) { case 0x08: DBG(2, form("KCemu/SVG/TAPEMOTOR", "SVG::out(): TAPE MOTOR: %s\n", bit ? "off" : "on")); tape->power(!bit); break; case 0x0a: DBG(2, form("KCemu/SVG/TAPEDATA", "SVG::out(): TAPE DATA: %d\n", bit)); tape->tape_signal(); break; case 0x0c: DBG(2, form("KCemu/SVG/CAPSLOCKLED", "SVG::out(): CAPS LOCK LED: %s\n", bit ? "off" : "on")); break; case 0x0e: DBG(2, form("KCemu/SVG/KEYCLICK", "SVG::out(): KEYCLICK: %s\n", bit ? "on" : "off")); break; } _val_ab = val; break; } } void SVG::set_page(int page, int slot) { _page_info[page] = slot; #if 0 cout << "setting page " << page << " to slot " << slot << " => [" << _page_info[0] << "/" << _page_info[1] << "/" << _page_info[2] << "/" << _page_info[3] << "]" << endl; #endif ((Memory9 *)memory)->set_page(page, slot); } KCemu-0.5.1/src/kc/mod_v24.cc0000644001050700006200000004347511345001577015172 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/mod_v24.h" #include "kc/prefs/prefs.h" #include "libdbg/dbg.h" using namespace std; static ModuleV24 *self; ModuleV24::ModuleV24(ModuleV24 &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()), InterfaceCircuit("ModuleV24") { _reg[A] = 0; _reg[B] = 0; _data_in[A] = 0; _data_in[B] = 0; _reg_rd[A][0] = 0xff; _reg_rd[A][1] = 0xff; _reg_rd[A][2] = 0xff; _reg_rd[B][0] = 0xff; _reg_rd[B][1] = 0xff; _reg_rd[B][2] = 0xff; _irq_active[A] = 0; _irq_active[B] = 0; _irq_pending[A] = 0; _irq_pending[B] = 0; _fd_in[A] = 0; _fd_in[B] = 0; _fd_out[A] = 0; _fd_out[B] = 0; _in_buf_ptr = 0; _socket_name = 0; } ModuleV24::ModuleV24(const char *name, byte_t id) : ModuleInterface(name, id, KC_MODULE_KC_85_3), InterfaceCircuit("ModuleV24") { _fd_in[A] = 0; _fd_in[B] = 0; _fd_out[A] = 0; _fd_out[B] = 0; _in_buf_ptr = 0; _socket_name = 0; } ModuleV24::~ModuleV24(void) { close_device(); } byte_t ModuleV24::in(word_t addr) { byte_t val; int port = addr & 0xff; val = 0xff; switch (port) { case 0x80: return get_id(); break; case 0x08: /* SIO channel A - data */ val = _data_in[A]; DBG(2, form("KCemu/ModuleV24/in/data/A", "%04x: in_data: <- sio A 08h <- %0xh\n", z80->getPC(), val)); break; case 0x09: /* SIO channel B - data */ val = _data_in[B]; DBG(2, form("KCemu/ModuleV24/in/data/B", "%04x: in_data: <- sio B 08h <- %0xh\n", z80->getPC(), val)); break; case 0x0a: /* SIO channel A - control */ val = in_reg(A); break; case 0x0b: /* SIO channel B - control */ val = in_reg(B); break; case 0x0c: val = 0xff; DBG(2, form("KCemu/ModuleV24/in", "%04xh: in_reg: <- ctc 0 0ch <- %0xh\n", z80->getPC(), val)); break; case 0x0d: val = 0xff; DBG(2, form("KCemu/ModuleV24/in", "%04x: in_reg: <- ctc 1 0dh <- %0xh\n", z80->getPC(), val)); break; case 0x0e: val = 0xff; DBG(2, form("KCemu/ModuleV24/in", "%04x: in_reg: <- ctc 2 0eh <- %0xh\n", z80->getPC(), val)); break; case 0x0f: val = 0xff; DBG(2, form("KCemu/ModuleV24/in", "%04x: in_reg: <- ctc 3 0eh <- %0xh\n", z80->getPC(), val)); break; } DBG(3, form("KCemu/ModuleV24/in", "%04x: %s: %04x, %02x\n", z80->getPC(), __PRETTY_FUNCTION__, addr, val)); return val; } void ModuleV24::out(word_t addr, byte_t val) { int port = addr & 0xff; DBG(3, form("KCemu/ModuleV24/out", "%s: %04x, %02x\n", __PRETTY_FUNCTION__, addr, val)); switch (port) { case 0x80: if (((_val & 1) ^ (val & 1)) != 1) return; if (val & 1) { open_device(); _portg = ports->register_ports(get_name(), 8, 6, this, (addr >> 8)); } else close_device(); _val = val; break; case 0x08: /* SIO channel A - data */ DBG(2, form("KCemu/ModuleV24/out/data/A", "out_data: sio A 08h: %0xh (io_type = %d)\n", val, _io_type)); if (_fd_out[A] && (_io_type != IO_NONE)) if (_io_type == IO_FILE) write(_fd_out[A], &val, 1); else send(_fd_out[A], &val, 1, 0); break; case 0x09: /* SIO channel B - data */ DBG(2, form("KCemu/ModuleV24/out/data/B", "out_data: sio B 09h: %0xh (io_type = %d)\n", val, _io_type)); if (_fd_out[B] && (_io_type != IO_NONE)) if (_io_type == IO_FILE) write(_fd_out[B], &val, 1); else send(_fd_out[B], &val, 1, 0); break; case 0x0a: /* SIO channel A - control */ out_reg(A, val); break; case 0x0b: /* SIO channel B - control */ out_reg(B, val); break; case 0x0c: DBG(2, form("KCemu/ModuleV24/out/ctc/0", "out_reg: -> ctc 0 0ch -> %0xh\n", val)); break; case 0x0d: DBG(2, form("KCemu/ModuleV24/out/ctc/1", "out_reg: -> ctc 1 0dh -> %0xh\n", val)); break; case 0x0e: DBG(2, form("KCemu/ModuleV24/out/ctc/2", "out_reg: -> ctc 2 0eh -> %0xh\n", val)); break; case 0x0f: DBG(2, form("KCemu/ModuleV24/out/ctc/3", "out_reg: -> ctc 3 0eh -> %0xh\n", val)); break; } } byte_t ModuleV24::in_reg(int c) { DBG(2, form("KCemu/ModuleV24/in_reg/raw", "in_reg: <- [%d] %02xh <- %d\n", c, _reg_rd[c][_reg[c]], _reg[c])); return _reg_rd[c][_reg[c]]; } void ModuleV24::out_reg(int c, byte_t val) { static const char *wr0_0[] = { "", " next write to register 1\n", " next write to register 2\n", " next write to register 3\n", " next write to register 4\n", " next write to register 5\n", " next write to register 6\n", " next write to register 7\n", }; static const char *wr0_1[] = { "", " send break (SDLC)\n", " reset external and status interrupts\n", " reset channel\n", " reset receive interrupt on first character\n", " reset send interrupt\n", " reset error condition\n", " interrupt return (channel A)\n", }; static const char *wr0_2[] = { "", " reset receiver CRC\n", " reset sender CRC\n", " reset CRC/SYNC status memory\n", }; DBG(2, form("KCemu/ModuleV24/out_reg/raw", "out_reg: -> [%d] %02xh -> %d\n", c, val, _reg[c])); _reg_wr[c][_reg[c]] = val; switch (_reg[c]) { case 0: DBG(1, form("KCemu/ModuleV24/out_reg/reg/wr0", "wr0: [%d] %02xh -> %d\n%s%s%s", c, val, _reg[c], wr0_0[val & 7], wr0_1[(val >> 3) & 7], wr0_2[(val >> 6) & 3])); break; case 1: DBG(1, form("KCemu/ModuleV24/out_reg/reg/wr1", "wr1: [%d] %02xh -> %d\n", c, val, _reg[c])); break; case 2: DBG(1, form("KCemu/ModuleV24/out_reg/reg/wr2", "wr2: [%d] %02xh -> %d\n new interrupt vector: %02x\n", c, val, _reg[c], val)); break; case 3: DBG(1, form("KCemu/ModuleV24/out_reg/reg/wr3", "wr3: [%d] %02xh -> %d\n", c, val, _reg[c])); break; case 4: DBG(1, form("KCemu/ModuleV24/out_reg/reg/wr4", "wr4: [%d] %02xh -> %d\n", c, val, _reg[c])); break; case 5: DBG(1, form("KCemu/ModuleV24/out_reg/reg/wr5", "wr5: [%d] %02xh -> %d\n", c, val, _reg[c])); break; case 6: DBG(1, form("KCemu/ModuleV24/out_reg/reg/wr6", "wr6: [%d] %02xh -> %d\n", c, val, _reg[c])); break; case 7: DBG(1, form("KCemu/ModuleV24/out_reg/reg/wr7", "wr7: [%d] %02xh -> %d\n", c, val, _reg[c])); break; } if (_reg[c] == 0) _reg[c] = val & 7; else _reg[c] = 0; } ModuleInterface * ModuleV24::clone(void) { return new ModuleV24(*this); } void ModuleV24::reset(bool power_on) { _irq_active[A] = 0; _irq_active[B] = 0; } void ModuleV24::reti(void) { _irq_active[B] = 0; _irq_pending[B] = 0; if (!_in_buf_ptr) return; // if (z80->triggerIrq(_reg_wr[B][2])) // { // _irq_active[B] = 1; // _data_in[B] = *_in_buf_ptr++; // if (*_in_buf_ptr == 0) _in_buf_ptr = 0; // z80->handleIrq(_reg_wr[B][2]); // return; // } // else // _irq_pending[B] = 1; } void ModuleV24::push_data(char *buf, int len) { if (_in_buf_ptr) { cerr << "data ignored! ***" << endl; return; } if (_irq_active[B]) { cout << "irq still active!" << endl; return; } strcpy((char *)_in_buf, buf); _in_buf_ptr = _in_buf; // if (z80->triggerIrq(_reg_wr[B][2])) // { // _irq_active[B] = 1; // _data_in[B] = *_in_buf_ptr++; // if (*_in_buf_ptr == 0) _in_buf_ptr = 0; // z80->handleIrq(_reg_wr[B][2]); // return; // } // else // _irq_pending[B] = 1; } void ModuleV24::signal_handler_IO_read(int status) { int a; static char buf[INBUF_LEN]; DBG(1, form("KCemu/ModuleV24/signal", "signal_handler_IO_read\n")); a = read(self->_fd_in[B], buf, INBUF_LEN - 1); buf[a] = '\0'; DBG(2, form("KCemu/ModuleV24/signal/data", "got %d bytes: '%s'\n", a, buf)); self->push_data(&buf[0], a); } void ModuleV24::signal_handler_IO_recv(int status) { int a; static char buf[INBUF_LEN]; DBG(1, form("KCemu/ModuleV24/signal", "signal_handler_IO_recv\n")); a = recv(self->_fd_in[B], buf, INBUF_LEN, 0); buf[a] = '\0'; DBG(2, form("KCemu/ModuleV24/signal/data", "got %d bytes: '%s'\n", a, buf)); self->push_data(&buf[0], a); } void ModuleV24::set_signal_handler(int fd, void (*sig_func)(int)) { struct sigaction saio; DBG(1, form("KCemu/ModuleV24/signal", "setting signal handler for fd = %d\n", fd)); memset(&saio, 0, sizeof(saio)); if (fcntl(fd, F_SETOWN, getpid()) < 0) cerr << "can't set owner on filedescriptor " << fd << " to " << getpid() << endl; if (fcntl(fd, F_SETFL, FASYNC) < 0) cerr << "can't set FASYNC flag on filedescriptor " << fd << endl; self = this; saio.sa_handler = sig_func; sigemptyset(&saio.sa_mask); saio.sa_flags = 0; sigaction(SIGIO, &saio, (struct sigaction *)NULL); } bool ModuleV24::open_device_serial(int dev, const char *dev_name) { int baudrate = Preferences::instance()->get_int_value("v24_baudrate", 2400); _fd_in[dev] = open(dev_name, O_RDWR | O_NOCTTY | O_NONBLOCK); if (_fd_in[dev] == 0) return false; _fd_out[dev] = _fd_in[dev]; set_signal_handler(_fd_in[dev], signal_handler_IO_read); tcgetattr(_fd_in[dev], &_tio_old[dev]); bzero(&_tio_new[dev], sizeof(_tio_new[dev])); /* * BAUDRATE: Set bps rate. You could also use cfsetispeed and cfsetospeed. * CRTSCTS : output hardware flow control (only used if the cable has * all necessary lines. See sect. 7 of Serial-HOWTO) * CS8 : 8n1 (8bit,no parity,1 stopbit) * CLOCAL : local connection, no modem contol * CREAD : enable receiving characters */ _tio_new[dev].c_cflag = CRTSCTS | CS8 | CLOCAL | CREAD; switch (baudrate) { case 50: _tio_new[dev].c_cflag |= B50 ; break; case 75: _tio_new[dev].c_cflag |= B75 ; break; case 110: _tio_new[dev].c_cflag |= B110 ; break; case 134: _tio_new[dev].c_cflag |= B134 ; break; case 150: _tio_new[dev].c_cflag |= B150 ; break; case 200: _tio_new[dev].c_cflag |= B200 ; break; case 300: _tio_new[dev].c_cflag |= B300 ; break; case 600: _tio_new[dev].c_cflag |= B600 ; break; case 1200: _tio_new[dev].c_cflag |= B1200 ; break; case 1800: _tio_new[dev].c_cflag |= B1800 ; break; case 2400: _tio_new[dev].c_cflag |= B2400 ; break; case 4800: _tio_new[dev].c_cflag |= B4800 ; break; case 9600: _tio_new[dev].c_cflag |= B9600 ; break; case 19200: _tio_new[dev].c_cflag |= B19200; break; case 38400: _tio_new[dev].c_cflag |= B38400; break; default: baudrate = 9600; _tio_new[dev].c_cflag |= B9600 ; break; } DBG(1, form("KCemu/ModuleV24/open", "ModuleV24::open_device_serial(): device = '%s', baudrate = %d\n", dev_name, baudrate)); /* * IGNPAR : ignore bytes with parity errors * ICRNL : map CR to NL (otherwise a CR input on the other computer * will not terminate input) * otherwise make device raw (no other input processing) */ _tio_new[dev].c_iflag = IGNPAR | ICRNL; _tio_new[dev].c_iflag = IGNPAR; /* * Raw output. */ _tio_new[dev].c_oflag = 0; /* * ICANON : enable canonical input * disable all echo functionality, and don't send signals to calling program */ _tio_new[dev].c_lflag = ICANON; _tio_new[dev].c_lflag = 0; _tio_new[dev].c_cc[VMIN]=1; _tio_new[dev].c_cc[VTIME]=0; tcflush(_fd_in[dev], TCIFLUSH); tcsetattr(_fd_in[dev], TCSANOW, &_tio_new[dev]); return true; } void ModuleV24::fifo_server(int fd) { int ret, len, fd_read, fd_read_w, fd_write, fd_write_r; struct pollfd pollfds[1]; char buf[1025]; DBG(1, form("KCemu/ModuleV24/server", "ModuleV24::fifo_server() fd = %d\n", fd)); if (unlink("/tmp/KCemu-FIFO-in") != 0) perror("unlink"); if (unlink("/tmp/KCemu-FIFO-out") != 0) perror("unlink"); if (mkfifo("/tmp/KCemu-FIFO-in", 0600) != 0) { perror("can't create FIFO"); exit(1); } if (mkfifo("/tmp/KCemu-FIFO-out", 0600) != 0) { perror("can't create FIFO"); exit(1); } fd_read = open("/tmp/KCemu-FIFO-in", O_RDONLY | O_NONBLOCK); if (fd_read < 0) { perror("open (read)"); exit(1); } /* * open the fifo for writing too to keep it open if the * external writer closes it's side of the fifo */ fd_read_w = open("/tmp/KCemu-FIFO-in", O_WRONLY | O_NONBLOCK); fd_write_r = open("/tmp/KCemu-FIFO-out", O_RDONLY | O_NONBLOCK); fd_write = open("/tmp/KCemu-FIFO-out", O_WRONLY | O_NONBLOCK); if (fd_write < 0) { perror("open (write)"); exit(1); } while (242) { pollfds[0].fd = fd_read; pollfds[0].events = POLLIN; pollfds[0].revents = 0; pollfds[1].fd = fd; pollfds[1].events = POLLIN; pollfds[1].revents = 0; if ((ret = poll(pollfds, 2, -1)) < 0) exit(2); if ((pollfds[0].revents & POLLIN) == POLLIN) { len = read(fd_read, buf, 1024); if (len == 0) { cerr << "ModuleV24::fifo_server(): read error" << endl; exit(1); } send(fd, buf, len, 0); } if ((pollfds[1].revents & POLLIN) == POLLIN) { len = read(fd, buf, 1024); write(fd_write, buf, len); } } } void ModuleV24::socket_server(int fd) { int s, c, len; char buf[1024]; unsigned int cli_addr_len; struct sockaddr_un unix_addr, cli_addr; _socket_name = tempnam("/tmp", "KCemu"); if (_socket_name == NULL) exit(1); _socket_name = strdup("/tmp/KCemu-in"); s = socket(AF_UNIX, SOCK_STREAM, 0); if (s < 0) exit(2); bzero((char *)&unix_addr, sizeof(unix_addr)); unix_addr.sun_family = AF_UNIX; strcpy(unix_addr.sun_path, _socket_name); len = strlen(unix_addr.sun_path) + sizeof(unix_addr.sun_family); unlink(_socket_name); if (bind(s, (struct sockaddr *)&unix_addr, len) != 0) exit(3); if (listen(s, 5) != 0) exit(4); while (242) { if ((c = accept(s, (struct sockaddr *)&cli_addr, &cli_addr_len)) < 0) continue; while (242) { len = recv(c, buf, 1024, 0); if (len == 0) break; send(fd, buf, len, 0); } } } bool ModuleV24::open_device_socket_or_fifo(io_type_t io_type) { int fd[2]; /* * we use a pair of sockets for to communicate with the * child process, fd[0] is used by the server, fd[1] by * the child process */ if (socketpair(AF_UNIX, SOCK_STREAM, 0, fd) != 0) return false; _pid = fork(); if (_pid < 0) return false; if (_pid > 0) { _fd_in[A] = fd[0]; _fd_out[A] = fd[0]; set_signal_handler(_fd_in[A], signal_handler_IO_recv); return true; } if (io_type == IO_FIFO) fifo_server(fd[1]); else socket_server(fd[1]); return true; } void ModuleV24::open_device(void) { bool ret; char *s; const char *dev_name; dev_name = Preferences::instance()->get_string_value("v24_device", "/dev/ttyS1"); _io_type = IO_NONE; if (strcmp(dev_name, "SOCKET") == 0) { _io_type = IO_SOCKET; ret = open_device_socket_or_fifo(IO_SOCKET); } else if (strcmp(dev_name, "FIFO") == 0) { _io_type = IO_FIFO; ret = open_device_socket_or_fifo(IO_FIFO); } else { _io_type = IO_FIFO; ret = open_device_serial(B, dev_name); } if (!ret) return; z80->register_ic(this); s = "\r\nKCemu v" KCEMU_VERSION " - V24 module active\r\n\r\n"; write(_fd_out[B], s, strlen(s)); } void ModuleV24::close_device(void) { if (_socket_name != 0) { unlink(_socket_name); free(_socket_name); } if (_fd_in[A] != 0) { tcsetattr(_fd_in[A] , TCSANOW, &_tio_old[A]); close(_fd_in[A]); close(_fd_out[A]); } z80->unregister_ic(this); } void ModuleV24::m_out(word_t addr, byte_t val) { } KCemu-0.5.1/src/kc/plotter.cc0000644001050700006200000002470011345001576015376 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include "kc/system.h" #include "kc/plotter.h" Plotter::Plotter(void) { init(); } Plotter::~Plotter(void) { } void Plotter::init(void) { _x = 0; _y = 0; _pen_down_factor = 1.2; _show_pen = false; _show_plot_area = false; _pdf_cr = 0; _pdf_surface = 0; _buffer_cr = 0; _buffer_surface = 0; _onscreen_cr = 0; _onscreen_surface = 0; _origin_x = _origin_x_new = (WIDTH_MM - PLOTTING_AREA_WIDTH_MM) / 2.0; _origin_y = _origin_y_new = (HEIGHT_MM - PLOTTING_AREA_HEIGHT_MM) / 2.0; clear_dirty_rect(); pen_up(); set_line_width(0.2); set_bg_color(1, 1, 1); set_pen_color(0, 0, 0); init_image_surface(&_buffer_surface, &_buffer_cr, WIDTH_MM * BUFFER_SURFACE_SCALE, HEIGHT_MM * BUFFER_SURFACE_SCALE); init_image_surface(&_onscreen_surface, &_onscreen_cr, WIDTH_MM * ONSCREEN_SURFACE_SCALE, HEIGHT_MM * ONSCREEN_SURFACE_SCALE); } void Plotter::clear_dirty_rect(void) { _dirty = false; _dirty_x1 = PLOTTING_AREA_WIDTH_MM; _dirty_y1 = PLOTTING_AREA_HEIGHT_MM; _dirty_x2 = 0; _dirty_y2 = 0; } void Plotter::invalidate(void) { _dirty = true; _invalidated = true; } void Plotter::update_dirty_rect(double x, double y) { _dirty = true; if (x < _dirty_x1) _dirty_x1 = x; if (y < _dirty_y1) _dirty_y1 = y; if (x > _dirty_x2) _dirty_x2 = x; if (y > _dirty_y2) _dirty_y2 = y; } bool Plotter::is_dirty(void) { return _dirty; } cairo_rectangle_t * Plotter::get_dirty_rectangle(void) { static cairo_rectangle_t rect; static cairo_rectangle_t rect_full = { 0, 0, WIDTH_MM * ONSCREEN_SURFACE_SCALE, HEIGHT_MM * ONSCREEN_SURFACE_SCALE}; if (_invalidated) { _invalidated = false; return &rect_full; } if (!_dirty) return NULL; cairo_rectangle_t *r; if (is_show_helpers()) { r = &rect_full; } else { if (_dirty_x1 > _dirty_x2) return NULL; r = ▭ rect.x = _dirty_x1 + _origin_x - 2 * _line_width; rect.y = _dirty_y1 + _origin_y - 2 * _line_width; rect.width = _dirty_x2 - _dirty_x1 + 4 * _line_width; rect.height = _dirty_y2 - _dirty_y1 + 4 * _line_width; rect.x *= ONSCREEN_SURFACE_SCALE; rect.y *= ONSCREEN_SURFACE_SCALE; rect.width *= ONSCREEN_SURFACE_SCALE; rect.height *= ONSCREEN_SURFACE_SCALE; rect.x -= 2; rect.y -= 2; rect.width += 4; rect.height += 4; if (rect.x < 0) rect.x = 0; if (rect.y < 0) rect.y = 0; } clear_dirty_rect(); return r; } cairo_t * Plotter::replace_cairo_context(cairo_t *old_cr, cairo_surface_t *surface, double scale_factor) { cairo_t *cr = cairo_create(surface); cairo_scale(cr, scale_factor, scale_factor); cairo_translate(cr, _origin_x, _origin_y); cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND); cairo_set_line_width(cr, _line_width); cairo_set_source_rgb(cr, _red, _green, _blue); cairo_destroy(old_cr); return cr; } void Plotter::init_image_surface(cairo_surface_t **surface, cairo_t **cr, double width, double height) { *surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, width, height); *cr = replace_cairo_context(*cr, *surface, width / WIDTH_MM); cairo_surface_destroy(*surface); clear_surface(*surface, width / WIDTH_MM); } void Plotter::clear_surface(cairo_surface_t *surface, double scale_factor) { cairo_t *cr = cairo_create(surface); cairo_scale(cr, scale_factor, scale_factor); cairo_set_source_rgb(cr, _bg_red, _bg_green, _bg_blue); cairo_rectangle(cr, 0, 0, WIDTH_MM, HEIGHT_MM); cairo_fill(cr); cairo_destroy(cr); } void Plotter::open_pdf(const char *filename) { close_pdf(); cairo_surface_t *surface = cairo_pdf_surface_create(filename, WIDTH_MM * MM_TO_INCH, HEIGHT_MM * MM_TO_INCH); cairo_status_t status = cairo_surface_status(surface); if (status == CAIRO_STATUS_SUCCESS) { _pdf_cr = replace_cairo_context(_pdf_cr, surface, MM_TO_INCH); _pdf_surface = surface; } cairo_surface_destroy(surface); } void Plotter::close_pdf(void) { if (_pdf_cr) cairo_destroy(_pdf_cr); _pdf_cr = 0; _pdf_surface = 0; } void Plotter::show_page(void) { _origin_x = _origin_x_new; _origin_y = _origin_y_new; if (_pdf_surface) { cairo_surface_show_page(_pdf_surface); clear_surface(_pdf_surface, MM_TO_INCH); _pdf_cr = replace_cairo_context(_pdf_cr, _pdf_surface, MM_TO_INCH); } clear_surface(_buffer_surface, BUFFER_SURFACE_SCALE); _buffer_cr = replace_cairo_context(_buffer_cr, _buffer_surface, BUFFER_SURFACE_SCALE); clear_surface(_onscreen_surface, ONSCREEN_SURFACE_SCALE); _onscreen_cr = replace_cairo_context(_onscreen_cr, _onscreen_surface, ONSCREEN_SURFACE_SCALE); invalidate(); } cairo_status_t Plotter::save_as_png(const char *filename) { cairo_status_t status = cairo_surface_write_to_png(_buffer_surface, filename); return status; } cairo_surface_t * Plotter::get_onscreen_surface() { static cairo_surface_t *surface = NULL; if (!is_show_helpers()) return _onscreen_surface; if (surface) cairo_surface_destroy(surface); surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, WIDTH_MM * ONSCREEN_SURFACE_SCALE, HEIGHT_MM * ONSCREEN_SURFACE_SCALE); cairo_t *cr = cairo_create(surface); cairo_set_source_surface(cr, _onscreen_surface, 0, 0); cairo_paint(cr); cairo_scale(cr, ONSCREEN_SURFACE_SCALE, ONSCREEN_SURFACE_SCALE); cairo_translate(cr, _origin_x, _origin_y); cairo_set_line_cap(cr, CAIRO_LINE_CAP_ROUND); cairo_set_line_join(cr, CAIRO_LINE_JOIN_ROUND); cairo_set_line_width(cr, 0.1); if (is_show_pen()) { cairo_set_source_rgba(cr, 1, 0, 0, 0.4); cairo_move_to(cr, get_x(), get_y()); cairo_arc(cr, get_x(), get_y(), 1, 0, 2 * M_PI); cairo_fill(cr); cairo_set_source_rgba(cr, 0, 0, 1, 0.8); cairo_move_to(cr, get_x() - 5, get_y()); cairo_rel_line_to(cr, 10, 0); cairo_stroke(cr); cairo_move_to(cr, get_x(), get_y() - 5); cairo_rel_line_to(cr, 0, 10); cairo_stroke(cr); } if (is_show_plot_area()) { cairo_set_source_rgba(cr, 0, 1, 0, 0.8); cairo_rectangle(cr, 0, 0, PLOTTING_AREA_WIDTH_MM, PLOTTING_AREA_HEIGHT_MM); cairo_stroke(cr); } cairo_destroy(cr); return surface; } void Plotter::pen_up(void) { _pen_down = false; } void Plotter::pen_down(void) { _pen_down = true; set_point(_buffer_cr, get_x(), get_y()); set_point(_onscreen_cr, get_x(), get_y()); if (_pdf_cr) set_point(_pdf_cr, get_x(), get_y()); } void Plotter::step(int delta_x, int delta_y) { double x = _x + delta_x * STEP_WIDTH; double y = _y + delta_y * STEP_WIDTH; if (x < 0) x = 0; if (x > PLOTTING_AREA_WIDTH_MM) x = PLOTTING_AREA_WIDTH_MM; if (y < 0) y = 0; if (y > PLOTTING_AREA_HEIGHT_MM) y = PLOTTING_AREA_HEIGHT_MM; draw_to(_buffer_cr, x, y); draw_to(_onscreen_cr, x, y); if (_pdf_cr) draw_to(_pdf_cr, x, y); _x = x; _y = y; } double Plotter::get_x(void) { return _x; } double Plotter::get_y(void) { return _y; } bool Plotter::is_pen_down(void) { return _pen_down; } double Plotter::get_line_width(void) { return _line_width; } void Plotter::set_line_width(double line_width) { _line_width = line_width; if (_buffer_cr) cairo_set_line_width(_buffer_cr, _line_width); if (_onscreen_cr) cairo_set_line_width(_onscreen_cr, _line_width); if (_pdf_cr) cairo_set_line_width(_pdf_cr, _line_width); } double Plotter::get_origin_x(void) { return _origin_x_new; } void Plotter::set_origin_x(double origin_x) { _origin_x_new = origin_x; } double Plotter::get_origin_y(void) { return _origin_y_new; } void Plotter::set_origin_y(double origin_y) { _origin_y_new = origin_y; } double Plotter::get_bg_red(void) { return _bg_red; } double Plotter::get_bg_green(void) { return _bg_green; } double Plotter::get_bg_blue(void) { return _bg_blue; } void Plotter::set_bg_color(double red, double green, double blue) { _bg_red = red; _bg_green = green; _bg_blue = blue; } double Plotter::get_pen_red(void) { return _red; } double Plotter::get_pen_green(void) { return _green; } double Plotter::get_pen_blue(void) { return _blue; } void Plotter::set_pen_color(double red, double green, double blue) { _red = red; _green = green; _blue = blue; if (_buffer_cr) cairo_set_source_rgb(_buffer_cr, _red, _green, _blue); if (_onscreen_cr) cairo_set_source_rgb(_onscreen_cr, _red, _green, _blue); if (_pdf_cr) cairo_set_source_rgb(_pdf_cr, _red, _green, _blue); } bool Plotter::is_show_pen(void) { return _show_pen; } void Plotter::set_show_pen(bool show_pen) { invalidate(); _show_pen = show_pen; } bool Plotter::is_show_plot_area(void) { return _show_plot_area; } void Plotter::set_show_plot_area(bool show_plot_area) { invalidate(); _show_plot_area = show_plot_area; } bool Plotter::is_show_helpers(void) { return is_show_pen() || is_show_plot_area(); } void Plotter::set_point(cairo_t *cr, double x, double y) { cairo_move_to(cr, x, y); cairo_save(cr); cairo_set_line_width(cr, cairo_get_line_width(cr) * _pen_down_factor); cairo_rel_line_to(cr, 0, 0); cairo_stroke(cr); cairo_restore(cr); update_dirty_rect(x, y); } void Plotter::draw_to(cairo_t *cr, double x, double y) { // force dirty status also when just moving the cursor // this is required for the cursor indicator to also // generate update requests _dirty = true; if (is_pen_down()) { cairo_line_to(cr, x, y); cairo_stroke(cr); update_dirty_rect(x, y); } cairo_move_to(cr, x, y); } KCemu-0.5.1/src/kc/ports0.cc0000644001050700006200000000407611345001576015140 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include // sleep(); #include "kc/system.h" #include "kc/kc.h" #include "kc/pio.h" #include "kc/keyb0.h" #include "kc/ports0.h" #include "libdbg/dbg.h" Ports0::Ports0(void) { for (int a = 0;a < NR_PORTS;a++) inout[a] = 0xff; } Ports0::~Ports0(void) { } byte_t Ports0::in(word_t addr) { byte_t a = addr & 0xff; byte_t val = inout[a]; switch (a) { case 0x08: break; default: DBG(0, form("KCemu/internal_error", "Ports0: called in() with undefined address %04xh\n", addr)); break; } DBG(2, form("KCemu/Ports/0/in", "Ports0: in() addr = %04x (returning %02x)\n", addr, val)); return val; } void Ports0::out(word_t addr, byte_t val) { byte_t a = addr & 0xff; DBG(2, form("KCemu/Ports/0/out", "Ports0: out() addr = %04x, val = %02x\n", addr, val)); switch (a) { case 0x08: change_0x08(inout[a] ^ val, val); break; default: DBG(0, form("KCemu/internal_error", "Ports0: called out() with undefined address %04xh (val = %02xh)\n", addr, val)); break; } inout[a] = val; } void Ports0::change_0x08(byte_t changed, byte_t val) { ((Keyboard0 *)keyboard)->set_value(val & 0x0f); } KCemu-0.5.1/src/kc/pio8.cc0000644001050700006200000002556211345001576014573 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/pio8.h" #include "libdbg/dbg.h" #include "kc/cb.h" // FIXME: DEBUG #include "cmd/cmd.h" // FIXME: DEBUG #define memory ((Memory1 *)memory) using namespace std; static byte_t head0[] = { 0x00, 0x00, 0x00, 0x20, 0x26, 0x20, 0xd1 }; static byte_t prog0[] = { 0xdd, 0x21, 0x20, 0x20, 0xcd, 0x5a, 0x08, 0xfe, 0x10, 0x20, 0xf9, 0x76, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xae, 0xe3, 0x4f, 0xc2, 0xce, 0x6b }; static byte_t head1[] = { 0x01, 0x00, 0x00, 0x20, 0x2c, 0x20, 0xc0 }; static byte_t prog1[] = { 0x21, 0x26, 0x20, 0xe5, 0xdd, 0x21, 0x20, 0x20, 0xdd, 0xe3, 0x06, 0x32, 0xcd, 0x83, 0x08, 0x10, 0xfb, 0x18, 0xf5, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xae, 0xe3, 0x4f, 0xc2, 0xce, 0x6b, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00 }; static byte_t head2[] = { 0x02, 0x00, 0x00, 0x20, 0x1e, 0x20, 0xd4 }; static byte_t prog2[] = { 0x3e, 0xff, 0xd3, 0xf5, 0x06, 0x50, 0xcd, 0x18, 0x20, 0x10, 0xfb, 0x3e, 0xfd, 0xd3, 0xf5, 0x06, 0x50, 0xcd, 0x18, 0x20, 0x10, 0xfb, 0x18, 0xe8, 0x0e, 0xff, 0x0d, 0x20, 0xfd, 0xc9 }; class TapeTest : public Callback, public CMD { private: int _idx; int _state; int _1, _2; byte_t *_head; byte_t *_prog; byte_t _prog_len; public: TapeTest(void); virtual ~TapeTest(void); void callback(void *data); void execute(CMD_Args *args, CMD_Context context); int send_byte(byte_t *data, int len, int state); }; TapeTest::TapeTest(void) : Callback("TapeTest"), CMD("TAPETEST") { register_cmd("lc80-key-f10", 0); register_cmd("lc80-key-f11", 1); register_cmd("lc80-key-f12", 2); } TapeTest::~TapeTest(void) { } void TapeTest::callback(void *data) { static int cnt; long i = (long)data; if (i == 0) { pio->set_B_EXT(1, 1); return; } else { pio->set_B_EXT(1, 0); } switch (_state) { case 0: cnt = 4000; z80->addCallback(500, this, (void *)0); z80->addCallback(1000, this, (void *)1); //cout << "state => 1" << endl; _state = 1; break; case 1: z80->addCallback(500, this, (void *)0); z80->addCallback(1000, this, (void *)1); if (--cnt == 0) { _state = 2; //cout << "state => 2" << endl; } break; case 2: cnt = 4000; z80->addCallback(200, this, (void *)0); z80->addCallback(400, this, (void *)1); //cout << "state => 3" << endl; _idx = 0; _state = 3; break; case 3: _state = send_byte(_head, 7, 3); break; case 4: z80->addCallback(200, this, (void *)0); z80->addCallback(400, this, (void *)1); if (--cnt == 0) { _idx = 0; _state = 5; cnt = 4000; //cout << "state => 5" << endl; } break; case 5: _state = send_byte(_prog, _prog_len, 5); break; case 6: z80->addCallback(200, this, (void *)0); z80->addCallback(400, this, (void *)1); if (--cnt == 0) { _state = 7; //cout << "state => 7" << endl; } break; case 7: //cout << "TAPE END" << endl; break; default: break; } } int TapeTest::send_byte(byte_t *data, int len, int state) { static int i = 0; if (_1 == 0) { if (i == 0) { _1 = 3; _2 = 12; } else if (i == 9) { _1 = 6; _2 = 6; } else if (data[_idx] & (1 << (i - 1))) { _1 = 6; _2 = 6; } else { _1 = 3; _2 = 12; } } if (_2 > 0) { _2--; z80->addCallback(200, this, (void *)0); z80->addCallback(400, this, (void *)1); } else if (_1 > 0) { _1--; z80->addCallback(500, this, (void *)0); z80->addCallback(1000, this, (void *)1); } if (_1 == 0) { i++; if (i > 9) { i = 0; _idx++; if (_idx >= len) return state + 1; } } return state; } void TapeTest::execute(CMD_Args *args, CMD_Context context) { _idx = 0; _state = 0; _1 = _2 = 0; switch (context) { case 1: _head = head1; _prog = prog1; _prog_len = sizeof(prog1); break; case 2: _head = head2; _prog = prog2; _prog_len = sizeof(prog2); break; default: _head = head0; _prog = prog0; _prog_len = sizeof(prog0); break; } z80->addCallback(0, this, (void *)1); } static TapeTest *__tape_test; void PIO8_1::draw_leds(void) { #if 0 int a; printf("\x1b\x5b\x48"); // --- line 1 --------------- for (a = 0;a < 6;a++) { if (_led_value[a] & 4) printf(" --- "); else printf(" "); } printf(" \n"); // --- line 2 --------------- for (a = 0;a < 6;a++) { if (_led_value[a] & 2) printf("| "); else printf(" "); if (_led_value[a] & 1) printf("|"); else printf(" "); } printf(" \n"); // --- line 3 --------------- for (a = 0;a < 6;a++) { if (_led_value[a] & 2) printf("| "); else printf(" "); if (_led_value[a] & 1) printf("|"); else printf(" "); } printf(" \n"); // --- line 4 --------------- for (a = 0;a < 6;a++) { if (_led_value[a] & 8) printf(" --- "); else printf(" "); } printf(" \n"); // --- line 5 --------------- for (a = 0;a < 6;a++) { if (_led_value[a] & 64) printf("| "); else printf(" "); if (_led_value[a] & 32) printf("|"); else printf(" "); } printf(" \n"); // --- line 6 --------------- for (a = 0;a < 6;a++) { if (_led_value[a] & 64) printf("| "); else printf(" "); if (_led_value[a] & 32) printf("|"); else printf(" "); } printf(" \n"); // --- line 7 --------------- for (a = 0;a < 6;a++) { if (_led_value[a] & 128) printf(" --- "); else printf(" "); } printf(" \n"); printf(" \n"); #endif } PIO8_1::PIO8_1(void) { __tape_test = new TapeTest(); reset(true); } PIO8_1::~PIO8_1(void) { } byte_t PIO8_1::in(word_t addr) { DBG(2, form("KCemu/PIO/8a/in", "PIO8_1::in(): addr = %04x\n", addr)); switch (addr & 3) { case 0: return in_A_DATA(); case 1: return in_B_DATA(); case 2: return in_A_CTRL(); case 3: return in_B_CTRL(); } return 0; // shouldn't be reached } void PIO8_1::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/8a/out", "PIO8_1::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } void PIO8_1::change_A(byte_t changed, byte_t val) { _led_value_latch = ~val; } void PIO8_1::change_B(byte_t changed, byte_t val) { int selected_led = -1; _led_value[6] = (val & 2) ? 1 : 0; if (changed & 2) tape_signal(_led_value[6]); for (int a = 2;a < 8;a++) { if ((val & (1 << a)) == 0) { selected_led = 5 - (a - 2); break; } } if (selected_led < 0) return; _led_value[selected_led] = _led_value_latch; //draw_leds(); } byte_t PIO8_1::get_led_value(int index) { if (index < 0) return 0; if (index > 6) return 0; return _led_value[index]; } void PIO8_1::reset(bool power_on) { for (int a = 0;a < 7;a++) _led_value[a] = 0; } void PIO8_1::tape_callback(byte_t val) { //cout << "PIO8_1::tape_callback()" << endl; } void PIO8_1::tape_signal(int val) { int freq = 0; long long c; static long long diff; static long long cnt = 0; static int sync = 1000; c = z80->getCounter(); if (val == 1) { //cout << "(" << dec << c - cnt << "/"; diff = c - cnt; cnt = c; return; } else { //cout << (c - cnt) << ")"; diff += c - cnt; cnt = c; } if (diff < 800) freq = 2; // 2 kHz else if (diff > 1400) sync = 1000; // pause else freq = 1; // 1 kHz // SYNC if (sync > 0) { if (freq == 1) sync--; else sync = 1000; return; } if (sync == 0) { if (freq == 1) return; sync = -1; } //cout << "{" << dec << diff << "}"; tape_bit(freq); } void PIO8_1::tape_bit(int freq) { static int cnt = 0; static int byte = 0; static int val = 0; static bool got1 = false; //cout << freq; if (freq == 2) { val++; if (got1) { int bit = (val >= 0) ? 0 : 1; // cout << " [" << bit << "] " << endl; val = 0; got1 = false; byte >>= 1; byte |= bit << 9; cnt++; if (cnt == 10) { tape_byte(byte); cnt = 0; byte = 0; } } } else { val -= 2; got1 = true; } //cout << flush; } void PIO8_1::tape_byte(int byte) { byte = (byte >> 1) & 0xff; cout << hex << " |" << setw(2) << byte << "|" << endl; } PIO8_2::PIO8_2(void) { } PIO8_2::~PIO8_2(void) { } byte_t PIO8_2::in(word_t addr) { DBG(2, form("KCemu/PIO/8b/in", "PIO8_2::in(): addr = %04x\n", addr)); switch (addr & 3) { case 0: return in_A_DATA(); case 1: return in_B_DATA(); case 2: return in_A_CTRL(); case 3: return in_B_CTRL(); } return 0; // shouldn't be reached } void PIO8_2::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/8b/out", "PIO8_2::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } void PIO8_2::change_A(byte_t changed, byte_t val) { } void PIO8_2::change_B(byte_t changed, byte_t val) { if (changed & 0x02) { cout << "tape_signal()" << endl; tape->tape_signal(); } } KCemu-0.5.1/src/kc/ctc9.cc0000644001050700006200000000414411345001576014547 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/z80.h" #include "kc/ctc9.h" #include "libdbg/dbg.h" CTC9::CTC9(void) { } CTC9::~CTC9(void) { } byte_t CTC9::in(word_t addr) { DBG(2, form("KCemu/CTC/9/in", "CTC9::in(): addr = %04x\n", addr)); switch (addr & 3) { case 0: return c_in(0); case 1: return c_in(1); case 2: return c_in(2); case 3: return c_in(3); } return 0; // shouldn't be reached } void CTC9::out(word_t addr, byte_t val) { DBG(2, form("KCemu/CTC/9/out", "CTC9::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: c_out(0, val); break; case 1: c_out(1, val); break; case 2: c_out(2, val); break; case 3: c_out(3, val); break; } } bool CTC9::irq_0(void) { trigger(2); return false; } bool CTC9::irq_1(void) { return false; } bool CTC9::irq_2(void) { trigger(3); return false; } bool CTC9::irq_3(void) { return false; } long CTC9::counter_value_0(void) { return 0; } long CTC9::counter_value_1(void) { return 0; } long CTC9::counter_value_2(void) { return 0; } long CTC9::counter_value_3(void) { return 0; } KCemu-0.5.1/src/kc/floppy.cc0000644001050700006200000000543711345001576015224 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/floppy.h" #include "cmd/cmd.h" #include "libdbg/dbg.h" class CMD_floppy_attach : public CMD { private: Floppy *_f; public: CMD_floppy_attach(Floppy *f, const char *cmdname) : CMD("floppy-attach") { _f = f; register_cmd(cmdname); } void execute(CMD_Args *args, CMD_Context context) { const char *filename; if (!args) return; filename = args->get_string_arg("filename"); if (!filename) return; _f->attach(filename); } }; Floppy::Floppy(const char *cmdname) { _disk_prop = NULL; CMD *cmd; cmd = new CMD_floppy_attach(this, cmdname); } Floppy::~Floppy(void) { } int Floppy::get_head_count(void) { if (_disk_prop == NULL) return -1; return _disk_prop->head_count; } int Floppy::get_cylinder_count(void) { if (_disk_prop == NULL) return -1; return _disk_prop->cylinder_count; } int Floppy::get_sector_size(void) { if (_disk_prop == NULL) return -1; return _disk_prop->sector_size; } int Floppy::get_sectors_per_cylinder(void) { if (_disk_prop == NULL) return -1; return _disk_prop->sectors_per_cylinder; } bool Floppy::attach(const char *filename) { if (filename == NULL) { libdisk_close(&_disk_prop); return true; } if (libdisk_open(&_disk_prop, filename) < 0) { //cerr << "Can't attach disk-image '" << filename << "'!" << endl; return false; } //cerr << "Attached disk-image '" << filename << "'" << endl; return true; } bool Floppy::seek(int head, int cylinder, int sector) { if (_disk_prop == NULL) return false; if (libdisk_seek(&_disk_prop, head, cylinder, sector) < 0) return false; return true; } int Floppy::read_sector(byte_t *buf, int len) { return libdisk_read_sector(&_disk_prop, buf, len); } int Floppy::write_sector(byte_t *buf, int len) { return libdisk_write_sector(&_disk_prop, buf, len); } KCemu-0.5.1/src/kc/pio0.cc0000644001050700006200000000402111345001576014546 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/pio0.h" #include "kc/tape.h" #include "libdbg/dbg.h" PIO0::PIO0(void) { } PIO0::~PIO0(void) { } byte_t PIO0::in(word_t addr) { byte_t ret = 0; switch (addr & 3) { case 0: ret = in_A_DATA(); break; case 1: ret = in_A_CTRL(); break; case 2: ret = in_B_DATA(); break; case 3: ret = in_B_CTRL(); break; } DBG(2, form("KCemu/PIO/0/in", "PIO0::in(): addr = %04x, val = %02x\n", addr, ret)); return ret; } void PIO0::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/0/out", "PIO0::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_A_CTRL(val); break; case 2: out_B_DATA(val); break; case 3: out_B_CTRL(val); break; } } void PIO0::change_A(byte_t changed, byte_t val) { } void PIO0::change_B(byte_t changed, byte_t val) { if (changed & 0x80) tape->tape_signal(); } void PIO0::tape_callback(byte_t val) { static int x = 0; set_B_EXT(0x40, x); x = 0x40 - x; } KCemu-0.5.1/src/kc/fdc_cmd.cc0000644001050700006200000007212611345001576015271 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/z80.h" // DEBUG #include "kc/fdc.h" #include "kc/fdc_cmd.h" #include "kc/floppy.h" #include "libdbg/dbg.h" static struct sector_def { int MFM, N, size, SC, GPL1, GPL2; } sector_def[] = { { 0, 0, 128, 0x1a, 0x07, 0x1b }, /* IBM Diskette 1 */ { 0, 1, 256, 0x0f, 0x0e, 0x2a }, /* IBM Diskette 2 */ { 0, 2, 512, 0x08, 0x1b, 0x3a }, { 0, 3, 1024, 0x04, 0x00, 0x00 }, { 0, 4, 2048, 0x02, 0x00, 0x00 }, { 0, 5, 4096, 0x01, 0x00, 0x00 }, { 1, 1, 256, 0x1a, 0x0e, 0x36 }, /* IBM Diskette 2D */ { 1, 2, 512, 0x0f, 0x1b, 0x54 }, /* IBM Diskette 2D */ { 1, 3, 1024, 0x08, 0x36, 0x74 }, { 1, 4, 2048, 0x04, 0x00, 0x00 }, { 1, 5, 4096, 0x02, 0x00, 0x00 }, { 1, 6, 8192, 0x01, 0x00, 0x00 }, { -1, -1, -1, -1, -1, -1 }, }; static int N_to_sector_size(int MFM, int N) { int a; a = 0; while (sector_def[a].N != -1) { if ((sector_def[a].MFM == MFM) && (sector_def[a].N == N)) return sector_def[a].size; a++; } return -1; } FDC_CMD::FDC_CMD(FDC *fdc, int args, int results, const char *name) { _fdc = fdc; _args = args; _results = results; _name = strdup(name); _sect = new SectorDesc(0, 0); } FDC_CMD::~FDC_CMD(void) { free(_name); delete _sect; } const char * FDC_CMD::get_name(void) { return _name; } FDC * FDC_CMD::get_fdc(void) { return _fdc; } void FDC_CMD::execute_cmd(void) { DBG(2, form("KCemu/FDC_CMD/command/execute", "FDC: --> execute '%s'\n", get_name())); _fdc->set_state(FDC::FDC_STATE_EXECUTE); _data_transfer = false; execute(); if (_data_transfer) _fdc->set_state(FDC::FDC_STATE_DATA); else finish_cmd(); } void FDC_CMD::finish_cmd(void) { if (_results > 0) _fdc->set_state(FDC::FDC_STATE_RESULT); else _fdc->set_state(FDC::FDC_STATE_IDLE); } void FDC_CMD::start(byte_t val) { _w_idx = 0; _r_idx = 0; _arg[_w_idx++] = val; _fdc->set_state(FDC::FDC_STATE_COMMAND); DBG(2, form("KCemu/FDC_CMD/command/start", "FDC: --> start '%s' [%02x] %d/%d\n", get_name(), val, _w_idx, _args)); if (_args == 1) execute_cmd(); } bool FDC_CMD::write_arg(byte_t val) { _arg[_w_idx++] = val; DBG(2, form("KCemu/FDC_CMD/command/arg", "FDC: --> arg '%s' [%02x] %d/%d\n", get_name(), val, _w_idx, _args)); if (_w_idx == _args) execute_cmd(); return true; } byte_t FDC_CMD::read_result(void) { byte_t val = 0; val = _result[_r_idx++]; DBG(2, form("KCemu/FDC_CMD/command/result", "FDC: <-- result '%s' - [%02x] %d/%d\n", get_name(), val, _r_idx, _results)); if (_r_idx >= _results) _fdc->set_state(FDC::FDC_STATE_IDLE); return val; } byte_t FDC_CMD::read_byte(void) { DBG(1, form("KCemu/warning", "FDC_CMD::read_byte() called! [current cmd is '%s']\n", get_name())); return 0xff; } void FDC_CMD::write_byte(byte_t val) { DBG(1, form("KCemu/warning", "FDC_CMD::write_byte() called! [%s] (value = 0x%02x)\n", get_name(), val)); } int FDC_CMD::get_read_idx(void) { return _r_idx; } int FDC_CMD::get_write_idx(void) { return _w_idx; } /* * INVALID */ FDC_CMD_INVALID::FDC_CMD_INVALID(FDC *fdc) : FDC_CMD(fdc, 1, 1, "INVALID") { } FDC_CMD_INVALID::~FDC_CMD_INVALID(void) { } void FDC_CMD_INVALID::execute(void) { DBG(2, form("KCemu/FDC_CMD/INVALID", "FDC: INVALID: ------------------------------------\n" "FDC: INVALID: code = %02x\n" "FDC: INVALID: ------------------------------------\n", _arg[0])); get_fdc()->set_ST0(FDC::ST_0_ALL_MASK, FDC::ST_0_IC_INVALID_COMMAND); _result[0] = get_fdc()->get_ST0(); } /******************************************************************** * 0x02 - FDC_CMD_READ_TRACK */ FDC_CMD_READ_TRACK::FDC_CMD_READ_TRACK(FDC *fdc) : FDC_CMD(fdc, 9, 7, "READ TRACK") { } FDC_CMD_READ_TRACK::~FDC_CMD_READ_TRACK(void) { } void FDC_CMD_READ_TRACK::execute(void) { DBG(2, form("KCemu/FDC_CMD/READ_TRACK", "FDC: READ TRACK: ---------------------------------\n" "FDC: READ TRACK: ---------------------------------\n")); } /******************************************************************** * 0x03 - FDC_CMD_SPECIFY */ FDC_CMD_SPECIFY::FDC_CMD_SPECIFY(FDC *fdc) : FDC_CMD(fdc, 3, 0, "SPECIFY") { } FDC_CMD_SPECIFY::~FDC_CMD_SPECIFY(void) { } void FDC_CMD_SPECIFY::execute(void) { DBG(2, form("KCemu/FDC_CMD/SPECIFY", "FDC: SPECIFY: ------------------------------------\n" "FDC: SPECIFY: Step Rate Time = %d ms\n" "FDC: SPECIFY: Head Unload Time = %d ms\n" "FDC: SPECIFY: Head Load Time = %d ms\n" "FDC: SPECIFY: NON-DMA Mode = %s\n" "FDC: SPECIFY: ------------------------------------\n", 16 - ((_arg[1] >> 4) & 0x0f), (_arg[1] & 0x0f) * 16 + 16, (_arg[2] & 0xfe) + 2, (_arg[2] & 0x01) ? "yes" : "no (= DMA Mode)")); } /******************************************************************** * 0x04 - FDC_CMD_SENSE_DRIVE_STATUS */ FDC_CMD_SENSE_DRIVE_STATUS::FDC_CMD_SENSE_DRIVE_STATUS(FDC *fdc) : FDC_CMD(fdc, 2, 1, "SENSE DRIVE STATUS") { } FDC_CMD_SENSE_DRIVE_STATUS::~FDC_CMD_SENSE_DRIVE_STATUS(void) { } void FDC_CMD_SENSE_DRIVE_STATUS::execute(void) { DBG(2, form("KCemu/FDC_CMD/SENSE_DRIVE_STATUS", "FDC: SENSE DRIVE STATUS: -------------------------\n" "FDC: SENSE DRIVE STATUS: Head Select = %d\n" "FDC: SENSE DRIVE STATUS: Drive Select = %d\n" "FDC: SENSE DRIVE STATUS: -------------------------\n", (_arg[1] >> 2) & 1, _arg[1] & 3)); get_fdc()->select_floppy(_arg[1] & 3); _result[0] = get_fdc()->get_ST3(); } /******************************************************************** * 0x05 - FDC_CMD_WRITE_DATA */ FDC_CMD_WRITE_DATA::FDC_CMD_WRITE_DATA(FDC *fdc) : FDC_CMD(fdc, 9, 7, "WRITE DATA") { _buf = 0; } FDC_CMD_WRITE_DATA::~FDC_CMD_WRITE_DATA(void) { if (_buf != 0) delete _buf; } void FDC_CMD_WRITE_DATA::execute(void) { DBG(2, form("KCemu/FDC_CMD/WRITE_DATA", "FDC: WRITE DATA: ----------------------------------\n" "FDC: WRITE DATA: Multi-Track = %s\n" "FDC: WRITE DATA: FM or MFM Mode = %s\n" "FDC: WRITE DATA: Skip = %s\n" "FDC: WRITE DATA: Head Select = %d\n" "FDC: WRITE DATA: Drive Select = %d\n" "FDC: WRITE DATA: Cylinder = %d\n" "FDC: WRITE DATA: Head = %d\n" "FDC: WRITE DATA: Sector = %d\n" "FDC: WRITE DATA: Number of Data Bytes = %d\n" "FDC: WRITE DATA: End of Track = %d\n" "FDC: WRITE DATA: Gap Length = %d\n" "FDC: WRITE DATA: Date Length = %d\n" "FDC: WRITE DATA: ----------------------------------\n", ((_arg[0] >> 8) & 1) ? "yes" : "no", ((_arg[0] >> 7) & 1) ? "MFM Mode" : "FM Mode", ((_arg[0] >> 6) & 1) ? "yes" : "no", (_arg[1] >> 2) & 1, _arg[1] & 3, _arg[2], _arg[3], _arg[4], _arg[5], _arg[6], _arg[7], _arg[8])); get_fdc()->select_floppy(_arg[1] & 3); get_fdc()->set_input_gate(0x40, 0x40); _head = _arg[3]; _cylinder = _arg[2]; _sector = _arg[4]; if (_buf != 0) delete _buf; _sector_size = N_to_sector_size((_arg[0] >> 7) & 1, _arg[5]); _buf = new byte_t[_sector_size]; _idx = 0; _result[0] = get_fdc()->get_ST0(); _result[1] = get_fdc()->get_ST1(); _result[2] = get_fdc()->get_ST2(); _result[3] = _arg[2]; _result[4] = _arg[3]; _result[5] = _arg[4]; _result[6] = _arg[5]; get_fdc()->set_msr(FDC::ST_MAIN_READ_WRITE | FDC::ST_MAIN_RQM | FDC::ST_MAIN_DIO, FDC::ST_MAIN_READ_WRITE | FDC::ST_MAIN_RQM); _data_transfer = true; } void FDC_CMD_WRITE_DATA::write_byte(byte_t val) { DBG(2, form("KCemu/FDC_CMD/write_byte", "FDC_CMD_WRITE_DATA::write_byte(): c/h/s %d/%d/%d [%4d]: 0x%02x (%3d, '%c')\n", get_fdc()->get_cylinder(), get_fdc()->get_head(), get_fdc()->get_sector(), _idx, val, val, isprint(val) ? val : '.')); _buf[_idx++] = val; if (_idx == _sector_size) { Floppy *f = get_fdc()->get_floppy(); if (f != 0) { get_fdc()->seek_internal(_head, _cylinder, _sector); f->write_sector(_buf, _sector_size); } if (_sector == _arg[6]) { DBG(2, form("KCemu/FDC_CMD/WRITE_DATA", "FDC: WRITE DATA: Writing sector %2d hit end of track (EOT = %d)\n", _sector, _arg[6])); get_fdc()->set_ST0(FDC::ST_0_IC_MASK, FDC::ST_0_IC_ABNORMAL_TERMINATION); _data_transfer = false; finish_cmd(); } } } /******************************************************************** * 0x06 - READ DATA */ FDC_CMD_READ_DATA::FDC_CMD_READ_DATA(FDC *fdc) : FDC_CMD(fdc, 9, 7, "READ DATA") { _buf = 0; _idx = 0; _size = 0; } FDC_CMD_READ_DATA::~FDC_CMD_READ_DATA(void) { if (_buf != 0) delete _buf; } void FDC_CMD_READ_DATA::execute(void) { Floppy *f; int size, len; DBG(2, form("KCemu/FDC_CMD/READ_DATA", "FDC: READ DATA: ----------------------------------\n" "FDC: READ DATA: Multi-Track = %s\n" "FDC: READ DATA: FM or MFM Mode = %s\n" "FDC: READ DATA: Skip = %s\n" "FDC: READ DATA: Head Select = %d\n" "FDC: READ DATA: Drive Select = %d\n" "FDC: READ DATA: Cylinder = %d\n" "FDC: READ DATA: Head = %d\n" "FDC: READ DATA: Sector = %d\n" "FDC: READ DATA: Number of Data Bytes = %d\n" "FDC: READ DATA: End of Track = %d\n" "FDC: READ DATA: Gap Length = %d\n" "FDC: READ DATA: Date Length = %d\n" "FDC: READ DATA: ----------------------------------\n", ((_arg[0] >> 8) & 1) ? "yes" : "no", ((_arg[0] >> 7) & 1) ? "MFM Mode" : "FM Mode", ((_arg[0] >> 6) & 1) ? "yes" : "no", (_arg[1] >> 2) & 1, _arg[1] & 3, _arg[2], _arg[3], _arg[4], _arg[5], _arg[6], _arg[7], _arg[8])); get_fdc()->select_floppy(_arg[1] & 3); get_fdc()->set_input_gate(0x40, 0x40); get_fdc()->seek_internal(_arg[3], _arg[2], _arg[4]); f = get_fdc()->get_floppy(); if (f == 0) return; _result[0] = get_fdc()->get_ST0(); _result[1] = get_fdc()->get_ST1(); _result[2] = get_fdc()->get_ST2(); _result[3] = _arg[2]; _result[4] = _arg[3]; _result[5] = _arg[4]; _result[6] = _arg[5]; size = f->get_sector_size(); if (size <= 0) { get_fdc()->set_ST0(FDC::ST_0_IC_MASK, FDC::ST_0_IC_ABNORMAL_TERMINATION); get_fdc()->set_ST1(FDC::ST_1_NO_DATE | FDC::ST_1_MISSING_ADDRESS_MARK, FDC::ST_1_NO_DATE | FDC::ST_1_MISSING_ADDRESS_MARK); _result[0] = get_fdc()->get_ST0(); _result[1] = get_fdc()->get_ST1(); return; } DBG(2, form("KCemu/FDC_CMD/READ_DATA_FORMAT", "FDC: READ DATA: heads: %d\n" "FDC: READ DATA: cylinders: %d\n" "FDC: READ DATA: sector size: %d\n" "FDC: READ DATA: sect per cyl: %d\n", f->get_head_count(), f->get_cylinder_count(), size, f->get_sectors_per_cylinder())); if (_buf != 0) delete[] _buf; _buf = new byte_t[size]; len = f->read_sector(_buf, size); if (len != size) { get_fdc()->set_ST0(FDC::ST_0_IC_MASK, FDC::ST_0_IC_ABNORMAL_TERMINATION); get_fdc()->set_ST1(FDC::ST_1_NO_DATE | FDC::ST_1_MISSING_ADDRESS_MARK, FDC::ST_1_NO_DATE | FDC::ST_1_MISSING_ADDRESS_MARK); _result[0] = get_fdc()->get_ST0(); _result[1] = get_fdc()->get_ST1(); return; } _idx = 0; _size = size; DBG(2, form("KCemu/FDC_CMD/READ_DATA_DUMP", "FDC: READ DATA: %02x %02x %02x %02x %02x %02x %02x %02x\n" "FDC: READ DATA: %02x %02x %02x %02x %02x %02x %02x %02x\n" "FDC: READ DATA: %02x %02x %02x %02x %02x %02x %02x %02x\n" "FDC: READ DATA: %02x %02x %02x %02x %02x %02x %02x %02x\n" "FDC: READ DATA: %02x %02x %02x %02x %02x %02x %02x %02x\n" "FDC: READ DATA: %02x %02x %02x %02x %02x %02x %02x %02x\n" "FDC: READ DATA: %02x %02x %02x %02x %02x %02x %02x %02x\n" "FDC: READ DATA: %02x %02x %02x %02x %02x %02x %02x %02x\n", _buf[0x00], _buf[0x01], _buf[0x02], _buf[0x03], _buf[0x04], _buf[0x05], _buf[0x06], _buf[0x07], _buf[0x08], _buf[0x09], _buf[0x0a], _buf[0x0b], _buf[0x0c], _buf[0x0d], _buf[0x0e], _buf[0x0f], _buf[0x10], _buf[0x11], _buf[0x12], _buf[0x13], _buf[0x14], _buf[0x15], _buf[0x16], _buf[0x17], _buf[0x18], _buf[0x19], _buf[0x1a], _buf[0x1b], _buf[0x1c], _buf[0x1d], _buf[0x1e], _buf[0x1f], _buf[0x20], _buf[0x21], _buf[0x22], _buf[0x23], _buf[0x24], _buf[0x25], _buf[0x26], _buf[0x27], _buf[0x28], _buf[0x29], _buf[0x2a], _buf[0x2b], _buf[0x2c], _buf[0x2d], _buf[0x2e], _buf[0x2f], _buf[0x30], _buf[0x31], _buf[0x32], _buf[0x33], _buf[0x34], _buf[0x35], _buf[0x36], _buf[0x37], _buf[0x38], _buf[0x39], _buf[0x3a], _buf[0x3b], _buf[0x3c], _buf[0x3d], _buf[0x3e], _buf[0x3f])); get_fdc()->set_msr(FDC::ST_MAIN_READ_WRITE | FDC::ST_MAIN_RQM | FDC::ST_MAIN_DIO, FDC::ST_MAIN_READ_WRITE | FDC::ST_MAIN_RQM | FDC::ST_MAIN_DIO); get_fdc()->set_ST0(FDC::ST_0_IC_MASK | FDC::ST_0_SEEK_END, FDC::ST_0_IC_NORMAL_TERMINATION); _data_transfer = true; } bool FDC_CMD_READ_DATA::fetch_next_sector(void) { Floppy *f; int sector, size, cnt, len; f = get_fdc()->get_floppy(); if (f == 0) return false; size = f->get_sector_size(); if (size == 0) return false; cnt = f->get_sectors_per_cylinder(); sector = get_fdc()->get_sector(); if (sector < 0) return false; if (sector >= cnt) return false; DBG(2, form("KCemu/FDC_CMD/READ_DATA", "FDC: READ DATA: Reading sector %2d\n", sector)); get_fdc()->seek_internal(get_fdc()->get_head(), get_fdc()->get_cylinder(), sector + 1); len = f->read_sector(_buf, size); if (len != size) return false; _idx = 0; _size = size; _result[3] = get_fdc()->get_head(); _result[4] = get_fdc()->get_cylinder(); _result[5] = sector + 1; return true; } byte_t FDC_CMD_READ_DATA::read_byte(void) { byte_t b = 0xff; if (_idx == _size) { if (!fetch_next_sector()) { _data_transfer = false; finish_cmd(); } } if (_idx < _size) b = _buf[_idx++]; DBG(2, form("KCemu/FDC_CMD/read_byte", "FDC_CMD_READ_DATA::read_byte(): c/h/s %d/%d/%d [%4d]: 0x%02x (%3d, '%c')\n", get_fdc()->get_cylinder(), get_fdc()->get_head(), get_fdc()->get_sector(), _idx - 1, b, b, isprint(b) ? b : '.')); int sector = get_fdc()->get_sector(); if ((_idx == _size) && (sector == _arg[6])) { DBG(2, form("KCemu/FDC_CMD/READ_DATA", "FDC: READ DATA: Reading sector %2d hit end of track (EOT = %d)\n", sector, _arg[6])); get_fdc()->set_ST0(FDC::ST_0_IC_MASK, FDC::ST_0_IC_ABNORMAL_TERMINATION); _data_transfer = false; finish_cmd(); } return b; } /******************************************************************** * 0x07 - FDC_CMD_RECALIBRATE */ FDC_CMD_RECALIBRATE::FDC_CMD_RECALIBRATE(FDC *fdc) : FDC_CMD(fdc, 2, 0, "RECALIBRATE") { } FDC_CMD_RECALIBRATE::~FDC_CMD_RECALIBRATE(void) { } void FDC_CMD_RECALIBRATE::execute(void) { DBG(2, form("KCemu/FDC_CMD/RECALIBRATE", "FDC: RECALIBRATE: --------------------------------\n" "FDC: RECALIBRATE: Drive Select = %d\n" "FDC: RECALIBRATE: --------------------------------\n", _arg[1] & 3)); get_fdc()->select_floppy(_arg[1] & 3); // Head retracted to Track 0, always sets SEEK END, if not track 0 // signal is received from the floppy the EC bit is set get_fdc()->seek(get_fdc()->get_head(), 0, get_fdc()->get_sector()); } /******************************************************************** * 0x08 - FDC_CMD_SENSE_INTERRUPT_STATUS */ FDC_CMD_SENSE_INTERRUPT_STATUS::FDC_CMD_SENSE_INTERRUPT_STATUS(FDC *fdc) : FDC_CMD(fdc, 1, 2, "SENSE INTERRUPT STATUS") { } FDC_CMD_SENSE_INTERRUPT_STATUS::~FDC_CMD_SENSE_INTERRUPT_STATUS(void) { } void FDC_CMD_SENSE_INTERRUPT_STATUS::execute(void) { DBG(2, form("KCemu/FDC_CMD/SENSE_INTERRUPT_STATUS", "FDC: SENSE INTERRUPT STATUS: --------------------------------\n" "FDC: SENSE INTERRUPT STATUS: --------------------------------\n" )); _result[0] = get_fdc()->get_ST0(); _result[1] = get_fdc()->get_cylinder(); // PCN (current cylinder) } /******************************************************************** * 0x09 - FDC_CMD_WRITE_DELETED_DATA */ FDC_CMD_WRITE_DELETED_DATA::FDC_CMD_WRITE_DELETED_DATA(FDC *fdc) : FDC_CMD(fdc, 9, 7, "WRITE DELETED DATA") { } FDC_CMD_WRITE_DELETED_DATA::~FDC_CMD_WRITE_DELETED_DATA(void) { } void FDC_CMD_WRITE_DELETED_DATA::execute(void) { DBG(2, form("KCemu/FDC_CMD/WRITE_DELETED_DATA", "FDC: WRITE DELETED DATA: -------------------------\n" "FDC: WRITE DELETED DATA: -------------------------\n")); } /******************************************************************** * 0x0a - FDC_CMD_READ_ID */ FDC_CMD_READ_ID::FDC_CMD_READ_ID(FDC *fdc) : FDC_CMD(fdc, 2, 7, "READ ID") { } FDC_CMD_READ_ID::~FDC_CMD_READ_ID(void) { } void FDC_CMD_READ_ID::execute(void) { DBG(2, form("KCemu/FDC_CMD/READ_ID", "FDC: READ ID: ------------------------------------\n" "FDC: READ ID: FM or MFM Mode = %s\n" "FDC: READ ID: Head Select = %d\n" "FDC: READ ID: Drive Select = %d\n" "FDC: READ ID: ------------------------------------\n", ((_arg[0] >> 7) & 1) ? "MFM Mode" : "FM Mode", (_arg[1] >> 2) & 1, _arg[1] & 3)); get_fdc()->select_floppy(_arg[1] & 3); get_fdc()->set_input_gate(0x40, 0x40); _result[0] = get_fdc()->get_ST0(); _result[1] = get_fdc()->get_ST1(); _result[2] = get_fdc()->get_ST2(); _result[3] = get_fdc()->get_cylinder(); _result[4] = get_fdc()->get_head(); _result[5] = get_fdc()->get_sector(); _result[6] = 0x03; /* FIXME: N */ } /******************************************************************** * 0x0c - FDC_CMD_READ_DELETED_DATA */ FDC_CMD_READ_DELETED_DATA::FDC_CMD_READ_DELETED_DATA(FDC *fdc) : FDC_CMD(fdc, 9, 7, "READ DELETED DATA") { } FDC_CMD_READ_DELETED_DATA::~FDC_CMD_READ_DELETED_DATA(void) { } void FDC_CMD_READ_DELETED_DATA::execute(void) { DBG(2, form("KCemu/FDC_CMD/READ_DELETED_DATA", "FDC: READ DELETED DATA: --------------------------\n" "FDC: READ DELETED DATA: --------------------------\n")); } /******************************************************************** * 0x0d - FDC_CMD_FORMAT_A_TRACK */ FDC_CMD_FORMAT_A_TRACK::FDC_CMD_FORMAT_A_TRACK(FDC *fdc) : FDC_CMD(fdc, 6, 7, "FORMAT A TRACK") { _buf = NULL; } FDC_CMD_FORMAT_A_TRACK::~FDC_CMD_FORMAT_A_TRACK(void) { if (_buf != NULL) delete _buf; } void FDC_CMD_FORMAT_A_TRACK::execute(void) { DBG(2, form("KCemu/FDC_CMD/FORMAT_A_TRACK", "FDC: FORMAT A TRACK: --------------------------------\n" "FDC: FORMAT A TRACK: FM or MFM Mode = %s\n" "FDC: FORMAT A TRACK: Head Select = %d\n" "FDC: FORMAT A TRACK: Drive Select = %d\n" "FDC: FORMAT A TRACK: Bytes/Sector = %d\n" "FDC: FORMAT A TRACK: Sector/Cylinder = %d\n" "FDC: FORMAT A TRACK: Gap 3 Length = %d\n" "FDC: FORMAT A TRACK: Filler byte = %02xh (%d)\n" "FDC: FORMAT A TRACK: --------------------------------\n", ((_arg[0] >> 7) & 1) ? "MFM Mode" : "FM Mode", (_arg[1] >> 2) & 1, _arg[1] & 3, _arg[2], _arg[3], _arg[4], _arg[5], _arg[5])); get_fdc()->select_floppy(_arg[1] & 3); get_fdc()->set_input_gate(0x40, 0x40); _ridx = 0; _widx = 0; _cur_sector = 1; _formatted_sectors = 0; _sectors_per_track = _arg[3]; if (_buf != NULL) delete _buf; _sector_size = N_to_sector_size((_arg[0] >> 7) & 1, _arg[2]); _buf = new byte_t[_sector_size]; memset(_buf, _arg[5], _sector_size); _result[0] = get_fdc()->get_ST0(); _result[1] = get_fdc()->get_ST1(); _result[2] = get_fdc()->get_ST2(); _result[3] = get_fdc()->get_cylinder(); _result[4] = get_fdc()->get_head(); _result[5] = get_fdc()->get_sector(); _result[6] = _arg[2]; // N _data_transfer = true; } void FDC_CMD_FORMAT_A_TRACK::format(void) { Floppy *f; DBG(2, form("KCemu/FDC_CMD/format", "FDC: FORMAT A TRACK: -sector data--------------------\n" "FDC: FORMAT A TRACK: Sector %d of %d\n" "FDC: FORMAT A TRACK: Head = %d\n" "FDC: FORMAT A TRACK: Cylinder = %d\n" "FDC: FORMAT A TRACK: Sector = %d\n" "FDC: FORMAT A TRACK: Number of Data Bytes = %d\n" "FDC: FORMAT A TRACK: -sector data--------------------\n", _cur_sector, _sectors_per_track, _head, _cylinder, _sector, _bytes_per_sector)); _ridx = 0; _widx = 0; f = get_fdc()->get_floppy(); if (f != 0) { get_fdc()->seek(_head, _cylinder, _sector); f->write_sector(_buf, _sector_size); } if (_cur_sector == _sectors_per_track) get_fdc()->set_input_gate(0x40, 0x00); _cur_sector++; _formatted_sectors++; } byte_t FDC_CMD_FORMAT_A_TRACK::read_byte(void) { switch (_ridx) { case 0: _ridx++; return _cylinder; case 1: _ridx++; return _head; case 2: _ridx++; return _sector + 1; case 3: _ridx = 0; return _bytes_per_sector; } return 0; } void FDC_CMD_FORMAT_A_TRACK::write_byte(byte_t val) { DBG(2, form("KCemu/FDC_CMD/write_byte", "FDC_CMD_FORMAT_A_TRACK::write_byte(): 0x%02x (%3d, '%c')\n", val, val, isprint(val) ? val : '.')); switch (_widx) { case 0: _cylinder = val; _widx++; break; case 1: _head = val; _widx++; break; case 2: _sector = val; _widx++; break; case 3: _bytes_per_sector = val; _widx = 0; format(); if (_formatted_sectors == _sectors_per_track) { _data_transfer = false; finish_cmd(); } break; } } /******************************************************************** * 0x0f - FDC_CMD_SEEK */ FDC_CMD_SEEK::FDC_CMD_SEEK(FDC *fdc) : FDC_CMD(fdc, 3, 0, "SEEK") { } FDC_CMD_SEEK::~FDC_CMD_SEEK(void) { } void FDC_CMD_SEEK::execute(void) { DBG(2, form("KCemu/FDC_CMD/SEEK", "FDC: SEEK: ---------------------------------------\n" "FDC: SEEK: Head Select = %d\n" "FDC: SEEK: Drive Select = %d\n" "FDC: SEEK: New Cylinder Number = %d\n" "FDC: SEEK: ---------------------------------------\n", (_arg[1] >> 2) & 1, _arg[1] & 3, _arg[2])); get_fdc()->select_floppy(_arg[1] & 3); get_fdc()->seek((_arg[1] >> 2) & 1, _arg[2], 1); } /******************************************************************** * 0x11 - FDC_CMD_SCAN_EQUAL */ FDC_CMD_SCAN_EQUAL::FDC_CMD_SCAN_EQUAL(FDC *fdc) : FDC_CMD(fdc, 9, 7, "SCAN EQUAL") { _buf = 0; } FDC_CMD_SCAN_EQUAL::~FDC_CMD_SCAN_EQUAL(void) { if (_buf != 0) delete _buf; } void FDC_CMD_SCAN_EQUAL::execute(void) { DBG(2, form("KCemu/FDC_CMD/SCAN_EQUAL", "FDC: SCAN EQUAL: ----------------------------------\n" "FDC: SCAN EQUAL: Head Select = %d\n" "FDC: SCAN EQUAL: Drive Select = %d\n" "FDC: SCAN EQUAL: Cylinder = %d\n" "FDC: SCAN EQUAL: Head = %d\n" "FDC: SCAN EQUAL: Sector = %d\n" "FDC: SCAN EQUAL: Number of Data Bytes = %d\n" "FDC: SCAN EQUAL: End of Track = %d\n" "FDC: SCAN EQUAL: Gap Length = %d\n" "FDC: SCAN EQUAL: Date Length = %d\n" "FDC: SCAN EQUAL: ----------------------------------\n", (_arg[1] >> 2) & 1, _arg[1] & 3, _arg[2], _arg[3], _arg[4], _arg[5], _arg[6], _arg[7], _arg[8])); get_fdc()->select_floppy(_arg[1] & 3); get_fdc()->set_input_gate(0x40, 0x40); _head = _arg[3]; _cylinder = _arg[2]; _sector = _arg[4]; get_fdc()->seek_internal(_head, _cylinder, _sector); Floppy *f = get_fdc()->get_floppy(); if (f == NULL) return; _result[0] = get_fdc()->get_ST0(); _result[1] = get_fdc()->get_ST1(); _result[2] = get_fdc()->get_ST2(); _result[3] = _arg[2]; _result[4] = _arg[3]; _result[5] = _arg[4]; _result[6] = _arg[5]; get_fdc()->set_ST2(FDC::ST_2_SCAN_MASK, 0); int size = f->get_sector_size(); if (size <= 0) { get_fdc()->set_ST0(FDC::ST_0_IC_MASK, FDC::ST_0_IC_ABNORMAL_TERMINATION); _result[0] = get_fdc()->get_ST0(); _result[1] = get_fdc()->get_ST1(); return; } if (_buf != 0) delete _buf; _buf = new byte_t[size]; int len = f->read_sector(_buf, size); if (len != size) { get_fdc()->set_ST0(FDC::ST_0_IC_MASK, FDC::ST_0_IC_ABNORMAL_TERMINATION); _result[0] = get_fdc()->get_ST0(); _result[1] = get_fdc()->get_ST1(); return; } _idx = 0; _sector_size = size; get_fdc()->set_msr(FDC::ST_MAIN_READ_WRITE | FDC::ST_MAIN_RQM | FDC::ST_MAIN_DIO, FDC::ST_MAIN_READ_WRITE | FDC::ST_MAIN_RQM); _data_transfer = true; } void FDC_CMD_SCAN_EQUAL::write_byte(byte_t val) { byte_t b = _buf[_idx]; DBG(2, form("KCemu/FDC_CMD/write_byte", "FDC_CMD_SCAN_EQUAL::write_byte(): c/h/s %d/%d/%d [%4d]: " "0x%02x (%3d, '%c') == 0x%02x (%3d, '%c')\n", get_fdc()->get_cylinder(), get_fdc()->get_head(), get_fdc()->get_sector(), _idx, val, val, isprint(val) ? val : '.', b, b, isprint(b) ? b : '.')); if (b != val) { get_fdc()->set_ST2(FDC::ST_2_SCAN_MASK, FDC::ST_2_SCAN_NOT_SATISFIED); _result[0] = get_fdc()->get_ST0(); _result[1] = get_fdc()->get_ST1(); _result[2] = get_fdc()->get_ST2(); _data_transfer = false; finish_cmd(); } _idx++; if (_idx == _sector_size) { get_fdc()->set_ST2(FDC::ST_2_SCAN_MASK, FDC::ST_2_SCAN_EQUAL_HIT); _result[0] = get_fdc()->get_ST0(); _result[1] = get_fdc()->get_ST1(); _result[2] = get_fdc()->get_ST2(); _data_transfer = false; finish_cmd(); } } /******************************************************************** * 0x19 - FDC_CMD_SCAN_LOW_OR_EQUAL */ FDC_CMD_SCAN_LOW_OR_EQUAL::FDC_CMD_SCAN_LOW_OR_EQUAL(FDC *fdc) : FDC_CMD(fdc, 9, 7, "SCAN LOW OR EQUAL") { } FDC_CMD_SCAN_LOW_OR_EQUAL::~FDC_CMD_SCAN_LOW_OR_EQUAL(void) { } void FDC_CMD_SCAN_LOW_OR_EQUAL::execute(void) { DBG(2, form("KCemu/FDC_CMD/SCAN_LOW_OR_EQUAL", "FDC: SCAN LOW OR EQUAL: --------------------------\n" "FDC: SCAN LOW OR EQUAL: --------------------------\n")); } /******************************************************************** * 0x1d - FDC_CMD_SCAN_HIGH_OR_EQUAL */ FDC_CMD_SCAN_HIGH_OR_EQUAL::FDC_CMD_SCAN_HIGH_OR_EQUAL(FDC *fdc) : FDC_CMD(fdc, 9, 7, "SCAN HIGH OR EQUAL") { } FDC_CMD_SCAN_HIGH_OR_EQUAL::~FDC_CMD_SCAN_HIGH_OR_EQUAL(void) { } void FDC_CMD_SCAN_HIGH_OR_EQUAL::execute(void) { DBG(2, form("KCemu/FDC_CMD/SCAN_HIGH_OR_EQUAL", "FDC: SCAN HIGH OR EQUAL: -------------------------\n" "FDC: SCAN HIGH OR EQUAL: --------------------------\n")); } KCemu-0.5.1/src/kc/Makefile.am0000644001050700006200000000675711345001577015447 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in SUBDIRS = prefs kcnet kramermc muglerpc vcs80 c80 bin_PROGRAMS = kcemu if TARGET_LINUX noinst_PROGRAMS = kcemu-send endif if TARGET_FREEBSD noinst_PROGRAMS = kcemu-send endif if USE_INCLUDED_GETOPT GETOPTLIB = ../getopt/libgetopt.a endif INCLUDES = \ -I../../include localedir = $(prefix)/share/locale AM_CPPFLAGS = \ -DKCEMU_PACKAGE=\"$(PACKAGE)\" \ -DKCEMU_DATADIR=\"$(pkgdatadir)\" \ -DKCEMU_LOCALEDIR=\"$(localedir)\" \ -DDEBUG \ $(GTK_CFLAGS) \ $(SDL_CFLAGS) LINUX_EXTRA_kcemu_SOURCES = mod_v24.cc mod_js.cc MINGW_EXTRA_kcemu_SOURCES = kcemu.rc FREEBSD_EXTRA_kcemu_SOURCES = mod_v24.cc if TARGET_LINUX EXTRA_kcemu_SOURCES = $(LINUX_EXTRA_kcemu_SOURCES) endif if TARGET_MINGW EXTRA_kcemu_SOURCES = $(MINGW_EXTRA_kcemu_SOURCES) endif if TARGET_FREEBSD EXTRA_kcemu_SOURCES = $(FREEBSD_EXTRA_kcemu_SOURCES) endif EXTRA_DIST = $(LINUX_EXTRA_kcemu_SOURCES) $(MINGW_EXTRA_kcemu_SOURCES) $(FREEBSD_EXTRA_kcemu_SOURCES) kcemu_SOURCES = \ kc.cc \ ic.cc \ ctc.cc \ ctc1.cc \ ctc3.cc \ ctc6.cc \ ctc8.cc \ ctc9.cc \ ctc_fdc.cc \ pio_dio.cc \ pio_vdip.cc \ ctc_dio.cc \ ctc_base.cc \ cb_list.cc \ daisy.cc \ keyb0.cc \ keyb1.cc \ keyb3.cc \ keyb6.cc \ keyb8.cc \ keyb9.cc \ memory.cc \ memory0.cc \ memory1.cc \ memory2.cc \ memory3.cc \ memory4.cc \ memory6.cc \ memory7.cc \ memory8.cc \ memory9.cc \ plotter.cc \ sh_mem.cc \ disk_io.cc \ gdc.cc \ vis.cc \ svg.cc \ vdip.cc \ vdip_cmd.cc \ gide.cc \ fdc.cc \ fdc0s.cc \ fdc4.cc \ fdc7.cc \ fdc9.cc \ fdc_cmd.cc \ floppy.cc \ pio.cc \ pio0.cc \ pio1.cc \ pio2.cc \ pio3.cc \ pio4.cc \ pio6.cc \ pio8.cc \ pio9.cc \ ports.cc \ ports0.cc \ ports4.cc \ ports6.cc \ module.cc \ mod_dio.cc \ mod_vdip.cc \ mod_ram.cc \ mod_ram1.cc \ mod_r16.cc \ mod_r64.cc \ mod_cpm.cc \ mod_ram8.cc \ mod_64k.cc \ mod_segm.cc \ mod_128k.cc \ mod_256k.cc \ mod_512k.cc \ mod_1m.cc \ mod_4m.cc \ mod_rom.cc \ mod_urom.cc \ mod_auto.cc \ mod_rom1.cc \ mod_romb.cc \ mod_raf.cc \ mod_boot.cc \ mod_192k.cc \ mod_320k.cc \ mod_ramf.cc \ mod_fdc.cc \ mod_gdc.cc \ mod_rtc.cc \ mod_disk.cc \ mod_4131.cc \ mod_m052.cc \ mod_list.cc \ tape.cc \ disk.cc \ timer.cc \ timer1.cc \ timer3.cc \ poly880.cc \ z80.cc \ z80_fdc.cc \ wav.cc \ sound.cc \ sound3.cc \ sound8.cc \ $(EXTRA_kcemu_SOURCES) if TARGET_LINUX SYSLIBS_LINUX = ../sys/linux/libsys_linux.a endif if TARGET_FREEBSD SYSLIBS_FREEBSD = ../sys/linux/libsys_linux.a endif if TARGET_MINGW SYSLIBS_MINGW = ../sys/mingw/libsys_mingw.a -lwinmm -lws2_32 endif kcemu_LDADD = \ kcnet/libkcnet.a \ kramermc/libkramermc.a \ muglerpc/libmuglerpc.a \ vcs80/libvcs80.a \ c80/libc80.a \ ../fileio/libfileio.a \ ../libtape/libtape.a \ ../libdisk/libdisk.a \ ../libaudio/libaudio.a \ ../ui/gtk/libui_gtk.a \ ../ui/generic/libui_generic.a \ ../ui/libui.a \ prefs/libprefs.a \ ../libgtkex/libgtkex.a \ ../libdbg/libdbg.a \ ../cmd/*.o \ $(GTK_LIBS) \ $(SDL_LIBS) \ $(SNDFILE_LIBS) \ $(AUDIOFILE_LIBS) \ $(MP3LAME_LIBS) \ $(VORBIS_LIBS) \ $(F_L_A_C_LIBS) \ $(LIBTHEORA_LIBS) \ $(XVIDCORE_LIBS) \ $(LIBDIRAC_LIBS) \ $(LIBSCHROEDINGER_LIBS) \ $(LIBAVFORMAT_LIBS) \ $(VNCSERVER_LIBS) \ $(LIBGIF_LIBS) \ $(SYSLIBS_MINGW) \ $(SYSLIBS_LINUX) \ $(SYSLIBS_FREEBSD) \ $(GETOPTLIB) \ $(INTLLIBS) \ $(Z80EX_LIBS) kcemu_send_SOURCES = \ kcemu-send.c kcemu_send_LDADD = \ -lncurses $(INTLLIBS) KCemu-0.5.1/src/kc/memory6.cc0000644001050700006200000000614111345001576015302 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/z80.h" #include "kc/memory6.h" using namespace std; Memory6::Memory6(void) : Memory() { if (Preferences::instance()->get_kc_variant() == KC_VARIANT_POLY880_SC1) { load_rom(SystemROM::ROM_KEY_SYSTEM1, &_rom0); } else { load_rom(SystemROM::ROM_KEY_SYSTEM1, &_rom0); load_rom(SystemROM::ROM_KEY_SYSTEM2, &_rom1); if (!load_rom(SystemROM::ROM_KEY_SYSTEM3, &_rom2)) memset(_rom2, 0, 0x0400); if (!load_rom(SystemROM::ROM_KEY_SYSTEM4, &_rom3)) memset(_rom3, 0, 0x0400); /* * The content of the poly880 rom is stored inverted. We use * the original rom and restore the machine readable code here. */ for (int a = 0;a < 0x0400;a++) { _rom0[a] = ~_rom0[a]; _rom1[a] = ~_rom1[a]; _rom2[a] = ~_rom2[a]; _rom3[a] = ~_rom3[a]; } } memory_group_t mem[] = { { &_m_scr, "-", 0x0000, 0x10000, 0, 256, 0, 1, -1 }, { &_m_rom0, "ROM0", 0x0000, 0x0400, &_rom0[0x0000], 0, 1, 1, KC_VARIANT_POLY880 }, { &_m_rom_sc1, "ROM", 0x0000, 0x1000, &_rom0[0x0000], 0, 1, 1, KC_VARIANT_POLY880_SC1 }, { &_m_rom1, "ROM1", 0x1000, 0x0400, &_rom1[0x0000], 0, 1, 1, KC_VARIANT_POLY880 }, { &_m_rom2, "ROM2", 0x2000, 0x0400, &_rom2[0x0000], 0, 1, 1, -1 }, { &_m_rom3, "ROM3", 0x3000, 0x0400, &_rom3[0x0000], 0, 1, 1, -1 }, { &_m_ram, "RAM", 0x4000, 0x0400, &_ram[0x0000], 0, 0, 1, -1 }, { 0, }, }; init_memory_groups(mem); reset(true); z80->register_ic(this); } Memory6::~Memory6(void) { z80->unregister_ic(this); } byte_t * Memory6::get_irm(void) { return (byte_t *)0; } byte_t * Memory6::get_char_rom(void) { return (byte_t *)0; } void Memory6::reset(bool power_on) { if (!power_on) return; memset(&_ram[0], 0, 0x0400); } void Memory6::dumpCore(void) { ofstream os; os.open("core.z80"); cerr << "Memory: dumping core..." << endl; if (!os) { cerr << "Memory: can't write 'core.z80'" << endl; return; } for (int a = 0;a < 0x10000;a++) os.put(memRead8(a)); os.close(); cerr << "Memory: done." << endl; } KCemu-0.5.1/src/kc/mod_256k.cc0000644001050700006200000000256711345001576015242 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/mod_256k.h" Module256k::Module256k(Module256k &tmpl) : ModuleSegmentedMemory(tmpl) { } Module256k::Module256k(const char *name, byte_t id) : ModuleSegmentedMemory(name, id, 16, 0x4000) { } Module256k::~Module256k(void) { } int Module256k::get_segment_index(word_t addr, byte_t val) { return (val >> 2) & 0x0f; } word_t Module256k::get_base_address(word_t addr, byte_t val) { return (val & 0x80) ? 0x8000 : 0x4000; } ModuleInterface * Module256k::clone(void) { return new Module256k(*this); } KCemu-0.5.1/src/kc/memory1.cc0000644001050700006200000001262511345001576015301 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/types.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/memory1.h" #include "libdbg/dbg.h" using namespace std; Memory1::Memory1(void) : Memory() { load_rom(SystemROM::ROM_KEY_SYSTEM, &_rom_os); load_rom(SystemROM::ROM_KEY_CHARGEN, &_rom_chargen); memset(&_irm[0], 0x70, 0x400); memory_group_t mem[] = { { &_m_scr, "-", 0x0000, 0x10000, 0, 256, 0, 1, -1 }, { &_m_ram, "RAM", 0x0000, 0x4000, &_ram[0], 0, 0, 1, -1 }, { &_m_os, "OS", 0xf000, 0x1000, &_rom_os[0], 0, 1, 1, -1 }, { &_m_irm_ec,"IRM (text)", 0xec00, 0x0400, &_irm[0x400], 1, 0, 1, -1 }, /* * dummy entry needed for get_irm() if color * expansion is not installed */ { &_m_irm_e8,"IRM (color)", 0xe800, 0x0400, &_irm[0], 1, 1, 1, -1 }, { 0, }, }; init_memory_groups(mem); reset(true); z80->register_ic(this); register_romdi_handler(this); set_romdi(false); } Memory1::~Memory1(void) { z80->unregister_ic(this); unregister_romdi_handler(this); delete _m_scr; delete _m_ram; delete _m_os; delete _m_irm_e8; delete _m_irm_ec; } byte_t Memory1::memRead8(word_t addr) { for (memory_list_t::iterator it = _memory_list.begin();it != _memory_list.end();it++) (*it)->memory_read_byte(addr); return _memrptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK]; } void Memory1::memWrite8(word_t addr, byte_t val) { for (memory_list_t::iterator it = _memory_list.begin();it != _memory_list.end();it++) (*it)->memory_write_byte(addr, val); _memwptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK] = val; } byte_t * Memory1::get_irm(void) { return (byte_t *)get_page_addr_r(0xe800); } byte_t * Memory1::get_char_rom(void) { return (byte_t *)_rom_chargen; } void Memory1::register_romdi_handler(ROMDIInterface *handler) { DBG(1, form("KCemu/Memory1/romdi", "Memory1::register_romdi_handler(): %p\n", handler)); _romdi_list.push_back(handler); } void Memory1::unregister_romdi_handler(ROMDIInterface *handler) { DBG(1, form("KCemu/Memory1/romdi", "Memory1::unregister_romdi_handler(): %p\n", handler)); _romdi_list.remove(handler); } void Memory1::set_romdi(bool val) { DBG(1, form("KCemu/Memory1/romdi", "Memory1::set_romdi(): %s\n", val ? "on" : "off")); _romdi = val; for (romdi_list_t::iterator it = _romdi_list.begin();it != _romdi_list.end();it++) (*it)->romdi(val); reload_mem_ptr(); } void Memory1::romdi(bool val) { DBG(1, form("KCemu/Memory1/romdi", "Memory1::romdi(): OS ROM %s\n", val ? "off" : "on")); _m_os->set_active(!val); } void Memory1::register_memory_handler(MemoryInterface *handler) { _memory_list.push_back(handler); } void Memory1::unregister_memory_handler(MemoryInterface *handler) { _memory_list.remove(handler); } void Memory1::reset(bool power_on) { if (!power_on) return; scratch_mem(&_ram[0], 0x4000); scratch_mem(&_irm[0x0400], 0x0400); if (get_irm() != _irm) scratch_mem(&_irm[0x0], 0x0400); else memset(&_irm[0], 0x70, 0x400); /* * Clear the first 1k of ram with the system variables. This saves * some trouble with the initialization. */ memset(&_ram[0], 0, 0x400); /* * The CPM-Z9 boot module is enabled/disabled by writing to address * ranges f800h-fbffh/fc00h-ffffh. The delete cursor routine at * fa33h uses the cursor address (2dh/2eh) which is initialized by * using cursor row/column from 2bh/2ch (although after using the * cursor address first). * * If the cursor address holds random values we may get memory * writes at addresses that disable the boot module at power on. * * To prevent the following initialization to be overwritten in the * startup routine we also need to initialize the EOR (end of ram) * pointer. * * How is this supposed to work on the real machine? */ _ram[0x2b] = 0x01; /* column */ _ram[0x2c] = 0x01; /* row */ _ram[0x2d] = 0x55; /* cursor address low */ _ram[0x2e] = 0x55; /* cursor address high */ _ram[0x36] = 0x00; /* logical ram end low */ _ram[0x37] = 0xc0; /* logical ram end high */ } void Memory1::dumpCore(void) { ofstream os; os.open("core.z80"); cerr << "Memory: dumping core..." << endl; if (!os) { cerr << "Memory: can't write 'core.z80'" << endl; return; } for (int a = 0;a < 0x10000;a++) os.put(memRead8(a)); os.close(); cerr << "Memory: done." << endl; } KCemu-0.5.1/src/kc/mod_128k.cc0000644001050700006200000000256611345001576015237 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/mod_128k.h" Module128k::Module128k(Module128k &tmpl) : ModuleSegmentedMemory(tmpl) { } Module128k::Module128k(const char *name, byte_t id) : ModuleSegmentedMemory(name, id, 8, 0x4000) { } Module128k::~Module128k(void) { } int Module128k::get_segment_index(word_t addr, byte_t val) { return (val >> 2) & 0x07; } word_t Module128k::get_base_address(word_t addr, byte_t val) { return (val & 0x80) ? 0x8000 : 0x4000; } ModuleInterface * Module128k::clone(void) { return new Module128k(*this); } KCemu-0.5.1/src/kc/mod_ram1.cc0000644001050700006200000000400511345001576015400 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/mod_ram1.h" ModuleRAM1::ModuleRAM1(ModuleRAM1 &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { unsigned int a; _group = NULL; _size = tmpl._size; _ram = new byte_t[_size]; _addr = tmpl._addr; if (_ram) { srand(time(NULL)); for (a = 0;a < _size;a++) _ram[a] = (byte_t)(256.0 * rand() / (RAND_MAX + 1.0)); set_valid(true); _group = memory->register_memory(get_name(), _addr, _size, _ram, 0, 0); } } ModuleRAM1::ModuleRAM1(const char *name, word_t addr, dword_t size) : ModuleInterface(name, 0, KC_MODULE_KC_85_1) { _ram = new byte_t[size]; _addr = addr; _size = size; if (_ram) { _group = 0; memset(_ram, 0, _size); set_valid(true); } } ModuleRAM1::~ModuleRAM1(void) { if (_group) memory->unregister_memory(_group); delete[] _ram; } void ModuleRAM1::m_out(word_t addr, byte_t val) { } ModuleInterface * ModuleRAM1::clone(void) { return new ModuleRAM1(*this); } void ModuleRAM1::reset(bool power_on) { if (power_on) Memory::scratch_mem(_ram, _size); } KCemu-0.5.1/src/kc/ic.cc0000644001050700006200000001141311345001577014276 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/ic.h" #include "libdbg/dbg.h" InterfaceCircuit::InterfaceCircuit(const char *name) { _next = 0; _prev = 0; _name = strdup(name); reset(); } InterfaceCircuit::~InterfaceCircuit(void) { free(_name); } const char * const InterfaceCircuit::get_ic_name(void) { return _name; } void InterfaceCircuit::debug(void) { DBG(2, form("KCemu/IC/irq", "IC::debug(): %-8s: iei = %d - ieo = %d - irqreq = %d - irqactive = %d\n", _name, _iei, ieo(), _irqreq, _irqactive)); if (_next) _next->debug(); } void InterfaceCircuit::irq(void) { DBG(2, form("KCemu/IC/irq", "IC::irq(): %-8s: iei = %d - ieo = %d - irqreq = %d - irqactive = %d\n", _name, _iei, ieo(), _irqreq, _irqactive)); if (_irqactive || _irqreq) return; _irqreq = 1; if (_next) _next->iei(ieo()); if ((_iei == 1) && (ieo() == 0)) { DBG(2, form("KCemu/IC/irq", "IC::irq(): %-8s: will call irqreq()\n", get_ic_name())); irqreq(); } } word_t InterfaceCircuit::ack(void) { DBG(2, form("KCemu/IC/ack", "IC::ack(): %-8s: iei = %d - ieo = %d - irqreq = %d - irqactive = %d\n", _name, _iei, ieo(), _irqreq, _irqactive)); if ((_iei == 1) && (ieo() == 0)) { DBG(2, form("KCemu/IC/ack", "IC::ack(): %-8s: will call irqack()\n", get_ic_name())); _irqreq = 0; _irqactive = 1; return irqack(); } if (_prev) return _prev->ack(); return IRQ_NOT_ACK; } void InterfaceCircuit::iei(byte_t val) { _iei = val; if (_next) _next->iei(ieo()); } byte_t InterfaceCircuit::ieo(void) { /* * temporary state between reti_ED() and reti_4D() */ if (_ieo_reti) return 1; return _iei & (!(_irqreq || _irqactive)); } void InterfaceCircuit::prev(InterfaceCircuit *ic) { _prev = ic; } void InterfaceCircuit::next(InterfaceCircuit *ic) { _next = ic; if (ic != NULL) { ic->prev(this); ic->iei(ieo()); } } InterfaceCircuit * InterfaceCircuit::get_prev() { return _prev; } InterfaceCircuit * InterfaceCircuit::get_next() { return _next; } InterfaceCircuit * InterfaceCircuit::get_first() { if (_prev) return _prev->get_first(); return this; } InterfaceCircuit * InterfaceCircuit::get_last() { if (_next) return _next->get_last(); return this; } void InterfaceCircuit::reti_ED(void) { DBG(2, form("KCemu/IC/reti", "IC::reti_ED(): %-8s: iei = %d - ieo = %d - irqreq = %d - irqactive = %d\n", _name, _iei, ieo(), _irqreq, _irqactive)); if ((_iei == 1) && (ieo() == 0)) if (!_irqactive) { /* * enter temporary ieo state */ _ieo_reti = 1; if (_next) _next->iei(1); } if (_prev) _prev->reti_ED(); } void InterfaceCircuit::reti_4D(void) { DBG(2, form("KCemu/IC/reti", "IC::reti_4D(): %-8s: iei = %d - ieo = %d - irqreq = %d - irqactive = %d\n", _name, _iei, ieo(), _irqreq, _irqactive)); if ((_iei == 1) && (ieo() == 0) && _irqactive) { DBG(2, form("KCemu/IC/reti", "IC::reti_4D(): %-8s:\n", get_ic_name())); _irqreq = 0; _irqactive = 0; reti(); if (_next) _next->iei(ieo()); } if (_prev) _prev->reti_4D(); /* * exit temporary ieo state */ if (_ieo_reti) { _ieo_reti = 0; if (_next) _next->iei(ieo()); } if (_irqreq != 0) { DBG(2, form("KCemu/IC/reti", "IC::reti_4D(): %-8s: irqreq is set!\n", get_ic_name())); if (_next) _next->iei(ieo()); if ((_iei == 1) && (ieo() == 0)) { DBG(2, form("KCemu/IC/reti", "IC::reti_4D(): %-8s: will call irqreq()\n", get_ic_name())); irqreq(); } } } void InterfaceCircuit::reset(bool power_on) { DBG(2, form("KCemu/IC/reset", "IC::reset(): %-8s\n", _name)); _iei = 0; _ieo_reti = 0; _irqreq = 0; _irqactive = 0; } KCemu-0.5.1/src/kc/memory8.cc0000644001050700006200000000647311345001576015314 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/z80.h" #include "kc/memory8.h" #include "ui/ui.h" #include "libdbg/dbg.h" using namespace std; Memory8::Memory8(void) : Memory() { switch (Preferences::instance()->get_kc_variant()) { case KC_VARIANT_LC80_1k: load_rom(SystemROM::ROM_KEY_SYSTEM1, &_rom1); load_rom(SystemROM::ROM_KEY_SYSTEM2, &_rom2); break; case KC_VARIANT_LC80_2k: load_rom(SystemROM::ROM_KEY_SYSTEM, &_rom); break; case KC_VARIANT_LC80e: load_rom(SystemROM::ROM_KEY_SYSTEM1, &_rome[0x0000]); load_rom(SystemROM::ROM_KEY_SYSTEM2, &_rome[0x1000]); load_rom(SystemROM::ROM_KEY_SYSTEM3, &_rome[0x2000]); break; default: DBG(0, form("KCemu/internal_error", "Memory8: invalid kc variant value: %d\n", Preferences::instance()->get_kc_variant())); break; } memory_group_t mem[] = { { &_m_scr, "-", 0x0000, 0x10000, 0, 256, 0, 1, -1 }, { &_m_rom1, "ROM1", 0x0000, 0x0400, &_rom1[0], 0, 1, 1, KC_VARIANT_LC80_1k }, { &_m_rom2, "ROM2", 0x0800, 0x0400, &_rom2[0], 0, 1, 1, KC_VARIANT_LC80_1k }, { &_m_rom, "ROM", 0x0000, 0x0800, &_rom[0], 0, 1, 1, KC_VARIANT_LC80_2k }, { &_m_rome1, "ROM1", 0x0000, 0x1000, &_rome[0], 0, 1, 1, KC_VARIANT_LC80e }, { &_m_rome2, "ROM2", 0x1000, 0x1000, &_rome[0x1000], 0, 1, 1, KC_VARIANT_LC80e }, { &_m_rome5, "ROM5", 0xc000, 0x1000, &_rome[0x2000], 0, 1, 1, KC_VARIANT_LC80e }, { &_m_ram, "RAM", 0x2000, 0x0400, &_ram[0], 0, 0, 1, KC_VARIANT_LC80_1k }, { &_m_ram, "RAM", 0x2000, 0x0400, &_ram[0], 0, 0, 1, KC_VARIANT_LC80_2k }, { &_m_ram, "RAM", 0x2000, 0x1000, &_ram[0], 0, 0, 1, KC_VARIANT_LC80e }, { 0, }, }; init_memory_groups(mem); reset(true); z80->register_ic(this); } Memory8::~Memory8(void) { z80->unregister_ic(this); } byte_t Memory8::memRead8(word_t addr) { return _memrptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK]; } void Memory8::memWrite8(word_t addr, byte_t val) { _memwptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK] = val; } byte_t * Memory8::get_irm(void) { return (byte_t *)0; } byte_t * Memory8::get_char_rom(void) { return (byte_t *)0; } void Memory8::reset(bool power_on) { if (!power_on) return; scratch_mem(&_ram[0], 0x1000); } void Memory8::dumpCore(void) { } KCemu-0.5.1/src/kc/mod_320k.cc0000644001050700006200000000663711345001576015234 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * Copyright (C) 2005 Alexander Schön * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "ui/status.h" #include "kc/z80.h" #include "kc/memory7.h" #include "kc/mod_320k.h" using namespace std; Module320k::Module320k(Module320k &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()), InterfaceCircuit(tmpl.get_name()) { _bank = 0xff; _master = false; _rom = tmpl._rom; register_memory_bank(0); if (Preferences::instance()->get_kc_type() == KC_TYPE_87) { ((Memory7 *)memory)->set_romdi(true); ((Memory7 *)memory)->register_romdi_handler(this); } _portg = ports->register_ports(get_name(), 0xff, 1, this, 0); z80->register_ic(this); set_valid(true); } Module320k::Module320k(const char *filename, const char *name) : ModuleInterface(name, 0, KC_MODULE_KC_85_1), InterfaceCircuit(name) { _bank = 0xff; _master = true; for (int a = 0;a < 5;a++) _group[a] = NULL; _rom = new byte_t[0x280000]; set_valid(Memory::load_rom(filename, &_rom[0x00000], 0x280000, false)); } Module320k::~Module320k(void) { if (Preferences::instance()->get_kc_type() == KC_TYPE_87) { ((Memory7 *)memory)->set_romdi(false); ((Memory7 *)memory)->unregister_romdi_handler(this); } unregister_memory_bank(); if (_master) delete[] _rom; else z80->unregister_ic(this); } void Module320k::register_memory_bank(byte_t bank) { for (int a = 0;a < 5;a++) _group[a] = memory->register_memory(get_name(), 0xc000 + a * 0x800, 0x0800, _rom + a * 0x80000 + bank * 0x800, 0, true); } void Module320k::unregister_memory_bank(void) { for (int a = 0;a < 5;a++) { if (_group[a] != NULL) memory->unregister_memory(_group[a]); _group[a] = NULL; } } void Module320k::m_out(word_t addr, byte_t val) { } ModuleInterface * Module320k::clone(void) { return new Module320k(*this); } void Module320k::romdi(bool val) { for (int a = 0;a < 5;a++) if (_group[a]) _group[a]->set_active(!val); } byte_t Module320k::in(word_t addr) { return 0xff; } void Module320k::out(word_t addr, byte_t val) { val &= 0xff; if (val == _bank) return; _bank = val; char buf[1024]; const char *fmt = _("2,5 MB Modul Bank (%d / %02xh)"); snprintf(buf, sizeof(buf), fmt, _bank, _bank); Status::instance()->setMessage(buf); unregister_memory_bank(); register_memory_bank(_bank); } void Module320k::reset(bool power_on) { /* * initialize memory bank switch after reset / power on */ out(0xff, 0); } KCemu-0.5.1/src/kc/mod_cpm.cc0000644001050700006200000000411111345001576015315 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/fdc7.h" #include "kc/mod_cpm.h" using namespace std; ModuleCPMZ9::ModuleCPMZ9(ModuleCPMZ9 &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { fdc_fdc = new FDC7(); // FIXME: global variable in kc.cc !!! _portg1 = ports->register_ports(get_name(), 0x98, 2, fdc_fdc, 0); _portg2 = ports->register_ports(get_name(), 0xa0, 2, fdc_fdc, 0); _portgX = ports->register_ports(get_name(), 0x10, 2, fdc_fdc, 0); set_valid(true); } ModuleCPMZ9::ModuleCPMZ9(const char *name) : ModuleInterface(name, 0, KC_MODULE_KC_85_1) { _portg1 = _portg2 = _portgX = NULL; set_valid(true); } ModuleCPMZ9::~ModuleCPMZ9(void) { if (_portg1) ports->unregister_ports(_portg1); if (_portg2) ports->unregister_ports(_portg2); if (_portgX) ports->unregister_ports(_portgX); if (fdc_fdc) delete fdc_fdc; fdc_fdc = NULL; } void ModuleCPMZ9::m_out(word_t addr, byte_t val) { } ModuleInterface * ModuleCPMZ9::clone(void) { return new ModuleCPMZ9(*this); } void ModuleCPMZ9::reset(bool power_on) { } byte_t ModuleCPMZ9::in(word_t addr) { return 0xff; } void ModuleCPMZ9::out(word_t addr, byte_t val) { } KCemu-0.5.1/src/kc/ctc6.cc0000644001050700006200000000443511345001576014547 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/ctc6.h" #include "kc/poly880.h" #include "libdbg/dbg.h" CTC6::CTC6(void) { } CTC6::~CTC6(void) { } byte_t CTC6::in(word_t addr) { byte_t val = 0xff; DBG(2, form("KCemu/CTC/6/in", "CTC6::in(): addr = %04x\n", addr)); switch (addr & 3) { case 0: val = c_in(0); break; case 1: val = c_in(1); break; case 2: val = c_in(2); break; case 3: val = c_in(3); break; } DBG(2, form("KCemu/CTC/6/in", "CTC6::in(): addr = %04x, val = %02x\n", addr, val)); return val; } void CTC6::out(word_t addr, byte_t val) { DBG(2, form("KCemu/CTC/6/out", "CTC6::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: c_out(0, val); break; case 1: c_out(1, val); break; case 2: c_out(2, val); break; case 3: c_out(3, val); break; } } bool CTC6::irq_0(void) { poly880->trigger_send(); return false; } bool CTC6::irq_1(void) { return false; } bool CTC6::irq_2(void) { return false; } bool CTC6::irq_3(void) { return false; } long CTC6::counter_value_0(void) { return 0; } long CTC6::counter_value_1(void) { return 0; } long CTC6::counter_value_2(void) { return 0; } long CTC6::counter_value_3(void) { return 0; } KCemu-0.5.1/src/kc/module.cc0000644001050700006200000001030311345001576015164 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/kc.h" #include "kc/module.h" #include "ui/ui.h" #include "libdbg/dbg.h" ModuleInterface::ModuleInterface(const char *name, byte_t id, mod_type_t mod_type) { _id = id; _valid = false; _name = strdup(name); _mod_type = mod_type; _error_text = NULL; } ModuleInterface::~ModuleInterface(void) { free(_name); } byte_t ModuleInterface::m_in(word_t addr) { if (((addr >> 8) & 3) == 0) return get_id(); return 0xff; } byte_t ModuleInterface::get_id(void) { return _id; } const char * ModuleInterface::get_name(void) { return _name; } mod_type_t ModuleInterface::get_type(void) { return _mod_type; } void ModuleInterface::set_valid(bool valid) { _valid = valid; } bool ModuleInterface::is_valid(void) { return _valid; } const char * ModuleInterface::get_error_text(void) { return _error_text; } void ModuleInterface::set_error_text(const char *text) { if (_error_text != NULL) free(_error_text); _error_text = (text == NULL) ? NULL : strdup(text); } Module::Module(void) { int a; for (a = 0;a < NR_MODULES;a++) _module[a] = 0; } Module::~Module(void) { for (int a = 0;a < NR_MODULES;a++) remove(a); } byte_t Module::in(word_t addr) { int a; byte_t id; a = (addr >> 8); if (a < 8) return 0xff; int slot = get_slot_by_addr(addr); if (_module[slot]) id = _module[slot]->m_in(addr); else id = 0xff; DBG(2, form("KCemu/Module/in", "Module::in(): %04x -> %02x\n", addr, id)); return id; } void Module::out(word_t addr, byte_t val) { int a = (addr >> 8); if (a < 8) return; // Special case for handling of the F8/FC slots for the D004 // module. As the hardware is not decoding this completely we // allow both modules to snoop the output of the other address. if ((a >= 0xf8) && (Preferences::instance()->get_kc_type() & KC_TYPE_85_2_CLASS)) { ModuleInterface *m = get_module_by_addr(addr ^ 0x0400); if (m) m->m_out(addr, val); } ModuleInterface *module = get_module_by_addr(addr); if (module) { DBG(2, form("KCemu/Module/out", "Module::out(): %04x -> %02x\n", addr, val)); module->m_out(addr, val); ui->getModuleInterface()->activate(get_slot_by_addr(addr), val); } } int Module::get_slot_by_addr(word_t addr) { int slot = ((addr >> 8) - 8) / 4; return slot; } ModuleInterface * Module::get_module_by_addr(word_t addr) { return _module[get_slot_by_addr(addr)]; } bool Module::is_empty(byte_t slot) { return _module[slot] == 0; } void Module::insert(byte_t slot, ModuleInterface *module) { remove(slot); DBG(0, form("KCemu/Module/insert", "inserting module '%s' into slot %X (%d)\n", module->get_name(), slot * 4 + 8, slot)); _module[slot] = module; } void Module::remove(byte_t slot) { if (!_module[slot]) return; DBG(0, form("KCemu/Module/insert", "removing module '%s' from slot %X (%d)\n", _module[slot]->get_name(), slot * 4 + 8, slot)); delete _module[slot]; _module[slot] = 0; } void Module::reset(bool power_on) { for (int a = 0;a < NR_MODULES;a++) if (_module[a]) _module[a]->reset(power_on); } KCemu-0.5.1/src/kc/cb_list.cc0000644001050700006200000001301611345001576015322 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/cb_list.h" CallbackListEntry *CallbackListEntry::_free_list = 0; CallbackListEntry::CallbackListEntry(unsigned long long value, Callback *cb, void *data, CallbackListEntry *next) { _cb = cb; _data = data; _next = next; _value = value; } CallbackListEntry::~CallbackListEntry(void) { } void CallbackListEntry::alloc_entries(void) { for (int a = 0;a < CALLBACK_LIST_ALLOC_SIZE;a++) _free_list = ::new CallbackListEntry(0, 0, 0, _free_list); } void CallbackListEntry::free_entries(void) { for (CallbackListEntry *ptr = _free_list;ptr != NULL;) { CallbackListEntry *tmp = ptr; ptr = ptr->_next; delete tmp; } _free_list = 0; } void * CallbackListEntry::operator new(size_t size) { CallbackListEntry *ptr = _free_list; if (ptr == NULL) { alloc_entries(); return ::new CallbackListEntry(0, 0, 0, 0); } _free_list = ptr->_next; ptr->_next = 0; // don't leak internal list references return ptr; } void CallbackListEntry::operator delete(void *p) { CallbackListEntry *ptr = (CallbackListEntry *)p; ptr->_next = _free_list; _free_list = ptr; } CallbackList::CallbackList() { _list = 0; } CallbackList::~CallbackList(void) { clear(); CallbackListEntry::free_entries(); } void CallbackList::clear(void) { CallbackListEntry *ptr; while (_list) { ptr = _list; _list = ptr->_next; delete ptr; } } void CallbackList::add_callback(unsigned long long value, Callback *cb, void *data) { CallbackListEntry *ptr, *next; if (_list == 0) { /* * easy, empty list */ _list = new CallbackListEntry(value, cb, data, 0); } else { ptr = _list; if (_list->_value > value) { /* * add front */ _list = new CallbackListEntry(value, cb, data, ptr); } else { /* * insert sorted */ while (242) { if (ptr->_next && ptr->_next->_value > value) { next = ptr->_next; ptr->_next = new CallbackListEntry(value, cb, data, next); break; } else { if (ptr->_next == 0) { ptr->_next = new CallbackListEntry(value, cb, data, 0); break; } } ptr = ptr->_next; } } } } void CallbackList::run_callbacks(unsigned long long value) { void *data; Callback *cb; CallbackListEntry *ptr; while (_list && _list->_value <= value) { ptr = _list; _list = ptr->_next; cb = ptr->_cb; data = ptr->_data; delete ptr; if (cb) cb->callback(data); } } void CallbackList::remove_callback_listener(Callback *cb) { CallbackListEntry *ptr = _list; for (ptr = _list;ptr != NULL;ptr = ptr->_next) if (ptr->_cb == cb) ptr->_cb = NULL; } /* ################################################################################ ################################################################################ ################################################################################ */ #if 0 void _print_callback_list(const char *why, unsigned long long clock, callback_list *list, const char *txt) { int a; callback_list *ptr; a = 0; for (ptr = list;ptr != NULL;ptr = ptr->_next) a++; cerr.form("paranoia_check (%s):\n", why); cerr.form("\tfunction = %s\n", txt); cerr.form("\tpc = %04x\n", z80->getPC()); cerr.form("\tlength = %10d\n", a); cerr.form("\tdiff = %10Ld\n", list->_counter - clock); cerr.form("\tcounter = %10Ld\n", clock); for (ptr = list;ptr != NULL;ptr = ptr->_next) { cerr.form("\tcounter = %10Ld, cb = %8p [%s], data = %8p\n", ptr->_counter, ptr->_cb, ptr->_cb->get_name(), ptr->_data); } } void _callback_paranoia_check(unsigned long long clock, callback_list *list, char *txt) { unsigned long long last = 0; callback_list *tmp; callback_list *ptr = list; while (ptr != NULL) { if (ptr->_counter < clock) { _print_callback_list("ptr->counter < clock", clock, list, txt); return; } if (ptr->_counter < last) { _print_callback_list("ptr->counter < last", clock, list, txt); return; } tmp = list; while (tmp != ptr) { if (tmp->_counter > ptr->_counter) { _print_callback_list("tmp->counter > ptr->counter", clock, list, txt); return; } tmp = tmp->_next; } last = ptr->_counter; ptr = ptr->_next; } } #endif KCemu-0.5.1/src/kc/mod_romb.cc0000644001050700006200000000520511345001576015502 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/mod_romb.h" using namespace std; ModuleROMBank::ModuleROMBank(ModuleROMBank &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _rom = tmpl._rom; _group = NULL; _portg = ports->register_ports(get_name(), 0x78, 8, this, 0); _bank = 0; activate_bank(); set_valid(true); } ModuleROMBank::ModuleROMBank(const char *filename, const char *name) : ModuleInterface(name, 0, KC_MODULE_KC_85_1) { _group = NULL; _portg = NULL; _rom = new byte_t[ROM_BANK_SIZE]; set_valid(Memory::load_rom(filename, _rom, ROM_BANK_SIZE, false)); } ModuleROMBank::~ModuleROMBank(void) { if (_portg) ports->unregister_ports(_portg); /* * the template object owns the _rom memory and the * actual module object always has an memory group * registered so if we have _group == NULL this is * the template object */ if (_group) memory->unregister_memory(_group); else delete[] _rom; } void ModuleROMBank::activate_bank() { if (_group) memory->unregister_memory(_group); int size = (_bank & 1) ? 0x1800 : 0x2800; int offset = (_bank / 2) * 0x4000 + (_bank & 1) * 0x2800; //printf("activate bank %2d : size = %04xh, offset = %05xh\n", _bank, size, offset); _group = memory->register_memory(get_name(), 0xc000, size, &_rom[offset], 10, 0); } void ModuleROMBank::m_out(word_t addr, byte_t val) { //printf("m_out %04x, %02x\n", addr, val); } ModuleInterface * ModuleROMBank::clone(void) { return new ModuleROMBank(*this); } void ModuleROMBank::reset(bool power_on) { _bank = 0; activate_bank(); } byte_t ModuleROMBank::in(word_t addr) { return 0xff; } void ModuleROMBank::out(word_t addr, byte_t val) { _bank = (_bank + 1) & 0x0f; activate_bank(); } KCemu-0.5.1/src/kc/keyb0.cc0000644001050700006200000001162711345001576014723 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/z80.h" #include "kc/keys.h" #include "kc/pio0.h" #include "kc/keyb0.h" #include "kc/keyb0k.h" #include "kc/ports0.h" #include "cmd/cmd.h" Keyboard0::Keyboard0(void) { init(); z80->register_ic(this); } Keyboard0::~Keyboard0(void) { z80->unregister_ic(this); } void Keyboard0::init(void) { _ext = 0; _key = 0; _keysym = 0; _variant = Preferences::instance()->get_kc_variant(); } void Keyboard0::keyPressed(int keysym, int keycode) { switch (keysym) { case KC_KEY_CONTROL: _control = true; break; default: break; } _keysym = keysym; keyboard_handler(); } void Keyboard0::keyReleased(int keysym, int keycode) { switch (keysym) { case KC_KEY_CONTROL: _control = false; break; default: break; } _keysym = 0; keyboard_handler(); } void Keyboard0::replayString(const char *text) { } void Keyboard0::callback(void *data) { } int Keyboard0::callback_A_in(void) { return -1; } int Keyboard0::callback_B_in(void) { return _ext; } void Keyboard0::callback_A_out(byte_t val) { } void Keyboard0::callback_B_out(byte_t val) { if (_pio_value != (val & 0x10)) { _pio_value = val & 0x10; keyboard_handler(); } } void Keyboard0::reset(bool power_on) { init(); } void Keyboard0::reti(void) { } void Keyboard0::keyboard_handler_default(void) { _ext = 0x1f; /* * latch key value only at start of keyboard scan to * prevent missing recognition of the shift keys */ if (_value == 0) _key = __keys[_keysym]; if (_key == 0) { pio->set_B_EXT(0x1f, _ext); return; } /* * shift level (S1 = 0, S2 = 1, S3 = 2, S4 = 3) */ int shift = ((_key >> 8) & 0xff) - 1; if (shift >= 0) if (_value == shift) _ext &= ~8; if (_value == ((_key >> 4) & 0x0f)) _ext &= ~(_key & 0x0f); pio->set_B_EXT(0x1f, _ext); } void Keyboard0::keyboard_handler_a2(void) { _key = __keys_a2[_keysym]; if (_key == 0) { _ext = 0x0f; pio->set_B_EXT(0x0f, _ext); return; } int row1 = (_key & 0x0f) - 1; int col1 = ((_key & 0xf0) >> 4); int row2 = ((_key >> 8) & 0x0f) - 1; int col2 = ((_key & 0xf000) >> 12); _ext = 0x0f; if (_value == row1) { int v = 1 << col1; if (_pio_value) v >>= 4; _ext &= (v ^ 0xff); } if (_value == row2) { int v = 1 << col2; if (_pio_value) v >>= 4; _ext &= (v ^ 0xff); } pio->set_B_EXT(0x0f, _ext); } void Keyboard0::keyboard_handler_rb(void) { _key = __keys_rb_k7659[_keysym]; if (_key == 0) { _ext = 0x0f; pio->set_B_EXT(0x1f, _ext); return; } int row1 = (_key & 0x0f) - 1; int col1 = ((_key & 0xf0) >> 4); byte_t val = 0x00; if ((_value == row1) || (_value == 15)) val = (1 << col1); if (_key & 0xff00) { int row2 = ((_key >> 8) & 0x0f) - 1; int col2 = ((_key & 0xf000) >> 12); if ((_value == row2) || (_value == 15)) val |= (1 << col2); } if (_control) if ((_value == 7) || (_value == 15)) val |= (1 << 7); int l1 = (val & 0x01) || (val & 0x04) || (val & 0x10) || (val & 0x40); int l2 = (val & 0x02) || (val & 0x04) || (val & 0x20) || (val & 0x40); int l3 = (val & 0x08) || (val & 0x10) || (val & 0x20) || (val & 0x40); int l4 = (val & 0x80); val = 0x1f; if (l1) val ^= 1; if (l2) val ^= 2; if (l3) val ^= 4; if (l4) val ^= 8; _ext = val; pio->set_B_EXT(0x1f, _ext); } void Keyboard0::keyboard_handler(void) { switch (_variant) { case KC_VARIANT_Z1013_01: case KC_VARIANT_Z1013_12: case KC_VARIANT_Z1013_16: case KC_VARIANT_Z1013_64: keyboard_handler_default(); break; case KC_VARIANT_Z1013_A2: keyboard_handler_a2(); break; case KC_VARIANT_Z1013_RB: case KC_VARIANT_Z1013_BL4: case KC_VARIANT_Z1013_SURL: keyboard_handler_rb(); break; default: break; } } void Keyboard0::set_value(byte_t value) { _value = value; keyboard_handler(); } KCemu-0.5.1/src/kc/keyb3.cc0000644001050700006200000001772411345001576014732 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "cmd/cmd.h" #include "kc/z80.h" #include "kc/pio.h" #include "kc/keys.h" #include "kc/keyb3.h" #include "kc/keyb3k.h" #include "libdbg/dbg.h" /* #define KEYBOARD_CB_DEBUG */ /* #define KEYBOARD_ADD_CB_DEBUG */ class CMD_keyboard_replay : public CMD { private: Keyboard *_k; public: CMD_keyboard_replay(Keyboard *k) : CMD("keyboard-replay") { _k = k; register_cmd("keyboard-replay"); } void execute(CMD_Args *args, CMD_Context context) { const char *text; if (!args) return; text = args->get_string_arg("text"); if (!text) return; _k->replayString(text); } }; Keyboard3::Keyboard3(void) { init(); z80->register_ic(this); _cmd = new CMD_keyboard_replay(this); } Keyboard3::~Keyboard3(void) { delete _cmd; z80->unregister_ic(this); } void Keyboard3::init(void) { _key = -1; _lock = -1; _keysym = 0; _release = 0; _shift = false; _control = false; _replay_idx = 0; //_replay_text = NULL; _replay_offset = 50 * 256; } /* * keysym is the translated key (including shift!) * keycode is only the number of the pressed key */ void Keyboard3::keyPressed(int keysym, int keycode) { int key; switch (keysym) { case KC_KEY_SHIFT: _shift = true; return; case KC_KEY_CONTROL: _control = true; return; case KC_KEY_ALT_GR: return; default: break; } if (_control) if ((keysym >= 0x61) && (keysym <= 0x7a)) keysym -= 0x60; key = __keys[keysym]; if (key == 0xffff) return; if ((key & 0x100) || _shift) key |= 1; /* set shift state if required for this key, see keyb3k.h */ if (key & 0x1000) key &= ~1; /* force unshifted key if the key is shifted on pc keyboard * but not on the kc keyboard */ key &= 0xff; key ^= 1; /* * well, I really don't understand why we need to send * the value with the lowest bit toggled. this doesn't * match the key table in the system manual :-( */ DBG(2, form("KCemu/keyboard/3/key_press", "Keyboard::keyPressed(): <%03xh> %3d [%c] -> %02xh (%3d)\n", keysym & 0xfff, keysym, isprint(keysym) ? keysym : '.', key, key)); _release = 0; _keysym = keysym; // cerr.form("-> %3d, %3d [keyPressed]\n", _key, _lock); if (_key == -1) { _key = key; //cerr.form("-> %3d, %3d [free]\n", _key, _lock); sendKey(); } else { _lock = key; //cerr.form("-> %3d, %3d [locked]\n", _key, _lock); } } void Keyboard3::keyReleased(int keysym, int keycode) { DBG(2, form("KCemu/keyboard/3/key_release", "Keyboard::keyReleased(): <%03xh> %3d [%c] - _keysym = %02xh\n", keysym & 0xfff, keysym, isprint(keysym) ? keysym : '.', _keysym)); switch (keysym) { case KC_KEY_SHIFT: _shift = false; return; case KC_KEY_CONTROL: _control = false; return; case KC_KEY_ALT_GR: return; default: break; } if ((keysym < 0) || (_keysym == keysym)) _release = 1; } void Keyboard3::replayString(const char *text) { /* if (_replay_text == NULL) _replay_text = g_string_new(NULL); g_string_append(_replay_text, text); checkReplay(); */ } void Keyboard3::sendKey(void) { int key; int a, b; int offset; //cerr.form("=> %3d, %3d [sendKey]\n", _key, _lock); #ifdef KEYBOARD_ADD_CB_DEBUG cerr.form("Keyboard: addCallback(): %8Ld, %8ld, %8ld\n", z80->getCounter(), 0, 0); #endif offset = 0; z80->addCallback(offset, this, (void *)0); key = _key; for (a = 1;a < 8;a++) { b = (key & 1) ? KEY_CYCLES_BIT_1 : KEY_CYCLES_BIT_0; offset += b; key >>= 1; #ifdef KEYBOARD_ADD_CB_DEBUG cerr.form("Keyboard: addCallback(): %8Ld, %8ld, %8ld\n", z80->getCounter() + offset, a, offset); #endif z80->addCallback(offset, this, (void *)a); } offset += KEY_CYCLES_T_W; #ifdef KEYBOARD_ADD_CB_DEBUG cerr.form("Keyboard: addCallback(): %8Ld, %8ld, %8ld\n", z80->getCounter() + offset, 8, offset); #endif z80->addCallback(offset, this, (void *)8); key = _key; for (a = 9;a < 16;a++) { b = (key & 1) ? KEY_CYCLES_BIT_1 : KEY_CYCLES_BIT_0; offset += b; key >>= 1; #ifdef KEYBOARD_ADD_CB_DEBUG cerr.form("Keyboard: addCallback(): %8Ld, %8ld, %8ld\n", z80->getCounter() + offset, a, offset); #endif z80->addCallback(offset, this, (void *)a); } offset += KEY_CYCLES_T_DW; #ifdef KEYBOARD_ADD_CB_DEBUG cerr.form("Keyboard: addCallback(): %8Ld, %8ld, %8ld\n", z80->getCounter() + offset, 64, offset); #endif z80->addCallback(offset, this, (void *)64); } int Keyboard3::checkReplay(void) { return 0; #if 0 int key; if (_replay_text == NULL) return -1; key = _replay_text->str[_replay_idx++]; if (_replay_idx >= _replay_text->len) { g_string_free(_replay_text, TRUE); _replay_idx = 0; _replay_text = NULL; } /* * invert case */ if ((key >= 0x41) && (key <= 0x5a)) key += 0x20; else if ((key >= 0x61) && (key <= 0x7a)) key -= 0x20; //cout.form("Keyboard3::checkReplay() ret = %d (%02xh)\n", key, key); switch (key) { case 0x0a: key = 0x0d; break; } /* * FIXME: * we need a return value for keyPressed to learn if the key * was accepted! */ keyPressed(key, 0); keyReleased(key, 0); return key; #endif } void Keyboard3::callback(void *data) { long val = (long)data; #ifdef KEYBOARD_CB_DEBUG static long long last = 0; cerr.form("Keyboard: callback(): %8Ld, %8ld, %8ld\n", z80->getCounter(), val, z80->getCounter() - last); //switch (val) { //case 0: cerr.form(" ### vvv\n"); break; //case 64: cerr.form(" ### ^^^\n"); break; //default: cerr.form("\n"); break; //} last = z80->getCounter(); #endif // if (val == 0) cerr.form("\n"); // cerr.form("[%02x] ", val); switch (val) { default: pio->strobe_B(); break; case 64: if (_lock != -1) { _key = _lock; _lock = -1; } if (_release > 0) { _release--; if (_release == 0) _key = -1; } if (_key != -1) sendKey(); else { /* * triggering strobe here is most likely wrong! */ //pio->strobe_B(); #ifdef KEYBOARD_ADD_CB_DEBUG cerr.form("Keyboard: addCallback(): %8Ld, %8ld, %8ld\n", z80->getCounter() + _replay_offset, 128, _replay_offset); #endif z80->addCallback(_replay_offset, this, (void *)128); } break; case 128: /* * we need an additional delay after normal end of key handling * which is marked by val == 64 to separate the automatically * generated key presses * otherwise we could trigger the kc internal key repeat function * FIXME: * check against the U807 spec if the above statement is true * * an other problem is the screen scrolling that will cause some * characters to be ignored :-( */ if (checkReplay() == 0x0d) _replay_offset = 800 * 256; else _replay_offset = 100 * 256; break; } } void Keyboard3::reset(bool power_on) { init(); } void Keyboard3::reti(void) { } KCemu-0.5.1/src/kc/vis.cc0000644001050700006200000001547511345001576014517 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/vis.h" #include "libdbg/dbg.h" VIS::VIS(void) : InterfaceCircuit("VIS") { reset(true); z80->register_ic(this); } VIS::~VIS(void) { z80->unregister_ic(this); } byte_t VIS::in(word_t addr) { byte_t val = 0xff; switch (addr & 0xff) { case 0x9c: val = _char[_idx]; _idx = (_idx + 1) & 0x07ff; break; } DBG(2, form("KCemu/VIS/in", "VIS::in(): %04xh val = %02x\n", addr, val)); return val; } /* * screen 0/8: * * VIS::out(): 129dh val = 12 [.] Text 25x40 * VIS::out(): 009dh val = 00 [.] * * screen 1/9: * * VIS::out(): 109dh val = 10 [.] Text 25x80 * VIS::out(): 009dh val = 00 [.] * * screen 2: * * VIS::out(): 129dh val = 12 [.] Graphic 360 x 200 (4 of 16 Colors) * VIS::out(): 019dh val = 01 [.] * * screen 3: * * VIS::out(): 109dh val = 10 [.] Graphic 640 x 200 (4 of 16 Colors) * VIS::out(): 019dh val = 01 [.] * * screen 5: * * VIS::out(): 109dh val = 10 [.] Graphic 320 x 200 (16 of 16 Colors) * VIS::out(): 029dh val = 02 [.] * * border color: * * VIS::out(): 209dh / command: val = 20 [ ] -> border color = 0 * VIS::out(): 219dh / command: val = 21 [!] -> border color = 1 * VIS::out(): 229dh / command: val = 22 ["] -> border color = 2 * VIS::out(): 239dh / command: val = 23 [#] -> border color = 3 * VIS::out(): 2f9dh / command: val = 2f [/] -> border color = 15 * * COLOR 0,0 * VIS::out(): 309dh / command: val = 30 [0] * VIS::out(): 029dh / command: val = 42 [B] * VIS::out(): 019dh / command: val = 54 [T] * VIS::out(): 009dh / command: val = 66 [f] * * COLOR 0,1 * VIS::out(): 309dh / command: val = 30 [0] * VIS::out(): 029dh / command: val = 43 [C] * VIS::out(): 019dh / command: val = 55 [U] * VIS::out(): 009dh / command: val = 67 [g] * * COLOR 1,0 * VIS::out(): 319dh / command: val = 31 [1] * VIS::out(): 029dh / command: val = 42 [B] * VIS::out(): 019dh / command: val = 54 [T] * VIS::out(): 009dh / command: val = 66 [f] * * COLOR 1,1 * VIS::out(): 319dh / command: val = 31 [1] * VIS::out(): 029dh / command: val = 43 [C] * VIS::out(): 019dh / command: val = 55 [U] * VIS::out(): 009dh / command: val = 67 [g] * * COLOR 2,0 * VIS::out(): 329dh / command: val = 32 [2] * VIS::out(): 029dh / command: val = 42 [B] * VIS::out(): 019dh / command: val = 54 [T] * VIS::out(): 009dh / command: val = 66 [f] * * COLOR 2,1 * VIS::out(): 329dh / command: val = 32 [2] * VIS::out(): 029dh / command: val = 43 [C] * VIS::out(): 019dh / command: val = 55 [U] * VIS::out(): 009dh / command: val = 67 [g] */ void VIS::out(word_t addr, byte_t val) { static byte_t last_val = 0; DBG(2, form("KCemu/VIS/out", "VIS::out(): %04xh val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); switch (addr & 0xff) { case 0x9c: DBG(2, form("KCemu/VIS/out_9C", "VIS::out(): %04xh / char data: val = %02x [%c] %c%c%c%c%c%c%c%c\n", addr, val, isprint(val) ? val : '.', (val & 1) ? '#' : ' ', (val & 2) ? '#' : ' ', (val & 4) ? '#' : ' ', (val & 8) ? '#' : ' ', (val & 16) ? '#' : ' ', (val & 32) ? '#' : ' ', (val & 64) ? '#' : ' ', (val & 128) ? '#' : ' ')); _char[_idx] = val; _changed[_idx / 8] = 1; _idx = (_idx + 1) & 0x07ff; break; case 0x9d: DBG(2, form("KCemu/VIS/out_9D", "VIS::out(): %04xh / command: val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); if ((last_val == 0x12) && (val == 0x00)) set_mode(0); else if ((last_val == 0x10) && (val == 0x00)) set_mode(1); else if ((last_val == 0x12) && (val == 0x01)) set_mode(2); else if ((last_val == 0x10) && (val == 0x01)) set_mode(3); else if ((last_val == 0x10) && (val == 0x02)) set_mode(5); else if ((val & 0xf0) == 0x20) set_border(val & 0x0f); else if ((val & 0xf0) == 0x30) set_color(0, val & 0x0f); else if ((val & 0xf0) == 0x40) set_color(1, val & 0x0f); else if ((val & 0xf0) == 0x50) set_color(2, val & 0x0f); else if ((val & 0xf0) == 0x60) set_color(3, val & 0x0f); last_val = val; break; case 0x9e: DBG(2, form("KCemu/VIS/out_9E", "VIS::out(): %04xh / char idx: val = %02x (%d)\n", addr, val, val)); _idx = 8 * val; break; } } int VIS::get_mode() { return _mode; } void VIS::set_mode(int mode) { DBG(1, form("KCemu/VIS/mode", "VIS::out(): mode change %d -> %d\n", _mode, mode)); _mode = mode; } int VIS::get_border(void) { return _border; } void VIS::set_border(int border) { DBG(1, form("KCemu/VIS/border", "VIS::out(): border change %2d -> %2d\n", _border, border)); _border = border; } int VIS::get_color(int idx) { idx &= 3; return _color[idx]; } void VIS::set_color(int idx, int color) { idx &= 3; DBG(1, form("KCemu/VIS/color", "VIS::out(): color change [%d] %2d -> %2d [%2d/%2d/%2d/%2d]\n", idx, _color[idx], color, _color[0], _color[1], _color[2], _color[3])); if (_color[idx] != color) { _color[idx] = color; _color_palette_changed = 1; } } int VIS::get_changed(byte_t idx) { return _changed[idx]; } void VIS::reset_changed(void) { memset(_changed, 0, 0x100); } int VIS::is_color_palette_changed(void) { return _color_palette_changed; } void VIS::reset_color_palette_changed(void) { _color_palette_changed = 0; } byte_t * VIS::get_memory(void) { return _char; } void VIS::reti(void) { } void VIS::irqreq(void) { } word_t VIS::irqack(void) { return IRQ_NOT_ACK; } void VIS::reset(bool power_on) { int a; _mode = 0; _border = 0; _color[0] = 0; _color[1] = 0; _color[2] = 0; _color[3] = 0; _color_palette_changed = 0; if (power_on) for (a = 0;a < 0x0800;a++) _char[a] = 0; } KCemu-0.5.1/src/kc/keyb1.cc0000644001050700006200000001502411345001576014717 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/z80.h" #include "kc/keys.h" #include "kc/keyb1.h" #include "kc/keyb1k.h" #include "libdbg/dbg.h" Keyboard1::Keyboard1(void) { init(); z80->register_ic(this); } Keyboard1::~Keyboard1(void) { z80->unregister_ic(this); } void Keyboard1::init(void) { int a; _shift = false; _control = false; _in_callback = false; for (a = 0;a < MAX_KEYS;a++) { _keybuf[a].sym = -1; _keybuf[a].code = -1; } } int Keyboard1::decode_key(int keysym, bool press) { return keysym; } void Keyboard1::keyPressed(int keysym, int keycode) { /* * ignore repeated key press events (e.g. generated by * GTK that reports key repeat as keypress/keypress/keypress/... * without the possibility to switch that off :-( ) */ for (int a = 0;a < MAX_KEYS;a++) if (_keybuf[a].code == keycode) return; int k = decode_key(keysym, true); if (k == -1) return; switch (keysym) { case KC_KEY_SHIFT: _shift = __keys[k]; k = 0; break; case KC_KEY_CONTROL: _control = __keys[k]; k = 0; break; default: k = __keys[k]; break; } byte_t c1 = 0; byte_t r1 = 0; byte_t c2 = 0; byte_t r2 = 0; for (int a = 0;a < MAX_KEYS;a++) { if (_keybuf[a].code != -1) { /* * row/column values of already pressed keys */ r1 |= 1 << (((__keys[_keybuf[a].sym] >> 4) & 0x0f) - 1); c1 |= 1 << (((__keys[_keybuf[a].sym] ) & 0x0f) - 1); } if (k != 0) if (_keybuf[a].code == -1) { _keybuf[a].sym = k; _keybuf[a].code = keycode; /* * row/column values of new pressed keys */ r2 |= 1 << (((k >> 4) & 0x0f) - 1); c2 |= 1 << (((k ) & 0x0f) - 1); /* * check for 2nd key (this generates duplicate entries for shift, * ctrl, ... -- but with the keycode of the key itself) */ k >>= 8; } } DBG(2, form("KCemu/keyboard/1/key_press", "##### Keyboard: keyPressed [%03x/%02x] {%c%c} " "r/c: [%02x/%02x]=>[%02x/%02x] -", keysym, keycode, _shift > 0 ? 'S' : 's', _control > 0 ? 'C' : 'c', r1, c1, r1 | r2, c1 | c2)); for (int a = 0;a < MAX_KEYS;a++) if (_keybuf[a].code != -1) DBG(2, form("KCemu/keyboard/1/key_press", " {%02d:%02x}", a, _keybuf[a].code)); DBG(2, form("KCemu/keyboard/1/key_press", "\n")); callback_B_in(); } void Keyboard1::keyReleased(int keysym, int keycode) { int a; if (keysym == -1) { for (a = 0;a < MAX_KEYS;a++) _keybuf[a].code = -1; return; } if (keysym == KC_KEY_SHIFT) _shift = 0; if (keysym == KC_KEY_CONTROL) _control = 0; /* * remove (maybe multiple) entries from keyboard buffer */ for (a = 0;a < MAX_KEYS;a++) if (_keybuf[a].code == keycode) _keybuf[a].code = -1; DBG(2, form("KCemu/keyboard/1/key_release", "##### Keyboard: keyReleased [%03x/%02x] {%c%c} " " -", keysym, keycode, _shift > 0 ? 'S' : 's', _control > 0 ? 'C' : 'c')); for (a = 0;a < MAX_KEYS;a++) if (_keybuf[a].code != -1) DBG(2, form("KCemu/keyboard/1/key_release", " {%02d:%02x}", a, _keybuf[a].code)); DBG(2, form("KCemu/keyboard/1/key_release", "\n")); callback_B_in(); } void Keyboard1::replayString(const char *text) { } void Keyboard1::callback(void *data) { } int Keyboard1::callback_A_in(void) { if (_in_callback) return -1; _in_callback = true; byte_t b = ~pio2->in_B_DATA(); byte_t c = 0; int count = 0; for (int a = 0;a < MAX_KEYS;a++) { if (_keybuf[a].code == -1) continue; if (b & (1 << (((_keybuf[a].sym >> 4) & 0x0f) - 1))) { c |= 1 << (((_keybuf[a].sym) & 0x0f) - 1); count++; } } /* * The shift key itself is only asserted when no other key is pressed. * Otherwise this breaks the key handling for keys that are shifted * in the pc layout but not shifted in the kc layout (like the ':' key * that must not have the shift key pressed on the kc). */ if ((count == 0) && (_shift > 0)) if (b & (1 << (((_shift >> 4) & 0x0f) - 1))) c |= 1 << ((_shift & 0x0f) - 1); if (_control > 0) if (b & (1 << (((_control >> 4) & 0x0f) - 1))) c |= 1 << (((_control) & 0x0f) - 1); c = ~c; #if 0 cout.form("##### Keyboard: Port A: new ext val: %02x [x = %d] -", c, x); for (a = 0;a < MAX_KEYS;a++) if (_keybuf[a].code != -1) cout.form(" {%04x}", _keybuf[a].sym); cout.form("\n"); #endif pio2->set_A_EXT(0xff, c); _in_callback = false; return -1; } int Keyboard1::callback_B_in(void) { if (_in_callback) return -1; _in_callback = true; byte_t b = ~pio2->in_A_DATA(); byte_t c = 0; int count = 0; for (int a = 0;a < MAX_KEYS;a++) { if (_keybuf[a].code == -1) continue; if (b & (1 << (((_keybuf[a].sym) & 0x0f) - 1))) { c |= 1 << (((_keybuf[a].sym >> 4) & 0x0f) - 1); count++; } } if ((count == 0) && (_shift > 0)) if (b & (1 << ((_shift & 0x0f) - 1))) c |= 1 << (((_shift >> 4) & 0x0f) - 1); if (_control > 0) if (b & (1 << ((_control & 0x0f) - 1))) c |= 1 << (((_control >> 4) & 0x0f) - 1); c = ~c; #if 0 cout.form("##### Keyboard: Port B: new ext val: %02x [x = %d] -", c, x); for (a = 0;a < MAX_KEYS;a++) if (_keybuf[a].code != -1) cout.form(" {%04x}", _keybuf[a].sym); cout.form("\n"); #endif pio2->set_B_EXT(0xff, c); _in_callback = false; return -1; } void Keyboard1::reset(bool power_on) { init(); } void Keyboard1::reti(void) { } KCemu-0.5.1/src/kc/mod_list.cc0000644001050700006200000007064411345001576015527 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ /* * Quelle: http://www.kc85emu.de/scans/fa0192/Bild5.jpg * Original: Zeitschrift Funkamateur * * ---: D001 Grundgerät KC85/2 * ---: D001 Grundgerät KC85/3 * ---: D001 Grundgerät KC85/4 * ---: D002 Busdriver * ---: D004 Floppy Disk Drive * a7h: D004 Floppy Disk Basis (ROM) * efh: M001 Digital IN/OUT * eeh: M003 V24 (2 Kanäle) * ---: M005 User (Leermodul) * ---: M006 BASIC (für KC 85/2) * ---: M007 Adapter (Herausführung der Anschlüsse an die Frontseite) * ---: M008 Joystick * e7h: M010 ADU1 * f6h: M011 64 KByte RAM * fbh: M012 Software: Texor * ---: M021 Joy + Centronics * f4h: M022 Expander RAM (16 KByte) * f7h: M025 User PROM (8 KByte) * fbh: M026 Software: Forth * fbh: M027 Software: Development * e3h: M029 DAU1 * ---: M030 EPROMmer * 79h: M032 256 KByte RAM * ---: M033 Software: TYPESTAR * 7bh: M035 1 MByte RAM * 7bh: M035 4 MByte RAM (intern 4 x 1MByte) * ---: M036 128 KByte RAM * ---: M040 USER PROM ? KByte * ---: M053 RS 232 * ---: M125 USER ROM ? KByte */ /* * Modulübersicht für KC85 * * von Mario Leubner * * (KC-News 2/95 - http://www.iee.et.tu-dresden.de/~kc-club/) * * Modul Kenn. Steuerb. Bezeichnung * * D001 - - Grundgerät KC85/2 (PIO 88-8B, CTC 8C-8F) * D001 - - Grundgerät KC85/3 (PIO 88-8B, CTC 8C-8F) * D001 - - Grundgerät KC85/4 (OUT 84-87, PIO 88-8B, CTC 8C-8F) * D002 - - Busdriver für 4 Module (OUT 80 zur Modulsteuerung) * D003* - - Programmer (ähnl. D002, ROM-Module brennen?) * D004 A7 xxAxxKxM Floppy Disk Basis (Koppel-RAM F0-F3, OUT F4-F7) * D004 - - Floppy Disk Drive (Laufwerk K5601, 5 1/4") * D005 Komfort-Tastatur für KC85/4 (mit EMR UB8830) * * M000* 01 Spezial f. KC85/3: autom. Start in Schacht 8 ab 4000H * M001 EF xxxxxxxM Digital IN/OUT (CTC 00-03, PIO 04-07) * M002* DA xxxxxxxM PIO 3 (PIO 10-13, PIO 14-17) * M003 EE xxxxxxxM V.24 (2 Kanäle, SIO 08-0B, CTC 0C-0F) * M005 - - USER-Leermodul (freie Ports: C0-CF, Kennbytes C0-D7) * M006 FC AAxxxxxM BASIC und CAOS 3.1 für KC85/2 (1 Block zu 16K ROM) * M007 - - Adapter (Busverlängerung für Modulschacht) * M008 - - Joystick (PIO 90-93) * M009* ED xxxxxxxM TLCM (Spracheingabe- und Datenkompressionsmodul) * M010 E7 xxxxxxxM ADU1: 4 Analogeingänge mit Multiplexer (PIO 40-43) * M011 F6 AAxxxxWM 64K RAM (1 Block zu 64K, rotierbar) * M012 FB AAAxxxxM Software: TEXOR + V.24-Treiber (1 Block ROM 8K) * M021* - - Joystick + Centronics (PIO 90-93) * M022 F4 AAxxxxWM Expander-RAM 16K (1 Block zu 16K) * M024* F5 AAxxxxWM 32K RAM (1 Block zu 32K) * M025 F7 AAAxxxxM USER PROM 8K (1 Block zu 8K, 4 Sockel für 2716) * M026 FB AAAxxxxM Software: FORTH (1 Block ROM 8K) * M027 FB AAAxxxxM Software: DEVELOPMENT+V.24-Treiber (1 Block ROM 8K) * M029 E3 xxxxxxxM DAU1: 2 Analogausgänge + 1 Relais (OUT 44..47) * M030 D9 EPROMER ? * M030 DB AAAxxxxM EPROMER für 2-64K (8K EPROM, PIO D0-D3, PIO D4-D7) * M032 79 AxSSSSWM 256K segmented RAM (16 Blöcke je 16K, 4000 od. 8000) * M033 01 AA0SxxxM Software: TYPESTAR+RAMDOS (2 Blöcke ROM zu je 8K) * M034 7A ASSSSSWM 512K segmented RAM (32 Blöcke je 16K, 4000 od. 8000) * M035 7B SSSSSSWM 1M segmented RAM (64 Blöcke je 16K, Adr. 8000) * M036 78 AxxSSSWM 128K segmented RAM (8 Blöcke je 16K, 4000 od. 8000) * M040 F8 AAxxxxxM USER PROM 16K (1 Block zu 16KByte) * M045 70 AASSxxxM 32K segmented ROM (4 Blöcke je 8K) * M046 71 AASSxSxM 64K segmented ROM (8 Blöcke je 8K) * M047 72 AASSSSxM 128K segmented ROM (16 Blöcke je 8K) * M048* 73 AASSSSxM 256K segmented ROM (16 Blöcke je 16K) * M053 EE xxxxxxxM RS232: wie M003, jedoch 2. Kanal mit TTL-Pegel * M120* F0 AAAxxxWM 8K CMOS-RAM (1 Block zu 8K) * M122* F1 AAxxxxWM 16K CMOS-RAM (1 Block zu 16K) * M124* F2 AAxxxxWM 32K CMOS-RAM (1 Block zu 32K) * * Im Steuerbyte bedeuten: * * A (Basis-)Adresse * K Kopplung ein/aus * S Segmentnummer * W Schreibfreigabe * M Modulschaltzustand * x nicht benutzt * * Verwendete Kennbytes * * 01 Autostart-ROM * 7x segmented Memory * Dx..Ex I/O-Module * Fx Memory * * Mit '*' gekennzeichnete Module kamen offenbar nicht in den Handel! */ #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/prefs/strlist.h" #include "kc/kc.h" #include "kc/mod_dio.h" #include "kc/mod_ram.h" #include "kc/mod_ram1.h" #include "kc/mod_r16.h" #include "kc/mod_r64.h" #include "kc/mod_cpm.h" #include "kc/mod_ram8.h" #include "kc/mod_64k.h" #include "kc/mod_128k.h" #include "kc/mod_256k.h" #include "kc/mod_512k.h" #include "kc/mod_1m.h" #include "kc/mod_4m.h" #include "kc/mod_rom.h" #include "kc/mod_urom.h" #include "kc/mod_auto.h" #include "kc/mod_rom1.h" #include "kc/mod_romb.h" #include "kc/mod_raf.h" #include "kc/mod_boot.h" #include "kc/mod_192k.h" #include "kc/mod_320k.h" #include "kc/mod_fdc.h" #include "kc/mod_gdc.h" #include "kc/mod_rtc.h" #include "kc/mod_ramf.h" #include "kc/mod_disk.h" #include "kc/mod_list.h" #include "kc/mod_4131.h" #include "kc/mod_m052.h" #include "kc/mod_vdip.h" #ifdef HOST_OS_LINUX #include "kc/mod_v24.h" #include "kc/mod_js.h" #endif /* HOST_OS_LINUX */ #include "fileio/load.h" #include "ui/ui.h" #include "ui/error.h" #include "libdbg/dbg.h" using namespace std; ModuleList::ModuleList(void) { ModuleInterface *m; string datadir(kcemu_datadir); string kc85_romdir = datadir + "/roms/kc85"; string z9001_romdir = datadir + "/roms/z9001"; kc_type_t kc_type = Preferences::instance()->get_kc_type(); kc_variant_t kc_variant = Preferences::instance()->get_kc_variant(); /* * placeholder for a not present module ;-) */ m = 0; _mod_list.push_back(new ModuleListEntry(_(""), m, KC_TYPE_ALL)); /* * RAM modules at 2400h-27ffh / 1k * 2800h-2fffh / 2k * 3000h-3fffh / 4k * * (lc80) */ m = new ModuleRAM8("RAM2400", 0x2400, 0x0400); _mod_list.push_back(new ModuleListEntry(_("RAM Module (1k/2400h)"), m, KC_TYPE_LC80)); m = new ModuleRAM8("RAM2800", 0x2800, 0x0800); _mod_list.push_back(new ModuleListEntry(_("RAM Module (2k/2800h)"), m, KC_TYPE_LC80)); m = new ModuleRAM8("RAM3000", 0x3000, 0x1000); _mod_list.push_back(new ModuleListEntry(_("RAM Module (4k/3000h)"), m, KC_TYPE_LC80)); /* * RAM modules at 0800h-0fffh / 2k * 1000h-1fffh / 4k * 2000h-3fffh / 8k * * (vcs80) */ m = new ModuleRAM8("RAM0800", 0x0800, 0x0800); _mod_list.push_back(new ModuleListEntry(_("RAM Module (2k/0800h)"), m, KC_TYPE_VCS80)); m = new ModuleRAM8("RAM1000", 0x1000, 0x1000); _mod_list.push_back(new ModuleListEntry(_("RAM Module (4k/1000h)"), m, KC_TYPE_VCS80)); m = new ModuleRAM8("RAM2000", 0x2000, 0x2000); _mod_list.push_back(new ModuleListEntry(_("RAM Module (8k/2000h)"), m, KC_TYPE_VCS80)); /* * RAM modules at 4000h-7fffh / 16k * 8000h-ffffh / 32k * * (lc80 + vcs80) */ m = new ModuleRAM8("RAM4000", 0x4000, 0x4000); _mod_list.push_back(new ModuleListEntry(_("RAM Module (16k/4000h)"), m, (kc_type_t)(KC_TYPE_LC80 | KC_TYPE_VCS80))); m = new ModuleRAM8("RAM8000", 0x8000, 0x8000); _mod_list.push_back(new ModuleListEntry(_("RAM Module (32k/8000h)"), m, (kc_type_t)(KC_TYPE_LC80 | KC_TYPE_VCS80))); /* * 256k RAM floppy (Z1013) */ m = new ModuleRAMFloppy("RAMFLOPPY"); _mod_list.push_back(new ModuleListEntry(_("256k RAM Floppy"), m, KC_TYPE_Z1013)); /* * FDC (schneider) (Z1013) */ m = new ModuleFDC("FDC_SCHNEIDER", ModuleFDC::FDC_INTERFACE_SCHNEIDER); _mod_list.push_back(new ModuleListEntry(_("FDC (Schneider)"), m, KC_TYPE_Z1013)); /* * FDC (kramer) (Z1013) */ m = new ModuleFDC("FDC_KRAMER", ModuleFDC::FDC_INTERFACE_KRAMER); _mod_list.push_back(new ModuleListEntry(_("FDC (Kramer)"), m, KC_TYPE_Z1013)); /* * GDC (Z1013) */ m = new ModuleGDC("GDC"); _mod_list.push_back(new ModuleListEntry(_("GDC 82720"), m, KC_TYPE_Z1013)); /* * RTC (port 20h-2fh) (Z1013) */ m = new ModuleRTC("RTC20", 0x20); _mod_list.push_back(new ModuleListEntry(_("RTC (port 20h-2fh)"), m, KC_TYPE_Z1013)); /* * RTC (port 70h-7fh) (Z1013) */ m = new ModuleRTC("RTC70", 0x70); _mod_list.push_back(new ModuleListEntry(_("RTC (port 70h-7fh)"), m, KC_TYPE_Z1013)); /* * basic (kc85/1) */ string z9001_basic_rom = z9001_romdir + "/basic_c0.851"; m = new ModuleROM1(z9001_basic_rom.c_str(), "BASIC", 0xc000, 0x2800); _mod_list.push_back(new ModuleListEntry(_("Basic Module (c000h-e7ffh)"), m, KC_TYPE_85_1)); /* * plotter module (kc85/1, kc87.10, kc87.11) * * The ROM of this module is identical with the internal ROM BASIC of the KC87.21 * that already includes the extensions to interface to an external plotter unit * like the XY4131. To actually use the plotter an additional driver is needed * though. */ string z9001_plotter_rom = z9001_romdir + "/basic_c0.87b"; m = new ModuleROM1(z9001_plotter_rom.c_str(), "PLOTTER", 0xc000, 0x2800); _mod_list.push_back(new ModuleListEntry(_("Plotter Module (c000h-e7ffh)"), m, KC_TYPE_85_1)); /* * RAM modules 16k at 4000h and 8000h (kc85/1) */ m = new ModuleRAM1("RAM4", 0x4000, 0x4000); _mod_list.push_back(new ModuleListEntry(_("RAM Module (16k/4000h)"), m, KC_TYPE_85_1_CLASS)); m = new ModuleRAM1("RAM8", 0x8000, 0x4000); _mod_list.push_back(new ModuleListEntry(_("RAM Module (16k/8000h)"), m, KC_TYPE_85_1_CLASS)); bool romdi_handling = (Preferences::instance()->get_kc_type() == KC_TYPE_87); /* * ZM30 (kc85/1) */ string z9001_zm30_rom = z9001_romdir + "/zm30__c0.851"; m = new ModuleROM1(z9001_zm30_rom.c_str(), "ZM30", 0xc000, 0x0d00, romdi_handling); _mod_list.push_back(new ModuleListEntry(_("ZM30 (c000h-ccffh)"), m, KC_TYPE_85_1_CLASS)); /* * edas (kc85/1) */ string z9001_edas_rom = z9001_romdir + "/edas__c0.851"; m = new ModuleROM1(z9001_edas_rom.c_str(), "EDAS", 0xc000, 0x2800, romdi_handling); _mod_list.push_back(new ModuleListEntry(_("EDAS (c000h-e7ffh)"), m, KC_TYPE_85_1_CLASS)); /* * idas (kc85/1) */ string z9001_idas_rom = z9001_romdir + "/idas__c0.851"; m = new ModuleROM1(z9001_idas_rom.c_str(), "IDAS", 0xc000, 0x2800, romdi_handling); _mod_list.push_back(new ModuleListEntry(_("IDAS / ZM (c000h-e7ffh)"), m, KC_TYPE_85_1_CLASS)); /* * bitex (kc85/1) */ string z9001_bitex_rom = z9001_romdir + "/bitex_c0.851"; m = new ModuleROM1(z9001_bitex_rom.c_str(), "BITEX", 0xc000, 0x1800, romdi_handling); _mod_list.push_back(new ModuleListEntry(_("BITEX (c000h-d7ffh)"), m, KC_TYPE_85_1_CLASS)); /* * zsid (kc85/1) */ /* string z9001_zsid_rom = z9001_romdir + "/zsid__c0.851"; m = new ModuleROM1(z9001_zsid_rom.c_str(), "ZSID", 0xc000, 0x2800, romdi_handling); _mod_list.push_back(new ModuleListEntry(_("ZSID (c000h-e7ffh)"), m, KC_TYPE_85_1_CLASS)); */ /* * r80 (kc85/1) */ /* string z9001_r80_rom = z9001_romdir + "/r80___c0.851"; m = new ModuleROM1(z9001_r80_rom.c_str(), "R80", 0xc000, 0x1c00, romdi_handling); _mod_list.push_back(new ModuleListEntry(_("R80 (c000h-dbffh)"), m, KC_TYPE_85_1_CLASS)); */ /* * kc-caos (kc85/1) */ string z9001_kc_caos_rom = z9001_romdir + "/kc_caos.rom"; m = new ModuleROM1(z9001_kc_caos_rom.c_str(), "KC-CAOS", 0x8000, 0x1000); _mod_list.push_back(new ModuleListEntry(_("KC-CAOS 3.1 (8000h-8fffh)"), m, KC_TYPE_85_1_CLASS)); /* * 192 KByte RAM/EPROM module (kc85/1) */ string z9001_192k_d2_rom = z9001_romdir + "/192k__d2.851"; string z9001_192k_d3_rom = z9001_romdir + "/192k__d3.851"; string z9001_192k_d5_rom = z9001_romdir + "/192k__d5.851"; m = new Module192k(z9001_192k_d2_rom.c_str(), z9001_192k_d3_rom.c_str(), z9001_192k_d5_rom.c_str(), "192k"); _mod_list.push_back(new ModuleListEntry(_("192 KByte RAM/EPROM"), m, KC_TYPE_85_1_CLASS)); /* * KC-Pascal module (kc85/1) */ string z9001_kcpascal_rom = z9001_romdir + "/kcpascal.851"; m = new ModuleROM1(z9001_kcpascal_rom.c_str(), "KC-Pascal", 0x4000, 0x8000); _mod_list.push_back(new ModuleListEntry(_("KC-Pascal Module"), m, KC_TYPE_85_1_CLASS)); /* * 2,5Mb ROM Modul (kc85/1) */ string z9001_mega_rom = z9001_romdir + "/mega_rom.851"; m = new Module320k(z9001_mega_rom.c_str(), "Mega-ROM"); _mod_list.push_back(new ModuleListEntry(_("Mega-ROM Module"), m, KC_TYPE_85_1_CLASS)); /* * 128 KByte ROM bank module (kc85/1) */ string z9001_rombank_rom = z9001_romdir + "/rom_bank.851"; m = new ModuleROMBank(z9001_rombank_rom.c_str(), "ROMBANK"); _mod_list.push_back(new ModuleListEntry(_("128k ROM Bank"), m, KC_TYPE_85_1_CLASS)); /* * IRM Expansion for color display (kc85/1) * * FIXME: check whether to enable the color expansion by default shouldn't * FIXME: go here! */ m = new ModuleRAM1("IRMX", 0xe800, 0x0800); _color_expansion = new ModuleListEntry(_("IRM Color Expansion"), m, KC_TYPE_NONE); _mod_list.push_back(_color_expansion); _init_color_expansion = 0; if (kc_type == KC_TYPE_85_1) if (kc_variant == KC_VARIANT_85_1_11) _init_color_expansion = _color_expansion; if (kc_type == KC_TYPE_87) if ((kc_variant != KC_VARIANT_87_10) && (kc_variant != KC_VARIANT_87_20)) _init_color_expansion = _color_expansion; /* * Plotter-Anschluss */ m = new ModuleXY4131("XY4131"); _mod_list.push_back(new ModuleListEntry(_("Plotter XY4131"), m, KC_TYPE_85_1_CLASS)); /* * CPM-Z9 boot rom module (kc85/1) */ string z9001_z9_boot_rom = z9001_romdir + "/cpmz9_c0.851"; m = new ModuleBOOT(z9001_z9_boot_rom.c_str(), "CPM-Z9-BOOT", 0xc000, 0x0800, romdi_handling); _mod_list.push_back(new ModuleListEntry(_("CPM-Z9 BOOT (c000h-c7ffh)"), m, KC_TYPE_85_1_CLASS)); /* * CPM-Z9 floppy module (kc85/1) */ m = new ModuleCPMZ9("CPM-Z9-FLOPPY"); _mod_list.push_back(new ModuleListEntry(_("CPM-Z9 Floppy"), m, KC_TYPE_85_1_CLASS)); /* * CPM-Z9 64k ram module */ m = new ModuleRAM64("CPM-Z9-RAM64"); _mod_list.push_back(new ModuleListEntry(_("CPM-Z9 64k RAM"), m, KC_TYPE_85_1_CLASS)); /* * RAF (ram floppy module for KC85/1 and A5105 at port 20h/24h) */ m = new ModuleRAF("RAF-4MB-20h", 0x20, 0x400000); _mod_list.push_back(new ModuleListEntry(_("RAF 4MB (port 20h)"), m, (kc_type_t)(KC_TYPE_85_1_CLASS | KC_TYPE_A5105))); m = new ModuleRAF("RAF-4MB-24h", 0x24, 0x400000); _mod_list.push_back(new ModuleListEntry(_("RAF 4MB (port 24h)"), m, (kc_type_t)(KC_TYPE_85_1_CLASS | KC_TYPE_A5105))); /* * Digital I/O (kc85/2-4) */ m = new ModuleDIO("M001", 0xef); _mod_list.push_back(new ModuleListEntry(_("M001: Digital In / Out"), m, KC_TYPE_85_2_CLASS)); /* * V24 module */ #ifdef HOST_OS_LINUX m = new ModuleV24("M003", 0xee); _mod_list.push_back(new ModuleListEntry(_("M003: V24"), m, KC_TYPE_85_2_CLASS)); #endif /* HOST_OS_LINUX */ /* * basic (kc85/2) (this is actually 16k and includes a new system rom!) */ string kc85_m006_rom = kc85_romdir + "/m006.rom"; m = new ModuleROM(kc85_m006_rom.c_str(), "M006", 0x4000, 0xfb); _mod_list.push_back(new ModuleListEntry(_("M006: Basic"), m, (kc_type_t)(KC_TYPE_85_2 | KC_TYPE_85_3))); /* * Joystick module (kc85/2-4) */ #ifdef HOST_OS_LINUX m = new ModuleJoystick("M008", 0xff); _mod_list.push_back(new ModuleListEntry(_("M008: Joystick"), m, KC_TYPE_85_2_CLASS)); #endif /* HOST_OS_LINUX */ /* * RAM module 64k (kc85/2-4) */ m = new Module64k("M011", 0xf6); _mod_list.push_back(new ModuleListEntry(_("M011: 64k RAM"), m, KC_TYPE_85_2_CLASS)); /* * texor */ string kc85_m012_rom = kc85_romdir + "/m012.rom"; m = new ModuleROM(kc85_m012_rom.c_str(), "M012", 0x2000, 0xfb); _mod_list.push_back(new ModuleListEntry(_("M012: Texor"), m, KC_TYPE_85_2_CLASS)); /* * RAM module 16k (kc85/2-4) */ m = new ModuleRAM("M022", 0xf4); _mod_list.push_back(new ModuleListEntry(_("M022: Expander RAM (16k)"), m, KC_TYPE_85_2_CLASS)); /* * forth */ string kc85_m026_rom = kc85_romdir + "/m026.rom"; m = new ModuleROM(kc85_m026_rom.c_str(), "M026", 0x2000, 0xfb); _mod_list.push_back(new ModuleListEntry(_("M026: Forth"), m, KC_TYPE_85_2_CLASS)); /* * development */ string kc85_m027_rom = kc85_romdir + "/m027.rom"; m = new ModuleROM(kc85_m027_rom.c_str(), "M027", 0x2000, 0xfb); _mod_list.push_back(new ModuleListEntry(_("M027: Development"), m, KC_TYPE_85_2_CLASS)); /* * RAM module 256k (kc85/2-4) */ m = new Module256k("M032", 0x79); _mod_list.push_back(new ModuleListEntry(_("M032: 256k Segmented RAM"), m, KC_TYPE_85_2_CLASS)); /* * typestar + ramdos */ string kc85_m033_rom = kc85_romdir + "/m033.rom"; m = new ModuleSegmentedROM16k(kc85_m033_rom.c_str(), "M033", 0x01); _mod_list.push_back(new ModuleListEntry(_("M033: TypeStar + RAMDOS"), m, KC_TYPE_85_2_CLASS)); /* * RAM module 512k (kc85/2-4) */ m = new Module512k("M034", 0x7a); _mod_list.push_back(new ModuleListEntry(_("M034: 512k Segmented RAM"), m, KC_TYPE_85_2_CLASS)); /* * RAM module 1M (kc85/2-4) */ m = new Module1M("M035", 0x7b); _mod_list.push_back(new ModuleListEntry(_("M035: 1M Segmented RAM"), m, KC_TYPE_85_2_CLASS)); /* * RAM module 4M (kc85/2-4) */ m = new Module4M("M035x4", 0x7b); _mod_list.push_back(new ModuleListEntry(_("M035x4: 4M RAM"), m, KC_TYPE_85_2_CLASS)); /* * RAM module 128k (kc85/2-4) */ m = new Module128k("M036", 0x78); _mod_list.push_back(new ModuleListEntry(_("M036: 128k Segmented RAM"), m, KC_TYPE_85_2_CLASS)); /* * M052 network + usb (kc85/2-4) */ string kc85_m052_rom = kc85_romdir + "/m052.rom"; m = new ModuleNetworkUSB(kc85_m052_rom.c_str(), "M052", 0xfd); _mod_list.push_back(new ModuleListEntry(_("M052: Network + USB"), m, KC_TYPE_85_2_CLASS)); /* * wordpro ROM version for kc85/3 */ string kc85_m900_rom = kc85_romdir + "/m900.rom"; m = new ModuleROM(kc85_m900_rom.c_str(), "M900", 0x2000, 0xfb); _mod_list.push_back(new ModuleListEntry(_("M900: WordPro '86 (KC85/3)"), m, KC_TYPE_85_3)); /* * wordpro ROM version for kc85/4 */ string kc85_m901_rom = kc85_romdir + "/m901.rom"; m = new ModuleROM(kc85_m901_rom.c_str(), "M901", 0x2000, 0xfb); _mod_list.push_back(new ModuleListEntry(_("M901: WordPro '86 (KC85/4)"), m, KC_TYPE_85_4)); /* * vinculum usb + driver rom */ m = new ModuleVDIP("VDIP", 0xef); _mod_list.push_back(new ModuleListEntry(_("VDIP: Vinculum USB"), m, KC_TYPE_85_2_CLASS)); string kc85_vdip1_rom = kc85_romdir + "/vdip12.rom"; m = new ModuleROM(kc85_vdip1_rom.c_str(), "VDIP1", 0x0800, 0xfb); _mod_list.push_back(new ModuleListEntry(_("VDIP1: Vinculum USB ROM V1.2"), m, KC_TYPE_85_2_CLASS)); string kc85_vdip2_rom = kc85_romdir + "/vdip21.rom"; m = new ModuleROM(kc85_vdip2_rom.c_str(), "VDIP2", 0x1000, 0xfb); _mod_list.push_back(new ModuleListEntry(_("VDIP2: Vinculum USB ROM V2.1"), m, KC_TYPE_85_2_CLASS)); int d004_enabled = Preferences::instance()->get_int_value("d004", 0); _init_floppy_basis_f8 = 0; _init_floppy_basis_fc = 0; if ((kc_type & KC_TYPE_85_2_CLASS) && d004_enabled) { if (Preferences::instance()->get_int_value("d004_f8", 0)) { /* * Floppy Disk Basis Extension ROM at slot F8, rom is defined by profile setting */ m = new ModuleDisk(SystemROM::ROM_KEY_D004_F8, "Floppy Disk Basis F8", 0xa7, 0xf8); ModuleListEntry *mod_floppy_f8 = new ModuleListEntry(_("Floppy Disk Basis F8"), m, KC_TYPE_NONE); _mod_list.push_back(mod_floppy_f8); _init_floppy_basis_f8 = mod_floppy_f8; } /* * Floppy Disk Basis ROM at slot FC, rom is defined by profile setting */ m = new ModuleDisk(SystemROM::ROM_KEY_D004_FC, "Floppy Disk Basis FC", 0xa7, 0xfc); ModuleListEntry *mod_floppy_fc = new ModuleListEntry(_("Floppy Disk Basis FC"), m, KC_TYPE_NONE); _mod_list.push_back(mod_floppy_fc); _init_floppy_basis_fc = mod_floppy_fc; } _nr_of_bd = Preferences::instance()->get_int_value("busdrivers", 0); if (_nr_of_bd < 0) _nr_of_bd = 0; if (_nr_of_bd > MAX_BD) _nr_of_bd = MAX_BD; if (kc_type & KC_TYPE_85_1_CLASS) _nr_of_bd = 0; if (kc_type & KC_TYPE_LC80) _nr_of_bd = 1; int cnt; switch (kc_type) { case KC_TYPE_85_1: case KC_TYPE_87: case KC_TYPE_A5105: cnt = 4; break; case KC_TYPE_LC80: cnt = 6; break; case KC_TYPE_Z1013: cnt = 8; break; case KC_TYPE_85_2: case KC_TYPE_85_3: case KC_TYPE_85_4: case KC_TYPE_85_5: cnt = 4 * _nr_of_bd + 2; break; default: cnt = 0; break; } add_custom_modules(); init_modules(cnt); } void ModuleList::add_custom_modules(void) { #if 0 for (int a = 0;a < 10;a++) { const char *name = RC::instance()->get_string_i(a, "Custom ROM Module"); const char *text = RC::instance()->get_string_i(a, "Custom ROM Module (Name)"); int id = RC::instance()->get_int_i(a, "Custom ROM Module (Id)"); const char *file = RC::instance()->get_string_i(a, "Custom ROM Module (File)"); int size = RC::instance()->get_int_i(a, "Custom ROM Module (Size)"); if ((name == NULL) || (file == NULL)) continue; if (id == 0) id = 0xfb; size &= 0xfc00; if (size == 0) size = 0x2000; if (size > 0x4000) size = 0x4000; if (text == NULL) text = name; ModuleInterface *m = new ModuleUserROM(file, name, size, id); ModuleListEntry *entry = new ModuleListEntry(text, m, KC_TYPE_85_2_CLASS); _mod_list.push_back(entry); } #endif } void ModuleList::init_modules(int max_modules) { for (int a = 0;a < 4 * MAX_BD + 2;a++) _init_mod[a] = NULL; int mode = 1; const char *ptr = kcemu_modules; if (ptr) { if (*ptr == '+') ptr++; else mode = 0; } int idx = init_modules_autostart(0); if (mode == 1) idx = init_modules_configfile(idx, max_modules); init_modules_commandline(idx, max_modules, ptr); } int ModuleList::init_modules_autostart(int idx) { if (!(Preferences::instance()->get_kc_type() & KC_TYPE_85_2_CLASS)) return idx; if (kcemu_autostart_file == NULL) return idx; DBG(2, form("KCemu/ModuleAutoStart/page", "ModuleAutoStart: trying file '%s'\n", kcemu_autostart_file)); fileio_prop_t *ptr, *prop; if (fileio_load_file(kcemu_autostart_file, &prop) != 0) return idx; int size = 0x10000; byte_t *rom = new byte_t[size]; memset(rom, 0xff, size); byte_t init[0x200]; memset(init, 0xff, 0x200); string datadir = string(kcemu_datadir); string autostart = datadir + "/lib/z80/kc853.bin"; FILE *f = fopen(autostart.c_str(), "rb"); if (f != NULL) { fread(init, 1, 0x200, f); fclose(f); } int page = 0; int info_idx = 0x10; byte_t *rom_ptr = rom + 0x200; for (ptr = prop;ptr != NULL;ptr = ptr->next) { DBG(2, form("KCemu/ModuleAutoStart/page", "ModuleAutoStart: load = %04x, size = %ld, start = %04x\n", ptr->load_addr, ptr->size, ptr->start_addr)); byte_t *img = new byte_t[ptr->size]; int image_size = fileio_get_image(ptr, img); byte_t *img_ptr = img; int load_addr = ptr->load_addr; while (image_size > 0) { if (page == 3) break; page++; int len = image_size < 0x3e00 ? image_size : 0x3e00; memcpy(rom_ptr, img_ptr, len); if (info_idx == 0x10) { int start_addr = ptr->start_addr; if (kcemu_autostart_addr != NULL) { start_addr = strtoul(kcemu_autostart_addr, NULL, 0) & 0xffff; DBG(2, form("KCemu/ModuleAutoStart/page", "ModuleAutoStart: overriding start address with %04xh\n", start_addr)); } memcpy(&init[2], ptr->name, 12); init[info_idx++] = start_addr & 0xff; init[info_idx++] = start_addr >> 8; } init[info_idx++] = load_addr & 0xff; init[info_idx++] = load_addr >> 8; init[info_idx++] = len & 0xff; init[info_idx++] = len >> 8; init[info_idx++] = len > 0x1000; init[info_idx++] = 0; rom_ptr += 0x4000; img_ptr += 0x3e00; load_addr += 0x3e00; image_size -= 0x3e00; } delete[] img; } for (int a = 0;a < 4;a++) memcpy(rom + a * 0x4000, init, 0x200); ModuleInterface *m = new ModuleAutoStart(&rom[0], "Autostart", 0x10000, 0x01); _mod_list.push_back(new ModuleListEntry(_("Autostart"), m, KC_TYPE_85_2_CLASS)); _init_mod[idx++] = strdup("Autostart"); fileio_free_prop(&prop); return idx; } int ModuleList::init_modules_configfile(int idx, int max_modules) { StringList list(Preferences::instance()->get_string_value("modules", "")); int a = 0; for (StringList::iterator it = list.begin();(it != list.end()) && (a < max_modules);it++) { _init_mod[idx++] = strdup((*it).c_str()); a++; } return idx; } int ModuleList::init_modules_commandline(int idx, int max_modules, const char *param) { if (param == NULL) return idx; char *buffer = new char[strlen(param) + 1]; strcpy(buffer, param); char *ptr = strtok(buffer, ","); while (ptr != 0) { _init_mod[idx++] = strdup(ptr); ptr = strtok(0, ","); } delete[] buffer; return idx; } ModuleList::~ModuleList(void) { ModuleList::iterator it; for (it = module_list->begin();it != module_list->end();it++) { ModuleListEntry *entry = *it; delete entry->get_mod(); delete entry; } for (int a = 0;a < 4 * MAX_BD + 2;a++) if (_init_mod[a]) free(_init_mod[a]); /* inserted clones of modules are freed in module.cc */ } void ModuleList::init(void) { int a; ModuleInterface *m; ModuleList::iterator it; for (a = 0;a < 4 * MAX_BD + 2;a++) { if (!_init_mod[a]) continue; for (it = module_list->begin();it != module_list->end();it++) { m = (*it)->get_mod(); if (!m) continue; if (strcmp(m->get_name(), _init_mod[a]) == 0) insert(a, *it); } } if (_init_floppy_basis_f8) { /* * floppy disk basis extension ROM is always in slot f8h! */ insert(60, _init_floppy_basis_f8); } if (_init_floppy_basis_fc) { /* * floppy disk basis ROM is always in slot fch! */ insert(61, _init_floppy_basis_fc); } if (_init_color_expansion) { /* * this is set if the emulator runs in KC 87 mode which means * the color expansion is always present * the KC 87 doesn't support the module slot notation like * the KC 85/2 class we just insert it at slot fch like * the floppy disk interface for KC 85/2 which is never available * in KC 87 mode. */ insert(61, _init_color_expansion); } } void ModuleList::insert(int slot, ModuleListEntry *entry) { ModuleInterface *m = NULL; /* * the module object is deleted in module->insert() * or module->remove()! */ if (entry != NULL) m = entry->get_mod(); if (m) { ModuleInterface *mod = m->clone(); if (!mod) return; if (mod->is_valid()) { module->insert(slot, mod); } else { const char *error_text = mod->get_error_text(); if (error_text != NULL) Error::instance()->info(error_text); m = NULL; delete mod; } } else { module->remove(slot); } ui->getModuleInterface()->insert(slot, m); ui->getModuleInterface()->activate(slot, 0); } ModuleListEntry * ModuleList::get_color_expansion() { return _color_expansion; } KCemu-0.5.1/src/kc/mod_ram8.cc0000644001050700006200000000355611345001576015421 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/kc.h" #include "kc/mod_ram8.h" ModuleRAM8::ModuleRAM8(ModuleRAM8 &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _group = NULL; _size = tmpl._size; _ram = new byte_t[_size]; _addr = tmpl._addr; if (_ram) { memset(_ram, 0, _size); set_valid(true); } _group = memory->register_memory(get_name(), _addr, _size, _ram, 0, 0); } ModuleRAM8::ModuleRAM8(const char *name, word_t addr, dword_t size) : ModuleInterface(name, 0, KC_MODULE_LC_80) { _size = size; _ram = new byte_t[_size]; _addr = addr; if (_ram) { _group = 0; memset(_ram, 0, _size); set_valid(true); } } ModuleRAM8::~ModuleRAM8(void) { if (_group) memory->unregister_memory(_group); delete[] _ram; } void ModuleRAM8::m_out(word_t addr, byte_t val) { } ModuleInterface * ModuleRAM8::clone(void) { return new ModuleRAM8(*this); } void ModuleRAM8::reset(bool power_on) { if (power_on) Memory::scratch_mem(_ram, _size); } KCemu-0.5.1/src/kc/mod_gdc.cc0000644001050700006200000000442311345001576015301 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/gdc.h" #include "kc/mod_gdc.h" #include "ui/ui.h" #include "ui/generic/ui_0.h" ModuleGDC::ModuleGDC(ModuleGDC &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _portg = NULL; _master = &tmpl; if (_master->get_count() == 0) { _master->set_count(1); gdc = new GDC(); // global in kc.cc _portg = ports->register_ports("GDC", 0x18, 2, gdc, 0); ui->set_mode(UI_0::UI_GENERIC_MODE_GDC); set_valid(true); } else { char buf[1024]; snprintf(buf, sizeof(buf), _("It's not possible to have more than one\n" "module of type %s!"), get_name()); set_error_text(buf); set_valid(false); } } ModuleGDC::ModuleGDC(const char *name) : ModuleInterface(name, 0, KC_MODULE_Z1013) { _portg = NULL; _count = 0; set_valid(true); } ModuleGDC::~ModuleGDC(void) { if (_portg) { _master->set_count(0); ports->unregister_ports(_portg); ui->set_mode(UI_0::UI_GENERIC_MODE_Z1013_32x32); } if (gdc) { delete gdc; gdc = NULL; } } void ModuleGDC::m_out(word_t addr, byte_t val) { } ModuleInterface * ModuleGDC::clone(void) { return new ModuleGDC(*this); } void ModuleGDC::reset(bool power_on) { } int ModuleGDC::get_count(void) { return _count; } void ModuleGDC::set_count(int count) { _count = count; } KCemu-0.5.1/src/kc/timer1.cc0000644001050700006200000000233211345001576015103 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/timer1.h" Timer1::Timer1(void) : Timer("Timer1") { _flash = 0; } Timer1::~Timer1(void) { } void Timer1::start(void) { z80->addCallback(0, this, 0); } void Timer1::callback(void * /* data */) { _flash = 1 - _flash; z80->addCallback(312500, this, 0); } byte_t Timer1::get_flash() { return _flash; } KCemu-0.5.1/src/kc/timer3.cc0000644001050700006200000000236111345001576015107 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/ctc.h" #include "kc/timer3.h" Timer3::Timer3(void) : Timer("Timer3") { } Timer3::~Timer3(void) { } void Timer3::start(void) { z80->addCallback(0, this, 0); } void Timer3::callback(void * /* data */) { ctc->trigger(3); ctc->trigger(2); z80->addCallback(35000, this, 0); /* 50 Hz */ } KCemu-0.5.1/src/kc/pio4.cc0000644001050700006200000001057611345001576014566 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/pio4.h" #include "kc/tape.h" #include "kc/memory4.h" #include "libdbg/dbg.h" #define memory ((Memory4 *)memory) PIO4::PIO4(void) { } PIO4::~PIO4(void) { } byte_t PIO4::in(word_t addr) { DBG(2, form("KCemu/PIO/4/in", "PIO4::in(): addr = %04x\n", addr)); switch (addr & 3) { case 0: return in_A_DATA(); case 1: return in_B_DATA(); case 2: return in_A_CTRL(); case 3: return in_B_CTRL(); } return 0; // shouldn't be reached } void PIO4::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/4/out", "PIO4::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } void PIO4::change_A(byte_t changed, byte_t val) { if (changed & 0x01) { DBG(2, form("KCemu/PIO/4/change/A", "PIO A: CAOS ROM E [%d]\n", (val & 1))); memory->enableCAOS_E(val & 0x01); } if (changed & 0x02) { DBG(2, form("KCemu/PIO/4/change/A", "PIO A: RAM 0 [%d]\n", ((val >> 1) & 1))); memory->enableRAM_0(val & 0x02); } if (changed & 0x04) { DBG(2, form("KCemu/PIO/4/change/A", "PIO A: IRM [%d]\n", ((val >> 2) & 1))); memory->enableIRM(val & 0x04); } if (changed & 0x08) { DBG(2, form("KCemu/PIO/4/change/A", "PIO A: write protect RAM 0 [%d]\n", ((val >> 3) & 1))); memory->protectRAM_0(val & 0x08); } if (changed & 0x10) { DBG(2, form("KCemu/PIO/4/change/A", "PIO A: K OUT (unused) [%d]\n", ((val >> 4) & 1))); } if (changed & 0x20) { DBG(2, form("KCemu/PIO/4/change/A", "PIO A: LED [%d]\n", ((val >> 5) & 1))); } if (changed & 0x40) { DBG(2, form("KCemu/PIO/4/change/A", "PIO A: TAPE Power [%d]\n", ((val >> 6) & 1))); tape->power((val >> 6) & 1); } if (changed & 0x80) { DBG(2, form("KCemu/PIO/4/change/A", "PIO A: ROM C (BASIC) [%d]\n", ((val >> 7) & 1))); memory->enableBASIC_C(val & 0x80); } } void PIO4::change_B(byte_t changed, byte_t val) { if (changed & 0x01) DBG(2, form("KCemu/PIO/4/change/B", "PIO B: flip-flop [%d]\n", (val & 1))); if (changed & 0x0e) DBG(2, form("KCemu/PIO/4/change/B", "PIO B: volume [%d]\n", ((val >> 1) & 7))); if (changed & 0x10) DBG(2, form("KCemu/PIO/4/change/B", "PIO B: unused 0x10 [%d]\n", ((val >> 4) & 1))); if (changed & 0x20) { DBG(2, form("KCemu/PIO/4/change/B", "PIO B: RAM 8 [%d]\n", ((val >> 5) & 1))); memory->enableRAM_8(val & 0x20); } if (changed & 0x40) { DBG(2, form("KCemu/PIO/4/change/B", "PIO B: RAM 8 write protect [%d]\n", ((val >> 6) & 1))); memory->protectRAM_8(val & 0x40); } if (changed & 0x80) DBG(2, form("KCemu/PIO/4/change/B", "PIO B: foreground blink [%d]\n", ((val >> 6) & 1))); } void PIO4::tape_callback(byte_t val) { strobe_A(); } KCemu-0.5.1/src/kc/mod_r64.cc0000644001050700006200000000777111345001576015170 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/z80.h" #include "kc/memory1.h" #include "kc/memory7.h" #include "kc/mod_r64.h" using namespace std; /* * 64k RAM module for use with the KC87-CP/M system (CPM-Z9) * * two pages of 16k at 0x4000, one page of 16k at 0x8000 and 0xc000 * */ ModuleRAM64::ModuleRAM64(ModuleRAM64 &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { int a; _ram[0] = new byte_t[0x4000]; _ram[1] = new byte_t[0x4000]; _ram[2] = new byte_t[0x4000]; _ram[3] = new byte_t[0x4000]; srand(time(NULL)); for (a = 0;a < 0x4000;a++) { //_ram[0][a] = (byte_t)(256.0 * rand() / (RAND_MAX + 1.0)); //_ram[1][a] = (byte_t)(256.0 * rand() / (RAND_MAX + 1.0)); //_ram[2][a] = (byte_t)(256.0 * rand() / (RAND_MAX + 1.0)); //_ram[3][a] = (byte_t)(256.0 * rand() / (RAND_MAX + 1.0)); _ram[0][a] = 0; _ram[1][a] = 0; _ram[2][a] = 0; _ram[3][a] = 0; } _group[0] = memory->register_memory(get_name(), 0x4000, 0x4000, _ram[0], 10, 0); _group[1] = memory->register_memory(get_name(), 0x4000, 0x4000, _ram[1], 20, 0); _group[2] = memory->register_memory(get_name(), 0x8000, 0x4000, _ram[2], 10, 0); _group[3] = memory->register_memory(get_name(), 0xc000, 0x4000, _ram[3], 10, 0); _portg = ports->register_ports(get_name(), 4, 4, this, 0); set_valid(true); } ModuleRAM64::ModuleRAM64(const char *name) : ModuleInterface(name, 0, KC_MODULE_KC_85_1) { _portg = NULL; _ram[0] = _ram[1] = _ram[2] = _ram[3] = NULL; _group[0] = _group[1] = _group[2] = _group[3] = NULL; set_valid(true); } ModuleRAM64::~ModuleRAM64(void) { if (_portg) ports->unregister_ports(_portg); if (_group[0]) memory->unregister_memory(_group[0]); if (_group[1]) memory->unregister_memory(_group[1]); if (_group[2]) memory->unregister_memory(_group[2]); if (_group[3]) memory->unregister_memory(_group[3]); delete[] _ram[0]; delete[] _ram[1]; delete[] _ram[2]; delete[] _ram[3]; } void ModuleRAM64::m_out(word_t addr, byte_t val) { } ModuleInterface * ModuleRAM64::clone(void) { return new ModuleRAM64(*this); } void ModuleRAM64::reset(bool power_on) { if (!power_on) return; Memory::scratch_mem(_ram[0], 0x4000); Memory::scratch_mem(_ram[1], 0x4000); Memory::scratch_mem(_ram[2], 0x4000); Memory::scratch_mem(_ram[3], 0x4000); } byte_t ModuleRAM64::in(word_t addr) { in_out(addr); return 0xff; } void ModuleRAM64::out(word_t addr, byte_t val) { in_out(addr); } void ModuleRAM64::in_out(word_t addr) { switch (addr & 7) { case 0x04: break; case 0x05: break; case 0x06: // RAM between c000h and e7ffh in write only mode (read from rom) case 0x07: // RAM between c000h and e7ffh in read/write mode (romdi active) /* * FIXME: make common base class for Memory1 and Memory7 */ switch (Preferences::instance()->get_kc_type()) { case KC_TYPE_85_1: // no romdi needed for kc85/1 //((Memory1 *)memory)->set_romdi(addr & 1); break; case KC_TYPE_87: ((Memory7 *)memory)->set_romdi(addr & 1); break; default: break; } break; } } KCemu-0.5.1/src/kc/keyb6.cc0000644001050700006200000000673211345001576014732 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/pio.h" #include "kc/keys.h" #include "kc/keyb6.h" #include "cmd/cmd.h" #include "libdbg/dbg.h" Keyboard6::Keyboard6(void) { init(); } Keyboard6::~Keyboard6(void) { } void Keyboard6::init(void) { _key = -1; } void Keyboard6::callback(void *data) { } int Keyboard6::decode_key(int keysym, bool press) { return keysym; } void Keyboard6::keyPressed(int keysym, int keycode) { _key = keysym; } void Keyboard6::keyReleased(int keysym, int keycode) { if (_key == KC_KEY_ESC) { CMD_EXEC("emu-reset"); } _key = -1; } void Keyboard6::replayString(const char *text) { } void Keyboard6::reset(bool power_on) { init(); } void Keyboard6::reti(void) { } int Keyboard6::callback_A_in(void) { return -1; } int Keyboard6::callback_B_in(void) { byte_t val = 0x00; switch (_key) { case 'g': case 'G': if (_line_val & 0x01) val = 0x10; break; case KC_KEY_ENTER: if (_line_val & 0x04) val = 0x10; break; case 'B': if (_line_val & 0x08) val = 0x10; break; case 'r': case 'R': if (_line_val & 0x10) val = 0x10; break; case 'F': if (_line_val & 0x20) val = 0x10; break; case 's': case 'S': if (_line_val & 0x40) val = 0x10; break; case 'm': case 'M': if (_line_val & 0x80) val = 0x10; break; case '0': if (_line_val & 0x01) val = 0x20; break; case '1': if (_line_val & 0x08) val = 0x20; break; case '2': if (_line_val & 0x02) val = 0x20; break; case '3': if (_line_val & 0x04) val = 0x20; break; case '4': if (_line_val & 0x01) val = 0x80; break; case '5': if (_line_val & 0x08) val = 0x80; break; case '6': if (_line_val & 0x02) val = 0x80; break; case '7': if (_line_val & 0x04) val = 0x80; break; case '8': if (_line_val & 0x10) val = 0x20; break; case '9': if (_line_val & 0x20) val = 0x20; break; case 'a': if (_line_val & 0x80) val = 0x20; break; case 'b': if (_line_val & 0x40) val = 0x20; break; case 'c': if (_line_val & 0x10) val = 0x80; break; case 'd': if (_line_val & 0x20) val = 0x80; break; case 'e': if (_line_val & 0x80) val = 0x80; break; case 'f': if (_line_val & 0x40) val = 0x80; break; } pio->set_B_EXT(0xb0, val); // K1 = 0x10, K2 = 0x20, K3 = 0x80 ! return -1; } void Keyboard6::set_line(byte_t val) { _line_val = val; } KCemu-0.5.1/src/kc/mod_1m.cc0000644001050700006200000000250711345001576015062 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/mod_1m.h" Module1M::Module1M(Module1M &tmpl) : ModuleSegmentedMemory(tmpl) { } Module1M::Module1M(const char *name, byte_t id) : ModuleSegmentedMemory(name, id, 64, 0x4000) { } Module1M::~Module1M(void) { } int Module1M::get_segment_index(word_t addr, byte_t val) { return (val >> 2) & 0x3f; } word_t Module1M::get_base_address(word_t addr, byte_t val) { return 0x8000; } ModuleInterface * Module1M::clone(void) { return new Module1M(*this); } KCemu-0.5.1/src/kc/ctc.cc0000644001050700006200000002467111345001576014465 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "ui/ui.h" #include "kc/ctc.h" #include "kc/tape.h" #include "libdbg/dbg.h" using namespace std; CTC::CTC(const char *name) : InterfaceCircuit(name), Callback(name) { _irq_valid[0] = 0; _irq_valid[1] = 1; _irq_valid[2] = 2; _irq_valid[3] = 3; _cb_list[0] = NULL; _cb_list[1] = NULL; _cb_list[2] = NULL; _cb_list[3] = NULL; reset(true); } CTC::~CTC(void) { } void CTC::reti(void) { int a, b; b = 0; for (a = 0;a < 4;a++) { if (_irq_active[a]) { b++; _irq_active[a] = 0; } } if (b > 1) DBG(2, form("KCemu/CTC/reti", "CTC::reti(): more than one irq active!!!")); if (b == 0) return; DBG(2, form("KCemu/CTC/reti", "CTC::reti(): active: %d %d %d %d - pending: %d %d %d %d\n", _irq_active[0], _irq_active[1], _irq_active[2], _irq_active[3], _irq_pending[0], _irq_pending[1], _irq_pending[2], _irq_pending[3])); for (a = 0;a < 4;a++) { if (_irq_pending[a]) { DBG(2, form("KCemu/CTC/reti", "CTC::reti(): trigger_irq(): channel = %d\n", a)); try_trigger_irq(a); break; } } } void CTC::irqreq(void) { } word_t CTC::irqack(void) { return IRQ_NOT_ACK; } void CTC::reset(bool power_on) { int a; _irq_vector = 0; for (a = 0;a < 4;a++) { _control[a] = 0x23; _value[a] = 0; _restart[a] = 0; _timer_value[a] = 0; _irq_active[a] = 0; _irq_pending[a] = 0; _irq_valid[a] += 4; } } void CTC::trigger(byte_t channel) { byte_t c = channel & 3; if ((_control[c] & MODE) != MODE_COUNTER) return; _value[c]--; if (_value[c] > 0) return; _value[c] = _timer_value[c]; try_trigger_irq(c); } void CTC::handle_counter_mode(int channel) { long cv; switch (channel) { case 0: cv = counter_value_0(); break; case 1: cv = counter_value_1(); break; case 2: cv = counter_value_2(); break; case 3: cv = counter_value_3(); break; } if (cv == 0) return; cv *= _timer_value[channel]; // mapping from 0 to 256 is done in c_out() run_cb_tc(channel, _timer_value[channel]); _irq_valid[channel] += 4; add_callback(cv, this, (void *)((long)_irq_valid[channel])); } void CTC::try_trigger_irq(int channel) { if ((_control[channel] & IRQ) == IRQ_DISABLED) { _irq_pending[channel] = 0; return; } _irq_pending[channel] = 1; trigger_irq(channel); } void CTC::callback(void *data) { bool cont; long val = (long)data; byte_t c = val & 3; if (_irq_valid[c] != val) return; DBG(2, form("KCemu/CTC/reti", "CTC::callback(): active: %d %d %d %d - pending: %d %d %d %d\n", _irq_active[0], _irq_active[1], _irq_active[2], _irq_active[3], _irq_pending[0], _irq_pending[1], _irq_pending[2], _irq_pending[3])); switch (c) { case 0: DBG(2, form("KCemu/CTC/irq/0", "CTC::callback() : irq channel 0\n")); cont = irq_0(); break; case 1: DBG(2, form("KCemu/CTC/irq/1", "CTC::callback() : irq channel 1\n")); cont = irq_1(); break; case 2: DBG(2, form("KCemu/CTC/irq/2", "CTC::callback() : irq channel 2\n")); cont = irq_2(); break; case 3: DBG(2, form("KCemu/CTC/irq/3", "CTC::callback() : irq channel 3\n")); cont = irq_3(); break; } /* * COUNTER mode (clock source comes from the CLK pin) */ if ((_control[c] & MODE) == MODE_COUNTER) { handle_counter_mode(c); return; } if ((_control[c] & IRQ) == IRQ_ENABLED) { DBG(2, form("KCemu/CTC/callback", "CTC::callback(): trigger_irq(): _irq_pending = %d\n", _irq_pending[c])); try_trigger_irq(c); } add_callback(_timer_value[c], this, (void *)((long)val)); } byte_t CTC::c_in(byte_t c) { word_t val; unsigned long long diff = 0; if (_timer_value[c] == 0) { return 0; } if ((_control[c] & MODE) == MODE_COUNTER) { diff = 0; } else { if ((_control[c] & RESET) == RESET_ACTIVE) { diff = 0; } else { diff = get_counter() - _counter[c]; } } if ((_control[c] & PRESCALER) == PRESCALER_16) { diff /= 16; val = ((_value[c] / 16) - diff) & 0xff; } else { diff /= 256; val = ((_value[c] / 256) - diff) & 0xff; } _counter[c] = get_counter(); return val; } void CTC::c_out(byte_t channel, byte_t val) { if ((_control[channel] & CONSTANT) == CONSTANT_LOAD) { _control[channel] &= ~(CONSTANT | RESET); run_cb_start(channel); if ((_control[channel] & MODE) == MODE_TIMER) { if ((_control[channel] & PRESCALER) == PRESCALER_16) { _timer_value[channel] = val << 4; /* div 16 */ if (_timer_value[channel] == 0) _timer_value[channel] = 4096; } else { _timer_value[channel] = val << 8; /* div 256 */ /* * well, this should be 65536 but this would need a dword * for _timer_value */ if (_timer_value[channel] == 0) _timer_value[channel] = 65535; } } else { /* * COUNTER MODE has no prescaler */ _timer_value[channel] = val; } _counter[channel] = get_counter(); _value[channel] = _timer_value[channel]; run_cb_tc(channel, _timer_value[channel]); if ((_control[channel] & MODE) == MODE_COUNTER) { handle_counter_mode(channel); return; } _irq_valid[channel] += 4; /* * Added a fixed offset for callback timing added for the poly880 * emulation. Without offset the CTC caused NMI is triggered * one opcode too early. * * FIXME: check timing */ add_callback(_timer_value[channel] + 4, this, (void *)((long)_irq_valid[channel])); return; } if ((val & CONTROL) == CONTROL_VECTOR) { if (channel != 0) return; _irq_vector = val & ~ 7; return; } if ((val & RESET) == RESET_ACTIVE) { _value[channel] = _timer_value[channel]; _irq_valid[channel] += 4; if ((_control[channel] & RESET) != RESET_ACTIVE) run_cb_stop(channel); } _control[channel] = val; } void CTC::register_callback(int channel, CTCCallbackInterface *cbi) { int c = channel & 3; if (_cb_list[c] == NULL) { _cb_list[c] = new cb_list_t(); } _cb_list[c]->push_back(cbi); } void CTC::run_cb_start(int channel) { if (_cb_list[channel] == NULL) return; for (iterator it = _cb_list[channel]->begin();it != _cb_list[channel]->end();it++) (*it)->ctc_callback_start(channel); } void CTC::run_cb_stop(int channel) { if (_cb_list[channel] == NULL) return; for (iterator it = _cb_list[channel]->begin();it != _cb_list[channel]->end();it++) (*it)->ctc_callback_stop(channel); } void CTC::run_cb_tc(int channel, long tc) { if (_cb_list[channel] == NULL) return; for (iterator it = _cb_list[channel]->begin();it != _cb_list[channel]->end();it++) (*it)->ctc_callback_TC(channel, tc); } void CTC::info(void) { cout << " CTC:" << endl; cout << " ---- channel 0 channel 1 " << "channel 2 channel 3" << endl; cout << "\tirq vector: " << hex << setfill('0') << setw(2) << (int)(_irq_vector) << "h " << hex << setfill('0') << setw(2) << (int)(_irq_vector | 0x02) << "h " << hex << setfill('0') << setw(2) << (int)(_irq_vector | 0x04) << "h " << hex << setfill('0') << setw(2) << (int)(_irq_vector | 0x06) << "h" << endl; cout << "\tirq enabled: " << ((_control[0] & IRQ)?"yes":"no ") << " " << ((_control[1] & IRQ)?"yes":"no ") << " " << ((_control[2] & IRQ)?"yes":"no ") << " " << ((_control[3] & IRQ)?"yes":"no ") << endl; cout << "\tcounter mode: " << ((_control[0] & MODE)?"counter":"timer ") << " " << ((_control[1] & MODE)?"counter":"timer ") << " " << ((_control[2] & MODE)?"counter":"timer ") << " " << ((_control[3] & MODE)?"counter":"timer") << endl; cout << "\tclock divider: " << ((_control[0] & PRESCALER)?"256":"16 ") << " " << ((_control[1] & PRESCALER)?"256":"16 ") << " " << ((_control[2] & PRESCALER)?"256":"16 ") << " " << ((_control[3] & PRESCALER)?"256":"16 ") << endl; cout << "\twait for tv: " << ((_control[0] & CONSTANT)?"yes":"no ") << " " << ((_control[1] & CONSTANT)?"yes":"no ") << " " << ((_control[2] & CONSTANT)?"yes":"no ") << " " << ((_control[3] & CONSTANT)?"yes":"no ") << endl; cout << "\treset: " << ((_control[0] & RESET)?"yes":"no ") << " " << ((_control[1] & RESET)?"yes":"no ") << " " << ((_control[2] & RESET)?"yes":"no ") << " " << ((_control[3] & RESET)?"yes":"no ") << endl; cout << "\ttimer value: " << hex << setfill('0') << setw(2) << (int)_timer_value[0] << "h " << hex << setfill('0') << setw(2) << (int)_timer_value[1] << "h " << hex << setfill('0') << setw(2) << (int)_timer_value[2] << "h " << hex << setfill('0') << setw(2) << (int)_timer_value[3] << "h" << endl; cout << "\tvalue: " << hex << setfill('0') << setw(2) << (int)_value[0] << "h " << hex << setfill('0') << setw(2) << (int)_value[1] << "h " << hex << setfill('0') << setw(2) << (int)_value[2] << "h " << hex << setfill('0') << setw(2) << (int)_value[3] << "h" << endl << endl; } KCemu-0.5.1/src/kc/vcs80/0000755001050700006200000000000011412404773014337 5ustar glaubitzfbedvKCemu-0.5.1/src/kc/vcs80/memory.cc0000644001050700006200000000450011345001576016154 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/types.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/vcs80/memory.h" using namespace std; MemoryVCS80::MemoryVCS80(void) : Memory() { load_rom(SystemROM::ROM_KEY_SYSTEM, &_rom); memory_group_t mem[] = { { &_m_scr, "-", 0x0000, 0x10000, 0, 256, 0, 1, -1 }, { &_m_rom, "Monitor", 0x0000, 0x0400, &_rom[0], 1, 1, 1, -1 }, { &_m_ram, "RAM", 0x0400, 0x0400, &_ram[0], 1, 0, 1, -1 }, { 0, }, }; init_memory_groups(mem); reset(true); z80->register_ic(this); } MemoryVCS80::~MemoryVCS80(void) { z80->unregister_ic(this); delete _m_scr; delete _m_rom; delete _m_ram; } byte_t MemoryVCS80::memRead8(word_t addr) { return _memrptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK]; } void MemoryVCS80::memWrite8(word_t addr, byte_t val) { _memwptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK] = val; } byte_t * MemoryVCS80::get_irm(void) { return 0; } byte_t * MemoryVCS80::get_char_rom(void) { return 0; } void MemoryVCS80::reset(bool power_on) { if (!power_on) return; scratch_mem(&_ram[0], 0x0400); } void MemoryVCS80::dumpCore(void) { ofstream os; os.open("core.z80"); cerr << "Memory: dumping core..." << endl; if (!os) { cerr << "Memory: can't write 'core.z80'" << endl; return; } for (int a = 0;a < 0x10000;a++) os.put(memRead8(a)); os.close(); cerr << "Memory: done." << endl; } KCemu-0.5.1/src/kc/vcs80/pio.cc0000644001050700006200000000400611345001576015434 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/vcs80/pio.h" #include "libdbg/dbg.h" PIOVCS80::PIOVCS80(void) { } PIOVCS80::~PIOVCS80(void) { } byte_t PIOVCS80::in(word_t addr) { byte_t val = 0xff; switch (addr & 3) { case 0: val = in_B_CTRL(); break; case 1: val = in_A_CTRL(); break; case 2: set_B_EXT(0x80, (~(addr & 1)) << 7); val = in_B_DATA(); break; case 3: val = in_A_DATA(); break; } DBG(2, form("KCemu/PIO/vcs80/in", "PIOVCS80::in(): addr = %04x, val = %02x\n", addr, val)); return val; } void PIOVCS80::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/vcs80/out", "PIOVCS80::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_B_CTRL(val); break; case 1: out_A_CTRL(val); break; case 2: out_B_DATA(val); break; case 3: out_A_DATA(val); break; } } void PIOVCS80::change_A(byte_t changed, byte_t val) { } void PIOVCS80::change_B(byte_t changed, byte_t val) { } KCemu-0.5.1/src/kc/vcs80/Makefile.am0000644001050700006200000000026410550707020016366 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in noinst_LIBRARIES = libvcs80.a INCLUDES = -I../../../include libvcs80_a_SOURCES = \ pio.cc \ memory.cc \ keyboard.cc KCemu-0.5.1/src/kc/vcs80/keyboard.cc0000644001050700006200000000475311345001576016456 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/z80.h" #include "kc/keys.h" #include "kc/vcs80/keydef.h" #include "kc/vcs80/keyboard.h" #include "cmd/cmd.h" #include "libdbg/dbg.h" KeyboardVCS80::KeyboardVCS80(void) { init(); z80->register_ic(this); } KeyboardVCS80::~KeyboardVCS80(void) { z80->unregister_ic(this); } void KeyboardVCS80::init(void) { _key = 0; } int KeyboardVCS80::decode_key(int keysym, bool press) { return __keys[keysym]; } void KeyboardVCS80::keyPressed(int keysym, int keycode) { if (_key != 0) return; _key = decode_key(keysym, true); DBG(2, form("KCemu/keyboard/vcs80/key_press", "##### Keyboard: keyPressed [%03x/%02x] {%02x}\n", keysym, keycode, _key)); } void KeyboardVCS80::keyReleased(int keysym, int keycode) { DBG(2, form("KCemu/keyboard/vcs80/key_released", "##### Keyboard: keyReleased [%03x/%02x] {%02x}\n", keysym, keycode, _key)); _key = 0; if (keysym == 0x1b) CMD_EXEC("emu-reset"); } void KeyboardVCS80::replayString(const char *text) { } void KeyboardVCS80::callback(void *data) { } void KeyboardVCS80::reset(bool power_on) { init(); } void KeyboardVCS80::reti(void) { } int KeyboardVCS80::callback_A_in(void) { static bool recursion = false; // HACK to prevent recursive callback :-( if (recursion) return -1; if (_key == 0) return -1; recursion = true; int row = pio->in_A_DATA() & 7; recursion = false; if (row == (_key & 7)) pio->set_A_EXT(0x70, ~(_key & 0x70)); else pio->set_A_EXT(0x70, 0x70); return -1; } int KeyboardVCS80::callback_B_in(void) { return -1; } KCemu-0.5.1/src/kc/vcs80/Makefile.in0000644001050700006200000004075511412404773016417 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/kc/vcs80 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libvcs80_a_AR = $(AR) $(ARFLAGS) libvcs80_a_LIBADD = am_libvcs80_a_OBJECTS = pio.$(OBJEXT) memory.$(OBJEXT) \ keyboard.$(OBJEXT) libvcs80_a_OBJECTS = $(am_libvcs80_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(libvcs80_a_SOURCES) DIST_SOURCES = $(libvcs80_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libvcs80.a INCLUDES = -I../../../include libvcs80_a_SOURCES = \ pio.cc \ memory.cc \ keyboard.cc all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/kc/vcs80/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/kc/vcs80/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libvcs80.a: $(libvcs80_a_OBJECTS) $(libvcs80_a_DEPENDENCIES) -rm -f libvcs80.a $(libvcs80_a_AR) libvcs80.a $(libvcs80_a_OBJECTS) $(libvcs80_a_LIBADD) $(RANLIB) libvcs80.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyboard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/kc/mod_vdip.cc0000644001050700006200000000364211345001576015510 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/vdip.h" #include "kc/daisy.h" #include "kc/pio_vdip.h" #include "kc/mod_vdip.h" ModuleVDIP::ModuleVDIP(ModuleVDIP &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _pio = new PIO_VDIP; _portg_pio = NULL; set_valid(true); } ModuleVDIP::ModuleVDIP(const char *name, byte_t id) : ModuleInterface(name, id, KC_MODULE_KC_85_3) { _pio = NULL; _portg_pio = NULL; set_valid(true); } ModuleVDIP::~ModuleVDIP(void) { if (_pio != NULL) delete _pio; } void ModuleVDIP::m_out(word_t addr, byte_t val) { if (val & 1) { if (_portg_pio == NULL) { _portg_pio = ports->register_ports("PIO VDIP", 0x04, 4, _pio, 0); daisy->add_last(_pio); vdip->register_pio(_pio); } } else { if (_portg_pio != NULL) { vdip->register_pio(NULL); ports->unregister_ports(_portg_pio); daisy->remove(_pio); } _portg_pio = NULL; } } ModuleInterface * ModuleVDIP::clone(void) { return new ModuleVDIP(*this); } void ModuleVDIP::reset(bool power_on) { } KCemu-0.5.1/src/kc/disk.cc0000644001050700006200000001520011345001576014632 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/kc.h" #include "kc/fdc.h" #include "kc/disk.h" #include "kc/floppy.h" #include "cmd/cmd.h" #include "sys/sysdep.h" #include "ui/status.h" #include "libdbg/dbg.h" class CMD_disk_attach : public CMD { private: Disk *_d; static const char * _path; protected: int get_disk_no(CMD_Args *args) { int n = 0; if (args && args->has_arg("disk")) n = args->get_long_arg("disk"); return n; } public: CMD_disk_attach(Disk *d) : CMD("disk-attach") { _d = d; register_cmd("disk-attach", 0); register_cmd("disk-detach", 3); } void execute(CMD_Args *args, CMD_Context context) { bool create; char buf[1000]; disk_error_t err; char *shortname; const char *filename; create = false; filename = NULL; switch (context) { /* * disk-attach */ case 0: if (!args) args = new CMD_Args(); filename = args->get_string_arg("filename"); if (!filename) { args->set_string_arg("ui-file-select-title", _("Select disk...")); if (_path) args->set_string_arg("ui-file-select-path", _path); args->add_callback("ui-file-select-CB-ok", this, 1); CMD_EXEC_ARGS("ui-file-select", args); return; } break; /* * ui-file-select-CB-ok */ case 1: if (args) filename = args->get_string_arg("filename"); break; /* * ui-dialog-yes-no-CB-yes */ case 2: if (args) filename = args->get_string_arg("filename"); create = true; break; /* * disk-detach */ case 3: _d->detach(get_disk_no(args)); return; } if (filename) { _path = filename; err = _d->attach(get_disk_no(args), filename, create); switch (err) { case DISK_NOENT: if (!create) { args->set_string_arg("ui-dialog-title", _("create file?")); args->set_string_arg("ui-dialog-text", _("The file '%s' doesn't exist.\n" "Do you want to create it?")); args->set_string_arg("ui-dialog-text-arg", "filename"); args->add_callback("ui-dialog-yes-no-CB-yes", this, 2); CMD_EXEC_ARGS("ui-dialog-yes-no", args); } break; case DISK_OK: shortname = sys_basename(filename); snprintf(buf, sizeof(buf), _("disk-file `%s' attached."), shortname); free(shortname); Status::instance()->setMessage(buf); break; default: Status::instance()->setMessage(_("Can't attach disk-file.")); break; } } } }; const char * CMD_disk_attach::_path = NULL; Disk::Disk() { _cmd = new CMD_disk_attach(this); } Disk::~Disk() { delete _cmd; } bool Disk::create_disk_file(FILE *f) { for (int c = 0;c < 80;c++) for (int h = 0;h < 2;h++) for (int s = 1;s < 6;s++) if (!write_sector(f, c, h, s)) return false; return true; } bool Disk::write_sector(FILE *f, int c, int h, int s) { if (fputc(c, f) == EOF) // acyl return false; if (fputc(h, f) == EOF) // asid return false; if (fputc(c, f) == EOF) // lcyl return false; if (fputc(h, f) == EOF) // lsid return false; if (fputc(s, f) == EOF) // lsec return false; if (fputc(3, f) == EOF) // llen return false; if (fputc(0, f) == EOF) // count low return false; if (fputc(4, f) == EOF) // count high return false; for (int a = 0;a < 1024;a++) if (fputc(0xe5, f) == EOF) return false; return true; } disk_error_t Disk::attach(int disk_no, const char *filename, bool create) { char *ptr; disk_error_t ret; if (fdc_fdc == NULL) return DISK_ERROR; if (filename == NULL) return DISK_ERROR; ret = DISK_OK; if (create) { DBG(1, form("KCemu/Disk/attach", "Disk::attach(): [disk %d] create (%s)\n", disk_no, filename)); FILE *f = fopen(filename, "wb"); if (f == NULL) return DISK_ERROR; bool create_ok = create_disk_file(f); fclose(f); if (!create_ok) return DISK_ERROR; } DBG(1, form("KCemu/Disk/attach", "Disk::attach(): [disk %d] open (%s)\n", disk_no, filename)); Floppy *floppy = fdc_fdc->get_floppy(disk_no); if (floppy != NULL) { if (access(filename, R_OK) == 0) { ptr = strdup(filename); } else { ptr = (char *)malloc(strlen(kcemu_datadir) + strlen(filename) + 11); strcpy(ptr, kcemu_datadir); strcat(ptr, "/disks/"); strcat(ptr, filename); if (access(ptr, R_OK) != 0) strcat(ptr, ".gz"); } if (access(ptr, R_OK) == 0) { if (!floppy->attach(ptr)) ret = DISK_ERROR; } else { ret = DISK_NOENT; } free(ptr); } CMD_Args *args = new CMD_Args(); args->set_long_arg("disk", disk_no); args->set_string_arg("filename", filename); CMD_EXEC_ARGS("ui-disk-update-MSG", args); delete args; return ret; } disk_error_t Disk::detach(int disk_no) { if (fdc_fdc == NULL) return DISK_ERROR; DBG(1, form("KCemu/Disk/detach", "Disk::detach(): [disk %d] close\n", disk_no)); Floppy *floppy = fdc_fdc->get_floppy(disk_no); if (floppy != NULL) floppy->attach(NULL); CMD_Args *args = new CMD_Args(); args->set_long_arg("disk", disk_no); args->set_string_arg("filename", ""); CMD_EXEC_ARGS("ui-disk-update-MSG", args); delete args; return DISK_OK; } KCemu-0.5.1/src/kc/kcemu-send.c0000644001050700006200000000326311345001576015576 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include int main(void) { int s, ret; char buf[1024]; int len; struct sockaddr_un unix_addr; s = socket(AF_UNIX, SOCK_STREAM, 0); perror("socket: "); printf("socket returned %d\n", s); bzero((char *)&unix_addr, sizeof(unix_addr)); unix_addr.sun_family = AF_UNIX; strcpy(unix_addr.sun_path, "/tmp/KCemu-in"); len = strlen(unix_addr.sun_path) + sizeof(unix_addr.sun_family); ret = connect(s, (struct sockaddr *)&unix_addr, len); perror("connect: "); printf("connect returned %d\n", ret); initscr(); cbreak(); /* noecho(); */ nonl(); keypad(stdscr, TRUE); while (242) { buf[0] = getch(); buf[1] = '\0'; ret = send(s, buf, strlen(buf), 0); } return 0; } KCemu-0.5.1/src/kc/sh_mem.cc0000644001050700006200000000565311345001576015163 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" //DEBUG #include "kc/sh_mem.h" #include "libdbg/dbg.h" #ifdef ENABLE_COREDUMP static byte_t *__ptr = 0; static void dump_core(void) { int ok; FILE *f; if (__ptr == 0) { printf("can't dump shared memory!\n"); return; } printf("dumping shared memory... "); ok = 0; f = fopen("core-shmem.z80", "wb"); if (f) { if (fwrite(__ptr, 0x0400, 1, f) == 1) ok = 1; } if (ok) printf("done.\n"); else printf("failed!\n"); } #endif /* ENABLE_COREDUMP */ FloppySharedMem::FloppySharedMem(void) { #ifdef ENABLE_COREDUMP atexit(dump_core); #endif /* ENABLE_COREDUMP */ } FloppySharedMem::~FloppySharedMem(void) { } byte_t FloppySharedMem::in(word_t addr) { byte_t val; val = 0xff; switch (addr & 0xff) { case 0xf0: val = _mem[((addr >> 8) & 0xff)]; break; case 0xf1: val = _mem[((addr >> 8) & 0xff) + 0x0100]; break; case 0xf2: val = _mem[((addr >> 8) & 0xff) + 0x0200]; break; case 0xf3: val = _mem[((addr >> 8) & 0xff) + 0x0300]; break; case 0xf4: break; default: break; } DBG(2, form("KCemu/FloppySharedMem/in", "FloppySharedMem::in(): addr = %04x, val = %02x\n", addr, val)); return val; } void FloppySharedMem::out(word_t addr, byte_t val) { int idx; switch (addr & 0xff) { case 0xf0: idx = ((addr >> 8) & 0xff); break; case 0xf1: idx = ((addr >> 8) & 0xff) | 0x0100; break; case 0xf2: idx = ((addr >> 8) & 0xff) | 0x0200; break; case 0xf3: idx = ((addr >> 8) & 0xff) | 0x0300; break; default: return; } DBG(2, form("KCemu/FloppySharedMem/out", "FloppySharedMem::out(): %04xh: addr = %04x [=%04x], val = %02x\n", z80->getPC(), addr, idx + 0xfc00, val)); _mem[idx] = val; } void FloppySharedMem::set_memory(byte_t *mem) { _mem = mem; #ifdef ENABLE_COREDUMP __ptr = mem; #endif /* ENABLE_COREDUMP */ } KCemu-0.5.1/src/kc/ctc3.cc0000644001050700006200000000427411345001576014545 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/tape.h" #include "kc/ctc3.h" #include "ui/ui.h" #include "libdbg/dbg.h" CTC3::CTC3(void) { } CTC3::~CTC3(void) { } byte_t CTC3::in(word_t addr) { DBG(2, form("KCemu/CTC/3/in", "CTC3::in(): addr = %04x\n", addr)); switch (addr & 3) { case 0: return c_in(0); case 1: return c_in(1); case 2: return c_in(2); case 3: return c_in(3); } return 0; // shouldn't be reached } void CTC3::out(word_t addr, byte_t val) { DBG(2, form("KCemu/CTC/3/out", "CTC3::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: c_out(0, val); break; case 1: c_out(1, val); break; case 2: c_out(2, val); break; case 3: c_out(3, val); break; } } bool CTC3::irq_0(void) { return false; } bool CTC3::irq_1(void) { tape->tape_signal(); return true; } bool CTC3::irq_2(void) { ui->flash(true); return true; } bool CTC3::irq_3(void) { return false; } long CTC3::counter_value_0(void) { return 0; } long CTC3::counter_value_1(void) { return 0; } long CTC3::counter_value_2(void) { /* * CLK for channel 2 is 50 Hz */ return CHANNEL_2_CLK; } long CTC3::counter_value_3(void) { return 0; } KCemu-0.5.1/src/kc/fdc7.cc0000644001050700006200000000712711345001576014534 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/fdc7.h" #include "libdbg/dbg.h" FDC7::FDC7(void) { } FDC7::~FDC7(void) { } long long FDC7::get_counter() { return z80->getCounter(); } void FDC7::add_callback(unsigned long long offset, Callback *cb, void *data) { z80->addCallback(offset, cb, data); } /* * Documentation from Volker... * * ; FDC-Ports: * ; ---------- * * 'ROBOTRON' * * FDCD equ 98h ; FDC Datenregister * FDCC equ 99h ; FDC Steueregister * FDCZ equ 0A0h ; FDC Zusatzregister * ; 5 4 3 2 1 0 * ; x x 0 0 x x * ; | | | | * ; | | | Motor Laufwerk 0 ein/aus * ; | | Motor Laufwerk 1 ein/aus * ; | Terminal Count aktivieren/deakt. * ; FDC Reset * * ELSE Rossendorf * * FDCD equ 10h ; FDC Datenregister * FDCC equ 11h ; FDC Steueregister * FDCZ equ 12h ; FDC Zusatzregister * ; 5 4 3 2 1 0 * ; x x 0 0 x x * ; | | | | * ; | | | Motor Laufwerk 0 ein/aus * ; | | Motor Laufwerk 1 ein/aus * ; | Terminal Count aktivieren/deakt. * ; FDC Reset * */ byte_t FDC7::in(word_t addr) { byte_t val = 0; switch (addr & 0xff) { case 0x98: // CPM-Z9 module (Data Register, ROBOTRON module) case 0x10: // CPM-Z9 module (Data Register, Rossendorf module) val = get_msr(); break; case 0x99: // CPM-Z9 module (Status Register, ROBOTRON module) case 0x11: // CPM-Z9 module (Status Register, Rossendorf module) val = in_data(addr); break; case 0xa0: // CPM-Z9 module (Extra Register, ROBOTRON module) case 0x12: // CPM-Z9 module (Extra Register, Rossendorf module) break; default: DBG(2, form("KCemu/FDC/in_unhandled", "FDC::in(): addr = %04x\n", addr)); break; } return val; } void FDC7::out(word_t addr, byte_t val) { switch (addr & 0xff) { case 0x98: // CPM-Z9 module (Data Register, ROBOTRON module) case 0x10: // CPM-Z9 module (Data Register, Rossendorf module) write_byte(val); break; case 0x99: // CPM-Z9 module (Status Register, ROBOTRON module) case 0x11: // CPM-Z9 module (Status Register, Rossendorf module) out_data(addr, val); break; case 0xa0: // CPM-Z9 module (Extra Register, ROBOTRON module) case 0x12: // CPM-Z9 module (Extra Register, Rossendorf module) set_terminal_count((val & 0x10) == 0x10); if ((val & 0x20) == 0x20) ; // RESET break; default: DBG(2, form("KCemu/FDC/out_unhandled", "FDC::out(): addr = %04x, val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); break; } } KCemu-0.5.1/src/kc/fdc9.cc0000644001050700006200000000734611345001576014541 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/z80.h" #include "kc/fdc9.h" #include "libdbg/dbg.h" FDC9::FDC9(void) { } FDC9::~FDC9(void) { } long long FDC9::get_counter() { return z80->getCounter(); } void FDC9::add_callback(unsigned long long offset, Callback *cb, void *data) { z80->addCallback(offset, cb, data); } byte_t FDC9::in(word_t addr) { byte_t val = 0; switch (addr & 0xff) { case 0x40: val = get_msr(); DBG(2, form("KCemu/FDC/in_F0", "FDC::in(): addr = %04x, val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); break; case 0x41: val = in_data(addr); DBG(2, form("KCemu/FDC/in_F1", "FDC::in(): addr = %04x, val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); break; case 0x42: val = read_byte(); DBG(2, form("KCemu/FDC/in_F2", "FDC::in(): addr = %04x, val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); break; case 0x44: val = get_input_gate(); DBG(2, form("KCemu/FDC/in_F4", "FDC::in(): addr = %04x, val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); break; case 0x46: val = 0x00; DBG(2, form("KCemu/FDC/in_F6", "FDC::in(): addr = %04x, val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); break; case 0x48: val = 0x00; DBG(2, form("KCemu/FDC/in_F8", "FDC::in(): addr = %04x, val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); break; } DBG(2, form("KCemu/FDC/in", "FDC::in(): addr = %04x, val = %02x\n", addr, val)); return val; } void FDC9::out(word_t addr, byte_t val) { switch (addr & 0xff) { case 0x41: DBG(2, form("KCemu/FDC/out_F1", "FDC::out(): addr = %04x, val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); out_data(addr, val); break; case 0x42: DBG(2, form("KCemu/FDC/out_F2", "FDC::out(): addr = %04x, val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); write_byte(val); break; case 0x46: DBG(2, form("KCemu/FDC/out_F6", "FDC::out(): addr = %04x, val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); break; case 0x48: DBG(2, form("KCemu/FDC/out_F8", "FDC::out(): TC %02x\n", val)); if (val == 0x00) set_state(FDC_STATE_IDLE); if (val == 0x11) set_state(FDC_STATE_RESULT); set_input_gate(0x40, 0x00); break; default: DBG(2, form("KCemu/FDC/out_unhandled", "FDC::out(): addr = %04x, val = %02x [%c]\n", addr, val, isprint(val) ? val : '.')); break; } } KCemu-0.5.1/src/kc/memory3.cc0000644001050700006200000000767411345001576015313 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/types.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/memory3.h" #include "ui/ui.h" #include "libdbg/dbg.h" using namespace std; Memory3::Memory3(void) : Memory() { _access_color = false; load_rom(SystemROM::ROM_KEY_CAOSE, &_rom_caos); load_rom(SystemROM::ROM_KEY_BASIC, &_rom_basic); memory_group_t mem[] = { { &_m_scr, "-", 0x0000, 0x10000, 0, 256, 0, 1, -1 }, { &_m_ram, "RAM 0", 0x0000, 0x4000, &_ram[0], 0, 0, 1, -1 }, { &_m_irm, "IRM", 0x8000, 0x4000, &_irm[0], 1, 0, 1, -1 }, { &_m_caos, "CAOS", 0xe000, 0x2000, &_rom_caos[0], 2, 1, 1, -1 }, { &_m_basic, "BASIC", 0xc000, 0x2000, &_rom_basic[0], 2, 1, 1, -1 }, { 0, }, }; init_memory_groups(mem); reset(true); z80->register_ic(this); } Memory3::~Memory3(void) { z80->unregister_ic(this); } byte_t Memory3::memRead8(word_t addr) { if (_m_irm->is_active() && (addr >= 0x8000) && (addr <= 0xc000)) ui->memory_read(addr); return _memrptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK]; } void Memory3::memWrite8(word_t addr, byte_t val) { if (_m_irm->is_active() && (addr >= 0x8000) && (addr <= 0xc000)) ui->memory_write(addr); _memwptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK] = val; } byte_t * Memory3::get_irm(void) { return (byte_t *)_irm; } byte_t * Memory3::get_char_rom(void) { return (byte_t *)0; } void Memory3::dumpCore(void) { ofstream os; os.open("core.z80"); DBG(0, form("KCemu/Memory/3/core", "Memory: dumping core...\n")); if (!os) { cerr << "can't write 'core.z80'\n"; return; } os.write((char *)_ram, 0x4000); os.write((char *)_irm, 0x4000); os.write((char *)_rom_caos, 0x2000); os.write((char *)_rom_basic, 0x2000); os.close(); } void Memory3::enableCAOS_E(int v) { DBG(1, form("KCemu/Memory/3/switch", "Memory: CAOS %s\n", v ? "enabled" : "disabled")); _m_caos->set_active(v); reload_mem_ptr(); } void Memory3::enableBASIC_C(int v) { DBG(1, form("KCemu/Memory/3/switch", "Memory: BASIC %s\n", v ? "enabled" : "disabled")); _m_basic->set_active(v); reload_mem_ptr(); } void Memory3::enableRAM(int v) { DBG(1, form("KCemu/Memory/3/switch", "Memory: RAM %s\n", v ? "enabled" : "disabled")); _m_ram->set_active(v); reload_mem_ptr(); } void Memory3::protectRAM(int v) { DBG(1, form("KCemu/Memory/3/switch", "Memory: RAM %s\n", v ? "read/write" : "readonly")); _m_ram->set_readonly(!v); reload_mem_ptr(); } void Memory3::enableIRM(int v) { DBG(1, form("KCemu/Memory/3/switch", "Memory: IRM %s\n", v ? "enabled" : "disabled")); _m_irm->set_active(v); reload_mem_ptr(); } void Memory3::reset(bool power_on) { _m_ram->set_active(true); _m_ram->set_readonly(false); _m_irm->set_active(true); _m_caos->set_active(true); _m_basic->set_active(true); reload_mem_ptr(); if (!power_on) return; scratch_mem(&_ram[0], 0x4000); scratch_mem(&_irm[0], 0x4000); } KCemu-0.5.1/src/kc/memory0.cc0000644001050700006200000001230111345001576015267 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/z80.h" #include "kc/memory0.h" #include "ui/ui.h" #include "ui/generic/ui_0.h" using namespace std; Memory0::Memory0(void) : Memory() { load_rom(SystemROM::ROM_KEY_SYSTEM, &_rom); load_rom(SystemROM::ROM_KEY_CHARGEN, &_chr); memory_group_t mem[] = { { &_m_scr, "-", 0x0000, 0x10000, 0, 256, 0, 1, -1 }, { &_m_ram, "RAM", 0x0000, 0x04000, &_ram[0x0000], 10, 0, 1, KC_VARIANT_Z1013_01 }, { &_m_ram, "RAM", 0x0000, 0x00400, &_ram[0x0000], 10, 0, 1, KC_VARIANT_Z1013_12 }, { &_m_ram, "RAM", 0x0000, 0x04000, &_ram[0x0000], 10, 0, 1, KC_VARIANT_Z1013_16 }, { &_m_ram, "RAM", 0x0000, 0x10000, &_ram[0x0000], 10, 0, 1, KC_VARIANT_Z1013_64 }, { &_m_ram, "RAM", 0x0000, 0x10000, &_ram[0x0000], 10, 0, 1, KC_VARIANT_Z1013_A2 }, { &_m_ram, "RAM", 0x0000, 0x10000, &_ram[0x0000], 10, 0, 1, KC_VARIANT_Z1013_RB }, { &_m_ram, "RAM", 0x0000, 0x0ec00, &_ram[0x0000], 10, 0, 1, KC_VARIANT_Z1013_SURL }, { &_m_ram_f0, "RAM-F0", 0xf000, 0x00800, &_ram[0xf000], 10, 0, 1, KC_VARIANT_Z1013_SURL }, { &_m_ram_f8, "RAM-F8", 0xf800, 0x00800, &_ram[0xf800], 10, 0, 1, KC_VARIANT_Z1013_SURL }, { &_m_ram, "RAM", 0x0000, 0x0ec00, &_ram[0x0000], 10, 0, 1, KC_VARIANT_Z1013_BL4 }, { &_m_ram_f0, "RAM-F0", 0xf000, 0x00800, &_ram[0xf000], 10, 0, 1, KC_VARIANT_Z1013_BL4 }, { &_m_ram_f8, "RAM-F8", 0xf800, 0x00800, &_ram[0xf800], 10, 0, 1, KC_VARIANT_Z1013_BL4 }, { &_m_irm, "IRM", 0xec00, 0x00400, &_irm[0x0000], 0, 0, 1, -1 }, { &_m_rom, "ROM", 0xf000, 0x00800, &_rom[0x0000], 0, 1, 1, -1 }, { &_m_rom_f8, "ROM", 0xf800, 0x00800, &_rom[0x0800], 0, 1, 1, KC_VARIANT_Z1013_RB }, { &_m_rom_f8, "ROM", 0xf800, 0x00800, &_rom[0x0800], 0, 1, 1, KC_VARIANT_Z1013_BL4 }, { 0, }, }; init_memory_groups(mem); switch (Preferences::instance()->get_kc_variant()) { case KC_VARIANT_Z1013_SURL: _portg = ports->register_ports("MEMORY0", 4, 1, this, 0); break; case KC_VARIANT_Z1013_BL4: _portg = ports->register_ports("MEMORY0", 4, 1, this, 0); break; default: _portg = NULL; break; } reset(true); z80->register_ic(this); } Memory0::~Memory0(void) { if (_portg) ports->unregister_ports(_portg); z80->unregister_ic(this); } byte_t Memory0::memRead8(word_t addr) { return _memrptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK]; } void Memory0::memWrite8(word_t addr, byte_t val) { _memwptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK] = val; } byte_t * Memory0::get_irm(void) { return (byte_t *)_irm; } byte_t * Memory0::get_char_rom(void) { if (_val & 0x20) return _chr + 2048; return _chr; } void Memory0::reset(bool power_on) { out(4, 0); if (!power_on) return; memset(&_ram[0], 0, 0x10000); //scratch_mem(&_ram[0], 0x10000); } void Memory0::dumpCore(void) { ofstream os; os.open("core.z80"); cerr << "Memory: dumping core..." << endl; if (!os) { cerr << "Memory: can't write 'core.z80'" << endl; return; } for (int a = 0;a < 0x10000;a++) os.put(memRead8(a)); os.close(); cerr << "Memory: done." << endl; } byte_t Memory0::in(word_t addr) { _val &= 0x90; return _val; } void Memory0::out(word_t addr, byte_t val) { port_04(_val ^ val, val); _val = val; } /* * bit 7 - switch screen mode 32x32 (0) / 64x16 (1) * bit 6 - switch clock frequency 2 MHz (0) / 4 MHz (1) * bit 5 - switch character rom normal (0) / with umlauts, invers (1) * bit 4 - switch monitor rom on (0) / off (1) */ void Memory0::port_04(byte_t changed, byte_t val) { if (changed & 0x80) { if (ui->get_mode() != UI_0::UI_GENERIC_MODE_GDC) { if (val & 0x80) ui->set_mode(UI_0::UI_GENERIC_MODE_Z1013_64x16); else ui->set_mode(UI_0::UI_GENERIC_MODE_Z1013_32x32); } } if (changed & 0x10) { bool rom = val & 0x10; if (_m_rom) _m_rom->set_active(!rom); if (_m_rom_f8) _m_rom_f8->set_active(!rom); reload_mem_ptr(); } #if 0 bool ram_f0 = val & 0x04; bool ram_f8 = val & 0x02; if (_m_ram_f0) _m_ram_f0->set_readonly(!ram_f0); if (_m_ram_f8) _m_ram_f8->set_readonly(!ram_f8); #endif } KCemu-0.5.1/src/kc/fdc4.cc0000644001050700006200000001122411345001576014522 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/fdc4.h" #include "kc/z80_fdc.h" #include "libdbg/dbg.h" FDC4::FDC4(void) { fdc_z80->register_ic(this); } FDC4::~FDC4(void) { fdc_z80->unregister_ic(this); } long long FDC4::get_counter() { return fdc_z80->get_counter(); } void FDC4::add_callback(unsigned long long offset, Callback *cb, void *data) { fdc_z80->add_callback(offset, cb, data); } byte_t FDC4::in(word_t addr) { byte_t val = 0; word_t pc = fdc_z80->getPC(); switch (addr & 0xff) { case 0xf0: // D004 (KC85/4) /* CS-FDC (Chipselect) */ val = get_msr(); DBG(2, form("KCemu/FDC/in_F0", "FDC::in(): %04xh addr = %04x, val = %02x [%c]\n", pc, addr, val, isprint(val) ? val : '.')); break; case 0xf1: // D004 (KC85/4) val = in_data(addr); DBG(2, form("KCemu/FDC/in_F1", "FDC::in(): %04xh addr = %04x, val = %02x [%c]\n", pc, addr, val, isprint(val) ? val : '.')); break; case 0xf2: // D004 (KC85/4) /* DAK-FDC (DMA-Acknowledge) */ val = read_byte(); DBG(2, form("KCemu/FDC/in_F2", "FDC::in(): %04xh addr = %04x, val = %02x [%c]\n", pc, addr, val, isprint(val) ? val : '.')); break; case 0xf4: // D004 (KC85/4) /* * Input-Gate: * * Bit 7 DRQ (DMA-Request) * Bit 6 INT (Interrupt) * Bit 5 RDY (Drive-Ready) * Bit 4 IDX (Index - Spuranfang) */ val = get_input_gate(); DBG(2, form("KCemu/FDC/in_F4", "FDC::in(): %04xh addr = %04x, val = %02x [%c]\n", pc, addr, val, isprint(val) ? val : '.')); break; case 0xf6: // D004 (KC85/4) /* Select-Latch */ val = 0x00; DBG(2, form("KCemu/FDC/in_F6", "FDC::in(): %04xh addr = %04x, val = %02x [%c]\n", pc, addr, val, isprint(val) ? val : '.')); break; case 0xf8: // D004 (KC85/4) /* TC-FDC (Terminalcount) - End of DMA Transfer */ val = 0x00; DBG(2, form("KCemu/FDC/in_F8", "FDC::in(): %04xh addr = %04x, val = %02x [%c]\n", pc, addr, val, isprint(val) ? val : '.')); break; } DBG(2, form("KCemu/FDC/in", "FDC::in(): %04xh addr = %04x, val = %02x\n", pc, addr, val)); return val; } void FDC4::out(word_t addr, byte_t val) { word_t pc = fdc_z80->getPC(); DBG(2, form("KCemu/FDC/out", "FDC::out(): %04xh (I=%02x): addr = %04x, val = %02x [%c]\n", pc, fdc_z80->getI(), addr, val, isprint(val) ? val : '.')); switch (addr & 0xff) { case 0xf1: // D004 (KC85/4) DBG(2, form("KCemu/FDC/out_F1", "FDC::out(): %04xh addr = %04x, val = %02x [%c]\n", pc, addr, val, isprint(val) ? val : '.')); out_data(addr, val); break; case 0xf2: // D004 (KC85/4) DBG(2, form("KCemu/FDC/out_F2", "FDC::out(): %04xh addr = %04x, val = %02x [%c]\n", pc, addr, val, isprint(val) ? val : '.')); write_byte(val); break; case 0xf6: // D004 (KC85/4) DBG(2, form("KCemu/FDC/out_F6", "FDC::out(): %04xh addr = %04x, val = %02x [%c]\n", pc, addr, val, isprint(val) ? val : '.')); drive_select(val & 0x0f); break; case 0xf8: // D004 (KC85/4) DBG(2, form("KCemu/FDC/out_F8", "FDC::out(): %04xh Terminal Count %02x\n", pc, val)); set_state(FDC_STATE_RESULT); set_input_gate(0x40, 0x00); break; default: DBG(2, form("KCemu/FDC/out_unhandled", "FDC::out(): %04xh addr = %04x, val = %02x [%c]\n", pc, addr, val, isprint(val) ? val : '.')); break; } } KCemu-0.5.1/src/kc/ctc1.cc0000644001050700006200000000452611345001576014543 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/z80.h" #include "kc/ctc1.h" #include "kc/tape.h" #include "libdbg/dbg.h" CTC1::CTC1(void) { _last_irq_0 = 0; } CTC1::~CTC1(void) { } byte_t CTC1::in(word_t addr) { DBG(2, form("KCemu/CTC/1/in", "CTC1::in(): addr = %04x\n", addr)); switch (addr & 3) { case 0: return c_in(0); case 1: return c_in(1); case 2: return c_in(2); case 3: return c_in(3); } return 0; // shouldn't be reached } void CTC1::out(word_t addr, byte_t val) { DBG(2, form("KCemu/CTC/1/out", "CTC1::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: c_out(0, val); break; case 1: c_out(1, val); break; case 2: c_out(2, val); break; case 3: c_out(3, val); break; } } bool CTC1::irq_0(void) { unsigned long diff; unsigned long long c; c = z80->getCounter(); diff = (unsigned long)(c - _last_irq_0); _last_irq_0 = c; if (diff > 3000) return false; tape->tape_signal(); _last_irq_0 = c; return false; } bool CTC1::irq_1(void) { return false; } bool CTC1::irq_2(void) { trigger(3); return false; } bool CTC1::irq_3(void) { return false; } long CTC1::counter_value_0(void) { return 0; } long CTC1::counter_value_1(void) { return 0; } long CTC1::counter_value_2(void) { return 0; } long CTC1::counter_value_3(void) { return 0; } KCemu-0.5.1/src/kc/vdip_cmd.cc0000644001050700006200000005541711345001576015503 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/vdip.h" #include "sys/sysdep.h" class VDIP_CMD_UNKNOWN : public VDIP_CMD { public: VDIP_CMD_UNKNOWN(VDIP *vdip) : VDIP_CMD(vdip) {} virtual ~VDIP_CMD_UNKNOWN(void) {} void execute(void) { add_error(ERR_BAD_COMMAND); } }; class VDIP_CMD_DIR : public VDIP_CMD { public: VDIP_CMD_DIR(VDIP *vdip) : VDIP_CMD(vdip, true) { } virtual ~VDIP_CMD_DIR(void) { } void execute(void) { if (has_args()) execute_with_arg(); else execute_without_arg(); } void execute_with_arg() { struct stat buf; const char *arg = get_arg(0).c_str(); string filename = get_vdip()->get_path(arg); if (stat(filename.c_str(), &buf) == 0) { add_string("\r"); add_string(arg); add_char(' '); add_dword(buf.st_size); add_char('\r'); add_prompt(); } else { // ml-dos expects FI error in UGET add_error(ERR_INVALID); //add_error(ERR_COMMAND_FAILED); } } void execute_without_arg() { string path = get_vdip()->get_cwd(); DIR *dir = opendir(path.c_str()); add_string("\r"); if (dir != NULL) { if (!get_vdip()->is_root()) add_string(". DIR\r.. DIR\r"); // hmm, can't use dirent->d_type as MinGW does not provide // this information :-(. falling back to stat every entry. while (242) { struct stat buf; struct dirent *dirent = readdir(dir); if (dirent == NULL) break; string file = path + "/" + dirent->d_name; if (stat(file.c_str(), &buf) != 0) continue; if (S_ISREG(buf.st_mode)) { add_string(dirent->d_name); add_string("\r"); } else if (S_ISDIR(buf.st_mode)) { if ((strcmp(dirent->d_name, ".") != 0) && (strcmp(dirent->d_name, "..") != 0)) { add_string(dirent->d_name); add_string(" DIR\r"); } } } add_prompt(); } } }; class VDIP_CMD_CD : public VDIP_CMD { public: VDIP_CMD_CD(VDIP *vdip) : VDIP_CMD(vdip, true) { } virtual ~VDIP_CMD_CD(void) { } void execute(void) { string dir = get_arg(0); if (strcmp(dir.c_str(), ".") == 0) { add_prompt(); } else if (strcmp(dir.c_str(), "..") == 0) { vdip->chdir_up(); add_prompt(); } else if (strncmp(dir.c_str(), "/", 1) == 0) { vdip->chdir_root(); add_prompt(); } else { struct stat buf; string path = get_vdip()->get_path(dir); if (stat(path.c_str(), &buf) == 0) { get_vdip()->chdir(dir); add_prompt(); } else { add_error(ERR_COMMAND_FAILED); } } } }; class VDIP_CMD_IDD : public VDIP_CMD { public: VDIP_CMD_IDD(VDIP *vdip) : VDIP_CMD(vdip) { } virtual ~VDIP_CMD_IDD(void) { } void execute(void) { word_t block_size; dword_t free_bytes, total_bytes; if (sys_getdiskinfo(get_vdip()->get_cwd().c_str(), &total_bytes, &free_bytes, &block_size) != 0) { block_size = 0; free_bytes = 0; total_bytes = 0; } add_string("\rUSB VID = $0000\rUSB PID = $0000\rVendor Id = KCemu \rProduct Id = Virtual Disk \rRevision Level = 0000\r"); add_string("I/F = SCSI\rFAT32\rBytes/Sector = $"); add_hex(4, 0x0200); add_string("\rBytes/Cluster = $"); add_hex(6, block_size); add_string("\rCapacity = $"); add_hex(8, total_bytes); add_string(" Bytes\rFree Space = $"); add_hex(8, free_bytes); add_string(" Bytes\r\r"); add_prompt(); } }; class VDIP_CMD_CLF : public VDIP_CMD { public: VDIP_CMD_CLF(VDIP *vdip) : VDIP_CMD(vdip, true) { } virtual ~VDIP_CMD_CLF(void) { } void execute(void) { if (vdip->get_file() == NULL) { add_error(ERR_COMMAND_FAILED); } else { fclose(get_vdip()->get_file()); add_prompt(); get_vdip()->set_file(NULL); } } }; class VDIP_CMD_OPR : public VDIP_CMD { public: VDIP_CMD_OPR(VDIP *vdip) : VDIP_CMD(vdip, true) { } virtual ~VDIP_CMD_OPR(void) { } void execute(void) { string filename = get_vdip()->get_path(get_arg(0)); if (get_vdip()->get_file() != NULL) fclose(get_vdip()->get_file()); FILE *f = fopen(filename.c_str(), "rb"); if (f == NULL) { // ml-dos expects FI error in UPUT add_error(ERR_INVALID); //add_error(ERR_COMMAND_FAILED); } else { get_vdip()->set_file(f); add_prompt(); } } }; class VDIP_CMD_RDF : public VDIP_CMD { public: VDIP_CMD_RDF(VDIP *vdip) : VDIP_CMD(vdip, true) { } virtual ~VDIP_CMD_RDF(void) { } void execute(void) { FILE *f = get_vdip()->get_file(); if (f == NULL) { add_error(ERR_INVALID); } else if (feof(f)) { add_error(ERR_COMMAND_FAILED); } else { dword_t len = get_dword_arg(0); for (dword_t a = 0; a < len; a++) add_char(fgetc(f)); // use EOF as padding add_prompt(); } } }; class VDIP_CMD_SCS : public VDIP_CMD { public: VDIP_CMD_SCS(VDIP *vdip) : VDIP_CMD(vdip) { } virtual ~VDIP_CMD_SCS(void) { } void execute(void) { get_vdip()->set_short_command_set(true); add_prompt(); } }; class VDIP_CMD_ECS : public VDIP_CMD { public: VDIP_CMD_ECS(VDIP *vdip) : VDIP_CMD(vdip) { } virtual ~VDIP_CMD_ECS(void) { } void execute(void) { get_vdip()->set_short_command_set(false); add_prompt(); } }; class VDIP_CMD_OPW : public VDIP_CMD { public: VDIP_CMD_OPW(VDIP *vdip) : VDIP_CMD(vdip, true) { } virtual ~VDIP_CMD_OPW(void) { } void execute(void) { string filename = get_vdip()->get_path(get_arg(0)); if (get_vdip()->get_file() != NULL) fclose(get_vdip()->get_file()); struct stat buf; bool stat_ok = (stat(filename.c_str(), &buf) == 0); if (stat_ok && (!S_ISREG(buf.st_mode))) { add_error(ERR_INVALID); // existing but not a regular file } else if (stat_ok && (access(filename.c_str(), W_OK) != 0)) { add_error(ERR_READ_ONLY); // existing regular file but read-only } else { FILE *f = fopen(filename.c_str(), stat_ok ? "r+b" : "w+b"); if (f == NULL) { add_error(ERR_COMMAND_FAILED); } else { if (fseek(f, 0, SEEK_END) == 0) { get_vdip()->set_file(f); add_prompt(); } else { add_error(ERR_COMMAND_FAILED); } } } } }; class VDIP_CMD_WRF : public VDIP_CMD { private: dword_t _wrf_len; public: VDIP_CMD_WRF(VDIP *vdip) : VDIP_CMD(vdip, true) { } virtual ~VDIP_CMD_WRF(void) { } void execute(void) { FILE *f = get_vdip()->get_file(); if (f == NULL) { add_error(ERR_FILE_OPEN); } else { dword_t len = get_dword_arg(0); _wrf_len = len; // no prompt here! waiting for data } } void handle_input(byte_t data) { FILE *f = get_vdip()->get_file(); if (f) fputc(data, f); _wrf_len--; if (_wrf_len == 0) add_prompt(); } }; class VDIP_CMD_SEK : public VDIP_CMD { public: VDIP_CMD_SEK(VDIP *vdip) : VDIP_CMD(vdip, true) { } virtual ~VDIP_CMD_SEK(void) { } void execute(void) { FILE *f = get_vdip()->get_file(); if (f == NULL) { add_error(ERR_INVALID); } else if (feof(f)) { add_error(ERR_COMMAND_FAILED); } else { dword_t offset = get_dword_arg(0); if ((fseek(f, offset, SEEK_SET) != 0) || ((unsigned int)ftell(f) != offset)) add_error(ERR_COMMAND_FAILED); else add_prompt(); } } }; class VDIP_CMD_EMPTY : public VDIP_CMD { public: VDIP_CMD_EMPTY(VDIP *vdip) : VDIP_CMD(vdip, true) { } virtual ~VDIP_CMD_EMPTY(void) { } void execute(void) { add_prompt(); } }; class VDIP_CMD_SYNC : public VDIP_CMD { private: byte_t _val; public: VDIP_CMD_SYNC(VDIP *vdip, byte_t val) : VDIP_CMD(vdip), _val(val) { } virtual ~VDIP_CMD_SYNC(void) { } void execute(void) { add_char(_val); add_char('\r'); } }; class VDIP_CMD_IPH : public VDIP_CMD { private: byte_t _val; public: VDIP_CMD_IPH(VDIP *vdip) : VDIP_CMD(vdip) { } virtual ~VDIP_CMD_IPH(void) { } void execute(void) { get_vdip()->set_binary_mode(true); add_prompt(); } }; class VDIP_CMD_IPA : public VDIP_CMD { private: byte_t _val; public: VDIP_CMD_IPA(VDIP *vdip) : VDIP_CMD(vdip) { } virtual ~VDIP_CMD_IPA(void) { } void execute(void) { get_vdip()->set_binary_mode(false); add_prompt(); } }; class VDIP_CMD_DIRT : public VDIP_CMD { private: byte_t _val; public: VDIP_CMD_DIRT(VDIP *vdip) : VDIP_CMD(vdip, true) { } virtual ~VDIP_CMD_DIRT(void) { } dword_t get_datetime(long datetime) { int year, month, day, hour, minute, second; sys_converttime((long)datetime, &year, &month, &day, &hour, &minute, &second); return ((year - 80) << 25) | ((month) << 21) | (day << 16) | (hour << 11) | (minute << 5) | (second / 2); } void execute(void) { struct stat buf; const char *arg = get_arg(0).c_str(); string filename = get_vdip()->get_path(arg); if (stat(filename.c_str(), &buf) == 0) { // as we have no creation time, we use the modification time dword_t ctime = get_datetime(buf.st_mtime); word_t atime = get_datetime(buf.st_atime) >> 16; dword_t mtime = get_datetime(buf.st_mtime); add_string("\r"); add_string(arg); add_char(' '); add_dword(ctime); add_word(atime); add_dword(mtime); add_char('\r'); add_prompt(); } else { add_error(ERR_COMMAND_FAILED); } } }; class VDIP_CMD_FWV : public VDIP_CMD { public: VDIP_CMD_FWV(VDIP *vdip) : VDIP_CMD(vdip) { } virtual ~VDIP_CMD_FWV(void) { } void execute(void) { add_string("\rMAIN "); add_string(get_vdip()->get_firmware_version().c_str()); add_string("\rRPRG 1.00R\r"); add_prompt(); } }; class VDIP_CMD_MKD : public VDIP_CMD { public: VDIP_CMD_MKD(VDIP *vdip) : VDIP_CMD(vdip) { } virtual ~VDIP_CMD_MKD(void) { } void execute(void) { if (get_vdip()->get_file() != NULL) add_error(ERR_FILE_OPEN); else if (get_arg_count() == 1) execute_with_name(get_arg(0)); else if (get_arg_count() >= 2) execute_with_name_and_time(get_arg(0), get_dword_arg(1)); else add_error(ERR_BAD_COMMAND); } long get_time(dword_t time) { struct tm tm; tm.tm_year = ((time >> 25) & 127) + 80; tm.tm_mon = ((time >> 21) & 15) - 1; tm.tm_mday = ((time >> 16) & 31); tm.tm_hour = ((time >> 11) & 31); tm.tm_min = ((time >> 5) & 64); tm.tm_sec = (time & 31) * 2; return mktime(&tm); } void execute_with_name(string arg) { // default date: 2004-12-20 00:00:00 // date given in the documentation is wrong! execute_with_name_and_time(arg, 0x31940000); } void execute_with_name_and_time(string arg, dword_t time) { struct stat buf; string filename = get_vdip()->get_path(arg); if (stat(filename.c_str(), &buf) != 0) { if (sys_mkdir(filename.c_str(), 0755) == 0) { struct utimbuf utimbuf; utimbuf.actime = get_time(time); if (utimbuf.actime != -1) { utimbuf.modtime = utimbuf.actime; utime(filename.c_str(), &utimbuf); } add_prompt(); return; } } add_error(ERR_COMMAND_FAILED); } }; class VDIP_CMD_DLD : public VDIP_CMD { public: VDIP_CMD_DLD(VDIP *vdip) : VDIP_CMD(vdip) { } virtual ~VDIP_CMD_DLD(void) { } void execute(void) { if (get_vdip()->get_file() != NULL) add_error(ERR_FILE_OPEN); else if (get_arg_count() >= 1) execute_with_name(get_arg(0)); else add_error(ERR_BAD_COMMAND); } void execute_with_name(string arg) { string filename = get_vdip()->get_path(arg); if (rmdir(filename.c_str()) == 0) { add_prompt(); } else { if (errno == ENOTEMPTY) add_error(ERR_DIR_NOT_EMPTY); else add_error(ERR_COMMAND_FAILED); } } }; class VDIP_CMD_DLF : public VDIP_CMD { public: VDIP_CMD_DLF(VDIP *vdip) : VDIP_CMD(vdip) { } virtual ~VDIP_CMD_DLF(void) { } void execute(void) { if (get_vdip()->get_file() != NULL) add_error(ERR_FILE_OPEN); else if (get_arg_count() >= 1) execute_with_name(get_arg(0)); else add_error(ERR_BAD_COMMAND); } void execute_with_name(string arg) { string filename = get_vdip()->get_path(arg); if (access(filename.c_str(), W_OK) != 0) { add_error(ERR_READ_ONLY); } else if (unlink(filename.c_str()) == 0) { add_prompt(); } else { switch (errno) { case EISDIR: add_error(ERR_INVALID); break; case EACCES: case EPERM: case EROFS: add_error(ERR_READ_ONLY); break; default: add_error(ERR_COMMAND_FAILED); break; } } } }; class VDIP_CMD_RD : public VDIP_CMD { public: VDIP_CMD_RD(VDIP *vdip) : VDIP_CMD(vdip) { } virtual ~VDIP_CMD_RD(void) { } void execute(void) { if (get_vdip()->get_file() != NULL) add_error(ERR_FILE_OPEN); else if (get_arg_count() >= 1) execute_with_name(get_arg(0)); else add_error(ERR_BAD_COMMAND); } void execute_with_name(string arg) { string filename = get_vdip()->get_path(arg); struct stat buf; if (stat(filename.c_str(), &buf) != 0) { add_error(ERR_COMMAND_FAILED); return; } // this is not specified in the real VDIP firmware // but we refuse to read files that are bigger than // one megabyte. if (buf.st_size > 1024 * 1024) { add_error(ERR_INVALID); return; } FILE *f = fopen(filename.c_str(), "rb"); if (f == NULL) { add_error(ERR_COMMAND_FAILED); return; } while (242) { int c = fgetc(f); if (c == EOF) break; add_char(c); } fclose(f); } }; class VDIP_CMD_REN : public VDIP_CMD { public: VDIP_CMD_REN(VDIP *vdip) : VDIP_CMD(vdip) { } virtual ~VDIP_CMD_REN(void) { } void execute(void) { if (get_vdip()->get_file() != NULL) add_error(ERR_FILE_OPEN); else if (get_arg_count() >= 2) execute_with_names(get_arg(0), get_arg(1)); else add_error(ERR_BAD_COMMAND); } void execute_with_names(string source, string target) { string source_path = get_vdip()->get_path(source); string target_path = get_vdip()->get_path(target); struct stat buf; if (stat(target_path.c_str(), &buf) == 0) { add_error(ERR_COMMAND_FAILED); } else if (rename(source_path.c_str(), target_path.c_str()) == 0) { add_prompt(); } else { add_error(ERR_COMMAND_FAILED); } } }; /* class VDIP_CMD_CD : public VDIP_CMD { public: VDIP_CMD_CD(VDIP *vdip) : VDIP_CMD(vdip) { } virtual ~VDIP_CMD_CD(void) { } void execute(void) { } }; */ VDIP_CMD::VDIP_CMD(VDIP *vdip, bool check_disk) { _vdip = vdip; _args = NULL; _check_disk = check_disk; } VDIP_CMD::~VDIP_CMD(void) { if (_args) delete _args; } VDIP * VDIP_CMD::get_vdip(void) { return _vdip; } void VDIP_CMD::add_prompt(void) { add_string(vdip->is_short_command_set() ? ">\r" : "D:\\>\r"); } void VDIP_CMD::add_error(vdip_error_t error) { switch (error) { case ERR_BAD_COMMAND: add_string(get_vdip()->is_short_command_set() ? "BC\r" : "Bad Command\r"); break; case ERR_COMMAND_FAILED: add_string(get_vdip()->is_short_command_set() ? "CF\r" : "Command Failed\r"); break; case ERR_DISK_FULL: add_string(get_vdip()->is_short_command_set() ? "DF\r" : "Disk Full\r"); break; case ERR_INVALID: add_string(get_vdip()->is_short_command_set() ? "FI\r" : "Invalid\r"); break; case ERR_READ_ONLY: add_string(get_vdip()->is_short_command_set() ? "RO\r" : "Read Only\r"); break; case ERR_FILE_OPEN: add_string(get_vdip()->is_short_command_set() ? "FO\r" : "File Open\r"); break; case ERR_DIR_NOT_EMPTY: add_string(get_vdip()->is_short_command_set() ? "NE\r" : "Dir Not Empty\r"); break; case ERR_FILENAME_INVALID: add_string(get_vdip()->is_short_command_set() ? "FN\r" : "Filename Invalid\r"); break; case ERR_NO_UPGRADE: add_string(get_vdip()->is_short_command_set() ? "NU\r" : "No Upgrade\r"); break; case ERR_NO_DISK: add_string(get_vdip()->is_short_command_set() ? "ND\r" : "No Disk\r"); break; } } void VDIP_CMD::add_char(int c) { _response += c; } void VDIP_CMD::add_hex(int digits, dword_t val) { char buf[128]; snprintf(buf, sizeof(buf), "%0*lx", digits, val); add_string(buf); } void VDIP_CMD::add_word(word_t val) { add_char(val & 0xff); add_char((val >> 8) & 0xff); } void VDIP_CMD::add_dword(dword_t val) { for (int a = 0;a <= 24;a += 8) add_char((val >> a) & 0xff); } void VDIP_CMD::add_string(const char *text) { _response += string(text); } bool VDIP_CMD::has_args(void) const { return get_arg_count() > 0; } int VDIP_CMD::get_arg_count(void) const { if (_args == NULL) return 0; return _args->size(); } string VDIP_CMD::get_arg(unsigned int arg) const { if (!has_args()) return ""; if ((arg < 0) || (arg >= _args->size())) return ""; unsigned int a = 0; for (StringList::iterator it = _args->begin();it != _args->end();it++) if (a++ == arg) return *it; return ""; } dword_t VDIP_CMD::get_dword_arg(unsigned int arg) const { string data = get_arg(arg); if (data.length() != 4) return 0; dword_t val = 0; for (int a = 0; a < 4; a++) val = (val << 8) | (data.at(a) & 0xff); return val; } void VDIP_CMD::set_args(StringList *args) { _args = args; } string VDIP_CMD::get_response(string input) { return _response; } void VDIP_CMD::exec(void) { if (!get_vdip()->has_disk()) add_error(ERR_NO_DISK); else execute(); } void VDIP_CMD::handle_input(byte_t data) { } vdip_command_t VDIP_CMD::map_extended_command(string cmd) { if (strcmp(cmd.c_str(), "DIR") == 0) return CMD_DIR; else if (strcmp(cmd.c_str(), "CD") == 0) return CMD_CD; else if (strcmp(cmd.c_str(), "IDD") == 0) return CMD_IDD; else if (strcmp(cmd.c_str(), "CLF") == 0) return CMD_CLF; else if (strcmp(cmd.c_str(), "OPR") == 0) return CMD_OPR; else if (strcmp(cmd.c_str(), "RDF") == 0) return CMD_RDF; else if (strcmp(cmd.c_str(), "SCS") == 0) return CMD_SCS; else if (strcmp(cmd.c_str(), "ECS") == 0) return CMD_ECS; else if (strcmp(cmd.c_str(), "OPW") == 0) return CMD_OPW; else if (strcmp(cmd.c_str(), "WRF") == 0) return CMD_WRF; else if (strcmp(cmd.c_str(), "SEK") == 0) return CMD_SEK; else if (strcmp(cmd.c_str(), "IPH") == 0) return CMD_IPH; else if (strcmp(cmd.c_str(), "IPA") == 0) return CMD_IPA; else if (strcmp(cmd.c_str(), "DIRT") == 0) return CMD_DIRT; else if (strcmp(cmd.c_str(), "FWV") == 0) return CMD_FWV; else if (strcmp(cmd.c_str(), "MKD") == 0) return CMD_MKD; else if (strcmp(cmd.c_str(), "DLD") == 0) return CMD_DLD; else if (strcmp(cmd.c_str(), "DLF") == 0) return CMD_DLF; else if (strcmp(cmd.c_str(), "RD") == 0) return CMD_RD; else if (strcmp(cmd.c_str(), "REN") == 0) return CMD_REN; return CMD_UNKNOWN; } VDIP_CMD * VDIP_CMD::create_command(VDIP *vdip, string cmd) { return create_command(vdip, map_extended_command(cmd)); } VDIP_CMD * VDIP_CMD::create_command(VDIP *vdip, vdip_command_t code) { VDIP_CMD *vdip_cmd; switch (code) { case CMD_SCS: vdip_cmd = new VDIP_CMD_SCS(vdip); break; case CMD_ECS: vdip_cmd = new VDIP_CMD_ECS(vdip); break; case CMD_DIR: vdip_cmd = new VDIP_CMD_DIR(vdip); break; case CMD_CD: vdip_cmd = new VDIP_CMD_CD(vdip); break; case CMD_CLF: vdip_cmd = new VDIP_CMD_CLF(vdip); break; case CMD_OPW: vdip_cmd = new VDIP_CMD_OPW(vdip); break; case CMD_OPR: vdip_cmd = new VDIP_CMD_OPR(vdip); break; case CMD_RDF: vdip_cmd = new VDIP_CMD_RDF(vdip); break; case CMD_WRF: vdip_cmd = new VDIP_CMD_WRF(vdip); break; case CMD_IDD: vdip_cmd = new VDIP_CMD_IDD(vdip); break; case CMD_SEK: vdip_cmd = new VDIP_CMD_SEK(vdip); break; case CMD_IPH: vdip_cmd = new VDIP_CMD_IPH(vdip); break; case CMD_IPA: vdip_cmd = new VDIP_CMD_IPA(vdip); break; case CMD_E: vdip_cmd = new VDIP_CMD_SYNC(vdip, 'E'); break; case CMD_e: vdip_cmd = new VDIP_CMD_SYNC(vdip, 'e'); break; case CMD_DIRT: vdip_cmd = new VDIP_CMD_DIRT(vdip); break; case CMD_EMPTY: vdip_cmd = new VDIP_CMD_EMPTY(vdip); break; case CMD_FWV: vdip_cmd = new VDIP_CMD_FWV(vdip); break; case CMD_MKD: vdip_cmd = new VDIP_CMD_MKD(vdip); break; case CMD_DLD: vdip_cmd = new VDIP_CMD_DLD(vdip); break; case CMD_DLF: vdip_cmd = new VDIP_CMD_DLF(vdip); break; case CMD_RD: vdip_cmd = new VDIP_CMD_RD(vdip); break; case CMD_REN: vdip_cmd = new VDIP_CMD_REN(vdip); break; default: vdip_cmd = new VDIP_CMD_UNKNOWN(vdip); break; } return vdip_cmd; } KCemu-0.5.1/src/kc/mod_urom.cc0000644001050700006200000000255211345001576015527 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/mod_urom.h" #include "libdbg/dbg.h" using namespace std; ModuleUserROM::ModuleUserROM(ModuleUserROM &tmpl) : ModuleROM(tmpl) { } ModuleUserROM::ModuleUserROM(const char *filename, const char *name, dword_t size, byte_t id) : ModuleROM(filename, name, size, id) { } ModuleUserROM::~ModuleUserROM(void) { } word_t ModuleUserROM::get_addr(byte_t val) { return (val & 0xe0) << 8; } ModuleInterface * ModuleUserROM::clone(void) { return new ModuleUserROM(*this); } KCemu-0.5.1/src/kc/mod_fdc.cc0000644001050700006200000000536311345001576015304 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/fdc0s.h" #include "kc/mod_fdc.h" ModuleFDC::ModuleFDC(ModuleFDC &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _portg = NULL; _master = &tmpl; if ((_master->get_count() == 0) && (fdc_fdc == NULL)) { _master->set_count(1); _fdc_type = _master->_fdc_type; switch (_fdc_type) { case FDC_INTERFACE_SCHNEIDER: fdc_fdc = new FDC0S(); // global in kc.cc _portg = ports->register_ports("FDC", 0xf0, 10, fdc_fdc, 0); break; case FDC_INTERFACE_KRAMER: return; // not yet implemented } set_valid(true); } else { char buf[1024]; snprintf(buf, sizeof(buf), _("It's not possible to have more than one\n" "module of type %s!\n\n" "(And due to some technical points of the emulator\n" "it's also not possible to have both the Kramer and\n" "Schneider variant of the floppy module active at\n" "the same time.)"), get_name()); set_error_text(buf); set_valid(false); } } ModuleFDC::ModuleFDC(const char *name, fdc_interface_type_t fdc_type) : ModuleInterface(name, 0, KC_MODULE_Z1013) { _count = 0; _portg = NULL; _fdc_type = fdc_type; switch (_fdc_type) { case FDC_INTERFACE_SCHNEIDER: set_valid(true); break; case FDC_INTERFACE_KRAMER: set_valid(false); // not yet implemented break; } } ModuleFDC::~ModuleFDC(void) { if (_portg) { _master->set_count(0); ports->unregister_ports(_portg); delete fdc_fdc; fdc_fdc = NULL; } } void ModuleFDC::m_out(word_t addr, byte_t val) { } ModuleInterface * ModuleFDC::clone(void) { return new ModuleFDC(*this); } void ModuleFDC::reset(bool power_on) { } int ModuleFDC::get_count(void) { return _count; } void ModuleFDC::set_count(int count) { _count = count; } KCemu-0.5.1/src/kc/kcemu.rc0000644001050700006200000000105411345001720015014 0ustar glaubitzfbedv1 VERSIONINFO FILEVERSION 0, 5, 1, 0 PRODUCTVERSION 0, 5, 1, 0 FILEFLAGSMASK 0 FILEOS 0x40000 FILETYPE 1 { BLOCK "StringFileInfo" { BLOCK "040904E4" { VALUE "CompanyName", "Torsten Paul" VALUE "FileDescription", "KCemu -- the KC 85/3 and KC 85/4 Emulator" VALUE "FileVersion", "0.5.1" VALUE "InternalName", "kcemu.exe" VALUE "LegalCopyright", "GNU General Public License" VALUE "OriginalFilename", "kcemu.exe" VALUE "ProductName", "KCemu" VALUE "ProductVersion", "0.5.1" } } } AppIcon ICON "../../images/kcemu-winicon.ico" KCemu-0.5.1/src/kc/kcnet/0000755001050700006200000000000011412404772014477 5ustar glaubitzfbedvKCemu-0.5.1/src/kc/kcnet/tftp.cc0000644001050700006200000000677111345001576015776 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/prefs/prefs.h" #include "kc/kcnet/tftp.h" #include "libdbg/dbg.h" TFTP::TFTP(void) { _block = 0; _send_data = NULL; } TFTP::~TFTP(void) { } void TFTP::set_ip_address(byte_t a0, byte_t a1, byte_t a2, byte_t a3) { } void TFTP::set_port(word_t port) { } bool TFTP::open(void) { return true; } bool TFTP::is_open(void) { return true; } void TFTP::close(void) { } void TFTP::poll(void) { } void TFTP::send(SocketData *data) { printf("TFTP::send(): len = %d\n", data->length()); if (data->length() < 2) return; for (int a = 0;a < data->length();a++) printf("%02x ", data->get(a)); printf("\n"); word_t opcode = data->get(0) << 8 | data->get(1); if (opcode == TFTP_RRQ) { init_read(data); } else if (opcode == TFTP_WRQ) { } else if (opcode == TFTP_ACK) { printf("ACK!\n"); } } SocketData * TFTP::receive(void) { if (_send_data == NULL) { if (_path.length() > 0) { byte_t buf[512]; printf("TFTP::receive(): reading block %d\n", _block); FILE *f = fopen(_path.c_str(), "rb"); fseek(f, _block * 512, SEEK_SET); int len = fread(buf, 1, 512, f); fclose(f); _block++; printf("TFTP::receive(): block len = %d\n", len); SocketData *data = new SocketData(len + 4); data->put_word(TFTP_DATA); data->put_word(_block); for (int a = 0;a < len;a++) data->put_byte(buf[a]); if (len < 512) { printf("TFTP::receive(): END\n"); _path.clear(); } return data; } return NULL; } SocketData *ret = _send_data; printf("TFTP::receive(): len = %d\n", ret->length()); for (int a = 0;a < ret->length();a++) printf("%02x ", ret->get(a)); printf("\n"); _send_data = NULL; return ret; } void TFTP::init_read(SocketData *data) { // FIXME: range check! string filename((const char *)data->get() + 2); printf("init_read: %s\n", filename.c_str()); const char *root = Preferences::instance()->get_string_value("kcnet_tftp_root", NULL); _path = string(root == NULL ? "/tmp" : root) + "/" + filename; if (access(_path.c_str(), R_OK) != 0) { printf("FILE NOT FOUND!\n"); _send_data = new SocketData(20); _send_data->put_word(TFTP_ERROR); _send_data->put_word(TFTP_ERR_FILE_NOT_FOUND); _send_data->put_text("File not found."); _send_data->put_byte(0); } else { _block = 0; printf("READING FILE %s!\n", _path.c_str()); } } KCemu-0.5.1/src/kc/kcnet/pio_net.cc0000644001050700006200000000470211345001576016446 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/kcnet/kcnet.h" #include "kc/kcnet/pio_net.h" #include "libdbg/dbg.h" PIO_NET::PIO_NET(void) { } PIO_NET::~PIO_NET(void) { } byte_t PIO_NET::in(word_t addr) { byte_t val = 0xff; switch (addr & 3) { case 0: val = kcnet->read(); break; case 1: val = kcnet->get_status(); break; case 2: val = in_A_CTRL(); break; case 3: val = in_B_CTRL(); break; } DBG(2, form("KCemu/PIO/NET/in", "PIO_NET::in(): %04xh: addr = %04x, val = %02x\n", z80->getPC(), addr, val)); return val; } void PIO_NET::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/NET/out", "PIO_NET::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: DBG(2, form("KCemu/PIO/NET/data_out", "PIO_NET::out(): addr = %04x, val = %02x ('%c')\n", addr, val, isprint(val) ? val : '.')); kcnet->write(val); break; case 1: DBG(2, form("KCemu/PIO/NET/ctrl_out", "PIO_NET::out(): addr = %04x, val = %02x, RXF# = %d, TXE# = %d, RD# = %d, WR# = %d, RESET = %d\n", addr, val, val & 1, (val >> 1) & 1, (val >> 2) & 1, (val >> 3) & 1, (val >> 6) & 1)); out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } void PIO_NET::change_A(byte_t changed, byte_t val) { } void PIO_NET::change_B(byte_t changed, byte_t val) { } KCemu-0.5.1/src/kc/kcnet/socket.cc0000644001050700006200000000351711345001576016304 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/kcnet/socket.h" #include "sys/sysdep.h" #include "libdbg/dbg.h" SocketData::SocketData(int len) { _len = len; _idx = 0; _buf = new byte_t[len]; } SocketData::~SocketData(void) { delete[] _buf; } int SocketData::length(void) { return _len; } void SocketData::put_byte(byte_t val) { if (_idx < _len) { _buf[_idx++] = val; } } void SocketData::put_word(word_t val) { word_t nval = sys_htons(val); put_byte(nval); put_byte(nval >> 8); } void SocketData::put_long(dword_t val) { word_t nval = sys_htonl(val); put_byte(nval); put_byte(nval >> 8); put_byte(nval >> 16); put_byte(nval >> 24); } void SocketData::put_text(const char *text) { while (*text != 0) put_byte(*text++); } void SocketData::put(int idx, byte_t val) { if (idx < _len) _buf[idx] = val; } byte_t * SocketData::get(void) { return _buf; } byte_t SocketData::get(int idx) { if (idx < _len) return _buf[idx]; return 0xff; } KCemu-0.5.1/src/kc/kcnet/ipraw.cc0000644001050700006200000001245511345001576016137 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/prefs/prefs.h" #include "kc/kcnet/ipraw.h" #include "sys/sysdep.h" #include "libdbg/dbg.h" IPRAW::IPRAW(void) { _socket = 0; _data = NULL; _send_data = NULL; } IPRAW::~IPRAW(void) { } void IPRAW::set_ip_address(byte_t a0, byte_t a1, byte_t a2, byte_t a3) { DBG(2, form("KCemu/KCNET/ipraw", "IPRAW::set_ip_address(): %d.%d.%d.%d\n", a0, a1, a2, a3)); _ip0 = a0; _ip1 = a1; _ip2 = a2; _ip3 = a3; } void IPRAW::set_port(word_t port) { DBG(2, form("KCemu/KCNET/ipraw", "IPRAW::set_port(): %d\n", port)); _port = port; } bool IPRAW::open(void) { DBG(2, form("KCemu/KCNET/ipraw", "IPRAW::open()\n")); return true; } bool IPRAW::is_open(void) { return true; } void IPRAW::close(void) { DBG(2, form("KCemu/KCNET/ipraw", "IPRAW::close()\n")); close_socket(); } void IPRAW::close_socket(void) { sys_socket_close(_socket); _socket = 0; } void IPRAW::poll(void) { if (_socket == 0) return; // Use hard coded port 80, this is currently only intended to // simulate ping. Because we can't simply send raw ip packets // from user space program, we try to connect to web server // port 80 and interpet a successful connect as ping reply. int ret = sys_socket_connect(_socket, _ip0, _ip1, _ip2, _ip3, 80); switch (ret) { case 0: case SYS_SOCKET_ERR_ISCONN: _send_data = _data; _data = NULL; close_socket(); break; case SYS_SOCKET_ERR_INTR: DBG(2, form("KCemu/KCNET/ipraw", "IPRAW::send(): connect() failed with EINTR\n")); break; case SYS_SOCKET_ERR_INPROGRESS: DBG(2, form("KCemu/KCNET/ipraw", "IPRAW::send(): connect() failed with EINPROGRESS\n")); break; case SYS_SOCKET_ERR_ALREADY: DBG(2, form("KCemu/KCNET/ipraw", "IPRAW::send(): connect() failed with EALREADY\n")); break; default: DBG(2, form("KCemu/KCNET/ipraw", "IPRAW::send(): connect() failed with error code %d\n", ret)); if (_data) delete _data; _data = NULL; _send_data = NULL; close_socket(); break; } } void IPRAW::send(SocketData *data) { DBG(2, form("KCemu/KCNET/ipraw", "IPRAW::send(): len = %d - %d.%d.%d.%d:%d\n", data->length(), _ip0, _ip1, _ip2, _ip3, _port)); string text; char buf[10]; for (int a = 0;a < data->length();a++) { snprintf(buf, sizeof (buf), " %02x", data->get(a)); text += buf; } DBG(2, form("KCemu/KCNET/ipraw", "IPRAW::send(): data =%s\n", text.c_str())); if (data->get(0) != 8) // ECHO REQUEST { DBG(2, form("KCemu/KCNET/ipraw", "IPRAW::send(): not an echo request!\n")); return; } int s = sys_socket_create(1, 1); if (s < 0) return; _data = new SocketData(data->length() + 6); _data->put_byte(_ip0); _data->put_byte(_ip1); _data->put_byte(_ip2); _data->put_byte(_ip3); _data->put_word(data->length()); _data->put_byte(0); // ECHO REPLY _data->put_byte(0); // code _data->put_word(0); // dummy checksum for (int a = 4;a < data->length();a++) _data->put_byte(data->get(a)); word_t sum = checksum(_data, 6); _data->put(8, sum); _data->put(9, sum >> 8); DBG(2, form("KCemu/KCNET/ipraw", "IPRAW::send(): new checksum: %04x\n", sum)); _socket = s; poll(); } /** * Based on example code in RFC1071. */ word_t IPRAW::checksum(SocketData *data, int offset) { int idx = offset; int count = data->length() - idx; dword_t sum = 0; while (count > 1) { sum += data->get(idx) | data->get(idx + 1) << 8; idx += 2; count -= 2; } /* Add left-over byte, if any */ if (count > 0) sum += data->get(idx); /* Fold 32-bit sum to 16 bits */ while (sum >> 16) sum = (sum & 0xffff) + (sum >> 16); return ~sum; } SocketData * IPRAW::receive(void) { if (_send_data == NULL) return NULL; SocketData *ret = _send_data; string text; char buf[10]; for (int a = 0;a < ret->length();a++) { snprintf(buf, sizeof(buf), " %02x", ret->get(a)); text += buf; } DBG(2, form("KCemu/KCNET/ipraw", "IPRAW::receive(): len = %d, data =%s\n", ret->length(), text.c_str())); _send_data = NULL; return ret; } KCemu-0.5.1/src/kc/kcnet/Makefile.am0000644001050700006200000000062011340261610016521 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in noinst_LIBRARIES = libkcnet.a AM_CPPFLAGS = \ -DKCEMU_PACKAGE=\"$(PACKAGE)\" \ -DKCEMU_DATADIR=\"$(pkgdatadir)\" \ -DKCEMU_LOCALEDIR=\"$(localedir)\" \ -DDEBUG INCLUDES = -I../../../include libkcnet_a_SOURCES = \ kcnet.cc \ kcnetm.cc \ socket.cc \ pio_net.cc \ ipraw.cc \ udp.cc \ tcp.cc \ tftp.cc KCemu-0.5.1/src/kc/kcnet/udp.cc0000644001050700006200000000607611345001576015607 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/kc.h" #include "kc/prefs/prefs.h" #include "kc/kcnet/udp.h" #include "sys/sysdep.h" #include "libdbg/dbg.h" UDP::UDP(void) { _socket = 0; _send_data = NULL; } UDP::~UDP(void) { } void UDP::set_ip_address(byte_t a0, byte_t a1, byte_t a2, byte_t a3) { printf("UDP::set_ip_address(): %d.%d.%d.%d\n", a0, a1, a2, a3); _ip0 = a0; _ip1 = a1; _ip2 = a2; _ip3 = a3; } void UDP::set_port(word_t port) { printf("UDP::set_port(): %d\n", port); _port = port; } bool UDP::open(void) { printf("UDP::open()\n"); _socket = sys_socket_create(0, 0); if (_socket < 0) { close(); return false; } return true; } bool UDP::is_open(void) { return true; } void UDP::close(void) { if (_socket > 0) { sys_socket_close(_socket); } _socket = 0; } void UDP::poll(void) { unsigned short port; unsigned char ip0, ip1, ip2, ip3; unsigned char buf[4096]; if (_send_data != NULL) return; printf("poll: socket = %d\n", _socket); int r = sys_socket_recvfrom(_socket, buf, sizeof(buf), &ip0, &ip1, &ip2, &ip3, &port); if (r < 0) return; printf("UDP::poll(): recvfrom() returned %d - %d.%d.%d.%d:%d\n", r, ip0, ip1, ip2, ip3, port); _send_data = new SocketData(r + 8); _send_data->put_byte(ip0); _send_data->put_byte(ip1); _send_data->put_byte(ip2); _send_data->put_byte(ip3); _send_data->put_word(port); _send_data->put_word(r); for (int a = 0;a < r;a++) _send_data->put_byte(buf[a]); } void UDP::send(SocketData *data) { printf("UDP::send(): len = %d - %d.%d.%d.%d:%d\n", data->length(), _ip0, _ip1, _ip2, _ip3, _port); printf("UDP::send(): data = "); for (int a = 0;a < data->length();a++) printf("%02x ", data->get(a)); printf("\n"); int n = sys_socket_sendto(_socket, data->get(), data->length(), _ip0, _ip1, _ip2, _ip3, _port); printf("UDP::send(): sendto() returned %d\n", n); } SocketData * UDP::receive(void) { if (_send_data == NULL) return NULL; SocketData *ret = _send_data; printf("UDP::receive(): len = %d\n", ret->length()); printf("UDP::receive(): data = "); for (int a = 0;a < ret->length();a++) printf("%02x ", ret->get(a)); printf("\n"); _send_data = NULL; return ret; } KCemu-0.5.1/src/kc/kcnet/kcnet.cc0000644001050700006200000006164111345001576016122 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/prefs/strlist.h" #include "kc/kc.h" #include "kc/pio.h" #include "kc/z80.h" #include "kc/kcnet/kcnet.h" #include "kc/kcnet/tcp.h" #include "kc/kcnet/udp.h" #include "kc/kcnet/tftp.h" #include "kc/kcnet/ipraw.h" #include "cmd/cmd.h" #include "libdbg/dbg.h" KCNET::KCNET(void) : InterfaceCircuit("KC-NET"), Callback("KC-NET") { _pio = NULL; _command = NULL; for (int a = 0;a < NR_OF_SOCKETS;a++) _socket[a] = NULL; for (int a = 0;a < 8;a++) _ip_addr[a] = 0; z80->register_ic(this); init(true, true); } KCNET::~KCNET(void) { z80->unregister_ic(this); } void KCNET::reti(void) { } void KCNET::irqreq(void) { } word_t KCNET::irqack(void) { return IRQ_NOT_ACK; } void KCNET::reset(bool power_on) { init(power_on, true); } void KCNET::init(bool power_on, bool set_config) { _status = 0; _mem_ptr = 0; _portno = 3000; if (_command != NULL) delete _command; _command = NULL; for (int a = 0;a < NR_OF_SOCKETS;a++) { if (_socket[a] != NULL) { _socket[a]->close(); delete _socket[a]; } _socket[a] = NULL; } z80->addCallback(30000, this, NULL); if (power_on) { memset(_mem, 0, sizeof (_mem)); // mac addr _mem[ADDR_SHAR0] = 0x00; _mem[ADDR_SHAR1] = 0x16; _mem[ADDR_SHAR2] = 0xaf; _mem[ADDR_SHAR3] = 0xbc; _mem[ADDR_SHAR4] = 0xde; _mem[ADDR_SHAR5] = 0x12; // just in case... see include/linux/etherdevice.h _mem[ADDR_SHAR5] &= 0xfe; /* clear multicast bit */ _mem[ADDR_SHAR5] |= 0x02; /* set local assignment bit (IEEE802) */ // default values _mem[ADDR_RTR0] = 0x07; _mem[ADDR_RTR1] = 0xd0; _mem[ADDR_RCR] = 0x08; _mem[ADDR_RMSR] = 0x55; _mem[ADDR_TMSR] = 0x55; _mem[ADDR_PTIMER] = 0x28; } if (set_config) { byte_t ip0, ip1, ip2, ip3; if (get_ip_address_from_prefs("network_gateway", ip0, ip1, ip2, ip3)) { _mem[ADDR_GAR0] = ip0; _mem[ADDR_GAR1] = ip1; _mem[ADDR_GAR2] = ip2; _mem[ADDR_GAR3] = ip3; } if (get_ip_address_from_prefs("network_netmask", ip0, ip1, ip2, ip3)) { _mem[ADDR_SUBR0] = ip0; _mem[ADDR_SUBR1] = ip1; _mem[ADDR_SUBR2] = ip2; _mem[ADDR_SUBR3] = ip3; } if (get_ip_address_from_prefs("network_ip_address", ip0, ip1, ip2, ip3)) { _mem[ADDR_SIPR0] = ip0; _mem[ADDR_SIPR1] = ip1; _mem[ADDR_SIPR2] = ip2; _mem[ADDR_SIPR3] = ip3; } if (get_ip_address_from_prefs("network_dns_server", ip0, ip1, ip2, ip3)) { set_ip_address(0, (ip0 << 24) | (ip1 << 16) | (ip2 << 8) | ip3); } } } const bool KCNET::get_ip_address_from_prefs(const char *key, byte_t &ip0, byte_t &ip1, byte_t &ip2, byte_t &ip3) const { ip0 = ip1 = ip2 = ip3 = 0; const char *addr = Preferences::instance()->get_string_value(key, NULL); if (addr == NULL) return false; StringList list(addr, '.'); if (list.size() != 4) return false; int ip[4]; int idx = 0; for (StringList::iterator it = list.begin();it != list.end();it++) { char *endptr; unsigned long n = strtoul((*it).c_str(), &endptr, 10); if (*endptr != 0) return false; if (n > 255) return false; ip[idx++] = n; } ip0 = ip[0]; ip1 = ip[1]; ip2 = ip[2]; ip3 = ip[3]; return true; } void KCNET::register_pio(PIO *pio) { _pio = pio; } void KCNET::callback(void *data) { z80->addCallback(30000, this, NULL); for (int a = 0;a < 4;a++) for (int idx = 0;idx < 4;idx++) { if (_socket[idx] == NULL) continue; word_t s = (idx << 8) + 0x0400; if (_socket[idx]->is_open()) { _mem[s | 0x02] |= IR_CON; if (_mem[s | 0x03] == SOCK_INIT) { _mem[s | 0x03] = SOCK_ESTABLISHED; printf("TCP! ESTABLISHED\n"); _mem[s | 0x20] = 4; // TX Free Size _mem[s | 0x21] = 0; } } else { continue; } _socket[idx]->poll(); if (_mem[s | 0x26] | _mem[s | 0x27]) { return; } SocketData *recv = _socket[idx]->receive(); if (recv != NULL) { _mem[s | 0x02] |= IR_RECV; int data_len = recv->length(); for (int a = 0;a < recv->length();a++) { word_t base = 0x6000 + idx * 0x0800; _mem[_recv_ptr[idx]++] = recv->get(a); if (_recv_ptr[idx] == base + 0x0800) _recv_ptr[idx] = base; } _mem[s | 0x26] = data_len >> 8; _mem[s | 0x27] = data_len; delete recv; } } } byte_t KCNET::get_status(void) { return _status; } void KCNET::set_status(byte_t status) { _status = status; } word_t KCNET::get_pointer(void) { return _mem_ptr; } void KCNET::set_pointer(word_t ptr) { _mem_ptr = ptr; } dword_t KCNET::get_ip_address(unsigned int idx) { if (idx < 8) return _ip_addr[idx]; return 0; } void KCNET::set_ip_address(unsigned int idx, dword_t ip_addr) { if (idx < 8) _ip_addr[idx] = ip_addr; } byte_t KCNET::mem_read(void) { return mem_read(_mem_ptr++); } byte_t KCNET::mem_read(word_t addr) { return _mem[addr & 0x7fff]; } void KCNET::mem_write(byte_t val) { mem_write(_mem_ptr++, val); } void KCNET::mem_write(word_t addr, byte_t val) { addr &= 0x7fff; _mem[addr] = val; if ((addr == 0) && (val & 0x80)) { init(true, false); return; } if ((addr < 0x0400) || (addr >= 0x0800)) return; // socket access int s = addr & 0xff00; int idx = (s - 0x400) >> 8; addr &= 0xff; if (addr == 0x01) // socket command { if (val == 0x01) // open { if ((_mem[s] & 0x8f) == 0x01) // ignore delayed ack (bit 5) _mem[s | 0x03] = SOCK_INIT; else if (_mem[s] == 0x02) _mem[s | 0x03] = SOCK_UDP; else if (_mem[s] == 0x03) _mem[s | 0x03] = SOCK_IPRAW; _mem[s | 0x01] = 0; _mem[s | 0x28] = 0x00; _mem[s | 0x29] = 0x00; } if (val == 0x10) // close { if (_socket[idx] != NULL) { _socket[idx]->close(); delete _socket[idx]; _mem[s | 0x24] = 0; // write pointer _mem[s | 0x25] = 0; } _socket[idx] = NULL; _mem[s | 0x01] = 0; _mem[s | 0x02] = 0; _mem[s | 0x03] = 0; } if (val == 0x04) // connect { if (_socket[idx] == NULL) { _recv_ptr[idx] = 0x6000 + idx * 0x0800; _old_read_ptr[idx] = 0x0000; _old_write_ptr[idx] = 0x0000; if (_mem[s | 0x03] == SOCK_INIT) { word_t port = _mem[s | 0x10] << 8 | _mem[s | 0x11]; printf("TCP! connect\n"); _socket[idx] = new TCP(); _socket[idx]->set_ip_address(_mem[s | 0x0c], _mem[s | 0x0d], _mem[s | 0x0e], _mem[s | 0x0f]); _socket[idx]->set_port(port); _socket[idx]->open(); } } } if (val == 0x20) // send { if (_socket[idx] == NULL) { _recv_ptr[idx] = 0x6000 + idx * 0x0800; _old_read_ptr[idx] = 0x0000; _old_write_ptr[idx] = 0x0000; } word_t port = _mem[s | 0x10] << 8 | _mem[s | 0x11]; word_t write_ptr = _mem[s | 0x24] << 8 | _mem[s | 0x25]; int len = write_ptr - _old_write_ptr[idx]; if (_socket[idx] == NULL) { if (_mem[s | 0x03] == SOCK_UDP) { printf("UDP! %04x / %04x (%d, %04xh)\n", _old_write_ptr[idx], write_ptr, len, len); _socket[idx] = new UDP(); _socket[idx]->set_ip_address(_mem[s | 0x0c], _mem[s | 0x0d], _mem[s | 0x0e], _mem[s | 0x0f]); _socket[idx]->set_port(port); _socket[idx]->open(); } if (_mem[s | 0x03] == SOCK_IPRAW) { printf("IPRAW! %04x / %04x (%d, %04xh)\n", _old_write_ptr[idx], write_ptr, len, len); _socket[idx] = new IPRAW(); _socket[idx]->set_ip_address(_mem[s | 0x0c], _mem[s | 0x0d], _mem[s | 0x0e], _mem[s | 0x0f]); _socket[idx]->set_port(port); _socket[idx]->open(); } } else { _socket[idx]->set_ip_address(_mem[s | 0x0c], _mem[s | 0x0d], _mem[s | 0x0e], _mem[s | 0x0f]); _socket[idx]->set_port(port); } if (_socket[idx] != NULL) { SocketData *data = new SocketData(len); word_t base = 0x4000 + idx * 0x0800; for (int a = 0;a < len;a++) data->put_byte(_mem[base + _old_write_ptr[idx] + a]); _socket[idx]->send(data); delete data; } _old_write_ptr[idx] = write_ptr; _mem[s | 0x02] = IR_SEND_OK | IR_CON; _mem[s | 0x01] = 0; } if (val == 0x40) // recv { word_t read_ptr = _mem[s | 0x22] << 8 | _mem[s | 0x23]; int len = read_ptr - _old_read_ptr[idx]; printf("RECV! %04x / %04x (%d, %04xh)\n", _old_read_ptr[idx], read_ptr, len, len); _mem[s | 0x02] = IR_CON; _mem[s | 0x01] = 0; _mem[s | 0x26] = 0x00; _mem[s | 0x27] = 0x00; _old_read_ptr[idx] = read_ptr; } } } const char * KCNET::mem_info(void) { return mem_info(_mem_ptr); } const char * KCNET::mem_info(word_t addr) { addr &= 0x7fff; if ((addr >= 0x0400) && (addr < 0x0800)) { switch (addr & 0x00ff) { case 0x0000: return "Socket x Mode (Sx_MR)"; case 0x0001: return "Socket x Command (Sx_CR)"; case 0x0002: return "Socket x Interrupt (Sx_IR)"; case 0x0003: return "Socket x Status (Sx_SR)"; case 0x0004: return "Socket x Source Port"; case 0x0006: return "Socket x Destination Hardware Address"; case 0x000c: return "Socket x Destination IP Address"; case 0x0010: return "Socket x Destination Port"; case 0x0012: return "Socket x Maximum Segment Size"; case 0x0014: return "Socket x Protocol in IP Raw mode"; case 0x0015: return "Socket x IP TOS (Sx_TOS)"; case 0x0016: return "Socket x IP TTL (Sx_TTL)"; case 0x0020: return "Socket x TX Free Size"; case 0x0022: return "Socket x TX Read Pointer"; case 0x0024: return "Socket x TX Write Pointer"; case 0x0026: return "Socket x RX Received Size"; case 0x0028: return "Socket x RX Read Pointer"; } } switch (addr) { case 0x0000: return "Mode (MR)"; case 0x0001: return "Gateway Address"; case 0x0005: return "Subnet mask Address"; case 0x0009: return "Source Hardware Address"; case 0x000f: return "Source IP Address"; case 0x0015: return "Interrupt (IR)"; case 0x0016: return "Interrupt Mask (IMR)"; case 0x0017: return "Retry Time"; case 0x0019: return "Retry Count (RCR)"; case 0x001a: return "RX Memory Size (RMSR)"; case 0x001b: return "TX Memory Size (TMSR)"; case 0x001c: return "Authentication Type in PPPoE"; case 0x0028: return "PPP LCP Request Timer (PTIMER)"; case 0x0029: return "PPP LCP Magic number (PMAGIC)"; case 0x002a: return "Unreachable IP Address"; case 0x002e: return "Unreachable Port"; default: return ""; } } byte_t KCNET::read(void) { if (_command) return _command->read(); printf("KCNET::read(): NO ACTIVE COMMAND\n"); return 0x00; } void KCNET::write(byte_t val) { if (_command && _command->is_active()) { //printf("WRITE %02x\n", val); _command->write(val); } else { //printf("NEW COMMAND: %02x\n", val); _command = KCNET_CMD::get_command(this, (kcnet_command_t)val); if (_command) _command->init(); } } int KCNET::callback_A_in(void) { return -1; } int KCNET::callback_B_in(void) { return -1; } void KCNET::callback_A_out(byte_t val) { } void KCNET::callback_B_out(byte_t val) { } KCNET_CMD::KCNET_CMD(KCNET *kcnet, const char *name, int args) { _idx = 0; _args = args; _name = strdup(name); _kcnet = kcnet; if (_args > 0) { _buf = new byte_t[args]; set_phase(KCNET_CMD_PHASE_ARGS); } else { _buf = NULL; set_phase(KCNET_CMD_PHASE_EXECUTE); } _result_len = 0; _result_buf = NULL; } KCNET_CMD::~KCNET_CMD(void) { free(_name); if (_buf != NULL) delete[] _buf; if (_result_buf != NULL) delete[] _result_buf; } void KCNET_CMD::init(void) { if (get_phase() == KCNET_CMD_PHASE_EXECUTE) execute(); } const char * KCNET_CMD::get_name() { return _name; } KCNET_CMD::kcnet_cmd_phase_t KCNET_CMD::get_phase(void) { return _phase; } void KCNET_CMD::set_phase(kcnet_cmd_phase_t phase) { //printf("KCNET_CMD::set_phase(): %d\n", phase); _phase = phase; if (phase == KCNET_CMD_PHASE_READ_DATA) _kcnet->set_status(0x80); } bool KCNET_CMD::is_active(void) { return get_phase() != KCNET_CMD_PHASE_FINISHED; } byte_t KCNET_CMD::read(void) { return data_read(); } byte_t KCNET_CMD::data_read(void) { if (_result_idx < _result_len) { byte_t val = _result_buf[_result_idx++]; if (_result_idx == _result_len) set_phase(KCNET_CMD_PHASE_FINISHED); DBG(2, form("KCemu/KCNET_CMD/result", "KCNET_CMD::data_read(): %02xh (%3d / '%c')\n", val, val, isprint(val) ? val : '.')); return val; } DBG(1, form("KCemu/KCNET_CMD/result", "KCNET_CMD::data_read(): ILLEGAL READ\n")); return 0x00; } void KCNET_CMD::write(byte_t val) { if (get_phase() == KCNET_CMD_PHASE_WRITE_DATA) { data_write(val); } else { if (_idx < _args) { _buf[_idx++] = val; } else { printf("IGNORE WRITE! (cmd = %s, phase = %d, val = %02xh (%3d)\n", get_name(), get_phase(), val, val); return; } if (_idx == _args) { set_phase(KCNET_CMD_PHASE_EXECUTE); execute(); } } } void KCNET_CMD::data_write(byte_t val) { } byte_t KCNET_CMD::get_data(int idx) { if (idx >= _args) { printf("ILLEGAL ARGUMENT READ, return 0!\n"); return 0; } return _buf[idx]; } void KCNET_CMD::set_result(byte_t val) { byte_t *buf = new byte_t[1]; buf[0] = val; set_result(buf, 1); } void KCNET_CMD::set_result(byte_t val1, byte_t val2) { byte_t *buf = new byte_t[2]; buf[0] = val1; buf[1] = val2; set_result(buf, 2); } void KCNET_CMD::set_result(byte_t *buf, int len) { _result_idx = 0; _result_buf = buf; _result_len = len; set_phase(KCNET_CMD_PHASE_READ_DATA); } KCNET_CMD * KCNET_CMD::get_command(KCNET *kcnet, kcnet_command_t command) { switch (command) { case CMD_WRITE_BYTES: return new KCNET_CMD_WRITE_BYTES(kcnet); case CMD_READ_BYTES: return new KCNET_CMD_READ_BYTES(kcnet); case CMD_SET_POINTER: return new KCNET_CMD_SET_POINTER(kcnet); case CMD_READ_TIMER: return new KCNET_CMD_READ_TIMER(kcnet); case CMD_WRITE_BYTE: return new KCNET_CMD_WRITE_BYTE(kcnet); case CMD_READ_BYTE: return new KCNET_CMD_READ_BYTE(kcnet); case CMD_WRITE_IPADDR: return new KCNET_CMD_WRITE_IPADDR(kcnet); case CMD_READ_IPADDR: return new KCNET_CMD_READ_IPADDR(kcnet); case CMD_READ_PORTNO: return new KCNET_CMD_READ_PORTNO(kcnet); case CMD_READ_SW_VERSION: return new KCNET_CMD_READ_SW_VERSION(kcnet); case CMD_READ_HW_VERSION: return new KCNET_CMD_READ_HW_VERSION(kcnet); case CMD_READ_LINK: return new KCNET_CMD_READ_LINK(kcnet); case CMD_READ_ID: return new KCNET_CMD_READ_ID(kcnet); case CMD_READ_ERROR: return new KCNET_CMD_READ_ERROR(kcnet); default: return NULL; } } KCNET_CMD_WRITE_BYTES::KCNET_CMD_WRITE_BYTES(KCNET *kcnet) : KCNET_CMD(kcnet, "WRITE_BYTES", 2) { } void KCNET_CMD_WRITE_BYTES::execute(void) { _idx = 0; _counter = get_data(0) | (get_data(1) << 8); DBG(2, form("KCemu/KCNET_CMD/KCNET_CMD_WRITE_BYTES", "KCNET_CMD_WRITE_BYTES: addr: %04xh - writing %3d (%04xh) bytes | %s\n", _kcnet->get_pointer(), _counter, _counter, _kcnet->mem_info())); set_phase(KCNET_CMD_PHASE_WRITE_DATA); } void KCNET_CMD_WRITE_BYTES::data_write(byte_t val) { if (_idx < _counter) { DBG(2, form("KCemu/KCNET_CMD/KCNET_CMD_WRITE_BYTES", "KCNET_CMD_WRITE_BYTES: addr: %04xh - %02xh (%3d / '%c') - index = %02xh (%3d) | %s\n", _kcnet->get_pointer(), val, val, isprint(val) ? val : '.', _idx, _idx, _kcnet->mem_info())); _kcnet->mem_write(val); _idx++; if (_idx == _counter) set_phase(KCNET_CMD_PHASE_FINISHED); return; } DBG(0, form("KCemu/KCNET_CMD/KCNET_CMD_WRITE_BYTES", "KCNET_CMD_WRITE_BYTES: ILLEGAL WRITE\n")); } KCNET_CMD_READ_BYTES::KCNET_CMD_READ_BYTES(KCNET *kcnet) : KCNET_CMD(kcnet, "READ_BYTES", 2) { } void KCNET_CMD_READ_BYTES::execute(void) { _idx = 0; _counter = get_data(0) | (get_data(1) << 8); DBG(2, form("KCemu/KCNET_CMD/KCNET_CMD_READ_BYTES", "KCNET_CMD_READ_BYTES: addr: %04xh - reading %3d (%04xh) bytes | %s\n", _kcnet->get_pointer(), _counter, _counter, _kcnet->mem_info())); set_phase(KCNET_CMD_PHASE_READ_DATA); } byte_t KCNET_CMD_READ_BYTES::data_read(void) { if (_idx < _counter) { word_t ptr = _kcnet->get_pointer(); byte_t val = _kcnet->mem_read(); DBG(2, form("KCemu/KCNET_CMD/KCNET_CMD_READ_BYTES", "KCNET_CMD_READ_BYTES: addr: %04xh - %02xh (%3d / '%c') - index = %02xh (%3d) | %s\n", ptr, val, val, isprint(val) ? val : '.', _idx, _idx, _kcnet->mem_info(ptr))); _idx++; if (_idx == _counter) set_phase(KCNET_CMD_PHASE_FINISHED); return val; } DBG(0, form("KCemu/KCNET_CMD/KCNET_CMD_READ_BYTES", "KCNET_CMD_READ_BYTES: ILLEGAL WRITE\n")); return 0x00; } KCNET_CMD_SET_POINTER::KCNET_CMD_SET_POINTER(KCNET *kcnet) : KCNET_CMD(kcnet, "SET_POINTER", 2) { } void KCNET_CMD_SET_POINTER::execute(void) { word_t ptr = get_data(0) | (get_data(1) << 8); DBG(2, form("KCemu/KCNET_CMD/KCNET_CMD_SET_POINTER", "KCNET_CMD_SET_POINTER: addr: %04xh | %s \n", ptr, _kcnet->mem_info(ptr))); _kcnet->set_pointer(ptr); set_phase(KCNET_CMD_PHASE_FINISHED); } KCNET_CMD_READ_TIMER::KCNET_CMD_READ_TIMER(KCNET *kcnet) : KCNET_CMD(kcnet, "READ_TIMER", 0) { } void KCNET_CMD_READ_TIMER::execute(void) { static word_t val = 0; struct timeval tv; if (gettimeofday(&tv, NULL) == 0) { val = (tv.tv_sec % 60) * 1000; val += tv.tv_usec / 1000; } else { val++; } DBG(2, form("KCemu/KCNET_CMD/KCNET_CMD_READ_TIMER", "KCNET_CMD_READ_TIMER: val: %04xh\n", val)); set_result(val & 0xff, val >> 8); } KCNET_CMD_WRITE_BYTE::KCNET_CMD_WRITE_BYTE(KCNET *kcnet) : KCNET_CMD(kcnet, "WRITE_BYTE", 3) { } void KCNET_CMD_WRITE_BYTE::execute(void) { word_t ptr = get_data(0) | (get_data(1) << 8); byte_t val = get_data(2); DBG(2, form("KCemu/KCNET_CMD/KCNET_CMD_WRITE_BYTE", "KCNET_CMD_WRITE_BYTE: addr: %04xh - %02xh (%3d / '%c') | %s\n", ptr, val, val, isprint(val) ? val : '.', _kcnet->mem_info(ptr))); _kcnet->mem_write(ptr, val); set_phase(KCNET_CMD_PHASE_FINISHED); } KCNET_CMD_READ_BYTE::KCNET_CMD_READ_BYTE(KCNET *kcnet) : KCNET_CMD(kcnet, "READ_BYTE", 2) { } void KCNET_CMD_READ_BYTE::execute(void) { word_t ptr = get_data(0) | (get_data(1) << 8); byte_t val = _kcnet->mem_read(ptr); DBG(2, form("KCemu/KCNET_CMD/KCNET_CMD_READ_BYTE", "KCNET_CMD_READ_BYTE: addr: %04xh - %02xh (%3d / '%c') | %s\n", ptr, val, val, isprint(val) ? val : '.', _kcnet->mem_info(ptr))); set_result(val); } KCNET_CMD_WRITE_IPADDR::KCNET_CMD_WRITE_IPADDR(KCNET *kcnet) : KCNET_CMD(kcnet, "WRITE_IPADDR", 5) { } void KCNET_CMD_WRITE_IPADDR::execute(void) { unsigned int idx = get_data(0); if (idx < 8) { DBG(2, form("KCemu/KCNET_CMD/KCNET_CMD_WRITE_IPADDR", "KCNET_CMD_WRITE_IPADDR: ip: %d.%d.%d.%d (index = %d)\n", get_data(1), get_data(2), get_data(3), get_data(4), idx)); dword_t addr = (get_data(1) << 24) | (get_data(2) << 16) | (get_data(3) << 8) | get_data(4); _kcnet->set_ip_address(idx, addr); } else { DBG(1, form("KCemu/KCNET_CMD/KCNET_CMD_WRITE_IPADDR", "KCNET_CMD_WRITE_IPADDR: ip: %d.%d.%d.%d (index = %d) IGNORED, INVALID INDEX!\n", get_data(1), get_data(2), get_data(3), get_data(4), idx)); } set_phase(KCNET_CMD_PHASE_FINISHED); } KCNET_CMD_READ_IPADDR::KCNET_CMD_READ_IPADDR(KCNET *kcnet) : KCNET_CMD(kcnet, "READ_IPADDR", 1) { } void KCNET_CMD_READ_IPADDR::execute(void) { byte_t *buf = new byte_t[4]; unsigned int idx = get_data(0); if (idx < 8) { dword_t addr = _kcnet->get_ip_address(idx); buf[0] = addr >> 24; buf[1] = addr >> 16; buf[2] = addr >> 8; buf[3] = addr; DBG(2, form("KCemu/KCNET_CMD/KCNET_CMD_READ_IPADDR", "KCNET_CMD_READ_IPADDR: ip: %d.%d.%d.%d (index = %d)\n", buf[0], buf[1], buf[2], buf[3], idx)); } else { buf[0] = buf[1] = buf[2] = buf[3] = 0; DBG(1, form("KCemu/KCNET_CMD/KCNET_CMD_READ_IPADDR", "KCNET_CMD_READ_IPADDR: ip: %d.%d.%d.%d (index = %d) INVALID INDEX!\n", buf[0], buf[1], buf[2], buf[3], idx)); } set_result(buf, 4); } KCNET_CMD_READ_PORTNO::KCNET_CMD_READ_PORTNO(KCNET *kcnet) : KCNET_CMD(kcnet, "READ_PORTNO", 0) { } void KCNET_CMD_READ_PORTNO::execute(void) { word_t portno = 3000; DBG(2, form("KCemu/KCNET_CMD/KCNET_CMD_READ_PORTNO", "KCNET_CMD_READ_PORTNO: port: %04xh (%d)\n", portno, portno)); set_result(portno & 0xff, portno >> 8); } KCNET_CMD_READ_SW_VERSION::KCNET_CMD_READ_SW_VERSION(KCNET *kcnet) : KCNET_CMD(kcnet, "READ_SW_VERSION", 0) { } void KCNET_CMD_READ_SW_VERSION::execute(void) { DBG(2, form("KCemu/KCNET_CMD/KCNET_CMD_READ_SW_VERSION", "KCNET_CMD_READ_SW_VERSION: ver: %d.%d\n", KCNET::KCNET_SW_VERSION_MAJOR, KCNET::KCNET_SW_VERSION_MINOR)); set_result(KCNET::KCNET_SW_VERSION_MINOR, KCNET::KCNET_SW_VERSION_MAJOR); } KCNET_CMD_READ_HW_VERSION::KCNET_CMD_READ_HW_VERSION(KCNET *kcnet) : KCNET_CMD(kcnet, "READ_HW_VERSION", 0) { } void KCNET_CMD_READ_HW_VERSION::execute(void) { DBG(2, form("KCemu/KCNET_CMD/KCNET_CMD_READ_HW_VERSION", "KCNET_CMD_READ_HW_VERSION: ver: %d.%d\n", KCNET::KCNET_HW_VERSION_MAJOR, KCNET::KCNET_HW_VERSION_MINOR)); set_result(KCNET::KCNET_HW_VERSION_MINOR, KCNET::KCNET_HW_VERSION_MAJOR); } KCNET_CMD_READ_LINK::KCNET_CMD_READ_LINK(KCNET *kcnet) : KCNET_CMD(kcnet, "READ_LINK", 0) { } void KCNET_CMD_READ_LINK::execute(void) { byte_t val = 1; DBG(2, form("KCemu/KCNET_CMD/KCNET_CMD_READ_LINK", "KCNET_CMD_READ_LINK: link: %02xh\n", val)); set_result(val); } KCNET_CMD_READ_ID::KCNET_CMD_READ_ID(KCNET *kcnet) : KCNET_CMD(kcnet, "READ_ID", 0) { } void KCNET_CMD_READ_ID::execute(void) { byte_t *buf = new byte_t[6]; buf[5] = 'K'; buf[4] = 'C'; buf[3] = 'e'; buf[2] = 'm'; buf[1] = 'u'; buf[0] = 0; DBG(2, form("KCemu/KCNET_CMD/KCNET_CMD_READ_ID", "KCNET_CMD_READ_ID: id: '%s'\n", buf)); set_result(buf, 6); } KCNET_CMD_READ_ERROR::KCNET_CMD_READ_ERROR(KCNET *kcnet) : KCNET_CMD(kcnet, "READ_ERROR", 0) { } void KCNET_CMD_READ_ERROR::execute(void) { } KCemu-0.5.1/src/kc/kcnet/tcp.cc0000644001050700006200000001001111345001576015565 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/prefs/prefs.h" #include "kc/kcnet/tcp.h" #include "sys/sysdep.h" #include "libdbg/dbg.h" TCP::TCP(void) { _socket = 0; _is_open = false; _send_data = NULL; } TCP::~TCP(void) { } void TCP::set_ip_address(byte_t a0, byte_t a1, byte_t a2, byte_t a3) { printf("TCP::set_ip_address(): %d.%d.%d.%d\n", a0, a1, a2, a3); _ip0 = a0; _ip1 = a1; _ip2 = a2; _ip3 = a3; } void TCP::set_port(word_t port) { printf("TCP::set_port(): %d\n", port); _port = port; } bool TCP::open(void) { printf("TCP::open()\n"); _is_open = false; _socket = sys_socket_create(1, 1); if (_socket < 0) { close(); return false; } return true; } bool TCP::is_open(void) { if (_socket == 0) return false; if (_is_open) return true; int ret = sys_socket_connect(_socket, _ip0, _ip1, _ip2, _ip3, _port); if (ret == 0) return true; switch (ret) { case SYS_SOCKET_ERR_INTR: printf("TCP::is_open(): connect() failed with EINTR (%d.%d.%d.%d:%d)\n", _ip0, _ip1, _ip2, _ip3, _port); return false; case SYS_SOCKET_ERR_INPROGRESS: printf("TCP::is_open(): connect() failed with EINPROGRESS (%d.%d.%d.%d:%d)\n", _ip0, _ip1, _ip2, _ip3, _port); return false; case SYS_SOCKET_ERR_ALREADY: printf("TCP::is_open(): connect() failed with EALREADY (%d.%d.%d.%d:%d)\n", _ip0, _ip1, _ip2, _ip3, _port); return false; case SYS_SOCKET_ERR_ISCONN: return true; default: printf("TCP::is_open(): connect() failed with errno %d (%d.%d.%d.%d:%d)\n", ret, _ip0, _ip1, _ip2, _ip3, _port); close(); return false; } } void TCP::close(void) { printf("TCP::close()\n"); if (_socket > 0) { sys_socket_close(_socket); } _socket = 0; _is_open = false; } void TCP::poll(void) { unsigned char buf[512]; if (_socket == 0) return; if (_send_data != NULL) return; int r = sys_socket_recvfrom(_socket, buf, sizeof(buf), NULL, NULL, NULL, NULL, NULL); if (r < 0) { switch (errno) { case EAGAIN: //printf("TCP::poll(): recv() returned %d / EAGAIN\n", r); break; default: printf("TCP::poll(): recv() returned %d / errno = %d\n", r, errno); break; } return; } if (r == 0) { close(); return; } printf("TCP::poll(): recv() returned %d\n", r); _send_data = new SocketData(r); for (int a = 0;a < r;a++) _send_data->put_byte(buf[a]); } void TCP::send(SocketData *data) { printf("TCP::send(): len = %d\n", data->length()); printf("TCP::send(): data = "); for (int a = 0;a < data->length();a++) printf("%02x ", data->get(a)); printf("\n"); int n = sys_socket_send(_socket, data->get(), data->length()); printf("TCP::send(): send() returned %d\n", n); } SocketData * TCP::receive(void) { if (_send_data == NULL) return NULL; SocketData *ret = _send_data; printf("TCP::receive(): len = %d\n", ret->length()); printf("TCP::receive(): data = "); for (int a = 0;a < ret->length();a++) printf("%02x ", ret->get(a)); printf("\n"); _send_data = NULL; return ret; } KCemu-0.5.1/src/kc/kcnet/kcnetm.cc0000644001050700006200000000166711345001576016301 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/kc.h" #include "kc/kcnet/kcnetm.h" #include "libdbg/dbg.h" KCemu-0.5.1/src/kc/kcnet/Makefile.in0000644001050700006200000004215711412404772016555 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/kc/kcnet DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libkcnet_a_AR = $(AR) $(ARFLAGS) libkcnet_a_LIBADD = am_libkcnet_a_OBJECTS = kcnet.$(OBJEXT) kcnetm.$(OBJEXT) \ socket.$(OBJEXT) pio_net.$(OBJEXT) ipraw.$(OBJEXT) \ udp.$(OBJEXT) tcp.$(OBJEXT) tftp.$(OBJEXT) libkcnet_a_OBJECTS = $(am_libkcnet_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(libkcnet_a_SOURCES) DIST_SOURCES = $(libkcnet_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libkcnet.a AM_CPPFLAGS = \ -DKCEMU_PACKAGE=\"$(PACKAGE)\" \ -DKCEMU_DATADIR=\"$(pkgdatadir)\" \ -DKCEMU_LOCALEDIR=\"$(localedir)\" \ -DDEBUG INCLUDES = -I../../../include libkcnet_a_SOURCES = \ kcnet.cc \ kcnetm.cc \ socket.cc \ pio_net.cc \ ipraw.cc \ udp.cc \ tcp.cc \ tftp.cc all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/kc/kcnet/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/kc/kcnet/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libkcnet.a: $(libkcnet_a_OBJECTS) $(libkcnet_a_DEPENDENCIES) -rm -f libkcnet.a $(libkcnet_a_AR) libkcnet.a $(libkcnet_a_OBJECTS) $(libkcnet_a_LIBADD) $(RANLIB) libkcnet.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipraw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kcnet.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kcnetm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio_net.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/socket.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tcp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tftp.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/udp.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/kc/fdc.cc0000644001050700006200000003261311345001576014443 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/kc.h" #include "kc/fdc.h" #include "kc/fdc_cmd.h" #include "libdbg/dbg.h" FloppyState::FloppyState(byte_t head, byte_t cylinder, byte_t sector, Floppy *floppy) { _head = head; _cylinder = cylinder; _sector = sector; _floppy = floppy; } FloppyState::~FloppyState(void) { } SectorDesc::SectorDesc(long size, byte_t *buf) { _buf = buf; _size = size; } FDC::FDC(void) : InterfaceCircuit("FDC") { _cmds[0x00] = new FDC_CMD_INVALID(this); _cmds[0x01] = new FDC_CMD_INVALID(this); _cmds[0x02] = new FDC_CMD_READ_TRACK(this); _cmds[0x03] = new FDC_CMD_SPECIFY(this); _cmds[0x04] = new FDC_CMD_SENSE_DRIVE_STATUS(this); _cmds[0x05] = new FDC_CMD_WRITE_DATA(this); _cmds[0x06] = new FDC_CMD_READ_DATA(this); _cmds[0x07] = new FDC_CMD_RECALIBRATE(this); _cmds[0x08] = new FDC_CMD_SENSE_INTERRUPT_STATUS(this); _cmds[0x09] = new FDC_CMD_WRITE_DELETED_DATA(this); _cmds[0x0a] = new FDC_CMD_READ_ID(this); _cmds[0x0b] = new FDC_CMD_INVALID(this); _cmds[0x0c] = new FDC_CMD_READ_DELETED_DATA(this); _cmds[0x0d] = new FDC_CMD_FORMAT_A_TRACK(this); _cmds[0x0e] = new FDC_CMD_INVALID(this); _cmds[0x0f] = new FDC_CMD_SEEK(this); _cmds[0x10] = new FDC_CMD_INVALID(this); _cmds[0x11] = new FDC_CMD_SCAN_EQUAL(this); _cmds[0x12] = new FDC_CMD_INVALID(this); _cmds[0x13] = new FDC_CMD_INVALID(this); _cmds[0x14] = new FDC_CMD_INVALID(this); _cmds[0x15] = new FDC_CMD_INVALID(this); _cmds[0x16] = new FDC_CMD_INVALID(this); _cmds[0x17] = new FDC_CMD_INVALID(this); _cmds[0x18] = new FDC_CMD_INVALID(this); _cmds[0x19] = new FDC_CMD_SCAN_LOW_OR_EQUAL(this); _cmds[0x1a] = new FDC_CMD_INVALID(this); _cmds[0x1b] = new FDC_CMD_INVALID(this); _cmds[0x1c] = new FDC_CMD_INVALID(this); _cmds[0x1d] = new FDC_CMD_SCAN_HIGH_OR_EQUAL(this); _cmds[0x1e] = new FDC_CMD_INVALID(this); _cmds[0x1f] = new FDC_CMD_INVALID(this); _floppy[0] = new Floppy("attach-1"); _floppy[1] = new Floppy("attach-2"); _floppy[2] = new Floppy("attach-3"); _floppy[3] = new Floppy("attach-4"); _fstate[0] = new FloppyState(0, 0, 1, _floppy[0]); _fstate[1] = new FloppyState(0, 0, 1, _floppy[1]); _fstate[2] = new FloppyState(0, 0, 1, _floppy[2]); _fstate[3] = new FloppyState(0, 0, 1, _floppy[3]); init(); } FDC::~FDC(void) { for (int a = 0;a <= 0x1f;a++) delete _cmds[a]; for (int a = 0;a < 4;a++) { delete _fstate[a]; delete _floppy[a]; } } void FDC::init(void) { _cur_cmd = 0; _cur_floppy = 0; _read_bytes = 0; _MSR = 0; _ST0 = 0; _ST1 = 0; _ST2 = 0; _ST3 = 0; _INPUT_GATE = 0x60; _selected_unit = 0; _selected_device = 0; _terminal_count = false; set_state(FDC_STATE_IDLE); } byte_t FDC::in_data(word_t addr) { byte_t val; val = 0xff; switch (_state) { case FDC_STATE_RESULT: val = _cur_cmd->read_result(); DBG(2, form("KCemu/FDC/in_data", "FDC::in(): addr = %04x, val = %02x [%c] FDC_STATE_RESULT\n", addr, val, isprint(val) ? val : '.')); break; case FDC_STATE_DATA: val = read_byte(); DBG(2, form("KCemu/FDC/in_data", "FDC::in(): addr = %04x, val = %02x [%c] FDC_STATE_DATA\n", addr, val, isprint(val) ? val : '.')); break; default: break; } return val; } /* * data input from disk */ byte_t FDC::read_byte(void) { if (_cur_cmd) return _cur_cmd->read_byte(); return 0xff; } /* * data output to disk ??? */ void FDC::write_byte(byte_t val) { if (_cur_cmd) _cur_cmd->write_byte(val); } /* * command output to floppy controller */ void FDC::out_data(word_t addr, byte_t val) { switch (_state) { case FDC_STATE_IDLE: DBG(2, form("KCemu/FDC/out_data", "FDC::out(): addr = %04x, val = %02x [%c] FDC_STATE_IDLE\n", addr, val, isprint(val) ? val : '.')); _cur_cmd = _cmds[val & 0x1f]; _cur_cmd->start(val); break; case FDC_STATE_COMMAND: DBG(2, form("KCemu/FDC/out_data", "FDC::out(): addr = %04x, val = %02x [%c] FDC_STATE_COMMAND\n", addr, val, isprint(val) ? val : '.')); _cur_cmd->write_arg(val); break; case FDC_STATE_DATA: DBG(2, form("KCemu/FDC/out_data", "FDC::out(): addr = %04x, val = %02x [%c] FDC_STATE_DATA\n", addr, val, isprint(val) ? val : '.')); write_byte(val); break; default: break; } } void FDC::select_floppy(int floppy_nr) { DBG(2, form("KCemu/FDC/select_floppy", "FDC::select_floppy(): selecting floppy %d\n", floppy_nr)); _selected_unit = floppy_nr; _cur_floppy = _fstate[floppy_nr]; } Floppy * FDC::get_floppy(void) { if (_cur_floppy == 0) return 0; return _cur_floppy->get_floppy(); } Floppy * FDC::get_floppy(int idx) { if (idx < 0) return NULL; if (idx > 3) return NULL; return _fstate[idx]->get_floppy(); } int FDC::get_head(void) { if (_cur_floppy == 0) return -1; return _cur_floppy->get_head(); } int FDC::get_cylinder(void) { if (_cur_floppy == 0) return -1; return _cur_floppy->get_cylinder(); } int FDC::get_sector(void) { if (_cur_floppy == 0) return -1; return _cur_floppy->get_sector(); } void FDC::set_state(fdc_state_t state) { _state = state; byte_t msr = get_msr() & 0x0f; byte_t dio = get_msr() & ST_MAIN_DIO; switch (_state) { case FDC_STATE_IDLE: msr |= ST_MAIN_RQM; DBG(2, form("KCemu/FDC/state", "FDC::set_state(): FDC_STATE_IDLE -> MSR: %02x\n", msr)); break; case FDC_STATE_COMMAND: msr |= ST_MAIN_READ_WRITE; msr |= ST_MAIN_RQM; DBG(2, form("KCemu/FDC/state", "FDC::set_state(): FDC_STATE_COMMAND -> MSR: %02x\n", msr)); break; case FDC_STATE_EXECUTE: msr |= ST_MAIN_NON_DMA; msr |= ST_MAIN_DIO; DBG(2, form("KCemu/FDC/state", "FDC::set_state(): FDC_STATE_EXECUTE -> MSR: %02x\n", msr)); break; case FDC_STATE_DATA: msr |= ST_MAIN_READ_WRITE; msr |= ST_MAIN_NON_DMA; msr |= ST_MAIN_RQM; // don't change the direction register, this is set by the command // (1 while doing read, 0 while doing write command data transfer) msr |= dio; DBG(2, form("KCemu/FDC/state", "FDC::set_state(): FDC_STATE_DATA -> MSR: %02x\n", msr)); break; case FDC_STATE_RESULT: msr |= ST_MAIN_READ_WRITE; msr |= ST_MAIN_DIO; msr |= ST_MAIN_RQM; DBG(2, form("KCemu/FDC/state", "FDC::set_state(): FDC_STATE_RESULT -> MSR: %02x\n", msr)); break; } set_msr(0xf0, msr); } void FDC::callback(void *data) { long val = (long)data; switch (val & CB_MASK) { case CB_TYPE_SEEK: callback_seek(data); break; case CB_TYPE_INDEX: callback_index(data); break; default: DBG(0, form("KCemu/internal_error", "FDC::callback(): unknown callback %08x\n", val)); break; } } /** * Emulation of the index pulse generated by the floppy drive. * We assume the drive rotates with 300rpm, means 5 rotations * per second. */ void FDC::callback_index(void *data) { long index_value = ((long)data) & 1; byte_t input_gate = 0; if (_selected_device != 0) { int offset; if (index_value == 0) { offset = 1000; input_gate = 0x10; } else { offset = 350000; } add_callback(offset, this, (void *)(CB_TYPE_INDEX | (1 - index_value))); } set_input_gate(0x10, input_gate); } void FDC::callback_seek(void *data) { long unit = (long)data; byte_t unit_bit = 1 << (unit & 0xff); bool ok = (unit & 0x0100) == 0; DBG(2, form("KCemu/FDC/seek", "FDC::seek(): [%8Ld] finished seek %s, floppy %d\n", get_counter(), ok ? "ok" : "with error", unit & 0xff)); set_msr(unit_bit, 0); if (ok) { // seek ok set_ST0(ST_0_IC_MASK | ST_0_SEEK_END | ST_0_EC, ST_0_IC_NORMAL_TERMINATION | ST_0_SEEK_END); set_ST3(ST_3_READY | ST_3_TRACK_0, ST_3_READY | ST_3_TRACK_0); } else { // seek failed set_ST0(ST_0_IC_MASK | ST_0_SEEK_END | ST_0_EC, ST_0_IC_ABNORMAL_TERMINATION | ST_0_SEEK_END | ST_0_EC); set_ST3(ST_3_READY | ST_3_TRACK_0, 0); } set_input_gate(0x40, 0x00); } bool FDC::seek_internal(byte_t head, byte_t cylinder, byte_t sector) { if (_cur_floppy == 0) return false; _cur_floppy->set_head(head); _cur_floppy->set_cylinder(cylinder); _cur_floppy->set_sector(sector); bool seek_ok = _cur_floppy->seek(); return seek_ok; } bool FDC::seek(byte_t head, byte_t cylinder, byte_t sector) { if (_cur_floppy == 0) return false; int c1 = cylinder; int c2 = _cur_floppy->get_cylinder(); int diff = abs(c1 - c2); bool seek_ok = seek_internal(head, cylinder, sector); set_ST0(ST_0_SEEK_END, 0); set_input_gate(0x40, 0x40); int offset = diff * 1000 + 500; if (seek_ok) { DBG(2, form("KCemu/FDC/seek", "FDC::seek(): [%8Ld] starting seek to cylinder %d, diff = %d, floppy %d\n", get_counter(), cylinder, diff, _selected_unit)); add_callback(offset, this, (void *)(CB_TYPE_SEEK | _selected_unit)); } else { DBG(2, form("KCemu/FDC/seek", "FDC::seek(): [%8Ld] seek failed to cylinder %d, diff = %d, floppy %d\n", get_counter(), cylinder, diff, _selected_unit)); add_callback(offset, this, (void *)(CB_TYPE_SEEK | _selected_unit | 0x0100)); } byte_t unit_bit = 1 << _selected_unit; set_msr(unit_bit, unit_bit); return seek_ok; } void FDC::drive_select(byte_t val) { DBG(2, form("KCemu/FDC/drive_select", "FDC::drive_select(): output to drive select port, value = %02x\n", val)); val &= 0x0f; bool has_disc = false; for (int a = 0;a < 4;a++) { Floppy *floppy = get_floppy(a); if ((val & (1 << a)) && (floppy != NULL) && (floppy->get_sector_size() > 0)) has_disc = true; } if (has_disc) { DBG(2, form("KCemu/FDC/drive_select", "FDC::drive_select(): enable index-hole pulse generation%s\n", _selected_device == 0 ? "" : " (already running)")); if (_selected_device == 0) add_callback(20000, this, (void *)(CB_TYPE_INDEX)); _selected_device = val; } else { DBG(2, form("KCemu/FDC/drive_select", "FDC::drive_select(): stop index-hole pulse generation\n")); _selected_device = 0; } set_input_gate(0x10, 0x00); } byte_t FDC::get_input_gate(void) { return _INPUT_GATE; } void FDC::set_input_gate(byte_t mask, byte_t val) { _INPUT_GATE = ((_INPUT_GATE & ~mask) | (val & mask)); DBG(2, form("KCemu/FDC/input_gate", "FDC::set_input_gate(): INPUT_GATE: %02x\n", _INPUT_GATE)); } byte_t FDC::get_msr(void) { return _MSR; } void FDC::set_msr(byte_t mask, byte_t val) { _MSR = ((_MSR & ~mask) | (val & mask)); DBG(2, form("KCemu/FDC/MSR", "FDC::set_msr(): MSR: %02x\n", _MSR)); } /* * handle the terminal count signal (TC) * * when receiving high on this pin the floppy controller * aborts the running command (mostly read/write) and * goes into result phase */ void FDC::set_terminal_count(bool val) { if (_terminal_count == val) return; _terminal_count = val; if (!_terminal_count) return; if (_cur_cmd) _cur_cmd->finish_cmd(); else set_state(FDC_STATE_IDLE); } byte_t FDC::get_ST0(void) { set_ST0(ST_0_HEAD_ADDRESS, get_head() == 1 ? ST_0_HEAD_ADDRESS : 0); set_ST0(ST_0_UNIT_SELECT_MASK, _selected_unit); return _ST0; } byte_t FDC::get_ST1(void) { return _ST1; } byte_t FDC::get_ST2(void) { return _ST2; } byte_t FDC::get_ST3(void) { set_ST3(ST_3_READY, ST_3_READY); set_ST3(ST_3_TWO_SIDE, ST_3_TWO_SIDE); set_ST3(ST_3_WRITE_PROTECTED, 0); set_ST3(ST_3_TRACK_0, get_cylinder() == 0 ? ST_3_TRACK_0 : 0); set_ST3(ST_3_HEAD_ADDRESS, get_head() == 1 ? ST_3_HEAD_ADDRESS : 0); set_ST3(ST_3_UNIT_SELECT_MASK, _selected_unit); return _ST3; } void FDC::set_ST0(byte_t mask, byte_t val) { _ST0 = (~mask & _ST0) | (mask & val); DBG(2, form("KCemu/FDC/ST0", "FDC::set_ST0(): ST0: %02x\n", _ST0)); } void FDC::set_ST1(byte_t mask, byte_t val) { _ST1 = (~mask & _ST1) | (mask & val); DBG(2, form("KCemu/FDC/ST1", "FDC::set_ST1(): ST1: %02x\n", _ST1)); } void FDC::set_ST2(byte_t mask, byte_t val) { _ST2 = (~mask & _ST2) | (mask & val); DBG(2, form("KCemu/FDC/ST2", "FDC::set_ST2(): ST2: %02x\n", _ST2)); } void FDC::set_ST3(byte_t mask, byte_t val) { _ST3 = (~mask & _ST3) | (mask & val); DBG(2, form("KCemu/FDC/ST3", "FDC::set_ST3(): ST3: %02x\n", _ST3)); } void FDC::reset(bool power_on) { init(); } void FDC::reti(void) { } KCemu-0.5.1/src/kc/memory7.cc0000644001050700006200000001305611345001576015306 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/z80.h" #include "kc/memory7.h" #include "ui/ui.h" #include "libdbg/dbg.h" using namespace std; Memory7::Memory7(void) : Memory() { load_rom(SystemROM::ROM_KEY_SYSTEM, &_rom_os); load_rom(SystemROM::ROM_KEY_BASIC, &_rom_basic); load_rom(SystemROM::ROM_KEY_CHARGEN, &_rom_chargen); memset(&_irm[0], 0x70, 0x400); memory_group_t mem[] = { { &_m_scr, "-", 0x0000, 0x10000, 0, 256, 0, 1, -1 }, { &_m_ram, "RAM", 0x0000, 0x4000, &_ram[0], 0, 0, 1, -1 }, { &_m_basic, "BASIC", 0xc000, 0x2800, &_rom_basic[0], 0, 1, 1, -1 }, { &_m_os, "OS", 0xf000, 0x1000, &_rom_os[0], 0, 1, 1, -1 }, { &_m_irm_ec,"IRM (text)", 0xec00, 0x0400, &_irm[0x400], 1, 0, 1, -1 }, /* * dummy entry needed for get_irm() if color * expansion is not installed */ { &_m_irm_e8,"IRM (color)", 0xe800, 0x0400, &_irm[0], 1, 1, 1, -1 }, { 0, }, }; init_memory_groups(mem); reset(true); z80->register_ic(this); register_romdi_handler(this); set_romdi(false); } Memory7::~Memory7(void) { z80->unregister_ic(this); unregister_romdi_handler(this); delete _m_scr; delete _m_ram; delete _m_basic; delete _m_os; delete _m_irm_e8; delete _m_irm_ec; } byte_t Memory7::memRead8(word_t addr) { for (memory_list_t::iterator it = _memory_list.begin();it != _memory_list.end();it++) (*it)->memory_read_byte(addr); return _memrptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK]; } void Memory7::memWrite8(word_t addr, byte_t val) { for (memory_list_t::iterator it = _memory_list.begin();it != _memory_list.end();it++) (*it)->memory_write_byte(addr, val); _memwptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK] = val; } byte_t * Memory7::get_irm(void) { return (byte_t *)get_page_addr_r(0xe800); } byte_t * Memory7::get_char_rom(void) { return (byte_t *)_rom_chargen; } void Memory7::register_romdi_handler(ROMDIInterface *handler) { DBG(1, form("KCemu/Memory7/romdi", "Memory7::register_romdi_handler(): %p\n", handler)); _romdi_list.push_back(handler); } void Memory7::unregister_romdi_handler(ROMDIInterface *handler) { DBG(1, form("KCemu/Memory7/romdi", "Memory7::unregister_romdi_handler(): %p\n", handler)); _romdi_list.remove(handler); } void Memory7::set_romdi(bool val) { DBG(1, form("KCemu/Memory7/romdi", "Memory7::set_romdi(): %s\n", val ? "on" : "off")); _romdi = val; for (romdi_list_t::iterator it = _romdi_list.begin();it != _romdi_list.end();it++) (*it)->romdi(val); reload_mem_ptr(); } void Memory7::romdi(bool val) { DBG(1, form("KCemu/Memory7/romdi", "Memory7::romdi(): BASIC ROM %s\n", val ? "off" : "on")); _m_basic->set_active(!val); } void Memory7::register_memory_handler(MemoryInterface *handler) { _memory_list.push_back(handler); } void Memory7::unregister_memory_handler(MemoryInterface *handler) { _memory_list.remove(handler); } void Memory7::reset(bool power_on) { if (!power_on) return; scratch_mem(&_ram[0], 0x4000); scratch_mem(&_irm[0x0400], 0x0400); if (get_irm() != _irm) scratch_mem(&_irm[0x0], 0x0400); else memset(&_irm[0], 0x70, 0x400); /* * Clear the first 1k of ram with the system variables. This saves * some trouble with the initialization. */ memset(&_ram[0], 0, 0x400); /* * The CPM-Z9 boot module is enabled/disabled by writing to address * ranges f800h-fbffh/fc00h-ffffh. The delete cursor routine at * fa33h uses the cursor address (2dh/2eh) which is initialized by * using cursor row/column from 2bh/2ch (although after using the * cursor address first). * * If the cursor address holds random values we may get memory * writes at addresses that disable the boot module at power on. * * To prevent the following initialization to be overwritten in the * startup routine we also need to initialize the EOR (end of ram) * pointer. * * How is this supposed to work on the real machine? */ _ram[0x2b] = 0x01; /* column */ _ram[0x2c] = 0x01; /* row */ _ram[0x2d] = 0x55; /* cursor address low */ _ram[0x2e] = 0x55; /* cursor address high */ _ram[0x36] = 0x00; /* logical ram end low */ _ram[0x37] = 0xc0; /* logical ram end high */ } void Memory7::dumpCore(void) { ofstream os; os.open("core.z80"); cerr << "Memory: dumping core..." << endl; if (!os) { cerr << "Memory: can't write 'core.z80'" << endl; return; } for (int a = 0;a < 0x10000;a++) os.put(memRead8(a)); os.close(); cerr << "Memory: done." << endl; } KCemu-0.5.1/src/kc/mod_4m.cc0000644001050700006200000000423411345001576015064 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/mod_4m.h" Module4M::Module4M(Module4M &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { bool valid = true; for (int a = 0;a < 4;a++) { _master[a] = NULL; _module[a] = tmpl.get_master(a)->clone(); valid = valid & _module[a]->is_valid(); } set_valid(valid); } Module4M::Module4M(const char *name, byte_t id) : ModuleInterface(name, id, KC_MODULE_KC_85_3) { for (int a = 0;a < 4;a++) { char buf[100]; snprintf(buf, 100, "%s/%d", name, a); _master[a] = new Module1M(buf, id); _module[a] = NULL; } set_valid(true); } Module4M::~Module4M(void) { for (int a = 0;a < 4;a++) if (_module[a]) delete _module[a]; for (int a = 0;a < 4;a++) if (_master[a]) delete _master[a]; } Module1M * Module4M::get_master(int idx) { return _master[idx]; } byte_t Module4M::m_in(word_t addr) { int idx = (addr >> 8) & 3; return _module[idx]->m_in(addr & 0xfcff); } void Module4M::m_out(word_t addr, byte_t val) { int idx = (addr >> 8) & 3; _module[idx]->m_out(addr & 0xfcff, val); } ModuleInterface * Module4M::clone(void) { return new Module4M(*this); } void Module4M::reset(bool power_on) { for (int a = 0;a < 4;a++) _module[a]->reset(power_on); } KCemu-0.5.1/src/kc/z80.cc0000644001050700006200000002445711345001577014340 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/z80.h" #include "kc/daisy.h" #include "kc/timer.h" #include "kc/ports.h" #include "kc/memory.h" #include "kc/z80_fdc.h" #include "kc/cb_list.h" #include "sys/sysdep.h" #include "cmd/cmd.h" #include "ui/ui.h" #include "libdbg/dbg.h" using namespace std; static Z80 *self; // for the signal handler static void signalHandler(int sig); #if 0 unsigned long long rdtsc(void) { union { struct { unsigned long lo; unsigned long hi; } l; unsigned long long ll; } ret; __asm__ volatile ("rdtsc" : "=a" (ret.l.lo), "=d" (ret.l.hi)); return ret.ll; } #endif class CMD_single_step : public CMD { private: Z80 *_z80; public: CMD_single_step(Z80 *z80) : CMD("z80-single-step") { _z80 = z80; register_cmd("z80-single-step-on", 0); register_cmd("z80-single-step-off", 1); register_cmd("z80-single-step-toggle", 2); register_cmd("z80-execute-step", 3); register_cmd("z80-trace-on", 4); register_cmd("z80-trace-off", 5); register_cmd("z80-trace-toggle", 6); register_cmd("z80-trace-set-delay", 7); } void execute(CMD_Args *args, CMD_Context context) { switch (context) { case 0: z80->singlestep(true); break; case 1: z80->singlestep(false); break; case 2: z80->singlestep(!z80->singlestep()); break; case 3: z80->executestep(); break; case 4: z80->trace(true); break; case 5: z80->trace(false); break; case 6: z80->trace(!z80->trace()); break; case 7: if (args) { long delay = 1000 * args->get_long_arg("delay"); z80->tracedelay(delay); } break; } } }; Z80::Z80(void) { self = this; _context = z80ex_create(z80ex_mread_cb, this, z80ex_mwrite_cb, this, z80ex_pread_cb, this, z80ex_pwrite_cb, this, z80ex_intread_cb, this); z80ex_set_reti_callback(_context, z80ex_reti_cb, this); z80ex_reset(_context); const EmulationType &emulation_type = Preferences::instance()->get_system_type()->get_emulation_type(); z80ex_set_reg(_context, regPC, emulation_type.get_power_on_addr()); /* * FIXME: at least z1013 emulation breaks with the stackpointer * FIXME: initialized with 0xf000; the CP/M bootlader BL4 will * FIXME: overwrite it's own stack when clearing the screen :-( */ z80ex_set_reg(_context, regSP, 0x0000); _counter = 0; _debug = false; _trace = false; _singlestep = false; _executestep = false; _enable_floppy_cpu = false; _tracedelay = 100000; _irq_line = 0; _irq_mask = 1; _do_quit = false; } #if 0 static void print_regs(_Z80 *r) { int c1, c2; z80->printPC(); cout << "a=" << setw(2) << setfill('0') << hex << r->AF.B.l << ", bc=" << setw(4) << setfill('0') << hex << r->BC.W << ", de=" << setw(4) << setfill('0') << hex << r->DE.W << ", hl=" << setw(4) << setfill('0') << hex << r->HL.W << endl; c1 = RdZ80(r->DE.W) & 0xff; c2 = RdZ80(r->HL.W) & 0xff; cout << "(de)=" << setw(2) << setfill('0') << hex << c1 << " '" << (isprint(c1) ? c1 : '.') << "' " << "(hl)=" << setw(2) << setfill('0') << hex << c2 << " '" << (isprint(c2) ? c2 : '.') << "'" << endl; } #endif void Z80::executestep(void) { _executestep = true; } void Z80::singlestep(bool value) { _singlestep = value; } bool Z80::singlestep() { return _singlestep; } bool Z80::run(void) { int a; CMD *cmd; signal(SIGINT, signalHandler); if (timer) timer->start(); cmd = new CMD_single_step(this); a = 0; while (!_do_quit) { // if (DBG_check("KCemu/Z80core/trace")) // debug(true); //if (_regs.PC.W <= 0x8000) //z80->printPC(); cout << endl; //if (_regs.PC.W == 0x0170) //z80->debug(true); if (_singlestep) { ui->update(true); if (!_executestep) { sys_usleep(100000); continue; } CMD_EXEC("single-step-executed"); _executestep = false; } else if (_trace) { ui->update(); CMD_EXEC("single-step-executed"); sys_usleep(_tracedelay); } if (_debug) { int addr = getPC(); char buf[80]; int t, t2; int base_addr; printf("%04X: ", addr); addr += z80ex_dasm(buf, 80, 0, &t, &t2, z80ex_dasm_readbyte_cb, addr, &base_addr); printf("%-15s t=%d", buf, t); if (t2) printf("/%d", t2); printf("\n"); } int tstates = z80ex_step(_context); if (_irq_line && z80ex_int_possible(_context)) { word_t irq = daisy->irq_ack(); if (irq != IRQ_NOT_ACK) { _next_irq = (byte_t)irq; z80ex_int(_context); } } if (_enable_floppy_cpu && fdc_z80) fdc_z80->execute(); _counter += tstates; _cb_list.run_callbacks(_counter); } return false; } void Z80::quit(void) { _do_quit = true; } void Z80::addCallback(unsigned long long offset, Callback *cb, void *data) { _cb_list.add_callback(getCounter() + offset, cb, data); } void Z80::remove_callback_listener(Callback *cb) { _cb_list.remove_callback_listener(cb); } bool Z80::debug(void) { return _debug; } void Z80::debug(bool value) { _debug = value; if (_enable_floppy_cpu && fdc_z80) fdc_z80->trace(value); } bool Z80::trace(void) { return _trace; //return _regs.Trace; } void Z80::trace(bool value) { _trace = value; //if (level < 0) level = 0; //_regs.Trace = level; } void Z80::tracedelay(long delay) { _tracedelay = delay; } void Z80::reset(word_t pc, bool power_on) { _cb_list.clear(); for (ic_list_t::iterator it = _ic_list.begin();it != _ic_list.end();it++) (*it)->reset(power_on); module->reset(power_on); z80ex_reset(_context); z80ex_set_reg(_context, regPC, pc); /* * FIXME: at least z1013 emulation breaks with the stackpointer * FIXME: initialized with 0xf000; the CP/M bootlader BL4 will * FIXME: overwrite it's own stack when clearing the screen :-( */ z80ex_set_reg(_context, regSP, 0x0000); halt_floppy_cpu(power_on); if (timer) timer->start(); } void Z80::reset(void) { const EmulationType &emulation_type = Preferences::instance()->get_system_type()->get_emulation_type(); reset(emulation_type.get_reset_addr(), false); } void Z80::power_on(void) { const EmulationType &emulation_type = Preferences::instance()->get_system_type()->get_emulation_type(); reset(emulation_type.get_power_on_addr(), true); } void Z80::jump(word_t pc) { z80ex_set_reg(_context, regPC, pc); } void Z80::register_ic(InterfaceCircuit *h) { _ic_list.push_back(h); } void Z80::unregister_ic(InterfaceCircuit *h) { _ic_list.remove(h); } dword_t Z80::get_irq_mask(void) { dword_t val = _irq_mask; if (val == 0) { DBG(0, form("KCemu/warning", "get_irq_mask(): too many interrupt sources!\n")); } _irq_mask <<= 1; return val; } void Z80::set_irq_line(dword_t mask) { dword_t irq_line = _irq_line | mask; DBG(2, form("KCemu/Z80/irq", "set_irq_line(): %04x: %04x -> %04x\n", mask, _irq_line, irq_line)); _irq_line = irq_line; } void Z80::reset_irq_line(dword_t mask) { _irq_line = _irq_line & (~mask); DBG(2, form("KCemu/Z80/irq", "reset_irq_line(): %04x -> %04x\n", mask, _irq_line)); } void Z80::reti(void) { daisy->reti(); } void Z80::nmi(void) { z80ex_nmi(_context); } void Z80::printPC(void) { cout << setw(4) << setfill('0') << hex << getPC() << "h: "; } void Z80::start_floppy_cpu(void) { if (fdc_z80) { fdc_z80->reset(); _enable_floppy_cpu = true; } } void Z80::halt_floppy_cpu(bool power_on) { if (fdc_z80) { fdc_z80->reset(power_on); _enable_floppy_cpu = false; } } Z80EX_BYTE Z80::z80ex_dasm_readbyte_cb(Z80EX_WORD addr, void *user_data) { return memory->memRead8(addr); } Z80EX_BYTE Z80::z80ex_mread_cb(Z80EX_CONTEXT *cpu, Z80EX_WORD addr, int m1_state, void *user_data) { return memory->memRead8(addr); } void Z80::z80ex_mwrite_cb(Z80EX_CONTEXT *cpu, Z80EX_WORD addr, Z80EX_BYTE value, void *user_data) { memory->memWrite8(addr, value); } Z80EX_BYTE Z80::z80ex_pread_cb(Z80EX_CONTEXT *cpu, Z80EX_WORD port, void *user_data) { byte_t value; value = ports->in(port); DBG(2, form("KCemu/Z80/pread_cb", "Z80::z80ex_pread_cb(): %04x -> %02x\n", port, value)); return value; } void Z80::z80ex_pwrite_cb(Z80EX_CONTEXT *cpu, Z80EX_WORD port, Z80EX_BYTE value, void *user_data) { DBG(2, form("KCemu/Z80/pwrite_cb", "Z80::z80ex_pwrite_cb(): %04x -> %02x\n", port, value)); ports->out(port, value); } Z80EX_BYTE Z80::z80ex_intread_cb(Z80EX_CONTEXT *cpu, void *user_data) { Z80 *z80 = (Z80 *)user_data; DBG(2, form("KCemu/Z80/intread_cb", "Z80::z80ex_intread_cb(): %02x\n", z80->_next_irq)); return z80->_next_irq; } void Z80::z80ex_reti_cb(Z80EX_CONTEXT *cpu, void *user_data) { Z80 *z80 = (Z80 *)user_data; DBG(2, form("KCemu/Z80/reti_cb", "Z80::z80ex_reti_cb(): RETI\n")); z80->reti(); } static void signalHandler(int sig) { static bool flag = false; cout << "\n *** signal caught (" << sig << ") ***\n\n"; signal(sig, signalHandler); flag = !flag; self->debug(flag); } KCemu-0.5.1/src/kc/kramermc/0000755001050700006200000000000011412404772015174 5ustar glaubitzfbedvKCemu-0.5.1/src/kc/kramermc/memory.cc0000644001050700006200000000762711345001576017027 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/types.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/kramermc/memory.h" using namespace std; MemoryKramerMC::MemoryKramerMC(void) : Memory() { load_rom(SystemROM::ROM_KEY_SYSTEM, &_rom_io_monitor); load_rom(SystemROM::ROM_KEY_DEBUGGER, &_rom_debugger); load_rom(SystemROM::ROM_KEY_REASSEMBLER, &_rom_reassembler); load_rom(SystemROM::ROM_KEY_BASIC, &_rom_basic); load_rom(SystemROM::ROM_KEY_EDITOR, &_rom_editor); load_rom(SystemROM::ROM_KEY_ASSEMBLER, &_rom_assembler); load_rom(SystemROM::ROM_KEY_CHARGEN, &_rom_chargen); memory_group_t mem[] = { { &_m_scr, "-", 0x0000, 0x10000, 0, 256, 0, 1, -1 }, { &_m_rom_io_monitor, "IO-Monitor", 0x0000, 0x0400, &_rom_io_monitor[0], 1, 1, 1, -1 }, { &_m_rom_debugger, "Debugger", 0x0400, 0x0400, &_rom_debugger[0], 1, 1, 1, -1 }, { &_m_rom_reassembler, "Reassembler", 0x0800, 0x0400, &_rom_reassembler[0], 1, 1, 1, -1 }, { &_m_ram_0c00h, "RAM (system)", 0x0c00, 0x0400, &_ram_0c00h[0], 1, 0, 1, -1 }, { &_m_ram_1000h, "RAM (statisch)", 0x1000, 0x3000, &_ram_1000h[0], 1, 0, 1, -1 }, { &_m_ram_4000h, "RAM (dynamisch)", 0x4000, 0x4000, &_ram_4000h[0], 1, 0, 1, -1 }, { &_m_rom_basic, "BASIC", 0x8000, 0x3000, &_rom_basic[0], 1, 1, 1, -1 }, { &_m_rom_editor, "Editor", 0xc000, 0x0400, &_rom_editor[0], 1, 1, 1, -1 }, { &_m_rom_assembler, "Assembler", 0xc400, 0x1c00, &_rom_assembler[0], 1, 1, 1, -1 }, { &_m_irm, "IRM", 0xfc00, 0x0400, &_irm[0], 1, 0, 1, -1 }, { 0, }, }; init_memory_groups(mem); reset(true); z80->register_ic(this); } MemoryKramerMC::~MemoryKramerMC(void) { z80->unregister_ic(this); delete _m_scr; delete _m_rom_io_monitor; delete _m_rom_debugger; delete _m_rom_reassembler; delete _m_ram_0c00h; delete _m_ram_1000h; delete _m_ram_4000h; delete _m_rom_basic; delete _m_rom_editor; delete _m_rom_assembler; delete _m_irm; } byte_t MemoryKramerMC::memRead8(word_t addr) { return _memrptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK]; } void MemoryKramerMC::memWrite8(word_t addr, byte_t val) { _memwptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK] = val; } byte_t * MemoryKramerMC::get_irm(void) { return _irm; } byte_t * MemoryKramerMC::get_char_rom(void) { return _rom_chargen; } void MemoryKramerMC::reset(bool power_on) { if (!power_on) return; scratch_mem(&_irm[0], 0x0400); scratch_mem(&_ram_0c00h[0], 0x0400); scratch_mem(&_ram_1000h[0], 0x3000); scratch_mem(&_ram_4000h[0], 0x4000); } void MemoryKramerMC::dumpCore(void) { ofstream os; os.open("core.z80"); cerr << "Memory: dumping core..." << endl; if (!os) { cerr << "Memory: can't write 'core.z80'" << endl; return; } for (int a = 0;a < 0x10000;a++) os.put(memRead8(a)); os.close(); cerr << "Memory: done." << endl; } KCemu-0.5.1/src/kc/kramermc/pio.cc0000644001050700006200000000400211345001576016266 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/kramermc/pio.h" #include "libdbg/dbg.h" PIOKramerMC::PIOKramerMC(void) { } PIOKramerMC::~PIOKramerMC(void) { } byte_t PIOKramerMC::in(word_t addr) { byte_t val = 0xff; switch (addr & 3) { case 0: val = in_A_DATA(); break; case 1: val = in_B_DATA(); break; case 2: val = in_A_CTRL(); break; case 3: val = in_B_CTRL(); break; } DBG(2, form("KCemu/PIO/kramermc/in", "PIOKramerMC::in(): addr = %04x, val = %02x\n", addr, val)); return val; } void PIOKramerMC::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/kramermc/out", "PIOKramerMC::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } void PIOKramerMC::change_A(byte_t changed, byte_t val) { } void PIOKramerMC::change_B(byte_t changed, byte_t val) { } KCemu-0.5.1/src/kc/kramermc/Makefile.am0000644001050700006200000000027210527416075017236 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in noinst_LIBRARIES = libkramermc.a INCLUDES = -I../../../include libkramermc_a_SOURCES = \ pio.cc \ memory.cc \ keyboard.cc KCemu-0.5.1/src/kc/kramermc/keyboard.cc0000644001050700006200000000700611345001576017306 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/z80.h" #include "kc/keys.h" #include "kc/kramermc/keydef.h" #include "kc/kramermc/keyboard.h" #include "libdbg/dbg.h" KeyboardKramerMC::KeyboardKramerMC(void) { init(); z80->register_ic(this); } KeyboardKramerMC::~KeyboardKramerMC(void) { z80->unregister_ic(this); } void KeyboardKramerMC::init(void) { _row = 0; _keybuf.code = -1; } int KeyboardKramerMC::decode_key(int keysym, bool press) { return __keys[keysym]; } void KeyboardKramerMC::keyPressed(int keysym, int keycode) { int k = decode_key(keysym, true); if (k == -1) return; int mod = (k & 0xff00) >> 8; int key = k & 0xff; if (_keybuf.code != -1) if ((_keybuf.sym1 != mod) || (_keybuf.sym2 != 0)) return; if (mod == 0) { _keybuf.sym1 = key; _keybuf.sym2 = 0; } else { _keybuf.sym1 = mod; _keybuf.sym2 = key; z80->addCallback(MODIFIER_PRESS_DELAY, this, (void *)0); } _keybuf.code = keycode; DBG(2, form("KCemu/keyboard/kramermc/key_press", "##### Keyboard: keyPressed [%03x/%02x] {%02x:%02x:%02x}\n", keysym, k, _keybuf.sym1, _keybuf.sym2, _keybuf.code)); } void KeyboardKramerMC::keyReleased(int keysym, int keycode) { _keybuf.code = -1; DBG(2, form("KCemu/keyboard/kramermc/key_press", "##### Keyboard: keyPressed [%03x/%02x] {%02x:%02x:%02x}\n", keysym, keycode, _keybuf.sym1, _keybuf.sym2, _keybuf.code)); } void KeyboardKramerMC::replayString(const char *text) { } void KeyboardKramerMC::callback(void *data) { long val = (long)data; if (val == 0) { /* * remove possible shift or control state */ _keybuf.sym1 = 0; z80->addCallback(MODIFIER_RELEASE_DELAY, this, (void *)1); //printf("{remove shift}\n"); } else { _keybuf.sym1 = _keybuf.sym2; _keybuf.sym2 = 0; //printf("{2nd key}\n"); } } int KeyboardKramerMC::callback_A_in(void) { return -1; } void KeyboardKramerMC::callback_A_out(byte_t val) { _row = ((val >> 1) & 0x07) + 1; } int KeyboardKramerMC::callback_B_in(void) { int col = 0; static int old_val = -1; int v = _keybuf.sym1; //if (v != old_val) //printf("[%02x - %3d]\n", v, v); old_val = v; if (_keybuf.code != -1) if (_keybuf.sym1 > 0) { if (_row == (v & 0x0f)) col |= 1 << (((v >> 4) & 0x0f) - 1); } return col ^ 0xff; } void KeyboardKramerMC::callback_B_out(byte_t val) { } void KeyboardKramerMC::reset(bool power_on) { init(); } void KeyboardKramerMC::reti(void) { } KCemu-0.5.1/src/kc/kramermc/Makefile.in0000644001050700006200000004105411412404772017245 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/kc/kramermc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libkramermc_a_AR = $(AR) $(ARFLAGS) libkramermc_a_LIBADD = am_libkramermc_a_OBJECTS = pio.$(OBJEXT) memory.$(OBJEXT) \ keyboard.$(OBJEXT) libkramermc_a_OBJECTS = $(am_libkramermc_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(libkramermc_a_SOURCES) DIST_SOURCES = $(libkramermc_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libkramermc.a INCLUDES = -I../../../include libkramermc_a_SOURCES = \ pio.cc \ memory.cc \ keyboard.cc all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/kc/kramermc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/kc/kramermc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libkramermc.a: $(libkramermc_a_OBJECTS) $(libkramermc_a_DEPENDENCIES) -rm -f libkramermc.a $(libkramermc_a_AR) libkramermc.a $(libkramermc_a_OBJECTS) $(libkramermc_a_LIBADD) $(RANLIB) libkramermc.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyboard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/kc/memory4.cc0000644001050700006200000003513411345001576015304 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/z80.h" #include "kc/memory4.h" #include "kc/mod_rom.h" #include "ui/ui.h" #include "libdbg/dbg.h" using namespace std; Memory4::Memory4(void) { if (Preferences::instance()->get_kc_type() == KC_TYPE_85_4) init_4(); else init_5(); } void Memory4::init_4(void) { _ram_size = 0x10000; _ram = new byte_t[_ram_size]; _rom_caosc = new byte_t[0x1000]; _rom_caose = new byte_t[0x2000]; _rom_basic = new byte_t[0x2000]; load_rom(SystemROM::ROM_KEY_CAOSC, &_rom_caosc[0]); load_rom(SystemROM::ROM_KEY_CAOSE, &_rom_caose[0]); load_rom(SystemROM::ROM_KEY_BASIC, &_rom_basic[0]); memory_group_t mem[] = { { &_m_scr, "-", 0x0000, 0x10000, 0, 256, 0, 1, -1 }, { &_m_ram_0, "RAM 0", 0x0000, 0x4000, &_ram[0x8000], 0, 0, 1, -1 }, { &_m_ram_4, "RAM 4", 0x4000, 0x4000, &_ram[0xc000], 4, 0, 1, -1 }, { &_m_ram_8[ 0], "RAM 8 (0)", 0x8000, 0x4000, &_ram[0x0000], 3, 0, 1, -1 }, { &_m_ram_8[ 1], "RAM 8 (1)", 0x8000, 0x4000, &_ram[0x4000], 3, 0, 0, -1 }, { &_m_irm_0p, "IRM 0 Pixel", 0x8000, 0x2800, &_irm0[0], 1, 0, 1, -1 }, { &_m_irm_0c, "IRM 0 Color", 0x8000, 0x2800, &_irm0[0x4000], 1, 0, 0, -1 }, { &_m_irm_1p, "IRM 1 Pixel", 0x8000, 0x2800, &_irm1[0], 1, 0, 0, -1 }, { &_m_irm_1c, "IRM 1 Color", 0x8000, 0x2800, &_irm1[0x4000], 1, 0, 0, -1 }, { &_m_irm_0px, "IRM 0 Pixel *", 0xa800, 0x1800, &_irm0[0x2800], 1, 0, 1, -1 }, { &_m_irm_0cx, "IRM 0 Color *", 0xa800, 0x1800, &_irm0[0x6800], 1, 0, 0, -1 }, { &_m_irm_1px, "IRM 1 Pixel *", 0xa800, 0x1800, &_irm1[0x2800], 1, 0, 0, -1 }, { &_m_irm_1cx, "IRM 1 Color *", 0xa800, 0x1800, &_irm1[0x6800], 1, 0, 0, -1 }, { &_m_caos_c, "CAOS c000h", 0xc000, 0x1000, &_rom_caosc[0], 2, 1, 0, -1 }, { &_m_caos_e, "CAOS e000h", 0xe000, 0x2000, &_rom_caose[0], 2, 1, 1, -1 }, { &_m_basic, "BASIC", 0xc000, 0x2000, &_rom_basic[0], 2, 1, 0, -1 }, { 0, }, }; init_memory_groups(mem); for (int a = 2;a < 16;a++) _m_ram_8[a] = NULL; _m_user[0] = _m_basic; _m_user[1] = _m_basic; _m_user[2] = _m_basic; _m_user[3] = _m_basic; reset(true); z80->register_ic(this); } void Memory4::init_5(void) { _ram_size = 0x40000; _ram = new byte_t[_ram_size]; _rom_caosc = new byte_t[0x2000]; _rom_caose = new byte_t[0x2000]; _rom_basic = new byte_t[0x8000]; load_rom(SystemROM::ROM_KEY_CAOSC, &_rom_caosc[0]); load_rom(SystemROM::ROM_KEY_CAOSE, &_rom_caose[0]); load_rom(SystemROM::ROM_KEY_BASIC, &_rom_basic[0]); memory_group_t mem[] = { { &_m_scr, "-", 0x0000, 0x10000, 0, 256, 0, 1, -1 }, { &_m_ram_0, "RAM 0", 0x0000, 0x4000, &_ram[0x38000], 0, 0, 1, -1 }, { &_m_ram_4, "RAM 4", 0x4000, 0x4000, &_ram[0x3c000], 4, 0, 1, -1 }, { &_m_ram_8[ 0], "RAM 8 (0)", 0x8000, 0x4000, &_ram[0x00000], 3, 0, 1, -1 }, { &_m_ram_8[ 1], "RAM 8 (1)", 0x8000, 0x4000, &_ram[0x04000], 3, 0, 0, -1 }, { &_m_ram_8[ 2], "RAM 8 (2)", 0x8000, 0x4000, &_ram[0x08000], 3, 0, 0, -1 }, { &_m_ram_8[ 3], "RAM 8 (3)", 0x8000, 0x4000, &_ram[0x0c000], 3, 0, 0, -1 }, { &_m_ram_8[ 4], "RAM 8 (4)", 0x8000, 0x4000, &_ram[0x10000], 3, 0, 0, -1 }, { &_m_ram_8[ 5], "RAM 8 (5)", 0x8000, 0x4000, &_ram[0x14000], 3, 0, 0, -1 }, { &_m_ram_8[ 6], "RAM 8 (6)", 0x8000, 0x4000, &_ram[0x18000], 3, 0, 0, -1 }, { &_m_ram_8[ 7], "RAM 8 (7)", 0x8000, 0x4000, &_ram[0x1c000], 3, 0, 0, -1 }, { &_m_ram_8[ 8], "RAM 8 (8)", 0x8000, 0x4000, &_ram[0x20000], 3, 0, 0, -1 }, { &_m_ram_8[ 9], "RAM 8 (9)", 0x8000, 0x4000, &_ram[0x24000], 3, 0, 0, -1 }, { &_m_ram_8[10], "RAM 8 (10)", 0x8000, 0x4000, &_ram[0x28000], 3, 0, 0, -1 }, { &_m_ram_8[11], "RAM 8 (11)", 0x8000, 0x4000, &_ram[0x2c000], 3, 0, 0, -1 }, { &_m_ram_8[12], "RAM 8 (12)", 0x8000, 0x4000, &_ram[0x30000], 3, 0, 0, -1 }, { &_m_ram_8[13], "RAM 8 (13)", 0x8000, 0x4000, &_ram[0x34000], 3, 0, 0, -1 }, { &_m_ram_8[14], "RAM 8 (14)", 0x8000, 0x4000, &_ram[0x38000], 3, 0, 0, -1 }, { &_m_ram_8[15], "RAM 8 (15)", 0x8000, 0x4000, &_ram[0x3c000], 3, 0, 0, -1 }, { &_m_irm_0p, "IRM 0 Pixel", 0x8000, 0x2800, &_irm0[0], 1, 0, 1, -1 }, { &_m_irm_0c, "IRM 0 Color", 0x8000, 0x2800, &_irm0[0x4000], 1, 0, 0, -1 }, { &_m_irm_1p, "IRM 1 Pixel", 0x8000, 0x2800, &_irm1[0], 1, 0, 0, -1 }, { &_m_irm_1c, "IRM 1 Color", 0x8000, 0x2800, &_irm1[0x4000], 1, 0, 0, -1 }, { &_m_irm_0px, "IRM 0 Pixel *", 0xa800, 0x1800, &_irm0[0x2800], 1, 0, 1, -1 }, { &_m_irm_0cx, "IRM 0 Color *", 0xa800, 0x1800, &_irm0[0x6800], 1, 0, 0, -1 }, { &_m_irm_1px, "IRM 1 Pixel *", 0xa800, 0x1800, &_irm1[0x2800], 1, 0, 0, -1 }, { &_m_irm_1cx, "IRM 1 Color *", 0xa800, 0x1800, &_irm1[0x6800], 1, 0, 0, -1 }, { &_m_caos_c, "CAOS c000h", 0xc000, 0x2000, &_rom_caosc[0], 2, 1, 0, -1 }, { &_m_caos_e, "CAOS e000h", 0xe000, 0x2000, &_rom_caose[0], 2, 1, 1, -1 }, { &_m_user[3], "BASIC", 0xc000, 0x2000, &_rom_basic[0x6000], 2, 1, 0, -1 }, { &_m_user[2], "USER 0", 0xc000, 0x2000, &_rom_basic[0x4000], 2, 1, 0, -1 }, { &_m_user[1], "USER 1", 0xc000, 0x2000, &_rom_basic[0x2000], 2, 1, 0, -1 }, { &_m_user[0], "USER 2", 0xc000, 0x2000, &_rom_basic[0x0000], 2, 1, 0, -1 }, { 0, }, }; init_memory_groups(mem); _m_basic = _m_user[3]; reset(true); z80->register_ic(this); } Memory4::~Memory4(void) { z80->unregister_ic(this); } byte_t Memory4::memRead8(word_t addr) { return _memrptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK]; } void Memory4::memWrite8(word_t addr, byte_t val) { _memwptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK] = val; } byte_t * Memory4::get_irm(void) { return _display_screen1 ? &_irm1[0] : &_irm0[0]; } byte_t * Memory4::get_char_rom(void) { return (byte_t *)0; } void Memory4::dumpCore(void) { ofstream os; os.open("core.z80"); DBG(0, form("KCemu/Memory/4/core", "Memory: dumping core...\n")); if (!os) { cerr << "can't write 'core.z80'\n"; return; } os.write((char *)_ram, 0x10000); os.write((char *)_irm0, 0x8000); os.write((char *)_irm1, 0x8000); os.close(); } void Memory4::configureIRM(void) { if (!_enable_irm) { _m_irm_0px->set_active(false); _m_irm_0cx->set_active(false); _m_irm_1px->set_active(false); _m_irm_1cx->set_active(false); return; } if (_caos_e || !_caos_c) { /* default, shared segment in screen 0 / pixel */ _m_irm_0px->set_active(true); _m_irm_0cx->set_active(false); _m_irm_1px->set_active(false); _m_irm_1cx->set_active(false); } else { if (_access_screen1) { _m_irm_0px->set_active(false); _m_irm_0cx->set_active(false); _m_irm_1px->set_active(!_access_color); _m_irm_1cx->set_active(_access_color); } else { _m_irm_0px->set_active(!_access_color); _m_irm_0cx->set_active(_access_color); _m_irm_1px->set_active(false); _m_irm_1cx->set_active(false); } } } void Memory4::enableCAOS_C(int v) { DBG(0, form("KCemu/Memory/4/switch", "Memory: CAOS C %s\n", v ? "enabled" : "disabled")); _caos_c = v; _m_caos_c->set_active(v); configureIRM(); reload_mem_ptr(); } void Memory4::enableCAOS_E(int v) { DBG(0, form("KCemu/Memory/4/switch", "Memory: CAOS E %s\n", v ? "enabled" : "disabled")); _caos_e = v; _m_caos_e->set_active(v); configureIRM(); reload_mem_ptr(); } void Memory4::enableIRM(int v) { _enable_irm = v; if (v) { if (_access_screen1) { _m_irm_0p->set_active(false); _m_irm_0c->set_active(false); _m_irm_1p->set_active(!_access_color); _m_irm_1c->set_active(_access_color); } else { _m_irm_0p->set_active(!_access_color); _m_irm_0c->set_active(_access_color); _m_irm_1p->set_active(false); _m_irm_1c->set_active(false); } } else { _m_irm_0p->set_active(false); _m_irm_0c->set_active(false); _m_irm_1p->set_active(false); _m_irm_1c->set_active(false); } configureIRM(); reload_mem_ptr(); } void Memory4::enableCOLOR(int v) { _access_color = v; enableIRM(_enable_irm); } void Memory4::displaySCREEN_1(int v) { DBG(0, form("KCemu/Memory/4/switch", "Memory: display SCREEN %d\n", v)); _display_screen1 = (v != 0); } void Memory4::enableSCREEN_1(int v) { DBG(0, form("KCemu/Memory/4/switch", "Memory: enable SCREEN %d\n", v ? 1 : 0)); _access_screen1 = v; enableIRM(_enable_irm); } void Memory4::enableRAM_0(int v) { DBG(0, form("KCemu/Memory/4/switch", "Memory: RAM 0 %s\n", v ? "enabled" : "disabled")); _m_ram_0->set_active(v); reload_mem_ptr(); } void Memory4::protectRAM_0(int v) { DBG(0, form("KCemu/Memory/4/switch", "Memory: RAM 0 %s\n", v ? "read/write" : "readonly")); _m_ram_0->set_readonly(!v); reload_mem_ptr(); } void Memory4::enableRAM_4(int v) { DBG(0, form("KCemu/Memory/4/switch", "Memory: RAM 4 %s\n", v ? "enabled" : "disabled")); _m_ram_4->set_active(v); reload_mem_ptr(); } void Memory4::protectRAM_4(int v) { DBG(0, form("KCemu/Memory/4/switch", "Memory: RAM 4 %s\n", v ? "read/write" : "readonly")); _m_ram_4->set_readonly(!v); reload_mem_ptr(); } void Memory4::configureRAM_8(void) { /* * The lower 4 bits in _block_ram_8 configure the * ram block that is accessed (which includes the * prepared internal extension to 256k RAM. * * Bit 8 is set if the RAM is disabled * (PIO port B bit 5) * */ for (int a = 0;a < 16;a++) if (_m_ram_8[a]) _m_ram_8[a]->set_active(_block_ram_8 == a); reload_mem_ptr(); } void Memory4::enableRAM_8(int v) { if (v) _block_ram_8 &= 0x0f; else _block_ram_8 |= 0x80; DBG(1, form("KCemu/Memory/4/switch", "Memory: RAM 8 BLOCK %s (0x%02x)\n", v ? "enabled" : "disabled", _block_ram_8)); configureRAM_8(); } void Memory4::selectRAM_8(int segment) { /* * http://www.iee.et.tu-dresden.de/~kc-club/02/KCN94-04/KCN94-04-07.HTML * * 256 kByte on Board ... der erste Schritt zum KC 85/5? * von Mario Leubner * * Segment Block SWITCH 3 .. (f�r wr/on) * 0 RAM8 E (RAM0) 3B (legt RAM0 zus�tzlich auf 8000H) * 1 RAM8 F (RAM4) 3F (legt RAM4 zus�tzlich auf 8000H) * 2 RAM8 0 03 (bisher auch Block 0) * 3 RAM8 1 07 (bisher auch Block 1) * 4 RAM8 2 0B (ab hier neu) * 5 RAM8 3 0F * 6 RAM8 4 13 * 7 RAM8 5 17 * 8 RAM8 6 1B * 9 RAM8 7 1F * 10 RAM8 8 23 * 11 RAM8 9 27 * 12 RAM8 A 2B * 13 RAM8 B 2F * 14 RAM8 C 33 * 15 RAM8 D 37 * */ int block = segment - 2; if (block < 0) block += 16; _block_ram_8 = (_block_ram_8 & 0xf0) | (block & 0x0f); DBG(1, form("KCemu/Memory/4/switch", "Memory: RAM 8 SEGMENT %d BLOCK %d (0x%02x)\n", segment, block, _block_ram_8)); configureRAM_8(); } void Memory4::protectRAM_8(int v) { DBG(0, form("KCemu/Memory/4/switch", "Memory: RAM 8 %s\n", v ? "read/write" : "readonly")); for (int a = 0;a < 16;a++) if (_m_ram_8[a]) _m_ram_8[a]->set_readonly(!v); reload_mem_ptr(); } void Memory4::configureROM_C(void) { /* * The lower 2 bits in _block_rom_c configure the * rom block that is accessed. * * Bit 8 is set if the ROM is disabled * */ for (int a = 0;a < 4;a++) if (_m_user[a]) _m_user[a]->set_active(_block_rom_c == a); reload_mem_ptr(); } void Memory4::enableBASIC_C(int v) { if (v) _block_rom_c &= 0x03; else _block_rom_c |= 0x80; DBG(0, form("KCemu/Memory/4/switch", "Memory: BASIC C %s (0x%02x)\n", v ? "enabled" : "disabled", _block_rom_c)); configureROM_C(); } void Memory4::selectROM_C(int segment) { /* * * Segment ROM Block Program in default ROM * 3 BASIC KC-BASIC * 2 USER 1 KC-Debugger (TEMO/REASS) * 1 USER 2 EDAS V1.6 * 0 USER 3 KC-FORTH */ _block_rom_c = (_block_rom_c & 0xfc) | (segment & 0x03); DBG(1, form("KCemu/Memory/4/switch", "Memory: BASIC C SEGMENT %d (0x%02x)\n", segment, _block_rom_c)); configureROM_C(); } void Memory4::reset(bool power_on) { _caos_c = false; _caos_e = true; _enable_irm = true; _block_ram_8 = 0; _block_rom_c = 0x83; // disabled, segment 3 (BASIC) _access_color = false; _access_screen1 = false; _display_screen1 = false; _m_ram_0->set_active(true); _m_ram_4->set_active(true); _m_irm_0p->set_active(true); _m_irm_0c->set_active(false); _m_irm_1p->set_active(false); _m_irm_1c->set_active(false); _m_irm_0px->set_active(true); _m_irm_0cx->set_active(false); _m_irm_1px->set_active(false); _m_irm_1cx->set_active(false); _m_caos_c->set_active(false); _m_caos_e->set_active(true); for (int a = 0;a < 16;a++) if (_m_ram_8[a]) _m_ram_8[a]->set_active(a == 0); _m_basic->set_active(false); for (int a = 0;a < 4;a++) if (_m_user[a]) _m_user[a]->set_active(0); reload_mem_ptr(); if (!power_on) return; scratch_mem(&_ram[0],_ram_size); scratch_mem(&_irm0[0], 0x8000); scratch_mem(&_irm1[0], 0x8000); } KCemu-0.5.1/src/kc/mod_4131.cc0000644001050700006200000000504511345001576015135 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/pio1.h" #include "kc/plotter.h" #include "kc/mod_4131.h" #include "libdbg/dbg.h" using namespace std; ModuleXY4131::ModuleXY4131(ModuleXY4131 &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _master = false; pio->register_callback_B_in(this); pio->register_callback_B_out(this); pio->set_B_EXT(0xff, 0x00); _val = 0; set_valid(true); } ModuleXY4131::ModuleXY4131(const char *name) : ModuleInterface(name, 0, KC_MODULE_KC_85_1) { _master = true; set_valid(true); } ModuleXY4131::~ModuleXY4131(void) { if (!_master) plotter->close_pdf(); } void ModuleXY4131::m_out(word_t addr, byte_t val) { } int ModuleXY4131::callback_A_in(void) { return -1; } void ModuleXY4131::callback_A_out(byte_t val) { } int ModuleXY4131::callback_B_in(void) { return -1; } /** * 0, 0 - 100, 0 83/87/83/87/... => X V * 100, 0 - 100,100 81/85/81/85/... => Y V * 100,100 - 0,100 82/86/82/86/... => X R * 0,100 - 0, 0 80/84/80/84/... => Y R */ void ModuleXY4131::callback_B_out(byte_t val) { if ((_val & 0x80) ^ (val & 0x80)) { if (val & 0x80) plotter->pen_down(); else plotter->pen_up(); } if (((_val & 4) == 0) && ((val & 4) == 4)) { int direction = -1; if (val & 0x01) direction = 1; if (val & 0x02) plotter->step(0, direction); else plotter->step(direction, 0); } _val = val; } ModuleInterface * ModuleXY4131::clone(void) { return new ModuleXY4131(*this); } void ModuleXY4131::reset(bool power_on) { } KCemu-0.5.1/src/kc/daisy.cc0000644001050700006200000000414411345001576015016 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/daisy.h" #include "libdbg/dbg.h" DaisyChain::DaisyChain(void) { } DaisyChain::~DaisyChain(void) { } void DaisyChain::add_last(InterfaceCircuit *ic) { if (_daisy_chain_list.empty()) { ic->iei(1); } else { InterfaceCircuit *last = _daisy_chain_list.back(); last->next(ic); } ic->next(0); _daisy_chain_list.push_back(ic); //printf("------- DaisyChain::add_last(): '%s'\n", ic->get_ic_name()); //_daisy_chain_list.front()->debug(); } void DaisyChain::remove(InterfaceCircuit *ic) { _daisy_chain_list.remove(ic); InterfaceCircuit *prev = ic->get_prev(); InterfaceCircuit *next = ic->get_next(); if (prev != NULL) prev->next(ic->get_next()); else if (next != NULL) next->prev(0); //printf("------- DaisyChain::remove(): '%s'\n", ic->get_ic_name()); //_daisy_chain_list.front()->debug(); } word_t DaisyChain::irq_ack(void) { if (_daisy_chain_list.empty()) return IRQ_NOT_ACK; //_daisy_chain_first->debug(); word_t val = _daisy_chain_list.back()->ack(); //_daisy_chain_first->debug(); //sleep(1); return val; } void DaisyChain::reti(void) { if (_daisy_chain_list.empty()) return; _daisy_chain_list.back()->reti_ED(); _daisy_chain_list.back()->reti_4D(); } KCemu-0.5.1/src/kc/pio1.cc0000644001050700006200000000610111345001576014550 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/pio1.h" #include "libdbg/dbg.h" #define memory ((Memory1 *)memory) PIO1_1::PIO1_1(void) { } PIO1_1::~PIO1_1(void) { } byte_t PIO1_1::in(word_t addr) { byte_t val = 0xff; switch (addr & 3) { case 0: val = in_A_DATA(); break; case 1: val = in_B_DATA(); break; case 2: val = in_A_CTRL(); break; case 3: val = in_B_CTRL(); break; } DBG(2, form("KCemu/PIO/1a/in", "PIO1_1::in(): addr = %04x, val = %02x\n", addr, val)); return val; } void PIO1_1::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/1a/out", "PIO1_1::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } void PIO1_1::change_A(byte_t changed, byte_t val) { } void PIO1_1::change_B(byte_t changed, byte_t val) { } byte_t PIO1_1::get_border_color(void) { return (_value[A] >> 3) & 0x07; } byte_t PIO1_1::get_line_mode(void) { return (_value[A] >> 2) & 0x01; } void PIO1_1::tape_callback(byte_t val) { strobe_A(); } PIO1_2::PIO1_2(void) { } PIO1_2::~PIO1_2(void) { } byte_t PIO1_2::in(word_t addr) { DBG(2, form("KCemu/PIO/1b/in", "PIO1_2::in(): addr = %04x\n", addr)); switch (addr & 3) { case 0: return in_A_DATA(); case 1: return in_B_DATA(); case 2: return in_A_CTRL(); case 3: return in_B_CTRL(); } return 0; // shouldn't be reached } void PIO1_2::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/1b/out", "PIO1_2::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } void PIO1_2::change_A(byte_t changed, byte_t val) { } void PIO1_2::change_B(byte_t changed, byte_t val) { } KCemu-0.5.1/src/kc/prefs/0000755001050700006200000000000011412404772014512 5ustar glaubitzfbedvKCemu-0.5.1/src/kc/prefs/strlist.cc0000644001050700006200000000317211345001576016530 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/prefs/strlist.h" StringList::StringList() { } StringList::StringList(string str, const char split_char) { string::size_type lastPos = str.find_first_not_of(split_char, 0); string::size_type pos = str.find_first_of(split_char, lastPos); while ((string::npos != pos) || (string::npos != lastPos)) { string substr = str.substr(lastPos, pos - lastPos); push_back(substr); lastPos = str.find_first_not_of(split_char, pos); pos = str.find_first_of(split_char, lastPos); } } StringList::~StringList(void) { } string StringList::join(const char join_char) { string ret; for (StringList::iterator it = begin();it != end();it++) { if (ret.length() > 0) ret += join_char; ret += *it; } return ret; } KCemu-0.5.1/src/kc/prefs/types.cc0000644001050700006200000012511311345001577016171 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "prefs/types.h" #include #include #include #include #include "kc/system.h" #include "kc/prefs/types.h" #include "kc/prefs/prefs.h" using namespace std; struct less_system_type : public binary_function { bool operator()(SystemType *type1, SystemType *type2) { return type1->get_sort() < type2->get_sort(); } }; struct find_by_name : public unary_function { string _name; SystemType *_result; find_by_name(string name) : _name(name), _result(NULL) {} void operator()(SystemType *type) { if ((_result == NULL) && (strcmp(_name.c_str(), type->get_name()) == 0)) _result = type; } }; emulation_type_list_t EmulationType::_emulation_type_list; EmulationType EmulationType::_emulation_type_kc85_1( KC_TYPE_85_1, 1, "KC 85/1", "KC 85/1", "kc85-1", "icon-kc87.png", "kcemu-kc87.xpm", "kc851.key", "sys-z9001", "window-module-z9001", 4, 0xf000, 0xf000); EmulationType EmulationType::_emulation_type_kc85_2( KC_TYPE_85_2, 2, "KC 85/2", "KC 85/2", "kc85-2", "icon-kc85.png", "kcemu-kc85.xpm", "kc854.key", "sys-kc85", "window-module-kc85", -12, 0xf000, 0xe000); EmulationType EmulationType::_emulation_type_kc85_3( KC_TYPE_85_3, 3, "KC 85/3", "KC 85/3", "kc85-3", "icon-kc85.png", "kcemu-kc85.xpm", "kc854.key", "sys-kc85", "window-module-kc85", -12, 0xf000, 0xe000); EmulationType EmulationType::_emulation_type_kc85_4( KC_TYPE_85_4, 4, "KC 85/4", "KC 85/4", "kc85-4", "icon-kc85.png", "kcemu-kc85.xpm", "kc854.key", "sys-kc85", "window-module-kc85", -12, 0xf000, 0xe000); EmulationType EmulationType::_emulation_type_kc85_5( KC_TYPE_85_5, 5, "KC 85/5", "KC 85/5", "kc85-5", "icon-kc85.png", "kcemu-kc85.xpm", "kc854.key", "sys-kc855", "window-module-kc85", -12, 0xf000, 0xe000); EmulationType EmulationType::_emulation_type_kc87( KC_TYPE_87, 7, "KC 87", "KC 87", "kc87", "icon-kc87.png", "kcemu-kc87.xpm", "kc851.key", "sys-z9001", "window-module-z9001", 4, 0xf000, 0xf000); EmulationType EmulationType::_emulation_type_a5105( KC_TYPE_A5105, 9, "A5105", "A5105", "a5105", "icon-bic.png", "kcemu-bic.xpm", "a5105.key", "sys-a5105", "", 4, 0x0000, 0x0000); EmulationType EmulationType::_emulation_type_z1013( KC_TYPE_Z1013, 0, "Z1013", "Z1013", "z1013", "icon-z1013.png", "kcemu-z1013.xpm", "", "sys-z1013", "window-module-z1013", 8, 0xf000, 0xf000); EmulationType EmulationType::_emulation_type_lc80( KC_TYPE_LC80, 8, "LC 80", "LC 80", "lc80", "icon-lc80.png", "kcemu-lc80.xpm", "lc80.key", "sys-lc80", "", 6, 0x0000, 0x0000); EmulationType EmulationType::_emulation_type_poly880( KC_TYPE_POLY880, 6, "Polycomputer 880", "Poly880", "poly880", "icon-poly880.png", "kcemu-poly880.xpm", "poly880.key", "sys-poly880", "", 0, 0x0000, 0x0000); EmulationType EmulationType::_emulation_type_muglerpc(KC_TYPE_MUGLERPC, -1, "Mugler PC (PC/M)", "PC/M", "pcm", "icon-pcm.png", "kcemu-pcm.xpm", "", "sys-muglerpc", "", 0, 0x0000, 0x0000); EmulationType EmulationType::_emulation_type_kramermc(KC_TYPE_KRAMERMC, -1, "Kramer Microcomputer", "Kramer-MC", "kramermc", "icon-kramermc.png", "kcemu-kramermc.xpm", "", "sys-kramermc", "", 0, 0x0000, 0x0000); EmulationType EmulationType::_emulation_type_vcs80( KC_TYPE_VCS80, -1, "VCS 80", "VCS 80", "vcs80", "icon-vcs80.png", "kcemu-vcs80.xpm", "vcs80.key", "sys-vcs80", "", 6, 0x0000, 0x0000); EmulationType EmulationType::_emulation_type_c80( KC_TYPE_C80, -1, "C-80", "C-80", "c80", "icon-c80.png", "kcemu-c80.xpm", "", "sys-c80", "", 0, 0x0000, 0x0000); EmulationType::EmulationType(kc_type_t kc_type, int type, string name, string short_name, string config_name, string icon_name, string image_name, string keyboard_filename, string help_topic, string help_topic_module, int module_slots, word_t power_on_addr, word_t reset_addr) { _type = type; _kc_type = kc_type; _name = name; _short_name = short_name; _config_name = config_name; _icon_name = icon_name; _image_name = image_name; _keyboard_filename = keyboard_filename; _help_topic = help_topic; _help_topic_module = help_topic_module; _module_slots = module_slots; _power_on_addr = power_on_addr; _reset_addr = reset_addr; } EmulationType::~EmulationType(void) { } const char * EmulationType::get_name(void) const { return _name.c_str(); } const char * EmulationType::get_config_name(void) const { return _config_name.c_str(); } const char * EmulationType::get_short_name(void) const { return _short_name.c_str(); } const char * EmulationType::get_icon_name(void) const { return _icon_name.c_str(); } const char * EmulationType::get_image_name(void) const { return _image_name.c_str(); } const char * EmulationType::get_keyboard_filename(void) const { if (_keyboard_filename.empty()) return NULL; return _keyboard_filename.c_str(); } const char * EmulationType::get_help_topic(void) const { return _help_topic.c_str(); } const char * EmulationType::get_help_topic_module(void) const { if (_help_topic_module.empty()) return NULL; return _help_topic_module.c_str(); } const int EmulationType::get_module_slots(void) const { return _module_slots; } const word_t EmulationType::get_power_on_addr(void) const { return _power_on_addr; } const word_t EmulationType::get_reset_addr(void) const { return _reset_addr; } int EmulationType::get_type(void) const { return _type; } kc_type_t EmulationType::get_kc_type(void) const { return _kc_type; } emulation_type_list_t & EmulationType::get_emulation_types(void) { if (_emulation_type_list.size() == 0) { _emulation_type_list.push_back(&_emulation_type_kc85_1); _emulation_type_list.push_back(&_emulation_type_kc85_2); _emulation_type_list.push_back(&_emulation_type_kc85_3); _emulation_type_list.push_back(&_emulation_type_kc85_4); _emulation_type_list.push_back(&_emulation_type_kc85_5); _emulation_type_list.push_back(&_emulation_type_kc87); _emulation_type_list.push_back(&_emulation_type_lc80); _emulation_type_list.push_back(&_emulation_type_z1013); _emulation_type_list.push_back(&_emulation_type_a5105); _emulation_type_list.push_back(&_emulation_type_poly880); _emulation_type_list.push_back(&_emulation_type_kramermc); _emulation_type_list.push_back(&_emulation_type_muglerpc); _emulation_type_list.push_back(&_emulation_type_vcs80); _emulation_type_list.push_back(&_emulation_type_c80); } return _emulation_type_list; } ROMEntry::ROMEntry(const char *filename, const char *description, bool is_default) : _filename(filename), _description(description), _is_default(is_default) { } ROMEntry::~ROMEntry(void) { } const string ROMEntry::get_filename(void) const { return _filename; } const string ROMEntry::get_description(void) const { return _description; } const bool ROMEntry::is_default(void) const { return _is_default; } const char * SystemROM::ROM_KEY_CAOSC = N_("rom_caos_c"); const char * SystemROM::ROM_KEY_CAOSE = N_("rom_caos_e"); const char * SystemROM::ROM_KEY_SYSTEM = N_("rom_system"); const char * SystemROM::ROM_KEY_SYSTEM1 = N_("rom_system_1"); const char * SystemROM::ROM_KEY_SYSTEM2 = N_("rom_system_2"); const char * SystemROM::ROM_KEY_SYSTEM3 = N_("rom_system_3"); const char * SystemROM::ROM_KEY_SYSTEM4 = N_("rom_system_4"); const char * SystemROM::ROM_KEY_USER = N_("rom_user"); const char * SystemROM::ROM_KEY_BASIC = N_("rom_basic"); const char * SystemROM::ROM_KEY_DEBUGGER = N_("rom_debugger"); const char * SystemROM::ROM_KEY_REASSEMBLER = N_("rom_reassembler"); const char * SystemROM::ROM_KEY_EDITOR = N_("rom_editor"); const char * SystemROM::ROM_KEY_ASSEMBLER = N_("rom_assembler"); const char * SystemROM::ROM_KEY_CHARGEN = N_("rom_charset"); const char * SystemROM::ROM_KEY_D004_FC = N_("rom_d004_fc"); const char * SystemROM::ROM_KEY_D004_F8 = N_("rom_d004_f8"); SystemROM::SystemROM(const char *name, bool mandatory, int size) : _size(size), _name(name), _mandatory(mandatory) { } SystemROM::~SystemROM(void) { } int SystemROM::get_size(void) const { return _size; } bool SystemROM::is_mandatory(void) const { return _mandatory; } const string SystemROM::get_name(void) const { return _name; } const rom_entry_list_t & SystemROM::get_roms(void) const { return _roms; } const ROMEntry * SystemROM::get_default_rom(void) const { for (rom_entry_list_t::const_iterator it = _roms.begin(); it != _roms.end(); it++) if ((*it)->is_default()) return (*it); return NULL; } void SystemROM::add_rom(const char *filename, const char *description, bool is_default) { _roms.push_back(new ROMEntry(filename, description, is_default)); } SystemType::SystemType(int sort, string name, int type, EmulationType &emulation_type, kc_variant_t kc_variant, string description) : _sort(sort), _type(type), _name(name), _display_name(emulation_type.get_name()), _kc_variant(kc_variant), _description(description), _emulation_type(emulation_type) { _ui_callback_value = 50000; _ui_callback_retrace_value = 0; } SystemType::~SystemType(void) { } const char * SystemType::get_display_name(void) const { return _display_name.c_str(); } SystemType & SystemType::set_display_name(const char *display_name) { _display_name = display_name; return *this; } const string SystemType::get_rom_directory(void) const { return _rom_dir; } SystemType & SystemType::set_rom_directory(const char *romdir) { _rom_dir = romdir; return *this; } const unsigned long long SystemType::get_ui_callback_value(void) const { return _ui_callback_value; } SystemType & SystemType::set_ui_callback_value(unsigned long long value) { _ui_callback_value = value; return *this; } const unsigned long long SystemType::get_ui_callback_retrace_value(void) const { return _ui_callback_retrace_value; } SystemType & SystemType::set_ui_callback_retrace_value(unsigned long long value) { _ui_callback_retrace_value = value; return *this; } const system_rom_list_t & SystemType::get_rom_list(void) const { return _rom_list; } const SystemROM * SystemType::get_rom(const char *key) const { for (system_rom_list_t::const_iterator it = _rom_list.begin();it != _rom_list.end();it++) { if (strcmp((*it)->get_name().c_str(), key) == 0) { return (*it); } } return NULL; } void SystemType::add_rom(const char *name, bool mandatory, int size, int default_idx, const char *filename, const char *description, va_list ap) { SystemROM *rom = new SystemROM(name, mandatory, size); rom->add_rom(filename, description, 0 == default_idx); int idx = 0; while (242) { idx++; const char *arg1 = va_arg(ap, const char *); if (arg1 == NULL) break; const char *arg2 = va_arg(ap, const char *); if (arg2 == NULL) break; rom->add_rom(arg1, arg2, idx == default_idx); } _rom_list.push_back(rom); } SystemType & SystemType::add_rom(const char *name, int size, const char *filename, const char *description, ...) { va_list ap; va_start(ap, description); add_rom(name, true, size, 0, filename, description, ap); va_end(ap); return *this; } SystemType & SystemType::add_rom(const char *name, int size, int default_idx, const char *filename, const char *description, ...) { va_list ap; va_start(ap, description); add_rom(name, true, size, default_idx, filename, description, ap); va_end(ap); return *this; } SystemType & SystemType::add_optional_rom(const char *name, int size, const char *filename, const char *description, ...) { va_list ap; va_start(ap, description); add_rom(name, false, size, 0, filename, description, ap); va_end(ap); return *this; } const char * SystemType::get_name(void) const { return _name.c_str(); } int SystemType::get_sort(void) const { return _sort; } int SystemType::get_type(void) const { return _type; } bool SystemType::is_default(int type) const { return _type == type; } kc_type_t SystemType::get_kc_type(void) const { return _emulation_type.get_kc_type(); } kc_variant_t SystemType::get_kc_variant(void) const { return _kc_variant; } const char * SystemType::get_kc_variant_name(void) const { return get_name(); } const char * SystemType::get_description(void) const { return _description.c_str(); } const EmulationType & SystemType::get_emulation_type(void) const { return _emulation_type; } SystemInformation *SystemInformation::_instance = 0; SystemInformation::SystemInformation(void) { /* * Z1013 */ add_system_type(101, "z1013.01", -1, EmulationType::_emulation_type_z1013, KC_VARIANT_Z1013_01, N_(" Z1013 with 16k RAM and 2k ROM, running at 1MHz. This was the\n" " first version with cheap circuits so the CPU was clocked at only 1MHz\n" " The ROM contains the Z1013 monitor version 2.02.\n")) .set_display_name("Z1013.01") .set_ui_callback_value(20000) .set_ui_callback_retrace_value(1000) .set_rom_directory("/roms/z1013") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x0800, "z1013_20.rom", _("System-ROM V2.0"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x1000, "z1013_zg.rom", _("Z1013 Charset-ROM"), NULL); add_system_type(102, "z1013.12", -1, EmulationType::_emulation_type_z1013, KC_VARIANT_Z1013_12, N_(" Z1013 with 1k sRAM and 2k ROM, running at 2MHz. Industry\n" " version with only 1k static RAM. Monitor version 2.02.\n")) .set_display_name("Z1013.12") .set_ui_callback_value(40000) .set_ui_callback_retrace_value(1000) .set_rom_directory("/roms/z1013") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x0800, "z1013_20.rom", _("System-ROM V2.0"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x1000, "z1013_zg.rom", _("Z1013 Charset-ROM"), NULL); add_system_type(103, "z1013.16", -1, EmulationType::_emulation_type_z1013, KC_VARIANT_Z1013_16, N_(" Z1013 with 16k RAM and 2k ROM, running at 2MHz. Successor of\n" " the Z1013.01 but with industry grade circuits clocked at 2MHz.\n")) .set_display_name("Z1013.16") .set_ui_callback_value(40000) .set_ui_callback_retrace_value(1000) .set_rom_directory("/roms/z1013") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x0800, "z1013_20.rom", _("System-ROM V2.0"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x1000, "z1013_zg.rom", _("Z1013 Charset-ROM"), NULL); add_system_type(104, "z1013.64", -1, EmulationType::_emulation_type_z1013, KC_VARIANT_Z1013_64, N_(" Z1013 with 64k RAM and 2x2k ROM, running at 2MHz. The ROM\n" " contains two system images with 2k each. Loaded is the first\n" " image with version 2.02 that is supposed to work with the foil keypad\n" " shipped by the manufacturer.\n")) .set_display_name("Z1013.64") .set_ui_callback_value(40000) .set_ui_callback_retrace_value(1000) .set_rom_directory("/roms/z1013") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x0800, "z1013_20.rom", _("System-ROM V2.0"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x1000, "z1013_zg.rom", _("Z1013 Charset-ROM"), NULL); add_system_type(105, "z1013.a2", -1, EmulationType::_emulation_type_z1013, KC_VARIANT_Z1013_A2, N_(" Z1013 with 64k RAM and 2k ROM, running at 2MHz. The ROM\n" " contains two system images with 2k each. Loaded is the second\n" " image with version A.2 that supports an extended keyboard with an\n" " 8x8 matrix.\n")) .set_display_name("Z1013.A2") .set_ui_callback_value(40000) .set_ui_callback_retrace_value(1000) .set_rom_directory("/roms/z1013") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x0800, "z1013_a2.rom", _("System-ROM A2"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x1000, "z1013_zg.rom", _("Z1013 Charset-ROM"), NULL); add_system_type(106, "z1013.rb", -1, EmulationType::_emulation_type_z1013, KC_VARIANT_Z1013_RB, N_(" Z1013 with 64k RAM and 4k ROM. The ROM is the extended\n" " version tagged 2.028 RB that has a different keyboard driver for\n" " the keyboard K7659.\n")) .set_display_name("Z1013 (Brosig-ROM)") .set_ui_callback_value(40000) .set_ui_callback_retrace_value(1000) .set_rom_directory("/roms/z1013") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x1000, "z1013_rb.rom", _("Brosig-ROM K7659/2.028"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x1000, "z1013_zg.rom", _("Z1013 Charset-ROM"), NULL); add_system_type(107, "z1013.surl", -1, EmulationType::_emulation_type_z1013, KC_VARIANT_Z1013_SURL, N_(" Z1013 with 64k RAM and 4k ROM. The ROM contains the 'Super\n" " Ur-Lader 5.0' that can read arbitrary tape files as system monitor.\n" " The hardware modification port at address 4h is emulated which allows\n" " programs to switch off the system ROM.\n")) .set_display_name("Z1013 (Super Ur-Lader 5.0)") .set_ui_callback_value(40000) .set_ui_callback_retrace_value(1000) .set_rom_directory("/roms/z1013") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x0800, "z1013_ul.rom", _("Super Ur-Lader 5.0"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x1000, "z1013_zg.rom", _("Z1013 Charset-ROM"), NULL); add_system_type(108, "z1013.bl4", -1, EmulationType::_emulation_type_z1013, KC_VARIANT_Z1013_BL4, N_(" Z1013 with 64k RAM and 4k ROM. The ROM contains the Bootloader\n" " BL4 that can load monitor images from floppy disk or can start the\n" " CP/M system.\n")) .set_display_name("Z1013 (Bootloader BL4)") .set_ui_callback_value(40000) .set_ui_callback_retrace_value(1000) .set_rom_directory("/roms/z1013") .add_rom(SystemROM::ROM_KEY_SYSTEM, 2432, "z1013_bl.rom", _("Bootlader BL4"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x1000, "z1013_zg.rom", _("Z1013 Charset-ROM"), NULL); /* * KC 85/1 */ add_system_type(201, "z9001.10", -1, EmulationType::_emulation_type_kc85_1, KC_VARIANT_85_1_10, N_(" Z9001 (later called KC 85/1) with monochrome display, no internal BASIC\n" " ROM. This computer has 16k RAM and 4k ROM with the robotron z9001 system.\n")) .set_display_name("KC 85/1.10") .set_ui_callback_value(50000) .set_rom_directory("/roms/z9001") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x1000, "os____f0.851", _("System-ROM"), "os_rb20.rom", _("ROM-Bank System without menu"), "os_rb21.rom", _("ROM-Bank System with menu"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x0800, "chargen.851", _("Z9001 Charset-ROM"), "zg_de.rom", _("Z9001 Charset-ROM (german)"), "zg_cga.rom", _("CGA Charset-ROM"), "zg_cgai.rom", _("CGA Charset-ROM (extended)"), NULL); add_system_type(202, "z9001.11", -1, EmulationType::_emulation_type_kc85_1, KC_VARIANT_85_1_11, N_(" Like the z9001.10 but with color extension card.\n")) .set_display_name("KC 85/1.11") .set_ui_callback_value(50000) .set_rom_directory("/roms/z9001") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x1000, "os____f0.851", _("System-ROM"), "os_rb20.rom", _("ROM-Bank System without menu"), "os_rb21.rom", _("ROM-Bank System with menu"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x0800, "chargen.851", _("Z9001 Charset-ROM"), "zg_de.rom", _("Z9001 Charset-ROM (german)"), "zg_cga.rom", _("CGA Charset-ROM"), "zg_cgai.rom", _("CGA Charset-ROM (extended)"), NULL); /* * KC 85/2 */ add_system_type(302, "kc85/2", 2, EmulationType::_emulation_type_kc85_2, KC_VARIANT_NONE, N_(" HC900 (later called KC 85/2) with 16k RAM and 8k ROM. System is called\n" " HC-CAOS 2.2 (home computer - cassette aided operating system). BASIC\n" " is only available as external module.\n")) .set_ui_callback_value(35000) .set_rom_directory("/roms/kc85") .add_rom(SystemROM::ROM_KEY_CAOSE, 0x2000, "hc900.852", _("HC-900 CAOS"), "caos__e0.852", _("CAOS 2.2"), NULL) .add_rom(SystemROM::ROM_KEY_D004_FC, 0x2000, "floppy20.rom", _("D004 Version 2.0 (02.01.1989)"), "floppy30.rom", _("D004 Version 3.0 (07.12.1997)"), "floppy31.rom", _("D004 Version 3.1 (22.01.2003)"), "floppy32.rom", _("D004 Version 3.2 (28.10.2008)"), NULL) .add_rom(SystemROM::ROM_KEY_D004_F8, 0x2000, 3, "floppy20.rom", _("D004 Version 2.0 (02.01.1989)"), "floppy30.rom", _("D004 Version 3.0 (07.12.1997)"), "floppy31.rom", _("D004 Version 3.1 (22.01.2003)"), "floppy32.rom", _("D004 Version 3.2 (28.10.2008)"), NULL); /* * KC 85/3 */ add_system_type(400, "kc85/3", 3, EmulationType::_emulation_type_kc85_3, KC_VARIANT_NONE, N_(" KC 85/3 with 16k RAM, 8k system ROM with HC-CAOS 3.1 and 8k BASIC ROM.\n")) .set_ui_callback_value(35000) .set_rom_directory("/roms/kc85") .add_rom(SystemROM::ROM_KEY_CAOSE, 0x2000, "caos__e0.853", _("CAOS 3.1"), "caos33.853", _("CAOS 3.3"), "caos34.853", _("CAOS 3.4"), "pi88_ge.853", _("OS PI/88 (yellow/blue)"), "pi88_sw.853", _("OS PI/88 (black/white)"), "pi88_ws.853", _("OS PI/88 (white/blue)"), NULL) .add_rom(SystemROM::ROM_KEY_BASIC, 0x2000, "basic_c0.853", _("KC-BASIC"), NULL) .add_rom(SystemROM::ROM_KEY_D004_FC, 0x2000, "floppy20.rom", _("D004 Version 2.0 (02.01.1989)"), "floppy30.rom", _("D004 Version 3.0 (07.12.1997)"), "floppy31.rom", _("D004 Version 3.1 (22.01.2003)"), "floppy32.rom", _("D004 Version 3.2 (28.10.2008)"), NULL) .add_rom(SystemROM::ROM_KEY_D004_F8, 0x2000, 3, "floppy20.rom", _("D004 Version 2.0 (02.01.1989)"), "floppy30.rom", _("D004 Version 3.0 (07.12.1997)"), "floppy31.rom", _("D004 Version 3.1 (22.01.2003)"), "floppy32.rom", _("D004 Version 3.2 (28.10.2008)"), NULL); /* * KC 85/4 */ add_system_type(500, "kc85/4", 4, EmulationType::_emulation_type_kc85_4, KC_VARIANT_NONE, N_(" KC 85/4 with 64k RAM, 64k screen memory, 12k system ROM with HC-CAOS 4.2\n" " and 8k BASIC ROM.\n")) .set_ui_callback_value(35000) .set_rom_directory("/roms/kc85") .add_rom(SystemROM::ROM_KEY_CAOSC, 0x1000, 1, "caos41c.854", _("CAOS 4.1 (C)"), "caos__c0.854", _("CAOS 4.2 (C)"), NULL) .add_rom(SystemROM::ROM_KEY_CAOSE, 0x2000, 1, "caos41e.854", _("CAOS 4.1 (E)"), "caos__e0.854", _("CAOS 4.2 (E)"), NULL) .add_rom(SystemROM::ROM_KEY_BASIC, 0x2000, "basic_c0.854", _("KC-BASIC"), NULL) .add_rom(SystemROM::ROM_KEY_D004_FC, 0x2000, "floppy20.rom", _("D004 Version 2.0 (02.01.1989)"), "floppy30.rom", _("D004 Version 3.0 (07.12.1997)"), "floppy31.rom", _("D004 Version 3.1 (22.01.2003)"), "floppy32.rom", _("D004 Version 3.2 (28.10.2008)"), NULL) .add_rom(SystemROM::ROM_KEY_D004_F8, 0x2000, 3, "floppy20.rom", _("D004 Version 2.0 (02.01.1989)"), "floppy30.rom", _("D004 Version 3.0 (07.12.1997)"), "floppy31.rom", _("D004 Version 3.1 (22.01.2003)"), "floppy32.rom", _("D004 Version 3.2 (28.10.2008)"), NULL); /* * KC 85/5 */ add_system_type(600, "kc85/5", 5, EmulationType::_emulation_type_kc85_5, KC_VARIANT_NONE, N_(" Unofficial successor of the KC 85/4 with 256k RAM, 64k screen memory,\n" " 16k system ROM with HC-CAOS 4.4, 8k BASIC ROM and 24k User ROM. It is\n" " intended to be used with a modified D004 floppy device with additional\n" " hard-disk support.\n")) .set_ui_callback_value(35000) .set_rom_directory("/roms/kc85") .add_rom(SystemROM::ROM_KEY_CAOSC, 0x2000, 1, "caos43c.855", _("CAOS 4.3 (C)"), "caos__c0.855", _("CAOS 4.4 (C)"), NULL) .add_rom(SystemROM::ROM_KEY_CAOSE, 0x2000, 1, "caos43e.855", _("CAOS 4.3 (E)"), "caos__e0.855", _("CAOS 4.4 (E)"), NULL) .add_rom(SystemROM::ROM_KEY_BASIC, 0x8000, 1, "basic_c0.855", _("KC-BASIC (EDAS/TEMO/FORTH)"), "basicusb.855", _("KC-BASIC (EDAS/TEMO/USB)"), NULL) .add_rom(SystemROM::ROM_KEY_D004_FC, 0x2000, 3, "floppy20.rom", _("D004 Version 2.0 (02.01.1989)"), "floppy30.rom", _("D004 Version 3.0 (07.12.1997)"), "floppy31.rom", _("D004 Version 3.1 (22.01.2003)"), "floppy32.rom", _("D004 Version 3.2 (28.10.2008)"), NULL) .add_rom(SystemROM::ROM_KEY_D004_F8, 0x2000, 0, "floppy20.rom", _("D004 Version 2.0 (02.01.1989)"), "floppy30.rom", _("D004 Version 3.0 (07.12.1997)"), "floppy31.rom", _("D004 Version 3.1 (22.01.2003)"), "floppy32.rom", _("D004 Version 3.2 (28.10.2008)"), NULL); /* * Polycomputer 880 */ add_system_type(700, "poly880", 6, EmulationType::_emulation_type_poly880, KC_VARIANT_NONE, N_(" Polycomputer 880.\n")) .set_display_name("Polycomputer 880") .set_ui_callback_value(18000) .set_rom_directory("/roms/poly880") .add_rom(SystemROM::ROM_KEY_SYSTEM1, 0x0400, "poly880a.rom", _("System-ROM 1"), NULL) .add_rom(SystemROM::ROM_KEY_SYSTEM2, 0x0400, "poly880b.rom", _("System-ROM 2"), NULL) .add_optional_rom(SystemROM::ROM_KEY_SYSTEM3, 0x0400, "poly880c.rom", _("Optional-ROM 1"), NULL) .add_optional_rom(SystemROM::ROM_KEY_SYSTEM4, 0x0400, "poly880d.rom", _("Optional-ROM 1"), NULL); add_system_type(701, "poly880.sc1", -6, EmulationType::_emulation_type_poly880, KC_VARIANT_POLY880_SC1, N_(" Polycomputer 880 with chess program rom from SC1.\n")) .set_display_name("Polycomputer 880 + SC1 ROM") .set_ui_callback_value(18000) .set_rom_directory("/roms/poly880") .add_rom(SystemROM::ROM_KEY_SYSTEM1, 0x1000, "sc1.rom", _("SC1-ROM"), NULL); /* * KC 87 */ add_system_type(801, "kc87.10", -7, EmulationType::_emulation_type_kc87, KC_VARIANT_87_10, N_(" Like the KC 87.11 but without the color extension card.\n")) .set_display_name("KC 87.10") .set_ui_callback_value(50000) .set_rom_directory("/roms/z9001") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x1000, "os____f0.851", _("System-ROM"), "os_rb20.rom", _("ROM-Bank System without menu"), "os_rb21.rom", _("ROM-Bank System with menu"), NULL) .add_rom(SystemROM::ROM_KEY_BASIC, 0x2800, "basic_c0.87a", _("KC-BASIC"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x0800, "chargen.851", _("Z9001 Charset-ROM"), "zg_de.rom", _("Z9001 Charset-ROM (german)"), "zg_cga.rom", _("CGA Charset-ROM"), "zg_cgai.rom", _("CGA Charset-ROM (extended)"), NULL); add_system_type(802, "kc87.11", 7, EmulationType::_emulation_type_kc87, KC_VARIANT_87_11, N_(" Successor of the Z9001 with internal 10k BASIC ROM.\n")) .set_display_name("KC 87.11") .set_ui_callback_value(50000) .set_rom_directory("/roms/z9001") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x1000, "os____f0.851", _("System-ROM"), "os_rb20.rom", _("ROM-Bank System without menu"), "os_rb21.rom", _("ROM-Bank System with menu"), NULL) .add_rom(SystemROM::ROM_KEY_BASIC, 0x2800, "basic_c0.87a", _("KC-BASIC"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x0800, "chargen.851", _("Z9001 Charset-ROM"), "zg_de.rom", _("Z9001 Charset-ROM (german)"), "zg_cga.rom", _("CGA Charset-ROM"), "zg_cgai.rom", _("CGA Charset-ROM (extended)"), NULL); add_system_type(803, "kc87.20", -8, EmulationType::_emulation_type_kc87, KC_VARIANT_87_20, N_(" Like the KC 87.21 but without the color extension card.\n")) .set_display_name("KC 87.20") .set_ui_callback_value(50000) .set_rom_directory("/roms/z9001") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x1000, "os____f0.87b", _("System-ROM"), "os_rb20.rom", _("ROM-Bank System without menu"), "os_rb21.rom", _("ROM-Bank System with menu"), NULL) .add_rom(SystemROM::ROM_KEY_BASIC, 0x2800, "basic_c0.87b", _("KC-BASIC"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x0800, "chargen.851", _("Z9001 Charset-ROM"), "zg_de.rom", _("Z9001 Charset-ROM (german)"), "zg_cga.rom", _("CGA Charset-ROM"), "zg_cgai.rom", _("CGA Charset-ROM (extended)"), NULL); add_system_type(804, "kc87.21", -8, EmulationType::_emulation_type_kc87, KC_VARIANT_87_21, N_(" New series with extended BASIC ROM (still 10k but with some routines for\n" " plotter support were added).\n")) .set_display_name("KC 87.21") .set_ui_callback_value(50000) .set_rom_directory("/roms/z9001") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x1000, "os____f0.87b", _("System-ROM"), "os_rb20.rom", _("ROM-Bank System without menu"), "os_rb21.rom", _("ROM-Bank System with menu"), NULL) .add_rom(SystemROM::ROM_KEY_BASIC, 0x2800, "basic_c0.87b", _("KC-BASIC"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x0800, "chargen.851", _("Z9001 Charset-ROM"), "zg_de.rom", _("Z9001 Charset-ROM (german)"), "zg_cga.rom", _("CGA Charset-ROM"), "zg_cgai.rom", _("CGA Charset-ROM (extended)"), NULL); add_system_type(805, "kc87.30", -8, EmulationType::_emulation_type_kc87, KC_VARIANT_87_30, N_(" New batch of KC 87.20 with no known hardware differences.\n")) .set_display_name("KC 87.30") .set_ui_callback_value(50000) .set_rom_directory("/roms/z9001") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x1000, "os____f0.87b", _("System-ROM"), "os_rb20.rom", _("ROM-Bank System without menu"), "os_rb21.rom", _("ROM-Bank System with menu"), NULL) .add_rom(SystemROM::ROM_KEY_BASIC, 0x2800, "basic_c0.87b", _("KC-BASIC"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x0800, "chargen.851", _("Z9001 Charset-ROM"), "zg_de.rom", _("Z9001 Charset-ROM (german)"), "zg_cga.rom", _("CGA Charset-ROM"), "zg_cgai.rom", _("CGA Charset-ROM (extended)"), NULL); add_system_type(806, "kc87.31", -8, EmulationType::_emulation_type_kc87, KC_VARIANT_87_31, N_(" New batch of KC 87.21 with no known hardware differences.\n")) .set_display_name("KC 87.31") .set_ui_callback_value(50000) .set_rom_directory("/roms/z9001") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x1000, "os____f0.87b", _("System-ROM"), "os_rb20.rom", _("ROM-Bank System without menu"), "os_rb21.rom", _("ROM-Bank System with menu"), NULL) .add_rom(SystemROM::ROM_KEY_BASIC, 0x2800, "basic_c0.87b", _("KC-BASIC"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x0800, "chargen.851", _("Z9001 Charset-ROM"), "zg_de.rom", _("Z9001 Charset-ROM (german)"), "zg_cga.rom", _("CGA Charset-ROM"), "zg_cgai.rom", _("CGA Charset-ROM (extended)"), NULL); /* * LC 80 */ add_system_type(900, "lc80", 8, EmulationType::_emulation_type_lc80, KC_VARIANT_LC80_1k, N_(" Single board computer LC 80 with 1k RAM and 2 x 1k ROM.\n")) .set_display_name("LC 80 (2 x U505)") .set_ui_callback_value(18000) .set_rom_directory("/roms/lc80") .add_rom(SystemROM::ROM_KEY_SYSTEM1, 0x0400, "lc80__00.rom", _("System-ROM 1"), NULL) .add_rom(SystemROM::ROM_KEY_SYSTEM2, 0x0400, "lc80__08.rom", _("System-ROM 2"), NULL); add_system_type(902, "lc80.2k", -8, EmulationType::_emulation_type_lc80, KC_VARIANT_LC80_2k, N_(" Single board computer LC 80 with 1k RAM and 1 x 2k ROM.\n")) .set_display_name("LC 80 (1 x U2716)") .set_ui_callback_value(18000) .set_rom_directory("/roms/lc80") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x0800, "lc80__2k.rom", _("System-ROM"), NULL); add_system_type(903, "lc80e", -8, EmulationType::_emulation_type_lc80, KC_VARIANT_LC80e, N_(" Export variant of the LC 80 with 12k ROM including chess program.\n")) .set_display_name("LC 80e") .set_ui_callback_value(66000) .set_rom_directory("/roms/lc80") .add_rom(SystemROM::ROM_KEY_SYSTEM1, 0x1000, "lc80e_00.rom", _("System-ROM 1"), NULL) .add_rom(SystemROM::ROM_KEY_SYSTEM2, 0x1000, "lc80e_10.rom", _("System-ROM 2"), NULL) .add_rom(SystemROM::ROM_KEY_SYSTEM3, 0x1000, "lc80e_c0.rom", _("System-ROM 3"), NULL); /* * A5105 */ add_system_type(1000, "bic", -9, EmulationType::_emulation_type_a5105, KC_VARIANT_A5105_K1505, N_(" BIC/A5105, only the base device is emulated, no floppy device.\n")) .set_display_name("K1505 (BIC Basis Device)") .set_ui_callback_value(60000) .set_ui_callback_retrace_value(1000) .set_rom_directory("/roms/a5105") .add_rom(SystemROM::ROM_KEY_SYSTEM1, 0x8000, "k1505_00.rom", _("System-ROM 1"), NULL) .add_rom(SystemROM::ROM_KEY_SYSTEM2, 0x2000, "k1505_80.rom", _("System-ROM 2"), NULL) .add_rom(SystemROM::ROM_KEY_SYSTEM3, 0x2000, "k5651_40.rom", _("DSE-ROM 1"), NULL) .add_rom(SystemROM::ROM_KEY_SYSTEM4, 0x2000, "k5651_60.rom", _("DSE-ROM 2"), NULL); add_system_type(1002, "a5105", 9, EmulationType::_emulation_type_a5105, KC_VARIANT_A5105_A5105, N_(" BIC/A5105, the full system including the floppy device.\n")) .set_display_name("A5105 (BIC Basis Device + Floppy Device)") .set_ui_callback_value(60000) .set_ui_callback_retrace_value(1000) .set_rom_directory("/roms/a5105") .add_rom(SystemROM::ROM_KEY_SYSTEM1, 0x8000, "k1505_00.rom", _("System-ROM 1"), NULL) .add_rom(SystemROM::ROM_KEY_SYSTEM2, 0x2000, "k1505_80.rom", _("System-ROM 2"), NULL) .add_rom(SystemROM::ROM_KEY_SYSTEM3, 0x2000, "k5651_40.rom", _("DSE-ROM 1"), NULL) .add_rom(SystemROM::ROM_KEY_SYSTEM4, 0x2000, "k5651_60.rom", _("DSE-ROM 2"), NULL); /* * Kramer MC */ add_system_type(1100, "kramer-mc", -100, EmulationType::_emulation_type_kramermc, KC_VARIANT_NONE, N_(" Micro-Computer presented in the book \"Praktische Microcomputertechnik\"\n" " by Manfred Kramer.\n")) .set_ui_callback_value(30000) .set_rom_directory("/roms/kramermc") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x0400, "io-mon.kmc", _("IO-Monitor"), NULL) .add_rom(SystemROM::ROM_KEY_BASIC, 0x3000, "basic.kmc", _("BASIC"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x0800, "chargen.kmc", _("Charset-ROM"), NULL) .add_rom(SystemROM::ROM_KEY_DEBUGGER, 0x0400, "debugger.kmc", _("Debugger"), NULL) .add_rom(SystemROM::ROM_KEY_REASSEMBLER, 0x0400, "reass.kmc", _("Reassembler"), NULL) .add_rom(SystemROM::ROM_KEY_EDITOR, 0x0400, "editor.kmc", _("Editor"), NULL) .add_rom(SystemROM::ROM_KEY_ASSEMBLER, 0x1c00, "ass.kmc", _("Assembler"), NULL); /* * PC/M */ add_system_type(1200, "mugler-pc", -100, EmulationType::_emulation_type_muglerpc, KC_VARIANT_NONE, N_(" CP/M based Micro-Computer presented in the magazine \"Funkamateur\"\n" " by A. Mugler and H. Mathes.\n")) .set_ui_callback_value(50000) .set_rom_directory("/roms/muglerpc") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x2000, "muglerpc.pcm", _("System-ROM"), NULL) .add_rom(SystemROM::ROM_KEY_CHARGEN, 0x0800, "chargen.pcm", _("Charset-ROM"), NULL); /* * VCS 80 */ add_system_type(1300, "vcs80", -100, EmulationType::_emulation_type_vcs80, KC_VARIANT_NONE, N_(" Minimal Z80 learning system presented in the magazine \"rfe\"\n" " by Eckhard Schiller.\n")) .set_ui_callback_value(25000) .set_ui_callback_retrace_value(4000) .set_rom_directory("/roms/vcs80") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x0200, "monitor.rom", _("System-ROM"), NULL); /* * C 80 */ add_system_type(1400, "c80", -100, EmulationType::_emulation_type_c80, KC_VARIANT_NONE, N_(" Minimal Z80 learning system designed by Dipl.-Ing. Joachim Czepa.\n")) .set_ui_callback_value(50000) .set_rom_directory("/roms/c80") .add_rom(SystemROM::ROM_KEY_SYSTEM, 0x0400, "monitor.rom", _("System-ROM"), NULL) .add_optional_rom(SystemROM::ROM_KEY_USER, 0x0400, "user.rom", _("User-ROM"), NULL); _system_type_list.sort(less_system_type()); } SystemInformation::~SystemInformation(void) { } SystemType & SystemInformation::add_system_type(int sort, string name, int type, EmulationType& emulation_type, kc_variant_t kc_variant, string description) { SystemType *system_type = new SystemType(sort, name, type, emulation_type, kc_variant, description); _system_type_list.push_back(system_type); return *system_type; } SystemInformation * SystemInformation::instance(void) { if (_instance == NULL) _instance = new SystemInformation(); return _instance; } system_type_list_t & SystemInformation::get_system_types(void) { return _system_type_list; } const SystemType * SystemInformation::get_system_type(kc_type_t kc_type, kc_variant_t kc_variant) const { for (system_type_list_t::const_iterator it = _system_type_list.begin();it != _system_type_list.end();it++) { if ((*it)->get_kc_type() != kc_type) continue; if ((*it)->get_kc_variant() != kc_variant) continue; return (*it); } return NULL; } void SystemInformation::show_types(void) { cout << "available emulations:"; int width = 0; kc_type_t old_type = KC_TYPE_NONE; for (system_type_list_t::iterator it = _system_type_list.begin();it != _system_type_list.end();it++) { int type = abs((*it)->get_type()); kc_type_t kc_type = (*it)->get_kc_type(); width++; if (old_type != kc_type) cout << endl << " "; else cout << ","; if (kc_type == KC_TYPE_NONE) break; if (old_type != kc_type) { if (type >= 100) { cout << "-"; } else { cout << type; } cout << ": "; width = 5; } if (width > 60) { cout << endl << " "; width = 5; } const char *name = (*it)->get_name(); cout << " " << name; width += strlen(name) + 1; if ((*it)->get_type() >= 0) { width++; cout << "*"; } old_type = kc_type; } cout << endl; } void SystemInformation::show_types_with_description(void) { cout << _("available emulations:") << endl << endl; for (system_type_list_t::iterator it = _system_type_list.begin();it != _system_type_list.end();it++) { const char *ptr = ""; if (strcmp((*it)->get_name(), (*it)->get_kc_variant_name()) == 0) { /* * find all references */ for (system_type_list_t::iterator it2 = _system_type_list.begin();it2 != _system_type_list.end();it2++) { if ((*it)->get_kc_variant_name() == (*it2)->get_kc_variant_name()) { cout << ptr << (*it2)->get_name(); ptr = ", "; } } /* * call gettext() here because static initialization of * internationalized strings doesn't work. */ cout << endl << _((*it)->get_description()) << endl; } } } KCemu-0.5.1/src/kc/prefs/Makefile.am0000644001050700006200000000066011340261610016540 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in noinst_LIBRARIES = libprefs.a AM_CPPFLAGS = \ -DKCEMU_PACKAGE=\"$(PACKAGE)\" \ -DKCEMU_DATADIR=\"$(pkgdatadir)\" \ -DKCEMU_LOCALEDIR=\"$(localedir)\" \ -DDEBUG \ $(GTK_CFLAGS) \ $(SDL_CFLAGS) INCLUDES = -I../../../include libprefs_a_SOURCES = \ prefs.cc \ parser.cc \ profile.cc \ types.cc \ strlist.cc \ dirlist.cc KCemu-0.5.1/src/kc/prefs/parser.cc0000644001050700006200000001452611345001576016325 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/prefs/parser.h" #include "libdbg/dbg.h" const char * ProfileParser::signature = "# kcemu configuration file"; ProfileParser::ProfileParser(string filename, profile_level_t level) { _filename = filename; _level = level; _current_profile = NULL; } ProfileParser::~ProfileParser(void) { } bool ProfileParser::is_newline(GScanner *scanner, GTokenType token_type) { // we have 'char to token' enabled, so we only need to check the token type... return (token_type == '\r') || (token_type == '\n'); } GTokenType ProfileParser::handle_line(GScanner *scanner, const char *key, GTokenType token_type) { _current_profile = get_profile(); switch (token_type) { case G_TOKEN_IDENTIFIER_NULL: _current_profile->set_null_value(key); break; case G_TOKEN_INT: _current_profile->set_int_value(key, scanner->value.v_int); break; case G_TOKEN_FLOAT: break; case G_TOKEN_STRING: _current_profile->set_string_value(key, scanner->value.v_string); break; default: break; } return G_TOKEN_NONE; } void ProfileParser::parse() { int fd = open(_filename.c_str(), O_RDONLY); if (fd < 0) { DBG(1, form("KCemu/ProfileParser", "ProfileParser::parse(): Failed to open file '%s'. Skipping ...\n", _filename.c_str())); return; } DBG(1, form("KCemu/ProfileParser", "ProfileParser::parse(): Parsing file '%s'...\n", _filename.c_str())); const char signature_length = strlen(signature); char signature_buf[signature_length]; int len = read(fd, signature_buf, signature_length); if ((len != signature_length) || (strncmp(signature_buf, signature, signature_length) != 0)) { DBG(1, form("KCemu/ProfileParser", "ProfileParser::parse(): Signature '%s' not found in file '%s'. Skipping ...\n", signature, _filename.c_str())); close(fd); return; } lseek(fd, 0, SEEK_SET); GScanner *scanner = g_scanner_new(NULL); g_scanner_input_file(scanner, fd); scanner->input_name = _filename.c_str(); scanner->config->cset_skip_characters = " \t"; scanner->config->cset_identifier_first = G_CSET_a_2_z; scanner->config->cset_identifier_nth = G_CSET_a_2_z "_" G_CSET_DIGITS; scanner->config->scan_identifier_NULL = TRUE; int state = 1; gchar *key = NULL; Profile *profile = NULL; while (242) { GTokenType ttype = g_scanner_get_next_token(scanner); if (ttype == G_TOKEN_EOF) { g_free(key); break; } switch (state) { case 0: // STATE_SCAN_TO_NEWLINE if (is_newline(scanner, ttype)) state = 1; break; case 1: // IDENTIFIER if (ttype == G_TOKEN_IDENTIFIER) { g_free(key); key = g_strdup(scanner->value.v_string); state = 2; } else if (!is_newline(scanner, ttype)) { // eat up empty lines without reporting an error g_scanner_unexp_token(scanner, G_TOKEN_IDENTIFIER, NULL, NULL, NULL, NULL, FALSE); state = 0; } break; case 2: // EQUAL_SIGN if (ttype == G_TOKEN_EQUAL_SIGN) { state = 3; } else { g_scanner_unexp_token(scanner, G_TOKEN_EQUAL_SIGN, NULL, NULL, NULL, NULL, FALSE); is_newline(scanner, ttype) ? state = 1 : state = 0; } break; case 3: // VALUE switch (ttype) { case G_TOKEN_INT: case G_TOKEN_STRING: case G_TOKEN_IDENTIFIER_NULL: { GTokenType expected = handle_line(scanner, key, ttype); if (expected != G_TOKEN_NONE) { g_scanner_unexp_token(scanner, expected, NULL, NULL, NULL, NULL, FALSE); } state = 0; break; } default: g_scanner_unexp_token(scanner, G_TOKEN_STRING, NULL, NULL, NULL, NULL, FALSE); is_newline(scanner, ttype) ? state = 1 : state = 0; break; } break; default: g_assert("must not be reached"); break; } } g_scanner_destroy(scanner); close(fd); } profile_list_t * ProfileParser::get_profiles(void) { return &_profile_list; } SingleProfileParser::SingleProfileParser(string filename, profile_level_t level, string config_name, string name) : ProfileParser(filename, level) { _name = name; _profile = new Profile(_level, filename, config_name, _name); _profile_list.push_back(_profile); } SingleProfileParser::~SingleProfileParser(void) { } Profile * SingleProfileParser::get_profile(void) { return _profile; } MultiProfileParser::MultiProfileParser(string filename, profile_level_t level) : ProfileParser(filename, level) { } MultiProfileParser::~MultiProfileParser(void) { } Profile * MultiProfileParser::get_profile(void) { Profile *profile = new Profile(_level, "", "", ""); _profile_list.push_back(profile); } KCemu-0.5.1/src/kc/prefs/prefs.cc0000644001050700006200000004630611345001576016151 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/prefs/types.h" #include "kc/prefs/prefs.h" #include "kc/prefs/parser.h" #include "kc/prefs/dirlist.h" #include "kc/prefs/strlist.h" #include "sys/sysdep.h" #include "libdbg/dbg.h" using namespace std; struct find_by_type : public unary_function { int _type; EmulationType *_result; find_by_type(int type) : _type(type), _result(NULL) {} void operator()(EmulationType *emulation_type) { if ((_result == NULL) && emulation_type->get_type() == _type) _result = emulation_type; } }; struct find_by_type_and_variant : public unary_function { int _type; int _variant; SystemType *_result; find_by_type_and_variant(int type, int variant) : _type(type), _variant(variant), _result(NULL) {} void operator()(SystemType *system) { if ((_result == NULL) && (system->get_kc_type() == _type) && (system->get_kc_variant() == _variant)) _result = system; } }; struct SaveVisitor : ProfileVisitor { Preferences *_preferences; SaveVisitor(Preferences *preferences) : _preferences(preferences) {} void handle_profile(Profile *profile) { _preferences->save_profile(profile); } }; struct RejectVisitor : ProfileVisitor { Preferences *_preferences; RejectVisitor(Preferences *preferences) : _preferences(preferences) {} void handle_profile(Profile *profile) { _preferences->reject_changes(profile); } }; Preferences *Preferences::_instance = 0; const char *Preferences::PROFILE_NAME_ROOT = "root"; const char *Preferences::PROFILE_NAME_DEFAULT = "default"; const char *Preferences::PROFILE_KEY_NAME = "name"; const char *Preferences::PROFILE_KEY_SYSTEM = "system"; const char *Preferences::PROFILE_KEY_VARIANT = "variant"; const char *Preferences::CONFIG_FILE_EXTENSION = ".conf"; const char *Preferences::USER_CONFIG_PREFIX = "_"; Preferences::Preferences(const char *sys_dir, const char *usr_dir, const char *add_dir) : _sys_dir(sys_dir), _usr_dir(usr_dir), _add_dir(add_dir) { load_default_profiles(); load_system_profiles(); load_user_profiles(); } void Preferences::load_default_profiles(void) { _root_profile = get_profile(get_profile_path(_sys_dir, PROFILE_NAME_DEFAULT), PROFILE_LEVEL_ROOT, PROFILE_NAME_DEFAULT, PROFILE_NAME_ROOT); _default_profile = get_profile(get_profile_path(_usr_dir, PROFILE_NAME_DEFAULT), PROFILE_LEVEL_DEFAULT, PROFILE_NAME_DEFAULT, PROFILE_NAME_DEFAULT); _default_profile->set_parent(_root_profile); _root_profile->set_changed(false); _default_profile->set_changed(false); } void Preferences::load_system_profiles(void) { emulation_type_list_t list = EmulationType::get_emulation_types(); for (emulation_type_list_t::iterator it = list.begin();it != list.end();it++) { string config_name = (*it)->get_config_name(); Profile *sys_profile = get_profile(get_profile_path(_sys_dir, config_name), PROFILE_LEVEL_SYSTEM, config_name, (*it)->get_name()); Profile *usr_profile = get_profile(get_profile_path(_usr_dir, config_name), PROFILE_LEVEL_SYSTEM_USER, config_name, (*it)->get_name()); sys_profile->set_int_value(PROFILE_KEY_SYSTEM, (*it)->get_kc_type()); usr_profile->set_int_value(PROFILE_KEY_SYSTEM, (*it)->get_kc_type()); sys_profile->set_parent(_default_profile); usr_profile->set_parent(sys_profile); sys_profile->set_changed(false); usr_profile->set_changed(false); _sys_profiles[config_name] = sys_profile; _usr_profiles[config_name] = usr_profile; _usr_profiles_by_type[(*it)->get_kc_type()] = usr_profile; } } void Preferences::load_user_profiles(void) { DirectoryList dir(_add_dir); for (DirectoryList::iterator it = dir.begin();it != dir.end();it++) { string config_name = string(USER_CONFIG_PREFIX) + (*it)->get_filename(); Profile *profile = get_profile((*it)->get_path(), PROFILE_LEVEL_USER, config_name, (*it)->get_filename()); kc_type_t kc_type = (kc_type_t)profile->get_int_value(PROFILE_KEY_SYSTEM, KC_TYPE_NONE); map::iterator i = _usr_profiles_by_type.find(kc_type); if (i == _usr_profiles_by_type.end()) { delete profile; continue; } if (profile->contains_key(PROFILE_KEY_NAME)) { const char *name = profile->get_string_value(PROFILE_KEY_NAME, ""); if (strlen(name) > 0) profile->set_name(name); } profile->set_parent((*i).second); profile->set_changed(false); _add_profiles[config_name] = profile; } } string Preferences::get_profile_path(string dir, string config_name) { string path = dir + "/" + config_name + CONFIG_FILE_EXTENSION; return path; } Profile * Preferences::get_profile(string path, profile_level_t level, string config_name, string name) { ProfileParser *parser = new SingleProfileParser(path.c_str(), level, config_name, name); parser->parse(); profile_list_t *list = parser->get_profiles(); assert(list->size() == 1); Profile *profile = list->front(); delete parser; return profile; } Preferences::~Preferences(void) { } void Preferences::init(const char *system_dir, const char *user_dir, const char *add_dir) { if (_instance == 0) _instance = new Preferences(system_dir, user_dir, add_dir); } Preferences * Preferences::instance(void) { if (_instance == 0) { cerr << "Preferences::instance(void): Preferences::init() not called!" << endl; exit(1); } return _instance; } Profile * Preferences::find_profile(const char *key) { if (strcmp(key, PROFILE_NAME_DEFAULT) == 0) return _default_profile; profile_map_t::iterator it1 = _usr_profiles.find(key); if (it1 != _usr_profiles.end()) return (*it1).second; profile_map_t::iterator it2 = _add_profiles.find(key); if (it2 != _add_profiles.end()) return (*it2).second; return NULL; } Profile * Preferences::find_profile_by_name(const char *name) { if (strcmp(name, PROFILE_NAME_DEFAULT) == 0) return _default_profile; for (profile_map_t::iterator it1 = _usr_profiles.begin();it1 != _usr_profiles.end();it1++) { if (strcmp(name, (*it1).second->get_name()) == 0) return (*it1).second; } for (profile_map_t::iterator it2 = _add_profiles.begin();it2 != _add_profiles.end();it2++) { if (strcmp(name, (*it2).second->get_name()) == 0) return (*it2).second; } return NULL; } list Preferences::find_child_profiles(const char *key) { list child_profiles; for (profile_map_t::iterator it = _add_profiles.begin();it != _add_profiles.end();it++) { Profile *child_profile = (*it).second; const char *config_name = child_profile->get_parent()->get_config_name(); if (strcmp(key, config_name) != 0) continue; child_profiles.push_back(child_profile); } return child_profiles; } Profile * Preferences::create_user_profile(Profile *parent) { char name[1024]; struct stat statbuf; if (parent == NULL) return NULL; kc_type_t kc_type = (kc_type_t)parent->get_int_value(PROFILE_KEY_SYSTEM, KC_TYPE_NONE); if (kc_type == KC_TYPE_NONE) return NULL; for (int a = 0;a < 10000;a++) { snprintf(name, sizeof(name), "profile_%04d", a); string config_name = string(name) + CONFIG_FILE_EXTENSION; string path = _add_dir + "/" + config_name; if (Preferences::instance()->find_profile(config_name.c_str()) != NULL) continue; if (stat(path.c_str(), &statbuf) == 0) continue; Profile *profile = new Profile(PROFILE_LEVEL_USER, path, config_name, name); profile->set_int_value(PROFILE_KEY_SYSTEM, kc_type); profile->set_parent(parent); _add_profiles[config_name] = profile; return profile; } return NULL; } Profile * Preferences::copy_user_profile(Profile *profile) { Profile *copy = create_user_profile(profile->get_parent()); if (copy == NULL) return NULL; list *keys = profile->get_keys(); for (list::iterator it = keys->begin();it != keys->end();it++) { const char *key = (*it).c_str(); if (strcmp(key, PROFILE_KEY_NAME) == 0) continue; char *encoded_value = profile->get_encoded_value(key); copy->set_value(key, new ProfileValue(profile->get_value(key))); free(encoded_value); } return copy; } bool Preferences::has_changed_profiles(void) { if (_default_profile->is_changed()) return true; for (profile_map_t::iterator it = _usr_profiles.begin();it != _usr_profiles.end();it++) if ((*it).second->is_changed()) return true; for (profile_map_t::iterator it = _add_profiles.begin();it != _add_profiles.end();it++) if ((*it).second->is_changed()) return true; return false; } void Preferences::visit_changed(ProfileVisitor &visitor) { DBG(1, form("KCemu/Preferences", "Preferences::visit_changed(): Start visiting changed profiles:\n")); if (_default_profile->is_changed()) { DBG(1, form("KCemu/Preferences", "Preferences::visit_changed(): ... default profile changed\n")); visitor.handle_profile(_default_profile); } for (profile_map_t::iterator it = _usr_profiles.begin();it != _usr_profiles.end();it++) { Profile *profile = (*it).second; if (profile->is_changed()) { DBG(1, form("KCemu/Preferences", "Preferences::visit_changed(): ... system profile '%s' changed\n", profile->get_name())); visitor.handle_profile(profile); } } for (profile_map_t::iterator it = _add_profiles.begin();it != _add_profiles.end();it++) { Profile *profile = (*it).second; if (profile->is_changed()) { DBG(1, form("KCemu/Preferences", "Preferences::visit_changed(): ... user profile '%s' changed\n", profile->get_name())); visitor.handle_profile(profile); } } DBG(1, form("KCemu/Preferences", "Preferences::visit_changed(): End visiting changed profiles.\n")); } void Preferences::save(void) { DBG(1, form("KCemu/Preferences", "Preferences::save(): Start save profiles:\n")); mkdirs(_usr_dir); mkdirs(_add_dir); SaveVisitor visitor(this); visit_changed(visitor); DBG(1, form("KCemu/Preferences", "Preferences::save(): End save profiles.\n")); } void Preferences::reject(void) { DBG(1, form("KCemu/Preferences", "Preferences::reject(): Start rejecting changes\n")); RejectVisitor visitor(this); visit_changed(visitor); DBG(1, form("KCemu/Preferences", "Preferences::reject(): End rejecting changes\n")); } bool Preferences::mkdirs(string dir) { struct stat statbuf; if (stat(dir.c_str(), &statbuf) == 0) { if (S_ISDIR(statbuf.st_mode)) { DBG(1, form("KCemu/Preferences", "Preferences::mkdirs(): Directory '%s' exists.\n", dir.c_str())); return true; } } DBG(1, form("KCemu/Preferences", "Preferences::mkdirs(): Directory '%s' doesn't exist, trying to create...\n", dir.c_str())); StringList dirs(dir, '/'); string path; for (StringList::const_iterator it = dirs.begin();it != dirs.end();it++) { string entry = (*it); if ((path.size() == 0) && (entry.size() == 2) && (entry[1] == ':')) { DBG(1, form("KCemu/Preferences", "Preferences::mkdirs(): Detected windows style path, skipping drive letter '%s'...\n", entry.c_str())); path += entry; continue; } path += "/"; path += entry; if (stat(path.c_str(), &statbuf) == 0) { if (S_ISDIR(statbuf.st_mode)) { DBG(1, form("KCemu/Preferences", "Preferences::mkdirs(): .. Directory '%s' already exists.\n", path.c_str())); continue; } else { DBG(1, form("KCemu/Preferences", "Preferences::mkdirs(): Path '%s' already exists, but it is not a directory. Create failed!\n", path.c_str())); return false; } } if (sys_mkdir(path.c_str(), 0700) != 0) { DBG(1, form("KCemu/Preferences", "Preferences::mkdirs(): Could not create directory '%s' (%s)!\n", path.c_str(), strerror(errno))); return false; } DBG(1, form("KCemu/Preferences", "Preferences::mkdirs(): .. Created directory '%s'.\n", path.c_str())); } DBG(1, form("KCemu/Preferences", "Preferences::mkdirs(): Done.\n")); return true; } bool Preferences::save_profile(Profile *profile) { dump_profile(profile); if (profile->is_deleted()) { DBG(1, form("KCemu/Preferences", "Preferences::save_profile(): Deleting profile '%s'\n", profile->get_name())); if (unlink(profile->get_path()) != 0) { DBG(1, form("KCemu/Preferences", "Preferences::save_profile(): Could not delete file '%s' (%s)!\n", profile->get_path(), strerror(errno))); } if (_add_profiles.erase(profile->get_config_name()) == 1) { delete profile; return true; } return false; } ofstream os(profile->get_path(), ios_base::trunc); if (!os) { DBG(1, form("KCemu/Preferences", "Preferences::save_profile(): could not create file '%s'\n", profile->get_path())); return false; } os << ProfileParser::signature << endl; list *keys = profile->get_keys(); for (list::iterator it = keys->begin();it != keys->end();it++) { char *value = profile->get_encoded_value(*it); os << (*it).c_str() << " = " << value << endl; free(value); } profile->set_changed(false); return true; } void Preferences::reject_changes(Profile *profile) { profile->reject_changes(); } void Preferences::dump_profile(Profile *profile) { DBG(1, form("KCemu/Preferences", "Preferences::dump_profile(): dumping profile '%s' (flags: %c%c)\n", profile->get_name(), profile->is_changed() ? 'C' : 'c', profile->is_deleted() ? 'D' : 'd')); string path = get_profile_path(_usr_dir, profile->get_config_name()); DBG(1, form("KCemu/Preferences", "Preferences::dump_profile(): path is '%s'\n", path.c_str())); list *keys = profile->get_keys(); for (list::iterator it = keys->begin();it != keys->end();it++) { char *value = profile->get_encoded_value(*it); DBG(1, form("KCemu/Preferences", "Preferences::dump_profile(): .. %s = %s\n", (*it).c_str(), value)); free(value); } DBG(1, form("KCemu/Preferences", "Preferences::dump_profile(): end.\n")); } /** * find the profile to select as current profile: * * 1.) check for the given name as config_name in the profile * 2.) check for the given name as display name of the profile * 3.) check for the profile matching the given type * 4.) revert to "default" profile */ void Preferences::set_current_profile(const char *name, int type) { Profile *profile = NULL; if (name != NULL) { profile = Preferences::instance()->find_profile(name); } if ((profile == NULL) && (name != NULL)) { profile = Preferences::instance()->find_profile_by_name(name); } if ((profile == NULL) && (type >= 0)) { emulation_type_list_t& list = EmulationType::get_emulation_types(); find_by_type ft = for_each(list.begin(), list.end(), find_by_type(type)); if (ft._result != NULL) { profile = Preferences::instance()->find_profile(ft._result->get_config_name()); } } if (profile == NULL) { profile = Preferences::instance()->find_profile(PROFILE_NAME_DEFAULT); } if (profile != NULL) { kc_type_t kc_type = (kc_type_t)profile->get_int_value(PROFILE_KEY_SYSTEM, -1); kc_variant_t kc_variant = (kc_variant_t)profile->get_int_value(PROFILE_KEY_VARIANT, 0); SystemType *system_type = find_system_type(kc_type, kc_variant); if (system_type == NULL) system_type = find_system_type(kc_type, KC_VARIANT_NONE); if (system_type == NULL) system_type = find_system_type(KC_TYPE_85_4, KC_VARIANT_NONE); if (system_type != NULL) { _current_profile = profile; _current_system_type = system_type; return; } } abort(); } SystemType * Preferences::find_system_type(kc_type_t kc_type, kc_variant_t kc_variant) { system_type_list_t& list = SystemInformation::instance()->get_system_types(); find_by_type_and_variant f = for_each(list.begin(), list.end(), find_by_type_and_variant(kc_type, kc_variant)); return f._result; } int Preferences::get_int_value(string key, int default_value) { return _current_profile->get_int_value(key, default_value); } const char * Preferences::get_string_value(string key, const char *default_value) { return _current_profile->get_string_value(key, default_value); } SystemType * Preferences::get_system_type(void) { return _current_system_type; } kc_type_t Preferences::get_kc_type(void) { return _current_system_type->get_kc_type(); } kc_variant_t Preferences::get_kc_variant(void) { return _current_system_type->get_kc_variant(); } const char * Preferences::get_kc_type_name(void) { return _current_system_type->get_emulation_type().get_name(); } const char * Preferences::get_kc_variant_name(void) { return _current_system_type->get_kc_variant_name(); } KCemu-0.5.1/src/kc/prefs/profile.cc0000644001050700006200000002017511345001576016466 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "kc/prefs/profile.h" ProfileValue::ProfileValue(ProfileValue *value) : _level(value->_level), _type(value->_type), _int_value(value->_int_value), _string_value(value->_string_value) { } ProfileValue::ProfileValue(profile_level_t level) : _level(level), _type(PROFILE_VALUE_TYPE_NULL), _int_value(0), _string_value("") { } ProfileValue::ProfileValue(profile_level_t level, int value) : _level(level), _type(PROFILE_VALUE_TYPE_INT), _int_value(value), _string_value("") { } ProfileValue::ProfileValue(profile_level_t level, string value) : _level(level), _type(PROFILE_VALUE_TYPE_STRING), _int_value(0), _string_value(value) { } ProfileValue::~ProfileValue(void) { } bool ProfileValue::equals(ProfileValue *value) const { if (_type != value->_type) return false; switch (_type) { case PROFILE_VALUE_TYPE_NULL: return true; case PROFILE_VALUE_TYPE_INT: return _int_value == value->_int_value; case PROFILE_VALUE_TYPE_STRING: return _string_value == value->_string_value; } abort(); } profile_level_t ProfileValue::get_level(void) const { return _level; } int ProfileValue::get_int_value(void) const { return _int_value; } const char * ProfileValue::get_string_value(void) const { if (_type == PROFILE_VALUE_TYPE_NULL) return NULL; return _string_value.c_str(); } char * ProfileValue::get_encoded_value(void) const { char buf[2048]; switch (_type) { case PROFILE_VALUE_TYPE_NULL: return strdup("null"); case PROFILE_VALUE_TYPE_INT: snprintf(buf, sizeof(buf), "%d", _int_value); return strdup(buf); case PROFILE_VALUE_TYPE_STRING: string str; str.reserve(_string_value.length() + 10); str.push_back('"'); for (string::const_iterator it = _string_value.begin();it != _string_value.end();it++) { char c = (*it); if ((c == '"') || (c == '\\')) str.push_back('\\'); str.push_back(c); } str.push_back('"'); return strdup(str.c_str()); } abort(); } Profile::Profile(profile_level_t level, string path, string config_name, string name) { _level = level; _path = path; _name = name; _config_name = config_name; _parent = NULL; set_changed(false); set_deleted(false); } Profile::~Profile(void) { } const char * Profile::get_name(void) const { return _name.c_str(); } void Profile::set_name(string name) { _name = name; } const char * Profile::get_config_name(void) const { return _config_name.c_str(); } profile_level_t Profile::get_level(void) const { return _level; } const char * Profile::get_path(void) const { return _path.c_str(); } bool Profile::is_changed(void) const { return _changed; } void Profile::set_changed(bool changed) { if (!changed) { for (pref_map_t::iterator it = _pref_map_old.begin();it != _pref_map_old.end();) { ProfileValue *value = _pref_map_old[(*it).first]; // Need to increment it before actually erasing the value from the map // but pass the old value to the erase call! _pref_map_old.erase(it++); if (value != NULL) { delete value; } } } _changed = changed; } bool Profile::is_deleted(void) const { return _deleted; } void Profile::set_deleted(bool deleted) { _deleted = deleted; set_changed(true); } Profile * Profile::get_parent(void) const { return _parent; } void Profile::set_parent(Profile *parent) { _parent = parent; } /** * Return the comment depending on the hierarchy level. * The user created profiles do not inherit the comment from the levels above. */ const char * Profile::get_comment(void) const { const char *key = "comment"; if ((get_level() == PROFILE_LEVEL_USER) && (!contains_key(key))) return ""; return get_string_value(key, ""); } int Profile::get_int_value(string key, int default_value) const { ProfileValue *value = get_value(key); if (value == NULL) return default_value; return value->get_int_value(); } void Profile::set_int_value(string key, int value) { set_value(key, new ProfileValue(get_level(), value)); } const char * Profile::get_string_value(string key, const char *default_value) const { ProfileValue *value = get_value(key); if (value == NULL) return default_value; return value->get_string_value(); } void Profile::set_string_value(string key, string value) { set_value(key, new ProfileValue(get_level(), value)); } void Profile::set_null_value(string key) { set_value(key, new ProfileValue(get_level())); } void Profile::remove_value(string key) { if (!contains_key(key)) return; ProfileValue *old_value = _pref_map[key]; set_value_with_backup(key, NULL, old_value); } ProfileValue * Profile::get_value(string key) const { pref_map_t::const_iterator it = _pref_map.find(key); if (it == _pref_map.end()) { if (_parent == NULL) { return NULL; } else { return _parent->get_value(key); } } return (*it).second; } void Profile::set_value(string key, ProfileValue *value) { pref_map_t::iterator it = _pref_map.find(key); ProfileValue *old_value = NULL; if (it != _pref_map.end()) { old_value = (*it).second; if (old_value->equals(value)) { delete value; return; } _pref_map.erase(it); } set_value_with_backup(key, value, old_value); } /** * set new value and backup the old value if there is not already a backup. * parameter old_value might be NULL if the key was not yet set in profile. */ void Profile::set_value_with_backup(string key, ProfileValue *value, ProfileValue *old_value) { pref_map_t::iterator it = _pref_map_old.find(key); if (it == _pref_map_old.end()) { _pref_map_old[key] = old_value; } else { delete old_value; } if (value == NULL) { _pref_map.erase(key); } else { _pref_map[key] = value; } set_changed(true); } list * Profile::get_keys(void) { list *key_list = new list(); for (pref_map_t::iterator it = _pref_map.begin();it != _pref_map.end();it++) key_list->push_back((*it).first); return key_list; } void Profile::reject_changes(void) { for (pref_map_t::iterator it = _pref_map_old.begin();it != _pref_map_old.end();it++) { string key = (*it).first; ProfileValue *value = _pref_map_old[key]; if (value == NULL) { _pref_map.erase(key); } else { _pref_map[key] = value; } _pref_map_old.erase(it); } set_changed(false); } bool Profile::contains_key(string key) const { pref_map_t::const_iterator it = _pref_map.find(key); return it != _pref_map.end(); } char * Profile::get_encoded_value(string key) const { pref_map_t::const_iterator it = _pref_map.find(key); if (it == _pref_map.end()) return NULL; ProfileValue *value = (*it).second; return value->get_encoded_value(); } KCemu-0.5.1/src/kc/prefs/dirlist.cc0000644001050700006200000000404111345001576016472 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/prefs/dirlist.h" DirectoryListEntry::DirectoryListEntry(string dir, string filename) : _dir(dir), _filename(filename) { _path = _dir + "/" + _filename; } DirectoryListEntry::~DirectoryListEntry(void) { } const char * DirectoryListEntry::get_dir(void) const { return _dir.c_str(); } const char * DirectoryListEntry::get_path(void) const { return _path.c_str(); } const char * DirectoryListEntry::get_filename(void) const { return _filename.c_str(); } DirectoryList::DirectoryList(string basedir) : _basedir(basedir) { DIR *dir; struct stat statbuf; struct dirent *entry; dir = opendir(_basedir.c_str()); if (dir == NULL) return; while (true) { entry = readdir(dir); if (entry == NULL) break; string filename = _basedir + "/" + entry->d_name; if (stat(filename.c_str(), &statbuf) != 0) continue; if (!S_ISREG(statbuf.st_mode)) continue; push_back(new DirectoryListEntry(_basedir, entry->d_name)); } closedir(dir); } DirectoryList::~DirectoryList(void) { } KCemu-0.5.1/src/kc/prefs/Makefile.in0000644001050700006200000004176511412404772016574 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/kc/prefs DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libprefs_a_AR = $(AR) $(ARFLAGS) libprefs_a_LIBADD = am_libprefs_a_OBJECTS = prefs.$(OBJEXT) parser.$(OBJEXT) \ profile.$(OBJEXT) types.$(OBJEXT) strlist.$(OBJEXT) \ dirlist.$(OBJEXT) libprefs_a_OBJECTS = $(am_libprefs_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(libprefs_a_SOURCES) DIST_SOURCES = $(libprefs_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libprefs.a AM_CPPFLAGS = \ -DKCEMU_PACKAGE=\"$(PACKAGE)\" \ -DKCEMU_DATADIR=\"$(pkgdatadir)\" \ -DKCEMU_LOCALEDIR=\"$(localedir)\" \ -DDEBUG \ $(GTK_CFLAGS) \ $(SDL_CFLAGS) INCLUDES = -I../../../include libprefs_a_SOURCES = \ prefs.cc \ parser.cc \ profile.cc \ types.cc \ strlist.cc \ dirlist.cc all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/kc/prefs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/kc/prefs/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libprefs.a: $(libprefs_a_OBJECTS) $(libprefs_a_DEPENDENCIES) -rm -f libprefs.a $(libprefs_a_AR) libprefs.a $(libprefs_a_OBJECTS) $(libprefs_a_LIBADD) $(RANLIB) libprefs.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dirlist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/parser.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prefs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/profile.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strlist.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/types.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/kc/poly880.cc0000644001050700006200000000344311345001576015131 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/poly880.h" #include "cmd/cmd.h" #include "libdbg/dbg.h" /* * partial implementation for the poly880 reset / single step / NMI logic * * Currently only the CTC triggered NMI flip flop is emulated. It's set * by the ZC/TO0 value of CTC channel 0 and can be reset by PIO 1 port B * bit 6 (SCON). * */ Poly880::Poly880(void) { _scon = false; _nmi_flip_flop = false; } Poly880::~Poly880(void) { } void Poly880::set_scon(bool value) { if (_scon == value) return; DBG(2, form("KCemu/Poly880/set_scon", "Poly880::set_scon(): value = %d%s\n", value, _scon ? "" : " - NMI Flip-Flop reset")); if (!_scon) _nmi_flip_flop = false; _scon = value; } void Poly880::trigger_send(void) { if (_nmi_flip_flop) return; DBG(2, form("KCemu/Poly880/trigger_send", "Poly880::trigger_send() - NMI Flip-Flop set\n")); _nmi_flip_flop = true; CMD_EXEC("emu-nmi"); } KCemu-0.5.1/src/kc/sound.cc0000644001050700006200000000414111345001576015032 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #if ENABLE_SOUND #include #endif /* ENABLE_SOUND */ #include "kc/sound.h" #define SOUND_BUFFER_SIZE (1024) #define SOUND_SAMPLE_FREQ (44100) void Sound::sdl_sound_callback(void *userdata, unsigned char *stream, int len) { Sound *self = (Sound *)userdata; self->sound_callback(userdata, stream, len); } Sound::Sound(void) { } Sound::~Sound(void) { } void Sound::open_sound(void) { #if ENABLE_SOUND int ret; SDL_AudioSpec wanted, obtained; wanted.freq = SOUND_SAMPLE_FREQ; wanted.format = AUDIO_U8; wanted.channels = 1; wanted.samples = SOUND_BUFFER_SIZE; wanted.callback = sdl_sound_callback; wanted.userdata = this; ret = SDL_OpenAudio(&wanted, &obtained); #if 0 printf("ret = %d\n", ret); printf("obtained.freq = %d\n", obtained.freq); printf("obtained.format = %d\n", obtained.format); printf("obtained.channels = %d\n", obtained.channels); printf("obtained.samples = %d\n", obtained.samples); printf("obtained.silence = %d\n", obtained.silence); printf("obtained.size = %d\n", obtained.size); #endif SDL_PauseAudio(0); #endif /* ENABLE_SOUND */ } void Sound::lock(void) { #if ENABLE_SOUND SDL_LockAudio(); #endif } void Sound::unlock(void) { #if ENABLE_SOUND SDL_UnlockAudio(); #endif } KCemu-0.5.1/src/kc/sound3.cc0000644001050700006200000001004611345001576015116 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/ctc.h" #include "kc/sound3.h" #include "libdbg/dbg.h" #define SOUND_BUFFER_SIZE (1024) #define SOUND_SAMPLE_FREQ (44100) #define SYNC_COUNTER (10) void Sound3::sound_callback(void *userdata, unsigned char *stream, int len) { sndop *op = NULL; Sound3 *self = (Sound3 *)userdata; long long cur, diff, idx; static long long counter = 0; static int val = 1; static int xxx = 0; static int freq = 0; cur = z80->getCounter(); if (counter == 0) { counter = cur; memset(stream, 0, len); return; } diff = cur - counter; int a = 0; if (!self->_sndop_list.empty()) op = *(self->_sndop_list.begin()); while (a < len) { idx = counter + (a * diff) / len; if (op && (idx > op->_counter)) { freq = (int)op->_freq; if (freq > SOUND_SAMPLE_FREQ) { xxx = 0; freq = 0; val = -val; } //cout << a << " - " << op->_counter << " / " << op->_freq << endl; self->_sndop_list.pop_front(); op = NULL; if (self->_sndop_list.size() > 0) op = *(self->_sndop_list.begin()); if (xxx == 0) if (freq != 0) xxx = SOUND_SAMPLE_FREQ / freq; } if (freq == 0) stream[a] = 128; else stream[a] = 128 + 80 * val; if (xxx > 0) if (--xxx == 0) { val = -val; if (freq != 0) xxx = SOUND_SAMPLE_FREQ / freq; } a++; } counter = cur; } Sound3::Sound3(void) { } Sound3::~Sound3(void) { delete _dummy_sndop; } void Sound3::init() { open_sound(); ctc->register_callback(0, this); pio->register_callback_B_out(this); _playing = true; _dummy_sndop = new sndop(0, 0); _last_sndop = _dummy_sndop; } void Sound3::start() { double freq = (1750000.0 / 2) / ctc->getTimerValue(0); if (_last_sndop->_freq != freq) { //cout << "sound: start [1]: " << z80->getCounter() << endl; _last_sndop = new sndop(z80->getCounter(), freq); _sndop_list.push_back(_last_sndop); } } void Sound3::stop() { //cout << "sound: stop [1]: " << z80->getCounter() << endl; if (_last_sndop->_freq != 0) { //cout << "sound: stop [2]: " << z80->getCounter() << endl; _last_sndop = new sndop(z80->getCounter(), 0); _sndop_list.push_back(_last_sndop); } } void Sound3::callback_B_out(byte_t val) { if (((val & 1) == 1) && ((val & 0x0e) != 0x0e) && !ctc->isReset(0)) start(); else stop(); } void Sound3::ctc_callback_start(int channel) { if (channel != 0) return; if (ctc->getTimerValue(channel) == 0) return; //printf("Sound3::ctc_callback_start()\n"); start(); } void Sound3::ctc_callback_stop(int channel) { if (channel != 0) return; stop(); } void Sound3::ctc_callback_TC(int channel, long tc) { double freq; switch (channel) { case 0: freq = (1750000.0 / 2) / tc; //printf("%04xh: Sound3::cb_TC() - %10Ld - %12.2f\n", z80->getPC(), z80->getCounter(), freq); if (_last_sndop->_freq != freq) { _last_sndop = new sndop(z80->getCounter(), freq); _sndop_list.push_back(_last_sndop); } break; default: break; } } KCemu-0.5.1/src/kc/kc.cc0000644001050700006200000014022611345001576014304 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "kc/system.h" #include "kc/prefs/types.h" #ifdef HOST_OS_MINGW #ifdef HAVE_LIBSDL #include "SDL.h" #endif /* HAVE_LIBSDL */ #include #endif /* HOST_OS_MINGW */ #ifdef USE_INCLUDED_GETOPT #include "getopt/getopt.h" #else #ifdef HAVE_GETOPT #include #endif #endif #ifdef HAVE_LOCALE_H #include #endif #undef __CALL_MTRACE #ifdef HAVE_MCHECK_H #ifdef DBG_LEVEL #if DBG_LEVEL > 1 #define __CALL_MTRACE 1 #include #warning including mcheck.h #endif #endif #endif #include "kc/kc.h" #include "kc/ctc.h" #include "kc/pio.h" #include "kc/z80.h" #include "kc/wav.h" #include "kc/tape.h" #include "kc/disk.h" #include "kc/daisy.h" #include "kc/timer.h" #include "kc/module.h" #include "kc/mod_list.h" #include "kc/sh_mem.h" #include "kc/disk_io.h" #include "kc/fdc4.h" #include "kc/fdc9.h" #include "kc/sound.h" #include "kc/ctc_fdc.h" #include "kc/z80_fdc.h" #include "kc/gide.h" #include "kc/vdip.h" #include "kc/plotter.h" #include "kc/poly880.h" #include "kc/prefs/prefs.h" #include "kc/kcnet/kcnet.h" #include "ui/log.h" #include "cmd/cmd.h" #include "fileio/load.h" #include "libdisk/libdisk.h" #include "libaudio/libaudio.h" #include "kc/pio0.h" #include "kc/keyb0.h" #include "kc/ports0.h" #include "kc/memory0.h" #include "kc/pio1.h" #include "kc/ctc1.h" #include "kc/keyb1.h" #include "kc/timer1.h" #include "kc/memory1.h" #include "kc/memory7.h" #include "kc/pio2.h" #include "kc/memory2.h" #include "kc/pio3.h" #include "kc/ctc3.h" #include "kc/keyb3.h" #include "kc/timer3.h" #include "kc/sound3.h" #include "kc/memory3.h" #include "kc/pio4.h" #include "kc/ports4.h" #include "kc/memory4.h" #include "kc/memory5.h" #include "kc/ctc6.h" #include "kc/pio6.h" #include "kc/keyb6.h" #include "kc/ports6.h" #include "kc/memory6.h" #include "kc/ctc8.h" #include "kc/pio8.h" #include "kc/keyb8.h" #include "kc/sound8.h" #include "kc/memory8.h" #include "kc/gdc.h" #include "kc/vis.h" #include "kc/svg.h" #include "kc/ctc9.h" #include "kc/pio9.h" #include "kc/keyb9.h" #include "kc/memory9.h" #include "kc/kramermc/pio.h" #include "kc/kramermc/memory.h" #include "kc/kramermc/keyboard.h" #include "kc/muglerpc/ctc.h" #include "kc/muglerpc/pio.h" #include "kc/muglerpc/ports.h" #include "kc/muglerpc/memory.h" #include "kc/muglerpc/keyboard.h" #include "kc/vcs80/pio.h" #include "kc/vcs80/memory.h" #include "kc/vcs80/keyboard.h" #include "kc/c80/pio.h" #include "kc/c80/memory.h" #include "kc/c80/display.h" #include "kc/c80/keyboard.h" #include "sys/sysdep.h" # include "ui/gtk/ui_gtk.h" #include "libdbg/dbg.h" using namespace std; Z80 *z80; DaisyChain *daisy; UI *ui; Ports *ports; Ports *ports_fdc; Module *module; Memory *memory; CTC *ctc; CTC *ctc2; PIO *pio; PIO *pio2; Tape *tape; Disk *disk; Timer *timer; Keyboard *keyboard; ModuleList *module_list; CMD *cmd; Sound *sound; WavPlayer *wav; PortInterface *porti; GDC *gdc; VIS *vis; SVG *svg; VDIP *vdip; KCNET *kcnet; Poly880 *poly880; DisplayC80 *display_c80; Plotter *plotter; Z80_FDC *fdc_z80; FloppyIO *fdc_io; FloppySharedMem *fdc_shmem; Ports *fdc_ports; FDC *fdc_fdc; CTC *fdc_ctc; GIDE *fdc_gide; int kcemu_ui_scale; int kcemu_ui_debug; int kcemu_ui_fullscreen; int kcemu_ui_display_effect; int kcemu_select_profile; char *kcemu_homedir; char *kcemu_datadir; char *kcemu_localedir; char *kcemu_debug_output; char *kcemu_tape; char *kcemu_disk; char *kcemu_modules; char *kcemu_autostart_file; char *kcemu_autostart_addr; char *kcemu_vdip_root; char *kcemu_profile; static void banner(void) { cout << (" _ ______\n" " | |/ / ___|___ _ __ ___ _ _ KCemu " KCEMU_VERSION "\n" " | ' / | / _ \\ '_ ` _ \\| | | | (c) 1997-2010 Torsten Paul\n" " | . \\ |__| __/ | | | | | |_| | \n" " |_|\\_\\____\\___|_| |_| |_|\\__,_| http://kcemu.sourceforge.net/\n"); } static void usage(char *argv0) { banner(); cout << _("\n" "KCemu comes with ABSOLUTELY NO WARRANTY; for details run `kcemu --warranty'.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; run `kcemu --license' for details.\n" "\n" "usage: kcemu [-0123456789aAcestfhdlvVHFMELW]\n" "\n" " -0: select Z1013 profile\n" " -1: select Z9001 / KC 85/1 profile\n" " -2: select KC 85/2 profile\n" " -3: select KC 85/3 profile\n" " -4: select KC 85/4 profile\n" " -5: select KC 85/5 profile\n" " -6: select Poly-880 profile\n" " -7: select KC 87 profile\n" " -8: select LC 80 profile\n" " -9: select BIC/A5105 profile\n" " -a --autostart: autostart program on startup (kc85/3 - kc85/5 only)\n" " -A --address: override start address of autostart program\n" " -d --datadir: set data directory (for ROM images)\n" " -E --effects: enable display effects for scaled screen output\n" " -f --floppy: attach disk on startup\n" " -F --fullscreen: start in fullscreen mode (if supported by gui)\n" " -h --help: display help\n" " -H --home: overwrite setting for home directory\n" " -l --localedir: set locale directory\n" " -L --license: show license\n" " -M --modules: insert modules on startup (e.g. -M M011,M027)\n" " -o --debug-output: write debug output to file\n" " -p --profile: start with given profile\n" " -P --select-profile: show profile selector\n" " -s --scale: scale display (allowed values: 1, 2 and 3)\n" " -t --tape: attach tape on startup\n" " -v --version: show KCemu version and configuration\n" " -V --viewlist: view verbose list of available emulations\n" " -W --warranty: show warranty\n"); exit(0); } static void show_version(char *argv0) { banner(); cout << endl; SystemInformation::instance()->show_types(); cout << endl; fileio_show_config(); cout << endl; libdisk_show_config(); cout << endl; libaudio_show_config(); exit(0); } static void show_variants(char *argv0) { banner(); cout << endl; SystemInformation::instance()->show_types_with_description(); exit(0); } const char * kc_get_license(void) { return _("\n" " GNU GENERAL PUBLIC LICENSE\n" " Version 2, June 1991\n" "\n" " Copyright (C) 1989, 1991 Free Software Foundation, Inc.\n" " 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\n" " Everyone is permitted to copy and distribute verbatim copies\n" " of this license document, but changing it is not allowed.\n" "\n" " Preamble\n" "\n" " The licenses for most software are designed to take away your\n" "freedom to share and change it. By contrast, the GNU General Public\n" "License is intended to guarantee your freedom to share and change free\n" "software--to make sure the software is free for all its users. This\n" "General Public License applies to most of the Free Software\n" "Foundation's software and to any other program whose authors commit to\n" "using it. (Some other Free Software Foundation software is covered by\n" "the GNU Library General Public License instead.) You can apply it to\n" "your programs, too.\n" "\n" " When we speak of free software, we are referring to freedom, not\n" "price. Our General Public Licenses are designed to make sure that you\n" "have the freedom to distribute copies of free software (and charge for\n" "this service if you wish), that you receive source code or can get it\n" "if you want it, that you can change the software or use pieces of it\n" "in new free programs; and that you know you can do these things.\n" "\n" " To protect your rights, we need to make restrictions that forbid\n" "anyone to deny you these rights or to ask you to surrender the rights.\n" "These restrictions translate to certain responsibilities for you if you\n" "distribute copies of the software, or if you modify it.\n" "\n" " For example, if you distribute copies of such a program, whether\n" "gratis or for a fee, you must give the recipients all the rights that\n" "you have. You must make sure that they, too, receive or can get the\n" "source code. And you must show them these terms so they know their\n" "rights.\n" "\n" " We protect your rights with two steps: (1) copyright the software, and\n" "(2) offer you this license which gives you legal permission to copy,\n" "distribute and/or modify the software.\n" "\n" " Also, for each author's protection and ours, we want to make certain\n" "that everyone understands that there is no warranty for this free\n" "software. If the software is modified by someone else and passed on, we\n" "want its recipients to know that what they have is not the original, so\n" "that any problems introduced by others will not reflect on the original\n" "authors' reputations.\n" "\n" " Finally, any free program is threatened constantly by software\n" "patents. We wish to avoid the danger that redistributors of a free\n" "program will individually obtain patent licenses, in effect making the\n" "program proprietary. To prevent this, we have made it clear that any\n" "patent must be licensed for everyone's free use or not licensed at all.\n" "\n" " The precise terms and conditions for copying, distribution and\n" "modification follow.\n" "\n" " GNU GENERAL PUBLIC LICENSE\n" " TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION\n" "\n" " 0. This License applies to any program or other work which contains\n" "a notice placed by the copyright holder saying it may be distributed\n" "under the terms of this General Public License. The \"Program\", below,\n" "refers to any such program or work, and a \"work based on the Program\"\n" "means either the Program or any derivative work under copyright law:\n" "that is to say, a work containing the Program or a portion of it,\n" "either verbatim or with modifications and/or translated into another\n" "language. (Hereinafter, translation is included without limitation in\n" "the term \"modification\".) Each licensee is addressed as \"you\".\n" "\n" "Activities other than copying, distribution and modification are not\n" "covered by this License; they are outside its scope. The act of\n" "running the Program is not restricted, and the output from the Program\n" "is covered only if its contents constitute a work based on the\n" "Program (independent of having been made by running the Program).\n" "Whether that is true depends on what the Program does.\n" "\n" " 1. You may copy and distribute verbatim copies of the Program's\n" "source code as you receive it, in any medium, provided that you\n" "conspicuously and appropriately publish on each copy an appropriate\n" "copyright notice and disclaimer of warranty; keep intact all the\n" "notices that refer to this License and to the absence of any warranty;\n" "and give any other recipients of the Program a copy of this License\n" "along with the Program.\n" "\n" "You may charge a fee for the physical act of transferring a copy, and\n" "you may at your option offer warranty protection in exchange for a fee.\n" "\n" " 2. You may modify your copy or copies of the Program or any portion\n" "of it, thus forming a work based on the Program, and copy and\n" "distribute such modifications or work under the terms of Section 1\n" "above, provided that you also meet all of these conditions:\n" "\n" " a) You must cause the modified files to carry prominent notices\n" " stating that you changed the files and the date of any change.\n" "\n" " b) You must cause any work that you distribute or publish, that in\n" " whole or in part contains or is derived from the Program or any\n" " part thereof, to be licensed as a whole at no charge to all third\n" " parties under the terms of this License.\n" "\n" " c) If the modified program normally reads commands interactively\n" " when run, you must cause it, when started running for such\n" " interactive use in the most ordinary way, to print or display an\n" " announcement including an appropriate copyright notice and a\n" " notice that there is no warranty (or else, saying that you provide\n" " a warranty) and that users may redistribute the program under\n" " these conditions, and telling the user how to view a copy of this\n" " License. (Exception: if the Program itself is interactive but\n" " does not normally print such an announcement, your work based on\n" " the Program is not required to print an announcement.)\n" "\n" "These requirements apply to the modified work as a whole. If\n" "identifiable sections of that work are not derived from the Program,\n" "and can be reasonably considered independent and separate works in\n" "themselves, then this License, and its terms, do not apply to those\n" "sections when you distribute them as separate works. But when you\n" "distribute the same sections as part of a whole which is a work based\n" "on the Program, the distribution of the whole must be on the terms of\n" "this License, whose permissions for other licensees extend to the\n" "entire whole, and thus to each and every part regardless of who wrote it.\n" "\n" "Thus, it is not the intent of this section to claim rights or contest\n" "your rights to work written entirely by you; rather, the intent is to\n" "exercise the right to control the distribution of derivative or\n" "collective works based on the Program.\n" "\n" "In addition, mere aggregation of another work not based on the Program\n" "with the Program (or with a work based on the Program) on a volume of\n" "a storage or distribution medium does not bring the other work under\n" "the scope of this License.\n" "\n" " 3. You may copy and distribute the Program (or a work based on it,\n" "under Section 2) in object code or executable form under the terms of\n" "Sections 1 and 2 above provided that you also do one of the following:\n" "\n" " a) Accompany it with the complete corresponding machine-readable\n" " source code, which must be distributed under the terms of Sections\n" " 1 and 2 above on a medium customarily used for software interchange; or,\n" "\n" " b) Accompany it with a written offer, valid for at least three\n" " years, to give any third party, for a charge no more than your\n" " cost of physically performing source distribution, a complete\n" " machine-readable copy of the corresponding source code, to be\n" " distributed under the terms of Sections 1 and 2 above on a medium\n" " customarily used for software interchange; or,\n" "\n" " c) Accompany it with the information you received as to the offer\n" " to distribute corresponding source code. (This alternative is\n" " allowed only for noncommercial distribution and only if you\n" " received the program in object code or executable form with such\n" " an offer, in accord with Subsection b above.)\n" "\n" "The source code for a work means the preferred form of the work for\n" "making modifications to it. For an executable work, complete source\n" "code means all the source code for all modules it contains, plus any\n" "associated interface definition files, plus the scripts used to\n" "control compilation and installation of the executable. However, as a\n" "special exception, the source code distributed need not include\n" "anything that is normally distributed (in either source or binary\n" "form) with the major components (compiler, kernel, and so on) of the\n" "operating system on which the executable runs, unless that component\n" "itself accompanies the executable.\n" "\n" "If distribution of executable or object code is made by offering\n" "access to copy from a designated place, then offering equivalent\n" "access to copy the source code from the same place counts as\n" "distribution of the source code, even though third parties are not\n" "compelled to copy the source along with the object code.\n" "\n" " 4. You may not copy, modify, sublicense, or distribute the Program\n" "except as expressly provided under this License. Any attempt\n" "otherwise to copy, modify, sublicense or distribute the Program is\n" "void, and will automatically terminate your rights under this License.\n" "However, parties who have received copies, or rights, from you under\n" "this License will not have their licenses terminated so long as such\n" "parties remain in full compliance.\n" "\n" " 5. You are not required to accept this License, since you have not\n" "signed it. However, nothing else grants you permission to modify or\n" "distribute the Program or its derivative works. These actions are\n" "prohibited by law if you do not accept this License. Therefore, by\n" "modifying or distributing the Program (or any work based on the\n" "Program), you indicate your acceptance of this License to do so, and\n" "all its terms and conditions for copying, distributing or modifying\n" "the Program or works based on it.\n" "\n" " 6. Each time you redistribute the Program (or any work based on the\n" "Program), the recipient automatically receives a license from the\n" "original licensor to copy, distribute or modify the Program subject to\n" "these terms and conditions. You may not impose any further\n" "restrictions on the recipients' exercise of the rights granted herein.\n" "You are not responsible for enforcing compliance by third parties to\n" "this License.\n" "\n" " 7. If, as a consequence of a court judgment or allegation of patent\n" "infringement or for any other reason (not limited to patent issues),\n" "conditions are imposed on you (whether by court order, agreement or\n" "otherwise) that contradict the conditions of this License, they do not\n" "excuse you from the conditions of this License. If you cannot\n" "distribute so as to satisfy simultaneously your obligations under this\n" "License and any other pertinent obligations, then as a consequence you\n" "may not distribute the Program at all. For example, if a patent\n" "license would not permit royalty-free redistribution of the Program by\n" "all those who receive copies directly or indirectly through you, then\n" "the only way you could satisfy both it and this License would be to\n" "refrain entirely from distribution of the Program.\n" "\n" "If any portion of this section is held invalid or unenforceable under\n" "any particular circumstance, the balance of the section is intended to\n" "apply and the section as a whole is intended to apply in other\n" "circumstances.\n" "\n" "It is not the purpose of this section to induce you to infringe any\n" "patents or other property right claims or to contest validity of any\n" "such claims; this section has the sole purpose of protecting the\n" "integrity of the free software distribution system, which is\n" "implemented by public license practices. Many people have made\n" "generous contributions to the wide range of software distributed\n" "through that system in reliance on consistent application of that\n" "system; it is up to the author/donor to decide if he or she is willing\n" "to distribute software through any other system and a licensee cannot\n" "impose that choice.\n" "\n" "This section is intended to make thoroughly clear what is believed to\n" "be a consequence of the rest of this License.\n" "\n" " 8. If the distribution and/or use of the Program is restricted in\n" "certain countries either by patents or by copyrighted interfaces, the\n" "original copyright holder who places the Program under this License\n" "may add an explicit geographical distribution limitation excluding\n" "those countries, so that distribution is permitted only in or among\n" "countries not thus excluded. In such case, this License incorporates\n" "the limitation as if written in the body of this License.\n" "\n" " 9. The Free Software Foundation may publish revised and/or new versions\n" "of the General Public License from time to time. Such new versions will\n" "be similar in spirit to the present version, but may differ in detail to\n" "address new problems or concerns.\n" "\n" "Each version is given a distinguishing version number. If the Program\n" "specifies a version number of this License which applies to it and \"any\n" "later version\", you have the option of following the terms and conditions\n" "either of that version or of any later version published by the Free\n" "Software Foundation. If the Program does not specify a version number of\n" "this License, you may choose any version ever published by the Free Software\n" "Foundation.\n" "\n" " 10. If you wish to incorporate parts of the Program into other free\n" "programs whose distribution conditions are different, write to the author\n" "to ask for permission. For software which is copyrighted by the Free\n" "Software Foundation, write to the Free Software Foundation; we sometimes\n" "make exceptions for this. Our decision will be guided by the two goals\n" "of preserving the free status of all derivatives of our free software and\n" "of promoting the sharing and reuse of software generally.\n\n"); } const char * kc_get_warranty(void) { return _("\n" "NO WARRANTY\n" "\n" " 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY\n" "FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN\n" "OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES\n" "PROVIDE THE PROGRAM \"AS IS\" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED\n" "OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF\n" "MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS\n" "TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE\n" "PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,\n" "REPAIR OR CORRECTION.\n" "\n" " 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING\n" "WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR\n" "REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,\n" "INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING\n" "OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED\n" "TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY\n" "YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER\n" "PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE\n" "POSSIBILITY OF SUCH DAMAGES.\n\n"); } const char * kc_get_license_trailer(void) { return _("\n" " END OF TERMS AND CONDITIONS\n" "\n\n" " How to Apply These Terms to Your New Programs\n" "\n" " If you develop a new program, and you want it to be of the greatest\n" "possible use to the public, the best way to achieve this is to make it\n" "free software which everyone can redistribute and change under these terms.\n" "\n" " To do so, attach the following notices to the program. It is safest\n" "to attach them to the start of each source file to most effectively\n" "convey the exclusion of warranty; and each file should have at least\n" "the \"copyright\" line and a pointer to where the full notice is found.\n" "\n" " \n" " Copyright (C) 19yy \n" "\n" " This program is free software; you can redistribute it and/or modify\n" " it under the terms of the GNU General Public License as published by\n" " the Free Software Foundation; either version 2 of the License, or\n" " (at your option) any later version.\n" "\n" " This program is distributed in the hope that it will be useful,\n" " but WITHOUT ANY WARRANTY; without even the implied warranty of\n" " MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n" " GNU General Public License for more details.\n" "\n" " You should have received a copy of the GNU General Public License\n" " along with this program; if not, write to the Free Software\n" " Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.\n" "\n" "Also add information on how to contact you by electronic and paper mail.\n" "\n" "If the program is interactive, make it output a short notice like this\n" "when it starts in an interactive mode:\n" "\n" " Gnomovision version 69, Copyright (C) 19yy name of author\n" " Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.\n" " This is free software, and you are welcome to redistribute it\n" " under certain conditions; type `show c' for details.\n" "\n" "The hypothetical commands `show w' and `show c' should show the appropriate\n" "parts of the General Public License. Of course, the commands you use may\n" "be called something other than `show w' and `show c'; they could even be\n" "mouse-clicks or menu items--whatever suits your program.\n" "\n" "You should also get your employer (if you work as a programmer) or your\n" "school, if any, to sign a \"copyright disclaimer\" for the program, if\n" "necessary. Here is a sample; alter the names:\n" "\n" " Yoyodyne, Inc., hereby disclaims all copyright interest in the program\n" " `Gnomovision' (which makes passes at compilers) written by James Hacker.\n" "\n" " , 1 April 1989\n" " Ty Coon, President of Vice\n" "\n" "This General Public License does not permit incorporating your program into\n" "proprietary programs. If your program is a subroutine library, you may\n" "consider it more useful to permit linking proprietary applications with the\n" "library. If this is what you want to do, use the GNU Library General\n" "Public License instead of this License.\n\n"); } void license(char *argv0) { banner(); cout << kc_get_license(); cout << kc_get_warranty(); cout << kc_get_license_trailer(); exit(0); } void warranty(char *argv0) { banner(); cout << kc_get_warranty(); exit(0); } void attach_tape(void) { if (kcemu_tape != 0) { tape->attach(kcemu_tape); free(kcemu_tape); } else { const char *tmp = Preferences::instance()->get_string_value("tape_file", "files.kct"); if (tmp) { string tapefile; if (tmp[0] != '/') { tapefile += kcemu_datadir; tapefile += "/tapes/"; } tapefile += tmp; tape->attach(tapefile.c_str()); } } } void attach_disk(void) { const char *filename; if (disk == NULL) return; if (kcemu_disk != NULL) { disk->attach(0, kcemu_disk); free(kcemu_disk); } else { filename = Preferences::instance()->get_string_value("disk_1", NULL); if (filename != NULL) disk->attach(0, filename); } filename = Preferences::instance()->get_string_value("disk_2", NULL); if (filename != NULL) disk->attach(1, filename); filename = Preferences::instance()->get_string_value("disk_3", NULL); if (filename != NULL) disk->attach(2, filename); filename = Preferences::instance()->get_string_value("disk_4", NULL); if (filename != NULL) disk->attach(3, filename); } char * get_datadir_from_program_path(void) { char *ptr = sys_getprogrampath(); if (ptr == NULL) return NULL; int a = strlen(ptr); if (a < 4) { free(ptr); return NULL; } if (strncasecmp(ptr + a - 4, "bin", 3) != 0) { free(ptr); return NULL; } ptr[a - 4] = '\0'; char sep = ptr[a - 5]; char buf[2048]; int size = sizeof(buf); if (snprintf(buf, size, "%sshare%cKCemu", ptr, sep) >= size) { free(ptr); return NULL; } return strdup(buf); } char * get_kcemu_datadir(void) { char *ptr = getenv("KCEMU_DATADIR"); if (ptr) return strdup(ptr); ptr = get_datadir_from_program_path(); if (ptr != NULL) return ptr; if (access("share/KCemu/roms/kc85/caos__c0.854", F_OK) == 0) return strdup("share/KCemu"); if (access("../share/KCemu/roms/kc85/caos__c0.854", F_OK) == 0) return strdup("../share/KCemu"); return strdup(KCEMU_DATADIR); } char * get_kcemu_homedir(void) { string home; char *ptr = getenv("XDG_CONFIG_HOME"); if (ptr != NULL) { home = ptr; } else { ptr = sys_gethome(); if (ptr != NULL) { home = ptr; home += "/.config"; free(ptr); } else { return NULL; } } home += "/KCemu"; return strdup(home.c_str()); } char * get_kcemu_localedir(void) { char *ptr = getenv("KCEMU_LOCALEDIR"); if (ptr) return strdup(ptr); if (access("share/locale/de/LC_MESSAGES/KCemu.mo", F_OK) == 0) return strdup("share/locale"); if (access("../share/locale/de/LC_MESSAGES/KCemu.mo", F_OK) == 0) return strdup("../share/locale"); return strdup(KCEMU_LOCALEDIR); } void open_debug_output(char *filename) { if (filename == NULL) return; ofstream *ofs = new ofstream(filename); if (!(*ofs)) return; DBGI()->set_output_stream(ofs); } #ifdef HOST_OS_MINGW void close_output(void) { FILE *f; /* * Prevent the dos box from popping up by redirecting * stdout and stdin to /dev/null. If opening /dev/null * doesn't work we use the magically present NUL file. * If both fail we fall back to creating a KCemu.log. */ f = fopen("/dev/null", "wb"); if (f == NULL) { f = fopen("NUL", "wb"); if (f == NULL) { f = fopen("KCemu.log", "wb"); } } if (f == NULL) return; *stdout = *f; *stderr = *f; } #endif /* HOST_OS_MINGW */ #ifdef HOST_OS_MINGW int WINAPI WinMain(HINSTANCE hThisInstance, HINSTANCE hPrevInstance, LPSTR lpszArgument, int nStil) #define argc _argc #define argv _argv #else int main(int argc, char **argv) #endif /* HOST_OS_MINGW */ { int c; int type; bool do_quit; int option_index; const char *getopt_args = "0123456789a:A:d:DEf:FhH:l:LM:o:p:Ps:t:u:vVW"; #ifdef HAVE_GETOPT_LONG static struct option long_options[] = { { "autostart", 1, 0, 'a' }, { "address", 1, 0, 'A' }, { "datadir", 1, 0, 'd' }, { "display-debug", 0, 0, 'D' }, { "effects", 0, 0, 'E' }, { "floppy", 1, 0, 'f' }, { "fullscreen", 0, 0, 'F' }, { "help", 0, 0, 'h' }, { "home", 1, 0, 'H' }, { "localedir", 1, 0, 'l' }, { "license", 0, 0, 'L' }, { "modules", 1, 0, 'M' }, { "debug-output", 1, 0, 'o' }, { "profile", 1, 0, 'p' }, { "select-profile", 0, 0, 'P' }, { "scale", 1, 0, 's' }, { "tape", 1, 0, 't' }, { "vdip-root", 1, 0, 'u' }, { "version", 0, 0, 'v' }, { "viewlist", 0, 0, 'V' }, { "warranty", 0, 0, 'W' }, { 0, 0, 0, 0 } }; #endif /* HAVE_GETOPT_LONG */ PortGroup *portg = NULL; LOG *log; #ifdef __CALL_MTRACE /* * memory debugging with glibc goes like this: * * 1) run the program with MALLOC_CHECK_=1 ./kcemu to enable * consistency checks (MALLOC_CHECK_=2 aborts immedately * when encountering problems) * * 2) call mtrace() at the very beginning of the program and * run it with MALLOC_TRACE=/tmp/mem.out ./kcemu to * generate a memory trace that can be analyzed with * mtrace ./kcemu /tmp/mem.out * * The following mtrace is enababled if ./configure finds * the mcheck.h header file, the mtrace() function and * the debuglevel is set to a value greater than 1. */ mtrace(); #endif /* __CALL_MTRACE */ type = -1; kcemu_tape = 0; kcemu_disk = 0; kcemu_modules = 0; kcemu_profile = 0; kcemu_debug_output = 0; kcemu_autostart_file = 0; kcemu_autostart_addr = 0; kcemu_vdip_root = 0; kcemu_ui_scale = -1; kcemu_ui_debug = -1; kcemu_ui_fullscreen = 0; kcemu_ui_display_effect = -1; kcemu_select_profile = 0; kcemu_datadir = get_kcemu_datadir(); kcemu_homedir = get_kcemu_homedir(); kcemu_localedir = get_kcemu_localedir(); #ifdef HAVE_SETLOCALE setlocale(LC_ALL, ""); #endif /* HAVE_SETLOCALE */ #ifdef ENABLE_NLS bindtextdomain(PACKAGE, kcemu_localedir); textdomain(PACKAGE); #endif /* ENABLE_NLS */ fileio_init(); libdisk_init(); libaudio_init(LIBAUDIO_TYPE_ALL); sys_socket_init(); while (1) { #ifdef HAVE_GETOPT_LONG c = getopt_long(argc, argv, getopt_args, long_options, &option_index); #else #ifdef HAVE_GETOPT c = getopt(argc, argv, getopt_args); #else #warning neither HAVE_GETOPT_LONG nor HAVE_GETOPT defined #warning commandline parsing disabled! c = -1; #endif /* HAVE_GETOPT */ #endif /* #ifdef HAVE_GETOPT_LONG */ if (c == -1) break; switch (c) { case '0': type = 0; break; case '1': type = 1; break; case '2': type = 2; break; case '3': type = 3; break; case '4': type = 4; break; case '5': type = 5; break; case '6': type = 6; break; case '7': type = 7; break; case '8': type = 8; break; case '9': type = 9; break; case 'a': kcemu_autostart_file = strdup(optarg); break; case 'A': kcemu_autostart_addr = strdup(optarg); break; case 'd': free(kcemu_datadir); kcemu_datadir = strdup(optarg); break; case 'D': kcemu_ui_debug = 1; break; case 'E': kcemu_ui_display_effect = 1; break; case 'f': kcemu_disk = strdup(optarg); break; case 'F': kcemu_ui_fullscreen = 1; break; case 'H': if (kcemu_homedir) free(kcemu_homedir); kcemu_homedir = strdup(optarg); break; case 'l': free(kcemu_localedir); kcemu_localedir = strdup(optarg); break; case 'L': license(argv[0]); break; case 'M': kcemu_modules = strdup(optarg); break; case 'o': kcemu_debug_output = strdup(optarg); break; case 'p': kcemu_profile = strdup(optarg); break; case 'P': kcemu_select_profile = 1; break; case 's': kcemu_ui_scale = strtoul(optarg, NULL, 0); break; case 't': kcemu_tape = strdup(optarg); break; case 'u': kcemu_vdip_root = strdup(optarg); break; case 'v': show_version(argv[0]); break; case 'V': show_variants(argv[0]); break; case 'W': warranty(argv[0]); break; case ':': case '?': case 'h': default: usage(argv[0]); break; } } open_debug_output(kcemu_debug_output); #ifdef HOST_OS_MINGW close_output(); #endif /* HOST_OS_MINGW */ if (kcemu_homedir == NULL) kcemu_homedir = strdup("."); string home = kcemu_homedir; string sys_config_dir = string(kcemu_datadir) + "/config"; string user_config_dir = home + "/config"; string user_profiles_dir = home + "/profiles"; Preferences::init(sys_config_dir.c_str(), user_config_dir.c_str(), user_profiles_dir.c_str()); ui = new UI_Gtk(); ui->init(&argc, &argv); if (kcemu_select_profile) { kcemu_profile = ui->select_profile(); } Preferences::instance()->set_current_profile(kcemu_profile, type); /* * check display scale */ if (kcemu_ui_scale < 0) kcemu_ui_scale = Preferences::instance()->get_int_value("display_scale", 1); if (kcemu_ui_scale < 1) kcemu_ui_scale = 1; if (kcemu_ui_scale > 3) kcemu_ui_scale = 3; /* * check display effect */ if (kcemu_ui_display_effect < 0) kcemu_ui_display_effect = Preferences::instance()->get_int_value("display_effects", 0); if (kcemu_ui_display_effect < 0) kcemu_ui_display_effect = 0; if (kcemu_ui_display_effect > 1) kcemu_ui_display_effect = 1; /* * check display debug */ if (kcemu_ui_debug < 0) kcemu_ui_debug = Preferences::instance()->get_int_value("display_debug", 0); do { cmd = new CMD("*"); z80 = new Z80; disk = new Disk; ports = new Ports; daisy = new DaisyChain; vdip = new VDIP; kcnet = new KCNET; plotter = new Plotter; portg = ports->register_ports("-", 0, 0x100, new NullPort("NullPort"), 256); PIO0 *p0; PIO1_1 *p1; PIO2 *p2; PIO3 *p3; PIO4 *p4; PIO8_1 *p8; PIO9 *p9; Keyboard0 *k0; Keyboard1 *k1; Keyboard8 *k8; KeyboardKramerMC *k_kramer; KeyboardMuglerPC *k_mugler; KeyboardVCS80 *k_vcs80; KeyboardC80 *k_c80; timer = NULL; memory = NULL; fdc_z80 = NULL; gdc = NULL; vis = NULL; svg = NULL; poly880 = NULL; pio = pio2 = NULL; ctc = ctc2 = NULL; switch (Preferences::instance()->get_kc_type()) { case KC_TYPE_87: memory = new Memory7; /* fall through */ case KC_TYPE_85_1: if (memory == NULL) memory = new Memory1; fileio_set_kctype(FILEIO_KC85_1); ctc = new CTC1; pio2 = new PIO1_2; tape = new Tape(500, 1000, 2000, 0); wav = new WavPlayer(500, 1000, 2000); p1 = new PIO1_1; k1 = new Keyboard1; tape->set_tape_callback(p1); pio = p1; keyboard = k1; //tape->setAutoplay(false); pio2->register_callback_A_in(k1); pio2->register_callback_B_in(k1); break; case KC_TYPE_85_2: memory = new Memory2; ctc = new CTC3; tape = new Tape(364, 729, 1458, 1); wav = new WavPlayer(364, 729, 1458); keyboard = new Keyboard3; p2 = new PIO2; tape->set_tape_callback(p2); pio = p2; break; case KC_TYPE_85_3: memory = new Memory3; p3 = new PIO3; ctc = new CTC3; tape = new Tape(364, 729, 1458, 1); wav = new WavPlayer(364, 729, 1458); keyboard = new Keyboard3; tape->set_tape_callback(p3); pio = p3; break; case KC_TYPE_85_4: case KC_TYPE_85_5: memory = new Memory4; porti = new Ports4; p4 = new PIO4; ctc = new CTC3; tape = new Tape(364, 729, 1458, 1); wav = new WavPlayer(364, 729, 1458); keyboard = new Keyboard3; tape->set_tape_callback(p4); pio = p4; break; case KC_TYPE_LC80: memory = new Memory8; p8 = new PIO8_1; pio2 = new PIO8_2; ctc = new CTC8; tape = new Tape(500, 1000, 2000, 0); wav = new WavPlayer(500, 1000, 2000); k8 = new Keyboard8; pio2->register_callback_A_in(k8); pio2->register_callback_B_in(k8); tape->set_tape_callback(p8); keyboard = k8; pio = p8; break; case KC_TYPE_Z1013: fileio_set_kctype(FILEIO_Z1013); memory = new Memory0; ctc = new CTC1; p0 = new PIO0; porti = new Ports0; k0 = new Keyboard0; tape = new Tape(500, 1000, 2000, 0); wav = new WavPlayer(500, 1000, 2000); pio = p0; keyboard = k0; tape->set_tape_callback(p0); pio->register_callback_B_in(k0); pio->register_callback_B_out(k0); break; case KC_TYPE_A5105: p9 = new PIO9; ctc = new CTC9; memory = new Memory9; keyboard = new Keyboard9; tape = new Tape(500, 1000, 2000, 0); wav = new WavPlayer(781, 1562, 3125); tape->set_tape_callback(p9); pio = p9; break; case KC_TYPE_POLY880: pio = new PIO6_1; pio2 = new PIO6_2; ctc = new CTC6; porti = new Ports6; memory = new Memory6; tape = new Tape(500, 1000, 2000, 0); keyboard = new Keyboard6; poly880 = new Poly880; pio->register_callback_B_in((Keyboard6 *)keyboard); pio->register_callback_A_out((Ports6 *)porti); break; case KC_TYPE_KRAMERMC: pio = new PIOKramerMC; memory = new MemoryKramerMC; k_kramer = new KeyboardKramerMC; tape = new Tape(500, 1000, 2000, 0); // FIXME: keyboard = k_kramer; pio->register_callback_A_out(k_kramer); pio->register_callback_B_in(k_kramer); break; case KC_TYPE_MUGLERPC: pio = new PIOMuglerPCSystem; pio2 = new PIOMuglerPCUser; ctc = new CTCMuglerPCSystem; ctc2 = new CTCMuglerPCUser; porti = new PortsMuglerPC; memory = new MemoryMuglerPC; k_mugler = new KeyboardMuglerPC; tape = new Tape(500, 1000, 2000, 0); // FIXME: keyboard = k_mugler; pio->register_callback_A_in(k_mugler); break; case KC_TYPE_VCS80: pio = new PIOVCS80; memory = new MemoryVCS80; tape = new Tape(500, 1000, 2000, 0); // FIXME: k_vcs80 = new KeyboardVCS80; keyboard = k_vcs80; pio->register_callback_A_in(k_vcs80); break; case KC_TYPE_C80: pio = new PIOC80_1; pio2 = new PIOC80_2; memory = new MemoryC80; tape = new Tape(500, 1000, 2000, 0); // FIXME: k_c80 = new KeyboardC80; display_c80 = new DisplayC80; keyboard = k_c80; pio->register_callback_A_in(k_c80); pio->register_callback_A_out(display_c80); pio->register_callback_B_out(display_c80); break; default: DBG(0, form("KCemu/internal_error", "KCemu: setup with undefined system type\n")); break; } module = new Module; module_list = new ModuleList; ui->init2(); switch (Preferences::instance()->get_kc_type()) { case KC_TYPE_87: case KC_TYPE_85_1: timer = new Timer1; portg = ports->register_ports("CTC", 0x80, 4, ctc, 10); portg = ports->register_ports("PIO1", 0x88, 4, pio, 10); portg = ports->register_ports("PIO2", 0x90, 4, pio2, 10); daisy->add_last(ctc); daisy->add_last(pio); daisy->add_last(pio2); break; case KC_TYPE_85_2: case KC_TYPE_85_3: timer = new Timer3; sound = new Sound3; if (Preferences::instance()->get_int_value("enable_sound", 0)) sound->init(); portg = ports->register_ports("Module", 0x80, 1, module, 10); portg = ports->register_ports("PIO", 0x88, 4, pio, 10); portg = ports->register_ports("CTC", 0x8c, 4, ctc, 10); daisy->add_last(ctc); daisy->add_last(pio); break; case KC_TYPE_85_4: case KC_TYPE_85_5: timer = new Timer3; sound = new Sound3; if (Preferences::instance()->get_int_value("enable_sound", 0)) sound->init(); portg = ports->register_ports("Module", 0x80, 1, module, 10); portg = ports->register_ports("Port84", 0x84, 1, porti, 10); portg = ports->register_ports("Port86", 0x86, 1, porti, 10); portg = ports->register_ports("PIO", 0x88, 4, pio, 10); portg = ports->register_ports("CTC", 0x8c, 4, ctc, 10); daisy->add_last(ctc); daisy->add_last(pio); break; case KC_TYPE_LC80: sound = new Sound8; if (Preferences::instance()->get_int_value("enable_sound", 0)) sound->init(); portg = ports->register_ports("CTC", 0xec, 4, ctc, 10); portg = ports->register_ports("PIO1", 0xf4, 4, pio, 10); portg = ports->register_ports("PIO2", 0xf8, 4, pio2, 10); // lc80e portg = ports->register_ports("PIO1", 0x74, 4, pio, 10); portg = ports->register_ports("PIO2", 0x78, 4, pio2, 10); daisy->add_last(ctc); daisy->add_last(pio); daisy->add_last(pio2); break; case KC_TYPE_Z1013: portg = ports->register_ports("PIO", 0x00, 4, pio, 10); portg = ports->register_ports("Port08", 0x08, 1, porti, 10); daisy->add_last(pio); break; case KC_TYPE_A5105: gdc = new GDC; vis = new VIS; svg = new SVG; fdc_fdc = new FDC9(); portg = ports->register_ports("FDC", 0x40, 12, fdc_fdc, 10); portg = ports->register_ports("CTC", 0x80, 4, ctc, 10); portg = ports->register_ports("PIO", 0x90, 4, pio, 10); portg = ports->register_ports("GDC", 0x98, 2, gdc, 10); portg = ports->register_ports("VIS", 0x9c, 3, vis, 10); portg = ports->register_ports("SVG", 0xa0, 12, svg, 10); daisy->add_last(ctc); daisy->add_last(pio); break; case KC_TYPE_POLY880: portg = ports->register_ports("PIO1", 0x80, 4, pio, 10); portg = ports->register_ports("PIO2", 0x84, 4, pio2, 10); portg = ports->register_ports("CTC", 0x88, 4, ctc, 10); portg = ports->register_ports("DIGIT", 0xc0, 32, porti, 10); portg = ports->register_ports("DIGIT", 0xe0, 32, porti, 10); break; case KC_TYPE_KRAMERMC: portg = ports->register_ports("PIO", 0xfc, 4, pio, 10); break; case KC_TYPE_MUGLERPC: portg = ports->register_ports("CTC (system)", 0x80, 4, ctc, 10); portg = ports->register_ports("PIO (system)", 0x84, 4, pio, 10); portg = ports->register_ports("CTC (user)", 0x8c, 4, ctc2, 10); portg = ports->register_ports("PIO (user)", 0x90, 4, pio2, 10); portg = ports->register_ports("Port 94h", 0x94, 4, porti, 10); break; case KC_TYPE_VCS80: portg = ports->register_ports("PIO", 0x04, 4, pio, 10); daisy->add_last(pio); break; case KC_TYPE_C80: portg = ports->register_ports("PIO (system)", 0xbc, 4, pio, 10); portg = ports->register_ports("PIO (user)", 0x7c, 4, pio2, 10); daisy->add_last(pio); daisy->add_last(pio2); break; default: DBG(0, form("KCemu/internal_error", "KCemu: setup with undefined system type\n")); break; } if (Preferences::instance()->get_kc_type() & KC_TYPE_85_2_CLASS) if (Preferences::instance()->get_int_value("d004", 0)) { fdc_z80 = new Z80_FDC(); fdc_ports = new Ports(); fdc_io = new FloppyIO(); fdc_shmem = new FloppySharedMem(); fdc_shmem->set_memory(&fdc_mem[0xfc00]); fdc_fdc = new FDC4(); fdc_ctc = new CTC_FDC(); fdc_gide = new GIDE(); fdc_ports->register_ports("-", 0, 0x100, new NullPort("NullPort (FDC)"), 256); fdc_ports->register_ports("GIDE", 0, 16, fdc_gide, 10); fdc_ports->register_ports("FDC", 0xf0, 12, fdc_fdc, 10); fdc_ports->register_ports("CTC", 0xfc, 4, fdc_ctc, 10); portg = ports->register_ports("FloppyIO", 0xf4, 1, fdc_io, 10); portg = ports->register_ports("FloppySHMEM", 0xf0, 4, fdc_shmem, 10); } log = new LOG(); module_list->init(); if ((Preferences::instance()->get_kc_type() == KC_TYPE_85_1) || (Preferences::instance()->get_kc_type() == KC_TYPE_87) || (Preferences::instance()->get_kc_type() == KC_TYPE_LC80) || (Preferences::instance()->get_kc_type() == KC_TYPE_Z1013)) tape->power(true); attach_tape(); attach_disk(); ui->show(); do_quit = z80->run(); if (porti != NULL) delete porti; if (timer != NULL) delete timer; delete module_list; delete module; delete keyboard; delete tape; delete disk; delete pio; delete ctc; delete memory; delete ports; delete ui; delete z80; } while (0); // (!do_quit); free(kcemu_datadir); free(kcemu_localedir); return 0; } KCemu-0.5.1/src/kc/mod_r16.cc0000644001050700006200000000301111345001576015144 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/mod_r16.h" ModuleSegmentedROM16k::ModuleSegmentedROM16k(ModuleSegmentedROM16k &tmpl) : ModuleSegmentedMemory(tmpl) { } ModuleSegmentedROM16k::ModuleSegmentedROM16k(const char *filename, const char *name, byte_t id) : ModuleSegmentedMemory(name, id, 2, 0x2000, filename) { } ModuleSegmentedROM16k::~ModuleSegmentedROM16k(void) { } int ModuleSegmentedROM16k::get_segment_index(word_t addr, byte_t val) { return (val >> 4) & 0x01; } word_t ModuleSegmentedROM16k::get_base_address(word_t addr, byte_t val) { return ((val >> 6) & 3) * 0x4000; } ModuleInterface * ModuleSegmentedROM16k::clone(void) { return new ModuleSegmentedROM16k(*this); } KCemu-0.5.1/src/kc/mod_rom1.cc0000644001050700006200000000662111345001576015424 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/memory1.h" #include "kc/memory7.h" #include "kc/mod_rom1.h" using namespace std; ModuleROM1::ModuleROM1(ModuleROM1 &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _group = NULL; _addr = tmpl._addr; _size = tmpl._size; _set_romdi = tmpl._set_romdi; _rom = new byte_t[_size]; if (_rom) { memcpy(_rom, tmpl._rom, _size); set_valid(true); _group = memory->register_memory(get_name(), _addr, _size, _rom, 0, true); /* * FIXME: make common base class for Memory1 and Memory7 */ if (_set_romdi) { switch (Preferences::instance()->get_kc_type()) { case KC_TYPE_85_1: ((Memory1 *)memory)->register_romdi_handler(this); break; case KC_TYPE_87: ((Memory7 *)memory)->register_romdi_handler(this); break; default: break; } set_romdi(true); } } } ModuleROM1::ModuleROM1(const char *filename, const char *name, word_t addr, dword_t size, bool set_romdi) : ModuleInterface(name, 0, KC_MODULE_KC_85_1) { _group = NULL; _addr = addr; _set_romdi = set_romdi; _size = (size + 0x3ff) & 0xfc00; _rom = new byte_t[_size]; memset(_rom, 0xff, _size); set_valid(Memory::load_rom(filename, _rom, size, false)); } ModuleROM1::~ModuleROM1(void) { /* * FIXME: make common base class for Memory1 and Memory7 */ if (_set_romdi) { set_romdi(false); switch (Preferences::instance()->get_kc_type()) { case KC_TYPE_85_1: ((Memory1 *)memory)->unregister_romdi_handler(this); break; case KC_TYPE_87: ((Memory7 *)memory)->unregister_romdi_handler(this); break; default: break; } } if (_group) memory->unregister_memory(_group); delete[] _rom; } bool ModuleROM1::is_active(void) { return _group->is_active(); } void ModuleROM1::set_active(bool active) { _group->set_active(active); memory->reload_mem_ptr(); } void ModuleROM1::m_out(word_t addr, byte_t val) { } ModuleInterface * ModuleROM1::clone(void) { return new ModuleROM1(*this); } void ModuleROM1::reset(bool power_on) { set_romdi(_set_romdi); } void ModuleROM1::set_romdi(bool val) { _set_romdi = val; switch (Preferences::instance()->get_kc_type()) { case KC_TYPE_85_1: ((Memory1 *)memory)->set_romdi(val); break; case KC_TYPE_87: ((Memory7 *)memory)->set_romdi(val); break; default: break; } } void ModuleROM1::romdi(bool val) { } KCemu-0.5.1/src/kc/wav.cc0000644001050700006200000002450411345001576014504 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/z80.h" #include "kc/pio.h" #include "kc/wav.h" #include "sys/sysdep.h" #include "ui/status.h" #include "libdbg/dbg.h" #ifndef M_PI #define M_PI 3.14159265358979323846 #endif class CMD_kc_play_wav : public CMD { private: WavPlayer *_p; static const char * _path; public: CMD_kc_play_wav(WavPlayer *p) : CMD("kc-wav-open") { _p = p; register_cmd("kc-wav-open", 0); register_cmd("kc-wav-play", 2); register_cmd("kc-wav-record", 3); register_cmd("kc-wav-stop", 4); register_cmd("kc-wav-close", 5); } virtual ~CMD_kc_play_wav(void) { } virtual void execute(CMD_Args *args, CMD_Context context) { const char *filename = 0; if (args) filename = args->get_string_arg("filename"); else args = new CMD_Args; switch (context) { /* * kc-wav-open */ case 0: if (filename == 0) { args->set_string_arg("ui-file-select-title", _("KCemu: Select File...")); if (_path) args->set_string_arg("ui-file-select-path", _path); args->add_callback("ui-file-select-CB-ok", this, 1); CMD_EXEC_ARGS("ui-file-select", args); break; } /* fall through */ case 1: if (filename == 0) return; if (_p->open(filename)) { _path = filename; CMD_EXEC_ARGS("ui-wav-file-selected", args); } break; /* * kc-wav-play */ case 2: _p->play(); break; /* * kc-wav-record */ case 3: _p->record(); break; /* * kc-wav-stop */ case 4: _p->stop(); break; case 5: _p->close(); CMD_EXEC("ui-wav-file-closed"); break; } } }; const char * CMD_kc_play_wav::_path = NULL; WavPlayer::WavPlayer(int bit_0, int bit_1, int bit_s) : Callback("WavPlayer") { _bit_0 = bit_0; _bit_1 = bit_1; _bit_s = bit_s; _cmd = new CMD_kc_play_wav(this); _th_low = -10; _th_high = 10; _val = 0; _prop = NULL; _stopped = true; } WavPlayer::~WavPlayer(void) { } void WavPlayer::init_filter_kernel(void) { int a; float amp; float sum; float lp_FC; float hp_FC; float lp_kernel[FILTER_SIZE + 1]; float hp_kernel[FILTER_SIZE + 1]; amp = 1.0; for (int a = 0;a <= FILTER_SIZE;a++) _buf[a] = 0; lp_FC = 26000.0 / _sample_freq; hp_FC = 400.0 / _sample_freq; /* * low pass */ for (a = 0;a <= 100;a++) { if ((a - FILTER_SIZE / 2) == 0) lp_kernel[a] = 2 * M_PI * lp_FC; else lp_kernel[a] = sin(2 * M_PI * lp_FC * (a - FILTER_SIZE / 2)) / (a - FILTER_SIZE / 2); lp_kernel[a] = lp_kernel[a] * (0.54 - 0.46 * cos(2 * M_PI * a / FILTER_SIZE)); } sum = 0; for (a = 0;a <= 100;a++) sum += lp_kernel[a]; sum /= amp; for (a = 0;a <= 100;a++) lp_kernel[a] = lp_kernel[a] / sum; /* * high pass */ for (a = 0;a <= 100;a++) { if ((a - FILTER_SIZE / 2) == 0) hp_kernel[a] = 2 * M_PI * hp_FC; else hp_kernel[a] = sin(2 * M_PI * hp_FC * (a - FILTER_SIZE / 2)) / (a - FILTER_SIZE / 2); hp_kernel[a] = hp_kernel[a] * (0.54 - 0.46 * cos(2 * M_PI * a / FILTER_SIZE)); } sum = 0; for (a = 0;a <= 100;a++) sum += hp_kernel[a]; sum /= amp; for (a = 0;a <= 100;a++) hp_kernel[a] = hp_kernel[a] / sum; for (a = 0;a <= 100;a++) hp_kernel[a] = -hp_kernel[a]; hp_kernel[FILTER_SIZE / 2] += 1; /* * band reject */ for (a = 0;a <= 100;a++) _kernel[a] = lp_kernel[a] + hp_kernel[a]; /* * band pass */ for (a = 0;a <= 100;a++) _kernel[a] = -_kernel[a]; _kernel[FILTER_SIZE / 2] += 1; /* * invert output */ for (a = 0;a <= 100;a++) _kernel[a] = -_kernel[a]; } bool WavPlayer::open(const char *filename) { #ifdef HOST_OS_LINUX DBG(1, form("KCemu/WavPlayer", "WavPlayer::open(): `%s'\n", filename)); if (_prop != NULL) close(); _prop = libaudio_open(filename); if (_prop == NULL) return false; return true; #endif /* HOST_OS_LINUX */ } bool WavPlayer::play() { #ifdef HOST_OS_LINUX char buf[1000]; char *shortname; const char *filename, *fmt; DBG(1, form("KCemu/WavPlayer", "WavPlayer::play()\n")); if (_prop == NULL) return false; filename = libaudio_get_filename(_prop); if (filename == NULL) return false; shortname = sys_basename(filename); fmt = libaudio_get_type(_prop); _sample_freq = libaudio_get_sample_freq(_prop); _sample_size = libaudio_get_sample_size(_prop); _channels = libaudio_get_channels(_prop); snprintf(buf, sizeof(buf), _("Reading %s `%s' (%d/%d/%d)."), fmt, shortname, _sample_freq, _sample_size, _channels); Status::instance()->setMessage(buf); free(shortname); init_filter_kernel(); _eof = 0; _stopped = false; z80->addCallback(0, this, (void *)0); #endif /* HOST_OS_LINUX */ return true; } void WavPlayer::record(void) { } void WavPlayer::stop(void) { DBG(1, form("KCemu/WavPlayer", "WavPlayer::stop()\n")); if (_prop == NULL) return; libaudio_rewind(_prop); _stopped = true; } void WavPlayer::close() { #ifdef HOST_OS_LINUX DBG(1, form("KCemu/WavPlayer", "WavPlayer::close()\n")); if (_prop != NULL) libaudio_close(_prop); _prop = NULL; #endif /* HOST_OS_LINUX */ } void WavPlayer::callback(void *data) { long d = (long)data; if (_stopped) return; switch (d) { case 0: do_play(); break; case 1: do_record(); break; } } /* * algorithm copied from audacity TrackArtist::GetWaveYPos() */ int WavPlayer::get_y(float value) { int ret; float sign = (value >= 0 ? 1 : -1); if (value == 0) return 0; float db = 10 * log10(fabs(value) / 32768); // The smallest value we will see is -45.15 (10*log10(1/32768)) float val = (db + 45.0) / 45.0; if (val < 0.0) val = 0.0; if (val > 1.0) val = 1.0; ret = (int)(sign * (32767 * val + 0.5)); // printf("%8.2f - %8d\n", value, ret); return ret; } void WavPlayer::do_play(void) { #ifdef HOST_OS_LINUX int a, c; int byte_cnt; double v; float y; byte_cnt = 0; pio->strobe_A(); /* * the digital filter causes some delay in the audio signal * so we need to do some padding on the end of the input */ if (_eof > 0) { _eof--; if (_eof == 0) { stop(); return; } } while (242) { c = 0; if (_eof == 0) { c = libaudio_read_sample(_prop); if (c == EOF) { _eof = 200; c = 32768; } c -= 32768; if (_channels == 2) { if (libaudio_read_sample(_prop) == EOF) _eof = 200; } } byte_cnt++; /* * convert wavform */ #if 0 c = get_y((float)c); #endif /* * apply band pass filter */ #if 1 _buf[100] = c; y = 0; for (a = 0;a <= 100;a++) y = y + _buf[100 - a] * _kernel[a]; for (a = 1;a <= 100;a++) _buf[a - 1] = _buf[a]; /* * filter amplifies the signal, we just cut at * arbitrary values because we are only interrested * in the points where the signal changes sign */ c = (int)y; if (c > 32000) c = 32000; if (c < -32000) c = -32000; #endif if (_val == 0) { if (c > _th_high) { _val = 1; break; } } else { if (c < _th_low) { _val = 0; break; } } v = (1750000.0 * byte_cnt) / _sample_freq; if (v > 2000) break; } if (Preferences::instance()->get_kc_type() & KC_TYPE_85_2_CLASS) { v = (1750000.0 * byte_cnt) / _sample_freq; } else { v = (2500000.0 * byte_cnt) / _sample_freq; } v = v * 1.2; if (v > 2000) v = 2000; _info_args.set_long_arg("gap", (int)v); CMD_EXEC_ARGS("ui-wav-info", &_info_args); #if 1 printf("%d / %d / %d - %ld\n", _bit_0, _bit_1, _bit_s, (long)v); z80->addCallback((long long)v, this, (void *)0); #else if (v < 550) { z80->addCallback(_bit_0, this, (void *)0); } else if (v > 1100) { z80->addCallback(_bit_s, this, (void *)0); } else { z80->addCallback(_bit_1, this, (void *)0); } #endif #endif /* HOST_OS_LINUX */ } void WavPlayer::do_record(void) { #ifdef HOST_OS_LINUX #define BLEN (65536) static int idx = BLEN; unsigned char buf[BLEN]; int c, old_val; int byte_cnt, len; double v; old_val = 0; byte_cnt = 0; pio->strobe_A(); while (242) { if (idx >= BLEN) { idx = 0; //len = read(_audio_fd, buf, BLEN); if (len != BLEN) printf("read - len = %d\n", len); } c = buf[idx++]; byte_cnt++; c = c - 128; // cout.form("* %+d : %+d | %+d\n", old_val, _val, c); old_val = _val; if (_val == 0) { if (c > _th_high) _val = 1; } else { if (c < _th_low) _val = 0; } if (old_val !=_val) break; } v = (1458.0 * byte_cnt) / 48.0; #if 0 z80->addCallback(v, this, (void *)1); #else if (v < 500) { z80->addCallback(364, this, (void *)1); } else if (v > 1000) { z80->addCallback(1458, this, (void *)1); } else { z80->addCallback(729, this, (void *)1); } #endif #endif /* HOST_OS_LINUX */ } KCemu-0.5.1/src/kc/pio_dio.cc0000644001050700006200000000356611345001576015336 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/pio_dio.h" #include "libdbg/dbg.h" PIO_DIO::PIO_DIO(void) { } PIO_DIO::~PIO_DIO(void) { } byte_t PIO_DIO::in(word_t addr) { DBG(2, form("KCemu/PIO/DIO/in", "PIO_DIO::in(): addr = %04x\n", addr)); switch (addr & 3) { case 0: return in_A_DATA(); case 1: return in_B_DATA(); case 2: return in_A_CTRL(); case 3: return in_B_CTRL(); } return 0; // shouldn't be reached } void PIO_DIO::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/DIO/out", "PIO_DIO::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } void PIO_DIO::change_A(byte_t changed, byte_t val) { } void PIO_DIO::change_B(byte_t changed, byte_t val) { } KCemu-0.5.1/src/kc/mod_js.cc0000644001050700006200000002071011345001576015155 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include #include "kc/system.h" #include "kc/z80.h" #include "kc/daisy.h" #include "kc/mod_js.h" #include "kc/prefs/prefs.h" #include "ui/status.h" #include "libdbg/dbg.h" using namespace std; PIOJoystick::PIOJoystick(void) : Callback("PIOJoystick") { _device = NULL; _is_open = false; js_open(); z80->addCallback(35000, this, NULL); register_callback_A_in(this); } PIOJoystick::~PIOJoystick(void) { z80->remove_callback_listener(this); js_close(); } const char * PIOJoystick::check_joystick_device(void) { const char *dev = Preferences::instance()->get_string_value("joystick_device", NULL); if (dev != NULL) return dev; const char *devices[] = { "/dev/input/js0", "/dev/input/js1", "/dev/input/js2", "/dev/input/js3", "/dev/js0", "/dev/js1", "/dev/js2", "/dev/js3", NULL, }; for (int a = 0;devices[a] != NULL;a++) { if (access(devices[a], R_OK) == 0) return devices[a]; } return NULL; } const char * PIOJoystick::get_joystick_device(void) { return _device; } void PIOJoystick::set_joystick_device(const char *device) { if (_device != NULL) free(_device); _device = (device == NULL) ? NULL : strdup(device); } bool PIOJoystick::js_open(void) { int version; char name[1024]; _number_of_axes = 0; _number_of_buttons = 0; _idle_counter = IDLE_COUNTER_INIT; _up = _down = _left = _right = _button0 = _button1 = 0; if (get_joystick_device() == NULL) { const char *dev = check_joystick_device(); if (dev == NULL) return false; set_joystick_device(dev); } bool ok = true; _fd = open(get_joystick_device(), O_RDONLY | O_NONBLOCK); if (_fd < 0) ok = false; if (ok) ok = (ioctl(_fd, JSIOCGVERSION, &version) >= 0); if (ok) ok = (ioctl(_fd, JSIOCGNAME(sizeof(name)), name) >= 0); if (ok) ok = (ioctl(_fd, JSIOCGAXES, &_number_of_axes) >= 0); if (ok) ok = (ioctl(_fd, JSIOCGBUTTONS, &_number_of_buttons) >= 0); if (_number_of_axes < 2) ok = false; if (_number_of_buttons < 1) ok = false; if (!ok) { js_close(); if (_is_open) { Status::instance()->setMessage(_("Joystick removed!")); set_joystick_device(NULL); _is_open = false; } return false; } if (!_is_open) { char buf[1024]; snprintf(buf, sizeof(buf), _("Joystick (%d.%d.%d): %s on %s"), 0xff & (version >> 16), 0xff & (version >> 8), 0xff & version, name, get_joystick_device()); Status::instance()->setMessage(buf); _is_open = true; } return true; } void PIOJoystick::js_close(void) { if (_fd >= 0) close(_fd); _fd = -1; } bool PIOJoystick::is_open(void) { return _is_open; } void PIOJoystick::change_A(byte_t changed, byte_t val) { } void PIOJoystick::change_B(byte_t changed, byte_t val) { } void PIOJoystick::callback(void *data) { struct js_event event; strobe_A(); strobe_B(); z80->addCallback(35000, this, NULL); /* * reopening the joystick driver after some idle time will * ensure that the hotplug system will get the chance to unload * the driver for a disconnected joystick otherwise we would * simply block the device */ if (--_idle_counter < 0) { js_close(); js_open(); } /* * If initialization of the joystick driver failes we simply * ignore the fact and keep trying so if a joystick is plugged * in and the driver is loaded (e.g. autoloaded by the hotplug * USB system) we pick it up and use it againx. */ while (_fd >= 0) { errno = 0; if (read(_fd, &event, sizeof(struct js_event)) < 0) { if (errno != EAGAIN) js_close(); break; } _idle_counter = IDLE_COUNTER_INIT; switch (event.type & ~JS_EVENT_INIT) { case JS_EVENT_BUTTON: if (event.number == 0) _button0 = event.value; else _button1 = event.value; break; case JS_EVENT_AXIS: if (event.number == 0) { if (event.value < -10000) { _left = 1; _right = 0; } else if (event.value > 10000) { _left = 0; _right = 1; } else { _left = 0; _right = 0; } } else if (event.number == 1) { if (event.value < -10000) { _up = 1; _down = 0; } else if (event.value > 10000) { _up = 0; _down = 1; } else { _up = 0; _down = 0; } } break; } } _val = 0xff; if (_up) _val ^= 1; if (_down) _val ^= 2; if (_left) _val ^= 4; if (_right) _val ^= 8; if (_button0) _val ^= 16; if (_button1) _val ^= 32; set_A_EXT(0xff, _val); } byte_t PIOJoystick::in(word_t addr) { byte_t val; switch (addr & 3) { case 0: val = in_A_DATA(); break; case 1: val = in_B_DATA(); break; case 2: val = in_A_CTRL(); break; case 3: val = in_B_CTRL(); break; } DBG(2, form("KCemu/PIO/joystick/in", "PIOJoystick::in(): %04xh: addr = %04x, val = %02x\n", z80->getPC(), addr, val)); return val; } void PIOJoystick::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/joystick/out", "PIOJoystick::out(): %04xh: addr = %04x, val = %02x\n", z80->getPC(), addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } int PIOJoystick::callback_A_in(void) { return _val; } int PIOJoystick::callback_B_in(void) { return -1; } void PIOJoystick::callback_A_out(byte_t val) { } void PIOJoystick::callback_B_out(byte_t val) { } ModuleJoystick::ModuleJoystick(ModuleJoystick &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _pio = new PIOJoystick(); _portg = NULL; if (_pio->is_open()) { daisy->add_last(_pio); _portg = ports->register_ports("JOYSTICK", 0x90, 4, _pio, 0); set_valid(true); } else { char buf[1024]; if (_pio->get_joystick_device() == NULL) { snprintf(buf, sizeof(buf), _("Couldn't find any readable joystick device!\n\n" "If your joystick is connected properly and the correct\n" "driver is loaded give the device name of your joystick\n" "in the 'Joystick Device' section of the configuration\n" "file.")); } else { snprintf(buf, sizeof(buf), _("Couldn't open joystick device (%s)!\n\n" "Make sure you have the joystick properly connected\n" "and loaded the correct driver for it.\n\n" "Also check the 'Joystick Device' section in the\n" "configuration file if the device name shown above\n" "looks bogus.\n"), _pio->get_joystick_device()); } set_error_text(buf); set_valid(false); } } ModuleJoystick::ModuleJoystick(const char *name, byte_t id) : ModuleInterface(name, id, KC_MODULE_KC_85_3) { _pio = NULL; _portg = NULL; set_valid(true); } ModuleJoystick::~ModuleJoystick(void) { if (_portg != NULL) { daisy->remove(_pio); ports->unregister_ports(_portg); } if (_pio != NULL) delete _pio; } byte_t ModuleJoystick::in(word_t addr) { byte_t val = 0xff; return val; } void ModuleJoystick::out(word_t addr, byte_t val) { } ModuleInterface * ModuleJoystick::clone(void) { return new ModuleJoystick(*this); } void ModuleJoystick::reset(bool power_on) { } void ModuleJoystick::m_out(word_t addr, byte_t val) { } KCemu-0.5.1/src/kc/mod_rtc.cc0000644001050700006200000000605311345001576015335 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/mod_rtc.h" #include "sys/sysdep.h" ModuleRTC::ModuleRTC(ModuleRTC &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _portg = NULL; _master = &tmpl; if (_master->get_count() == 0) { _master->set_count(1); _base_port = _master->_base_port; _portg = ports->register_ports("RTC", _base_port, 16, this, 0); set_valid(true); } else { char buf[1024]; snprintf(buf, sizeof(buf), _("It's not possible to have more than one\n" "module of type %s!"), get_name()); set_error_text(buf); set_valid(false); } } ModuleRTC::ModuleRTC(const char *name, int base_port) : ModuleInterface(name, 0, KC_MODULE_Z1013) { _count = 0; _portg = NULL; _base_port = base_port; set_valid(true); } ModuleRTC::~ModuleRTC(void) { if (_portg) { _master->set_count(0); ports->unregister_ports(_portg); } } void ModuleRTC::m_out(word_t addr, byte_t val) { } ModuleInterface * ModuleRTC::clone(void) { return new ModuleRTC(*this); } void ModuleRTC::reset(bool power_on) { } int ModuleRTC::get_count(void) { return _count; } void ModuleRTC::set_count(int count) { _count = count; } byte_t ModuleRTC::in(word_t addr) { int year, month, day, hour, minute, second; sys_localtime(&year, &month, &day, &hour, &minute, &second); switch (addr & 0x0f) { case 0x00: return second % 10; case 0x01: return second / 10; case 0x02: return minute % 10; case 0x03: return minute / 10; case 0x04: return hour % 10; case 0x05: return hour / 10; case 0x06: return day % 10; case 0x07: return day / 10; case 0x08: return month % 10; case 0x09: return month / 10; case 0x0a: return year % 10; case 0x0b: return (year / 10) % 10; case 0x0c: // ??? return 0x00; case 0x0d: // control D return 0x00; case 0x0e: // control E return 0x00; case 0x0f: // control F return 0x00; } return 0xff; } void ModuleRTC::out(word_t addr, byte_t val) { } KCemu-0.5.1/src/kc/mod_raf.cc0000644001050700006200000001032111345001576015306 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/z80.h" #include "kc/memory.h" #include "kc/mod_raf.h" #include "libdbg/dbg.h" using namespace std; ModuleRAF::ModuleRAF(ModuleRAF &tmpl) : ModuleInterface(tmpl.get_name(), tmpl.get_id(), tmpl.get_type()) { _port = tmpl._port; _size = tmpl._size; _ram[0] = new byte_t[_size]; _ram[1] = new byte_t[_size]; Memory::scratch_mem(_ram[0], _size); Memory::scratch_mem(_ram[1], _size); _portg = ports->register_ports(get_name(), _port, 4, this, 0); set_valid(true); } ModuleRAF::ModuleRAF(const char *name, byte_t port, dword_t size) : ModuleInterface(name, 0, KC_MODULE_KC_85_1) { _ram[0] = NULL; _ram[1] = NULL; _port = port; _size = size / 2; _portg = NULL; set_valid(true); } ModuleRAF::~ModuleRAF(void) { if (_ram[0]) delete[] _ram[0]; if (_ram[1]) delete[] _ram[1]; if (_portg) ports->unregister_ports(_portg); _ram[0] = NULL; _ram[1] = NULL; _portg = NULL; } void ModuleRAF::m_out(word_t addr, byte_t val) { } ModuleInterface * ModuleRAF::clone(void) { return new ModuleRAF(*this); } void ModuleRAF::reset(bool power_on) { } byte_t ModuleRAF::in(word_t addr) { byte_t val = 0xff; switch (addr & 3) { case 0: val = in_data(0, addr); break; case 1: val = in_ctrl(0, addr); break; case 2: val = in_data(1, addr); break; case 3: val = in_ctrl(1, addr); break; } DBG(2, form("KCemu/ModuleRAF/in", "ModuleRAF::in(): %04xh: %04x <- %02x\n", z80->getPC(), addr, val)); return val; } byte_t ModuleRAF::in_ctrl(int card, word_t addr) { byte_t val = 0xff; DBG(2, form("KCemu/ModuleRAF/ctrl", "ModuleRAF::in_ctrl(): %04xh: card%d: %04x <- %02x\n", z80->getPC(), card, addr, val)); return val; } byte_t ModuleRAF::in_data(int card, word_t addr) { byte_t val = 0xff; dword_t mem = _addr[card] | ((addr >> 8) & 0x7f); if (mem < _size) val = _ram[card][mem]; DBG(2, form("KCemu/ModuleRAF/data", "ModuleRAF::in_data(): %04xh: card%d: addr = %06xh <- %02x\n", z80->getPC(), card, mem, val)); return val; } void ModuleRAF::out(word_t addr, byte_t val) { DBG(2, form("KCemu/ModuleRAF/out", "ModuleRAF::out(): %04xh: %04x -> %02x\n", z80->getPC(), addr, val)); switch (addr & 3) { case 0: out_data(0, addr, val); break; case 1: out_ctrl(0, addr, val); break; case 2: out_data(1, addr, val); break; case 3: out_ctrl(1, addr, val); break; } } void ModuleRAF::out_ctrl(int card, word_t addr, byte_t val) { word_t ts = (addr & 0xff00) | val; _prot[card] = (ts >> 15) | (ts >> 14); _addr[card] = (ts & 0x3fff) << 7; DBG(2, form("KCemu/ModuleRAF/ctrl", "ModuleRAF::out_ctrl(): %04xh: card%d: addr = %06xh, protection = %s\n", z80->getPC(), card, _addr[card], _prot[card] ? "ON" : "OFF")); } void ModuleRAF::out_data(int card, word_t addr, byte_t val) { dword_t mem = _addr[card] | ((addr >> 8) & 0x7f); DBG(2, form("KCemu/ModuleRAF/data", "ModuleRAF::out_data(): %04xh: card%d: addr = %06xh -> %02x%s\n", z80->getPC(), card, mem, val, _prot[card] ? " protection = ON": "")); if ((_prot[card] == 0) && (mem < _size)) _ram[card][mem] = val; } KCemu-0.5.1/src/kc/muglerpc/0000755001050700006200000000000011412404772015211 5ustar glaubitzfbedvKCemu-0.5.1/src/kc/muglerpc/memory.cc0000644001050700006200000001004511345001576017030 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/types.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/muglerpc/memory.h" using namespace std; MemoryMuglerPC::MemoryMuglerPC(void) : Memory() { load_rom(SystemROM::ROM_KEY_SYSTEM, &_rom); load_rom(SystemROM::ROM_KEY_CHARGEN, &_rom_chargen); memory_group_t mem[] = { { &_m_scr, "-", 0x0000, 0x10000, 0, 256, 0, 1 }, { &_m_rom, "ROM", 0x0000, 0x2000, &_rom[0], 10, 1, 1 }, { &_m_ram0_lo, "RAM Bank 0 (lo)", 0x0000, 0xc000, &_ram_block0[0], 20, 0, 1 }, { &_m_ram0_hi, "RAM Bank 0 (hi)", 0xc000, 0x4000, &_ram_block0[0xc000], 20, 0, 1 }, { &_m_ram1, "RAM Bank 1", 0x0000, 0x10000, &_ram_block1[0], 30, 0, 0 }, { &_m_ram2, "RAM Bank 2", 0x0000, 0x10000, &_ram_block2[0], 30, 0, 0 }, /* * The irm is not set to active because it is currently not used via the normal memory * switch. Instead it's always written to in memWrite8(). All writes to to both the active * ram block and the irm. Read access to irm is not possible and always goes to the active * ram block. */ { &_m_irm, "IRM", 0xf800, 0x0800, &_irm[0], 10, 0, 0 }, { 0, }, }; init_memory_groups(mem); _m_irm->set_read_through(true); reset(true); z80->register_ic(this); } MemoryMuglerPC::~MemoryMuglerPC(void) { z80->unregister_ic(this); delete _m_scr; delete _m_rom; delete _m_ram0_lo; delete _m_ram0_hi; delete _m_ram1; delete _m_ram2; delete _m_irm; } byte_t MemoryMuglerPC::memRead8(word_t addr) { return _memrptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK]; } void MemoryMuglerPC::memWrite8(word_t addr, byte_t val) { _memwptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK] = val; if (addr >= 0xf800) _irm[addr - 0xf800] = val; } byte_t * MemoryMuglerPC::get_irm(void) { return _irm; } byte_t * MemoryMuglerPC::get_char_rom(void) { return _rom_chargen; } void MemoryMuglerPC::reset(bool power_on) { _m_rom->set_active(true); _m_ram0_lo->set_active(true); _m_ram0_hi->set_active(true); _m_ram1->set_active(false); _m_ram2->set_active(false); _m_irm->set_active(false); // see above reload_mem_ptr(); if (!power_on) return; scratch_mem(&_irm[0], 0x800); scratch_mem(&_ram_block0[0], 0x10000); scratch_mem(&_ram_block1[0], 0x10000); scratch_mem(&_ram_block2[0], 0x10000); } void MemoryMuglerPC::select_eprom(bool active) { _m_rom->set_active(active); reload_mem_ptr(); } void MemoryMuglerPC::select_ram_block(int block, bool force_ram0_at_c000h) { _m_ram0_lo->set_active(block == 0); _m_ram0_hi->set_active((block == 0) || force_ram0_at_c000h); _m_ram1->set_active(block == 1); _m_ram2->set_active(block == 2); reload_mem_ptr(); } void MemoryMuglerPC::dumpCore(void) { ofstream os; os.open("core.z80"); cerr << "Memory: dumping core..." << endl; if (!os) { cerr << "Memory: can't write 'core.z80'" << endl; return; } for (int a = 0;a < 0x10000;a++) os.put(memRead8(a)); os.close(); cerr << "Memory: done." << endl; } KCemu-0.5.1/src/kc/muglerpc/ports.cc0000644001050700006200000000615111345001576016672 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/muglerpc/ports.h" #include "kc/muglerpc/memory.h" #include "libdbg/dbg.h" #define memory ((MemoryMuglerPC *)memory) PortsMuglerPC::PortsMuglerPC(void) { _val_0x94 = 0; } PortsMuglerPC::~PortsMuglerPC(void) { } byte_t PortsMuglerPC::in(word_t addr) { byte_t val; byte_t a = addr & 0xff; switch (a) { case 0x94: case 0x95: case 0x96: case 0x97: val = _val_0x94; break; default: DBG(0, form("KCemu/internal_error", "PortsMuglerPC: called in() with undefined address %04xh\n", addr)); break; } DBG(2, form("KCemu/Ports/muglerpc/in", "PortsMuglerPC: in() addr = %04x (returning %02x)\n", addr, val)); return val; } void PortsMuglerPC::out(word_t addr, byte_t val) { byte_t a = addr & 0xff; DBG(2, form("KCemu/Ports/muglerpc/out", "PortsMuglerPC: out() addr = %04x, val = %02x\n", addr, val)); switch (a) { case 0x94: case 0x95: case 0x96: case 0x97: change_0x94(_val_0x94 ^ val, val); _val_0x94 = val; break; default: DBG(0, form("KCemu/internal_error", "PortsMuglerPC: called out() with undefined address %04xh (val = %02xh)\n", addr, val)); break; } } void PortsMuglerPC::change_0x94(byte_t changed, byte_t val) { /* * memory switch: * * bit 0: \ * bit 1: > ram block select (block 0 to 2 on base system) * bit 2: / * bit 3: SEL 0 (on system connector X3) * bit 4: SEL 1 (on system connector X3) * bit 5: SEL 2 (on system connector X3) * bit 6: force block 0 at c000h - ffffh * bit 7: enable/disable EPROM at 0000h (0 = on, 1 = off) * */ if (changed & 0x47) { DBG(2, form("KCemu/Ports/muglerpc/change/94", "PortsMuglerPC: change_0x94() select ram block %d, %sforce block 0 at c000h\n", val & 7, (val & 0x40) ? "" : "don't ")); memory->select_ram_block(val & 7, (val & 0x40) == 0x40); } if (changed & 0x80) { DBG(2, form("KCemu/Ports/muglerpc/change/94", "PortsMuglerPC: change_0x94() set eprom %s\n", (val & 0x80) ? "inactive" : "active")); memory->select_eprom((val & 0x80) == 0); } } KCemu-0.5.1/src/kc/muglerpc/pio.cc0000644001050700006200000000616711345001576016321 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/muglerpc/pio.h" #include "libdbg/dbg.h" PIOMuglerPCSystem::PIOMuglerPCSystem(void) { } PIOMuglerPCSystem::~PIOMuglerPCSystem(void) { } byte_t PIOMuglerPCSystem::in(word_t addr) { byte_t val = 0xff; switch (addr & 3) { case 0: val = in_A_DATA(); break; case 1: val = in_B_DATA(); break; case 2: val = in_A_CTRL(); break; case 3: val = in_B_CTRL(); break; } DBG(2, form("KCemu/PIO/muglerpc/in", "PIOMuglerPCSystem::in(): addr = %04x, val = %02x\n", addr, val)); return val; } void PIOMuglerPCSystem::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/muglerpc/out", "PIOMuglerPCSystem::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } void PIOMuglerPCSystem::change_A(byte_t changed, byte_t val) { } void PIOMuglerPCSystem::change_B(byte_t changed, byte_t val) { } PIOMuglerPCUser::PIOMuglerPCUser(void) { } PIOMuglerPCUser::~PIOMuglerPCUser(void) { } byte_t PIOMuglerPCUser::in(word_t addr) { byte_t val = 0xff; switch (addr & 3) { case 0: val = in_A_DATA(); break; case 1: val = in_B_DATA(); break; case 2: val = in_A_CTRL(); break; case 3: val = in_B_CTRL(); break; } DBG(2, form("KCemu/PIO/muglerpc/in", "PIOMuglerPCUser::in(): addr = %04x, val = %02x\n", addr, val)); return val; } void PIOMuglerPCUser::out(word_t addr, byte_t val) { DBG(2, form("KCemu/PIO/muglerpc/out", "PIOMuglerPCSystem::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: out_A_DATA(val); break; case 1: out_B_DATA(val); break; case 2: out_A_CTRL(val); break; case 3: out_B_CTRL(val); break; } } void PIOMuglerPCUser::change_A(byte_t changed, byte_t val) { } void PIOMuglerPCUser::change_B(byte_t changed, byte_t val) { } KCemu-0.5.1/src/kc/muglerpc/Makefile.am0000644001050700006200000000032010527416075017245 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in noinst_LIBRARIES = libmuglerpc.a INCLUDES = -I../../../include libmuglerpc_a_SOURCES = \ ctc.cc \ pio.cc \ ports.cc \ memory.cc \ keyboard.cc KCemu-0.5.1/src/kc/muglerpc/ctc.cc0000644001050700006200000000716511345001576016302 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/z80.h" #include "kc/muglerpc/ctc.h" #include "libdbg/dbg.h" CTCMuglerPCSystem::CTCMuglerPCSystem(void) { } CTCMuglerPCSystem::~CTCMuglerPCSystem(void) { } byte_t CTCMuglerPCSystem::in(word_t addr) { DBG(2, form("KCemu/CTC/muglerpc_system/in", "CTCMuglerPCSystem::in(): addr = %04x\n", addr)); switch (addr & 3) { case 0: return c_in(0); case 1: return c_in(1); case 2: return c_in(2); case 3: return c_in(3); } return 0; // shouldn't be reached } void CTCMuglerPCSystem::out(word_t addr, byte_t val) { DBG(2, form("KCemu/CTC/muglerpc_system/out", "CTCMuglerPCSystem::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: c_out(0, val); break; case 1: c_out(1, val); break; case 2: c_out(2, val); break; case 3: c_out(3, val); break; } } bool CTCMuglerPCSystem::irq_0(void) { return false; } bool CTCMuglerPCSystem::irq_1(void) { return false; } bool CTCMuglerPCSystem::irq_2(void) { return false; } bool CTCMuglerPCSystem::irq_3(void) { return false; } long CTCMuglerPCSystem::counter_value_0(void) { return 0; } long CTCMuglerPCSystem::counter_value_1(void) { return 0; } long CTCMuglerPCSystem::counter_value_2(void) { return 0; } long CTCMuglerPCSystem::counter_value_3(void) { return 0; } CTCMuglerPCUser::CTCMuglerPCUser(void) { } CTCMuglerPCUser::~CTCMuglerPCUser(void) { } byte_t CTCMuglerPCUser::in(word_t addr) { DBG(2, form("KCemu/CTC/muglerpc_user/in", "CTCMuglerPCUser::in(): addr = %04x\n", addr)); switch (addr & 3) { case 0: return c_in(0); case 1: return c_in(1); case 2: return c_in(2); case 3: return c_in(3); } return 0; // shouldn't be reached } void CTCMuglerPCUser::out(word_t addr, byte_t val) { DBG(2, form("KCemu/CTC/muglerpc_user/out", "CTCMuglerPCUser::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: c_out(0, val); break; case 1: c_out(1, val); break; case 2: c_out(2, val); break; case 3: c_out(3, val); break; } } bool CTCMuglerPCUser::irq_0(void) { return false; } bool CTCMuglerPCUser::irq_1(void) { return false; } bool CTCMuglerPCUser::irq_2(void) { return false; } bool CTCMuglerPCUser::irq_3(void) { return false; } long CTCMuglerPCUser::counter_value_0(void) { return 0; } long CTCMuglerPCUser::counter_value_1(void) { return 0; } long CTCMuglerPCUser::counter_value_2(void) { return 0; } long CTCMuglerPCUser::counter_value_3(void) { return 0; } KCemu-0.5.1/src/kc/muglerpc/keyboard.cc0000644001050700006200000000755611345001576017335 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/z80.h" #include "kc/keys.h" //#include "kc/muglerpc/keydef.h" #include "kc/muglerpc/keyboard.h" #include "libdbg/dbg.h" KeyboardMuglerPC::KeyboardMuglerPC(void) { init(); z80->register_ic(this); } KeyboardMuglerPC::~KeyboardMuglerPC(void) { z80->unregister_ic(this); } void KeyboardMuglerPC::init(void) { int a; for (a = 0;a < MAX_KEYS;a++) { _keybuf[a].sym = -1; _keybuf[a].code = -1; } } int KeyboardMuglerPC::decode_key(int keysym, bool press) { return keysym; } void KeyboardMuglerPC::keyPressed(int keysym, int keycode) { int k; /* * ignore repeated key press events (e.g. generated by * GTK that reports key repeat as keypress/keypress/keypress/... * without the possibility to switch that off :-( ) */ for (int a = 0;a < MAX_KEYS;a++) if (_keybuf[a].code == keycode) return; k = decode_key(keysym, true); if (k == -1) return; DBG(2, form("KCemu/keyboard/muglerpc/key_press", "##### Keyboard: keyPressed [%03x/%02x] ", keysym, k)); for (int a = 0;a < MAX_KEYS;a++) { if (_keybuf[a].code == -1) { _keybuf[a].sym = k; _keybuf[a].code = keycode; break; } } for (int a = 0;a < MAX_KEYS;a++) if (_keybuf[a].code != -1) DBG(2, form("KCemu/keyboard/muglerpc/key_press", " {%02d:%02x:%02x}", a, _keybuf[a].sym, _keybuf[a].code)); DBG(2, form("KCemu/keyboard/muglerpc/key_press", "\n")); } void KeyboardMuglerPC::keyReleased(int keysym, int keycode) { if (keysym == -1) { for (int a = 0;a < MAX_KEYS;a++) _keybuf[a].code = -1; return; } /* * remove (maybe multiple) entries from keyboard buffer */ for (int a = 0;a < MAX_KEYS;a++) if (_keybuf[a].code == keycode) _keybuf[a].code = -1; DBG(2, form("KCemu/keyboard/muglerpc/key_release", "##### Keyboard: keyPressed [%03x/%02x] ", keysym, keycode)); for (int a = 0;a < MAX_KEYS;a++) if (_keybuf[a].code != -1) DBG(2, form("KCemu/keyboard/muglerpc/key_press", " {%02d:%02x:%02x}", a, _keybuf[a].sym, _keybuf[a].code)); DBG(2, form("KCemu/keyboard/muglerpc/key_release", "\n")); } void KeyboardMuglerPC::replayString(const char *text) { } void KeyboardMuglerPC::callback(void *data) { } int KeyboardMuglerPC::callback_A_in(void) { for (int a = 0;a < MAX_KEYS;a++) { if (_keybuf[a].code == -1) continue; if (_keybuf[a].sym == KC_KEY_SHIFT) continue; if (_keybuf[a].sym == KC_KEY_CONTROL) continue; return _keybuf[a].sym | 0x80; } return 0; } void KeyboardMuglerPC::callback_A_out(byte_t val) { } int KeyboardMuglerPC::callback_B_in(void) { return -1; } void KeyboardMuglerPC::callback_B_out(byte_t val) { } void KeyboardMuglerPC::reset(bool power_on) { init(); } void KeyboardMuglerPC::reti(void) { } KCemu-0.5.1/src/kc/muglerpc/Makefile.in0000644001050700006200000004135011412404772017261 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/kc/muglerpc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libmuglerpc_a_AR = $(AR) $(ARFLAGS) libmuglerpc_a_LIBADD = am_libmuglerpc_a_OBJECTS = ctc.$(OBJEXT) pio.$(OBJEXT) ports.$(OBJEXT) \ memory.$(OBJEXT) keyboard.$(OBJEXT) libmuglerpc_a_OBJECTS = $(am_libmuglerpc_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(libmuglerpc_a_SOURCES) DIST_SOURCES = $(libmuglerpc_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libmuglerpc.a INCLUDES = -I../../../include libmuglerpc_a_SOURCES = \ ctc.cc \ pio.cc \ ports.cc \ memory.cc \ keyboard.cc all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/kc/muglerpc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/kc/muglerpc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libmuglerpc.a: $(libmuglerpc_a_OBJECTS) $(libmuglerpc_a_DEPENDENCIES) -rm -f libmuglerpc.a $(libmuglerpc_a_AR) libmuglerpc.a $(libmuglerpc_a_OBJECTS) $(libmuglerpc_a_LIBADD) $(RANLIB) libmuglerpc.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyboard.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ports.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/kc/sound8.cc0000644001050700006200000000523611345001576015130 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include // FIXME: #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/sound8.h" #define SOUND_BUFFER_SIZE (1024) #define SOUND_SAMPLE_FREQ (44100) static FILE *_f; void Sound8::sound_callback(void *userdata, unsigned char *stream, int len) { int a; sndop8 *op; long long c; static int xxx = 10; c = z80->getCounter() - 30000; if (_snd_cnt == 0) { _snd_cnt = c; return; } for (a = 0;a < len;a++) stream[a] = 0x080; if (_sndop_list.size() == 0) { if (--xxx < 0) _snd_cnt = c; return; } xxx = 10; op = 0; if (_sndop_list.size() > 0) op = _sndop_list.front(); for (a = 0;a < len;a++) { if (op && op->_counter <= _snd_cnt) { _val = op->_val; _sndop_list.pop_front(); op = 0; if (_sndop_list.size() > 0) op = _sndop_list.front(); } stream[a] = _val; _snd_cnt += 21; } fwrite(stream, 1, len, _f); } Sound8::Sound8(void) { _f = fopen("/tmp/lc80.wav", "wb"); } Sound8::~Sound8(void) { delete _buf; fclose(_f); } void Sound8::init(void) { _cnt = 0; _val = 0; _snd_cnt = 0; _idx_r = _idx_w = 0; _buf = new long long[SND_BUF_SIZE]; pio->register_callback_B_out(this); open_sound(); } void Sound8::start(void) { } void Sound8::stop(void) { } int Sound8::callback_A_in(void) { return -1; } void Sound8::callback_A_out(byte_t val) { } int Sound8::callback_B_in(void) { return -1; } void Sound8::callback_B_out(byte_t val) { static int old_val = 0; int v = (val & 2) ? 128 + 50 : 128 - 50; if (old_val == v) return; if (_cnt == 0) { _cnt = z80->getCounter(); return; } old_val = v; _cnt = z80->getCounter(); lock(); _sndop_list.push_back(new sndop8(_cnt, v)); unlock(); } void Sound8::callback(void *data) { } KCemu-0.5.1/src/kc/mod_m052.cc0000644001050700006200000000605611345001576015233 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/z80.h" #include "kc/vdip.h" #include "kc/daisy.h" #include "kc/pio_vdip.h" #include "kc/mod_m052.h" #include "kc/kcnet/kcnet.h" #include "kc/kcnet/pio_net.h" ModuleNetworkUSB::ModuleNetworkUSB(ModuleNetworkUSB &tmpl) : ModuleSegmentedMemory(tmpl) { _pio_net = new PIO_NET; _pio_vdip = new PIO_VDIP; _portg_pio_net = NULL; _portg_pio_vdip = NULL; set_valid(true); } ModuleNetworkUSB::ModuleNetworkUSB(const char *filename, const char *name, byte_t id) : ModuleSegmentedMemory(name, id, 4, 0x2000, filename) { _pio_net = NULL; _pio_vdip = NULL; _portg_pio_net = NULL; _portg_pio_vdip = NULL; set_valid(true); } ModuleNetworkUSB::~ModuleNetworkUSB(void) { if (_pio_net != NULL) delete _pio_net; if (_pio_vdip != NULL) delete _pio_vdip; } int ModuleNetworkUSB::get_segment_index(word_t addr, byte_t val) { return (val >> 3) & 3; } word_t ModuleNetworkUSB::get_base_address(word_t addr, byte_t val) { return ((val >> 5) & 7) * 0x2000; } byte_t ModuleNetworkUSB::m_in(word_t addr) { byte_t val = ModuleSegmentedMemory::m_in(addr); printf("ModuleNetworkUSB::m_in(): %04xh: %04x - %02x\n", z80->getPC(), addr, val); return val; } void ModuleNetworkUSB::m_out(word_t addr, byte_t val) { printf("ModuleNetworkUSB::m_out(): %04xh: %04x - %02x\n", z80->getPC(), addr, val); ModuleSegmentedMemory::m_out(addr, val); if (val & 4) { if (_portg_pio_net == NULL) { _portg_pio_net = ports->register_ports("M052 PIO NET", 0x28, 4, _pio_net, 0); daisy->add_last(_pio_net); } if (_portg_pio_vdip == NULL) { _portg_pio_vdip = ports->register_ports("M052 PIO VDIP", 0x2c, 4, _pio_vdip, 0); daisy->add_last(_pio_vdip); vdip->register_pio(_pio_vdip); } } else { if (_portg_pio_net != NULL) { ports->unregister_ports(_portg_pio_net); daisy->remove(_pio_net); kcnet->reset(); } if (_portg_pio_vdip != NULL) { vdip->register_pio(NULL); ports->unregister_ports(_portg_pio_vdip); daisy->remove(_pio_vdip); } _portg_pio_net = NULL; _portg_pio_vdip = NULL; } } ModuleInterface * ModuleNetworkUSB::clone(void) { return new ModuleNetworkUSB(*this); } KCemu-0.5.1/src/kc/memory9.cc0000644001050700006200000000736411345001576015315 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/prefs/prefs.h" #include "kc/z80.h" #include "kc/memory9.h" using namespace std; Memory9::Memory9(void) : Memory() { load_rom(SystemROM::ROM_KEY_SYSTEM1, &_rom_slot0[0x0000]); load_rom(SystemROM::ROM_KEY_SYSTEM2, &_rom_slot0[0x8000]); load_rom(SystemROM::ROM_KEY_SYSTEM3, &_rom_slot1[0x0000]); load_rom(SystemROM::ROM_KEY_SYSTEM4, &_rom_slot1[0x2000]); memory_group_t mem[] = { { &_m_scr, "-", 0x0000, 0x10000, 0, 256, 0, 1, -1 }, { &_m_rom_slot0_page0, "ROM CGG", 0x0000, 0x04000, &_rom_slot0[0x0000], 0, 1, 1, -1 }, { &_m_rom_slot0_page1, "ROM CGG", 0x4000, 0x04000, &_rom_slot0[0x4000], 0, 1, 1, -1 }, { &_m_rom_slot0_page2, "ROM CGG", 0x8000, 0x02000, &_rom_slot0[0x8000], 0, 1, 1, -1 }, { &_m_rom_slot1_page1, "ROM DSE", 0x4000, 0x04000, &_rom_slot1[0x0000], 5, 1, 0, KC_VARIANT_A5105_A5105 }, { &_m_ram_slot2_page0, "RAM", 0x0000, 0x04000, &_ram_slot2[0x0000], 10, 0, 0, -1 }, { &_m_ram_slot2_page1, "RAM", 0x4000, 0x04000, &_ram_slot2[0x4000], 10, 0, 0, -1 }, { &_m_ram_slot2_page2, "RAM", 0x8000, 0x04000, &_ram_slot2[0x8000], 10, 0, 0, -1 }, { &_m_ram_slot2_page3, "RAM", 0xc000, 0x04000, &_ram_slot2[0xc000], 10, 0, 1, -1 }, { 0, }, }; init_memory_groups(mem); reset(true); z80->register_ic(this); } Memory9::~Memory9(void) { z80->unregister_ic(this); } byte_t Memory9::memRead8(word_t addr) { return _memrptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK]; } void Memory9::memWrite8(word_t addr, byte_t val) { _memwptr[addr >> MemArea::PAGE_SHIFT][addr & MemArea::PAGE_MASK] = val; } byte_t * Memory9::get_irm(void) { return (byte_t *)get_page_addr_r(0xec00); } byte_t * Memory9::get_char_rom(void) { return (byte_t *)0; } void Memory9::reset(bool power_on) { set_page(0, 0); set_page(1, 0); set_page(2, 0); set_page(3, 2); if (power_on) memset(&_ram_slot2[0], 0, 0x10000); } void Memory9::dumpCore(void) { ofstream os; os.open("core.z80"); cerr << "Memory: dumping core..." << endl; if (!os) { cerr << "Memory: can't write 'core.z80'" << endl; return; } for (int a = 0;a < 0x10000;a++) os.put(memRead8(a)); os.close(); cerr << "Memory: done." << endl; } void Memory9::set_page(int page, int slot) { switch (page) { case 0: _m_rom_slot0_page0->set_active(slot == 0); _m_ram_slot2_page0->set_active(slot == 2); break; case 1: _m_rom_slot0_page1->set_active(slot == 0); if (_m_rom_slot1_page1) _m_rom_slot1_page1->set_active(slot == 1); _m_ram_slot2_page1->set_active(slot == 2); break; case 2: _m_rom_slot0_page2->set_active(slot == 0); _m_ram_slot2_page2->set_active(slot == 2); break; case 3: _m_ram_slot2_page3->set_active(slot == 2); break; } reload_mem_ptr(); } KCemu-0.5.1/src/kc/ctc_fdc.cc0000644001050700006200000000650411345001576015274 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/ctc_fdc.h" #include "kc/z80_fdc.h" #include "libdbg/dbg.h" /* * quoting the D004 programming manual: * * Alle vier Kan�le des CTC sind hardwarem��ig kaskadiert. Die * Z�hlereingangsfrequenz des Kanals 0 betr�gt 500kHz. Der Kanal 3 ist * vom Betriebssystem interruptm��ig zur Laufwerksteuerung belegt. Die * Kan�le 0 und 1 werden von der Systemuhr verwendet. Kanal 1 arbeitet * dabei interruptgesteuert. * * Die Adressen der Interruptserviceroutinen sind folgender Tabelle zu * entnehmen: * * CTC-Kanal Adresse Wert * * 0 FBE0h 0000h * 1 FBE2h F0e4h * 2 FBE4h 0000h * 3 FBE6h F4C8h */ CTC_FDC::CTC_FDC(void) : CTC("CTC (FDC)") { } CTC_FDC::~CTC_FDC(void) { } long long CTC_FDC::get_counter() { return fdc_z80->get_counter(); } void CTC_FDC::trigger_irq(int channel) { fdc_z80->trigger_irq(getIRQVector(channel)); } void CTC_FDC::add_callback(unsigned long long offset, Callback *cb, void *data) { fdc_z80->add_callback(offset, cb, data); } byte_t CTC_FDC::in(word_t addr) { DBG(2, form("KCemu/CTC/FDC/in", "CTC_FDC::in(): addr = %04x\n", addr)); switch (addr & 3) { case 0: return c_in(0); case 1: return c_in(1); case 2: return c_in(2); case 3: return c_in(3); } return 0; // shouldn't be reached } void CTC_FDC::out(word_t addr, byte_t val) { DBG(2, form("KCemu/CTC/FDC/out", "CTC_FDC::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: c_out(0, val); break; case 1: c_out(1, val); break; case 2: c_out(2, val); break; case 3: c_out(3, val); break; } } bool CTC_FDC::irq_0(void) { DBG(2, form("KCemu/CTC_FDC/irq/0", "CTC::irq_0()\n")); trigger(1); return true; } bool CTC_FDC::irq_1(void) { DBG(2, form("KCemu/CTC_FDC/irq/1", "CTC::irq_1()\n")); return true; } bool CTC_FDC::irq_2(void) { DBG(2, form("KCemu/CTC_FDC/irq/2", "CTC::irq_2()\n")); return true; } bool CTC_FDC::irq_3(void) { DBG(2, form("KCemu/CTC_FDC/irq/3", "CTC::irq_3()\n")); return true; } long CTC_FDC::counter_value_0(void) { return 0; } long CTC_FDC::counter_value_1(void) { return 0; } long CTC_FDC::counter_value_2(void) { return 0; } long CTC_FDC::counter_value_3(void) { return 0; } KCemu-0.5.1/src/kc/kcemu.rc.in0000644001050700006200000000132410552157475015443 0ustar glaubitzfbedv1 VERSIONINFO FILEVERSION @KCEMU_MAJOR_VERSION@, @KCEMU_MINOR_VERSION@, @KCEMU_MICRO_VERSION@, @KCEMU_EXTRA_VERSION@ PRODUCTVERSION @KCEMU_MAJOR_VERSION@, @KCEMU_MINOR_VERSION@, @KCEMU_MICRO_VERSION@, @KCEMU_EXTRA_VERSION@ FILEFLAGSMASK 0 FILEOS 0x40000 FILETYPE 1 { BLOCK "StringFileInfo" { BLOCK "040904E4" { VALUE "CompanyName", "Torsten Paul" VALUE "FileDescription", "KCemu -- the KC 85/3 and KC 85/4 Emulator" VALUE "FileVersion", "@VERSION@" VALUE "InternalName", "kcemu.exe" VALUE "LegalCopyright", "GNU General Public License" VALUE "OriginalFilename", "kcemu.exe" VALUE "ProductName", "KCemu" VALUE "ProductVersion", "@VERSION@" } } } AppIcon ICON "../../images/kcemu-winicon.ico" KCemu-0.5.1/src/kc/ctc8.cc0000644001050700006200000000411011345001576014537 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/z80.h" #include "kc/ctc8.h" #include "libdbg/dbg.h" CTC8::CTC8(void) { } CTC8::~CTC8(void) { } byte_t CTC8::in(word_t addr) { DBG(2, form("KCemu/CTC/8/in", "CTC8::in(): addr = %04x\n", addr)); switch (addr & 3) { case 0: return c_in(0); case 1: return c_in(1); case 2: return c_in(2); case 3: return c_in(3); } return 0; // shouldn't be reached } void CTC8::out(word_t addr, byte_t val) { DBG(2, form("KCemu/CTC/8/out", "CTC8::out(): addr = %04x, val = %02x\n", addr, val)); switch (addr & 3) { case 0: c_out(0, val); break; case 1: c_out(1, val); break; case 2: c_out(2, val); break; case 3: c_out(3, val); break; } } bool CTC8::irq_0(void) { return false; } bool CTC8::irq_1(void) { return false; } bool CTC8::irq_2(void) { return false; } bool CTC8::irq_3(void) { return false; } long CTC8::counter_value_0(void) { return 0; } long CTC8::counter_value_1(void) { return 0; } long CTC8::counter_value_2(void) { return 0; } long CTC8::counter_value_3(void) { return 0; } KCemu-0.5.1/src/kc/ports6.cc0000644001050700006200000000411111345001576015134 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/pio6.h" #include "kc/keyb6.h" #include "kc/ports6.h" #include "libdbg/dbg.h" Ports6::Ports6(void) { _val = 0; for (int a = 0;a < 8;a++) _led[a] = 0; } Ports6::~Ports6(void) { } byte_t Ports6::in(word_t addr) { byte_t val = 0xff; DBG(2, form("KCemu/Ports/6/in", "Ports6: in(): addr = %04x (returning %02x)\n", addr, val)); return val; } void Ports6::out(word_t addr, byte_t val) { _val = val; DBG(2, form("KCemu/Ports/6/out", "Ports6: out(): addr = %04x, val = %02x\n", addr, val)); // FIXME: decouple classes ((Keyboard6 *)keyboard)->set_line(val); byte_t pio_val = ((PIO6_1 *)pio)->get_led_value(); update_led_value(_val, pio_val); } void Ports6::update_led_value(byte_t port_val, byte_t pio_val) { for (int a = 0;a < 8;a++) if (port_val & (128 >> a)) _led[a] = pio_val; } byte_t Ports6::get_led_value(int idx) { return _led[idx]; } int Ports6::callback_A_in(void) { return 0; } int Ports6::callback_B_in(void) { return 0; } void Ports6::callback_A_out(byte_t val) { update_led_value(_val, val); } void Ports6::callback_B_out(byte_t val) { } KCemu-0.5.1/src/kc/Makefile.in0000644001050700006200000011717311412404772015452 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ bin_PROGRAMS = kcemu$(EXEEXT) @TARGET_FREEBSD_FALSE@@TARGET_LINUX_TRUE@noinst_PROGRAMS = \ @TARGET_FREEBSD_FALSE@@TARGET_LINUX_TRUE@ kcemu-send$(EXEEXT) @TARGET_FREEBSD_TRUE@noinst_PROGRAMS = kcemu-send$(EXEEXT) subdir = src/kc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/kcemu.rc.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = kcemu.rc CONFIG_CLEAN_VPATH_FILES = am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am__kcemu_SOURCES_DIST = kc.cc ic.cc ctc.cc ctc1.cc ctc3.cc ctc6.cc \ ctc8.cc ctc9.cc ctc_fdc.cc pio_dio.cc pio_vdip.cc ctc_dio.cc \ ctc_base.cc cb_list.cc daisy.cc keyb0.cc keyb1.cc keyb3.cc \ keyb6.cc keyb8.cc keyb9.cc memory.cc memory0.cc memory1.cc \ memory2.cc memory3.cc memory4.cc memory6.cc memory7.cc \ memory8.cc memory9.cc plotter.cc sh_mem.cc disk_io.cc gdc.cc \ vis.cc svg.cc vdip.cc vdip_cmd.cc gide.cc fdc.cc fdc0s.cc \ fdc4.cc fdc7.cc fdc9.cc fdc_cmd.cc floppy.cc pio.cc pio0.cc \ pio1.cc pio2.cc pio3.cc pio4.cc pio6.cc pio8.cc pio9.cc \ ports.cc ports0.cc ports4.cc ports6.cc module.cc mod_dio.cc \ mod_vdip.cc mod_ram.cc mod_ram1.cc mod_r16.cc mod_r64.cc \ mod_cpm.cc mod_ram8.cc mod_64k.cc mod_segm.cc mod_128k.cc \ mod_256k.cc mod_512k.cc mod_1m.cc mod_4m.cc mod_rom.cc \ mod_urom.cc mod_auto.cc mod_rom1.cc mod_romb.cc mod_raf.cc \ mod_boot.cc mod_192k.cc mod_320k.cc mod_ramf.cc mod_fdc.cc \ mod_gdc.cc mod_rtc.cc mod_disk.cc mod_4131.cc mod_m052.cc \ mod_list.cc tape.cc disk.cc timer.cc timer1.cc timer3.cc \ poly880.cc z80.cc z80_fdc.cc wav.cc sound.cc sound3.cc \ sound8.cc mod_v24.cc mod_js.cc kcemu.rc am__objects_1 = mod_v24.$(OBJEXT) am__objects_2 = mod_v24.$(OBJEXT) mod_js.$(OBJEXT) am__objects_3 = @TARGET_FREEBSD_FALSE@@TARGET_LINUX_FALSE@@TARGET_MINGW_TRUE@am__objects_4 = $(am__objects_3) @TARGET_FREEBSD_FALSE@@TARGET_LINUX_TRUE@am__objects_4 = \ @TARGET_FREEBSD_FALSE@@TARGET_LINUX_TRUE@ $(am__objects_2) @TARGET_FREEBSD_TRUE@am__objects_4 = $(am__objects_1) am_kcemu_OBJECTS = kc.$(OBJEXT) ic.$(OBJEXT) ctc.$(OBJEXT) \ ctc1.$(OBJEXT) ctc3.$(OBJEXT) ctc6.$(OBJEXT) ctc8.$(OBJEXT) \ ctc9.$(OBJEXT) ctc_fdc.$(OBJEXT) pio_dio.$(OBJEXT) \ pio_vdip.$(OBJEXT) ctc_dio.$(OBJEXT) ctc_base.$(OBJEXT) \ cb_list.$(OBJEXT) daisy.$(OBJEXT) keyb0.$(OBJEXT) \ keyb1.$(OBJEXT) keyb3.$(OBJEXT) keyb6.$(OBJEXT) \ keyb8.$(OBJEXT) keyb9.$(OBJEXT) memory.$(OBJEXT) \ memory0.$(OBJEXT) memory1.$(OBJEXT) memory2.$(OBJEXT) \ memory3.$(OBJEXT) memory4.$(OBJEXT) memory6.$(OBJEXT) \ memory7.$(OBJEXT) memory8.$(OBJEXT) memory9.$(OBJEXT) \ plotter.$(OBJEXT) sh_mem.$(OBJEXT) disk_io.$(OBJEXT) \ gdc.$(OBJEXT) vis.$(OBJEXT) svg.$(OBJEXT) vdip.$(OBJEXT) \ vdip_cmd.$(OBJEXT) gide.$(OBJEXT) fdc.$(OBJEXT) \ fdc0s.$(OBJEXT) fdc4.$(OBJEXT) fdc7.$(OBJEXT) fdc9.$(OBJEXT) \ fdc_cmd.$(OBJEXT) floppy.$(OBJEXT) pio.$(OBJEXT) \ pio0.$(OBJEXT) pio1.$(OBJEXT) pio2.$(OBJEXT) pio3.$(OBJEXT) \ pio4.$(OBJEXT) pio6.$(OBJEXT) pio8.$(OBJEXT) pio9.$(OBJEXT) \ ports.$(OBJEXT) ports0.$(OBJEXT) ports4.$(OBJEXT) \ ports6.$(OBJEXT) module.$(OBJEXT) mod_dio.$(OBJEXT) \ mod_vdip.$(OBJEXT) mod_ram.$(OBJEXT) mod_ram1.$(OBJEXT) \ mod_r16.$(OBJEXT) mod_r64.$(OBJEXT) mod_cpm.$(OBJEXT) \ mod_ram8.$(OBJEXT) mod_64k.$(OBJEXT) mod_segm.$(OBJEXT) \ mod_128k.$(OBJEXT) mod_256k.$(OBJEXT) mod_512k.$(OBJEXT) \ mod_1m.$(OBJEXT) mod_4m.$(OBJEXT) mod_rom.$(OBJEXT) \ mod_urom.$(OBJEXT) mod_auto.$(OBJEXT) mod_rom1.$(OBJEXT) \ mod_romb.$(OBJEXT) mod_raf.$(OBJEXT) mod_boot.$(OBJEXT) \ mod_192k.$(OBJEXT) mod_320k.$(OBJEXT) mod_ramf.$(OBJEXT) \ mod_fdc.$(OBJEXT) mod_gdc.$(OBJEXT) mod_rtc.$(OBJEXT) \ mod_disk.$(OBJEXT) mod_4131.$(OBJEXT) mod_m052.$(OBJEXT) \ mod_list.$(OBJEXT) tape.$(OBJEXT) disk.$(OBJEXT) \ timer.$(OBJEXT) timer1.$(OBJEXT) timer3.$(OBJEXT) \ poly880.$(OBJEXT) z80.$(OBJEXT) z80_fdc.$(OBJEXT) \ wav.$(OBJEXT) sound.$(OBJEXT) sound3.$(OBJEXT) \ sound8.$(OBJEXT) $(am__objects_4) am__EXTRA_kcemu_SOURCES_DIST = mod_v24.cc mod_js.cc kcemu.rc kcemu_OBJECTS = $(am_kcemu_OBJECTS) am__DEPENDENCIES_1 = @TARGET_MINGW_TRUE@am__DEPENDENCIES_2 = ../sys/mingw/libsys_mingw.a kcemu_DEPENDENCIES = kcnet/libkcnet.a kramermc/libkramermc.a \ muglerpc/libmuglerpc.a vcs80/libvcs80.a c80/libc80.a \ ../fileio/libfileio.a ../libtape/libtape.a \ ../libdisk/libdisk.a ../libaudio/libaudio.a \ ../ui/gtk/libui_gtk.a ../ui/generic/libui_generic.a \ ../ui/libui.a prefs/libprefs.a ../libgtkex/libgtkex.a \ ../libdbg/libdbg.a ../cmd/*.o $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) $(SYSLIBS_LINUX) \ $(SYSLIBS_FREEBSD) $(GETOPTLIB) $(am__DEPENDENCIES_1) \ $(am__DEPENDENCIES_1) am_kcemu_send_OBJECTS = kcemu-send.$(OBJEXT) kcemu_send_OBJECTS = $(am_kcemu_send_OBJECTS) kcemu_send_DEPENDENCIES = $(am__DEPENDENCIES_1) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(kcemu_SOURCES) $(EXTRA_kcemu_SOURCES) \ $(kcemu_send_SOURCES) DIST_SOURCES = $(am__kcemu_SOURCES_DIST) \ $(am__EXTRA_kcemu_SOURCES_DIST) $(kcemu_send_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = $(prefix)/share/locale localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = prefs kcnet kramermc muglerpc vcs80 c80 @USE_INCLUDED_GETOPT_TRUE@GETOPTLIB = ../getopt/libgetopt.a INCLUDES = \ -I../../include AM_CPPFLAGS = \ -DKCEMU_PACKAGE=\"$(PACKAGE)\" \ -DKCEMU_DATADIR=\"$(pkgdatadir)\" \ -DKCEMU_LOCALEDIR=\"$(localedir)\" \ -DDEBUG \ $(GTK_CFLAGS) \ $(SDL_CFLAGS) LINUX_EXTRA_kcemu_SOURCES = mod_v24.cc mod_js.cc MINGW_EXTRA_kcemu_SOURCES = kcemu.rc FREEBSD_EXTRA_kcemu_SOURCES = mod_v24.cc @TARGET_FREEBSD_TRUE@EXTRA_kcemu_SOURCES = $(FREEBSD_EXTRA_kcemu_SOURCES) @TARGET_LINUX_TRUE@EXTRA_kcemu_SOURCES = $(LINUX_EXTRA_kcemu_SOURCES) @TARGET_MINGW_TRUE@EXTRA_kcemu_SOURCES = $(MINGW_EXTRA_kcemu_SOURCES) EXTRA_DIST = $(LINUX_EXTRA_kcemu_SOURCES) $(MINGW_EXTRA_kcemu_SOURCES) $(FREEBSD_EXTRA_kcemu_SOURCES) kcemu_SOURCES = \ kc.cc \ ic.cc \ ctc.cc \ ctc1.cc \ ctc3.cc \ ctc6.cc \ ctc8.cc \ ctc9.cc \ ctc_fdc.cc \ pio_dio.cc \ pio_vdip.cc \ ctc_dio.cc \ ctc_base.cc \ cb_list.cc \ daisy.cc \ keyb0.cc \ keyb1.cc \ keyb3.cc \ keyb6.cc \ keyb8.cc \ keyb9.cc \ memory.cc \ memory0.cc \ memory1.cc \ memory2.cc \ memory3.cc \ memory4.cc \ memory6.cc \ memory7.cc \ memory8.cc \ memory9.cc \ plotter.cc \ sh_mem.cc \ disk_io.cc \ gdc.cc \ vis.cc \ svg.cc \ vdip.cc \ vdip_cmd.cc \ gide.cc \ fdc.cc \ fdc0s.cc \ fdc4.cc \ fdc7.cc \ fdc9.cc \ fdc_cmd.cc \ floppy.cc \ pio.cc \ pio0.cc \ pio1.cc \ pio2.cc \ pio3.cc \ pio4.cc \ pio6.cc \ pio8.cc \ pio9.cc \ ports.cc \ ports0.cc \ ports4.cc \ ports6.cc \ module.cc \ mod_dio.cc \ mod_vdip.cc \ mod_ram.cc \ mod_ram1.cc \ mod_r16.cc \ mod_r64.cc \ mod_cpm.cc \ mod_ram8.cc \ mod_64k.cc \ mod_segm.cc \ mod_128k.cc \ mod_256k.cc \ mod_512k.cc \ mod_1m.cc \ mod_4m.cc \ mod_rom.cc \ mod_urom.cc \ mod_auto.cc \ mod_rom1.cc \ mod_romb.cc \ mod_raf.cc \ mod_boot.cc \ mod_192k.cc \ mod_320k.cc \ mod_ramf.cc \ mod_fdc.cc \ mod_gdc.cc \ mod_rtc.cc \ mod_disk.cc \ mod_4131.cc \ mod_m052.cc \ mod_list.cc \ tape.cc \ disk.cc \ timer.cc \ timer1.cc \ timer3.cc \ poly880.cc \ z80.cc \ z80_fdc.cc \ wav.cc \ sound.cc \ sound3.cc \ sound8.cc \ $(EXTRA_kcemu_SOURCES) @TARGET_LINUX_TRUE@SYSLIBS_LINUX = ../sys/linux/libsys_linux.a @TARGET_FREEBSD_TRUE@SYSLIBS_FREEBSD = ../sys/linux/libsys_linux.a @TARGET_MINGW_TRUE@SYSLIBS_MINGW = ../sys/mingw/libsys_mingw.a -lwinmm -lws2_32 kcemu_LDADD = \ kcnet/libkcnet.a \ kramermc/libkramermc.a \ muglerpc/libmuglerpc.a \ vcs80/libvcs80.a \ c80/libc80.a \ ../fileio/libfileio.a \ ../libtape/libtape.a \ ../libdisk/libdisk.a \ ../libaudio/libaudio.a \ ../ui/gtk/libui_gtk.a \ ../ui/generic/libui_generic.a \ ../ui/libui.a \ prefs/libprefs.a \ ../libgtkex/libgtkex.a \ ../libdbg/libdbg.a \ ../cmd/*.o \ $(GTK_LIBS) \ $(SDL_LIBS) \ $(SNDFILE_LIBS) \ $(AUDIOFILE_LIBS) \ $(MP3LAME_LIBS) \ $(VORBIS_LIBS) \ $(F_L_A_C_LIBS) \ $(LIBTHEORA_LIBS) \ $(XVIDCORE_LIBS) \ $(LIBDIRAC_LIBS) \ $(LIBSCHROEDINGER_LIBS) \ $(LIBAVFORMAT_LIBS) \ $(VNCSERVER_LIBS) \ $(LIBGIF_LIBS) \ $(SYSLIBS_MINGW) \ $(SYSLIBS_LINUX) \ $(SYSLIBS_FREEBSD) \ $(GETOPTLIB) \ $(INTLLIBS) \ $(Z80EX_LIBS) kcemu_send_SOURCES = \ kcemu-send.c kcemu_send_LDADD = \ -lncurses $(INTLLIBS) all: all-recursive .SUFFIXES: .SUFFIXES: .c .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/kc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/kc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): kcemu.rc: $(top_builddir)/config.status $(srcdir)/kcemu.rc.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) kcemu$(EXEEXT): $(kcemu_OBJECTS) $(kcemu_DEPENDENCIES) @rm -f kcemu$(EXEEXT) $(CXXLINK) $(kcemu_OBJECTS) $(kcemu_LDADD) $(LIBS) kcemu-send$(EXEEXT): $(kcemu_send_OBJECTS) $(kcemu_send_DEPENDENCIES) @rm -f kcemu-send$(EXEEXT) $(LINK) $(kcemu_send_OBJECTS) $(kcemu_send_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cb_list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctc1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctc3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctc6.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctc8.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctc9.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctc_base.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctc_dio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ctc_fdc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/daisy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/disk_io.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdc0s.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdc4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdc7.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdc9.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/fdc_cmd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/floppy.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gdc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gide.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kcemu-send.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyb0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyb1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyb3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyb6.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyb8.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/keyb9.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory6.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory7.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory8.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/memory9.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_128k.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_192k.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_1m.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_256k.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_320k.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_4131.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_4m.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_512k.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_64k.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_auto.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_boot.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_cpm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_dio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_disk.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_fdc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_gdc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_js.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_list.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_m052.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_r16.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_r64.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_raf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_ram.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_ram1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_ram8.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_ramf.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_rom.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_rom1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_romb.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_rtc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_segm.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_urom.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_v24.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mod_vdip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/module.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio2.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio6.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio8.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio9.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio_dio.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pio_vdip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plotter.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/poly880.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ports.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ports0.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ports4.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ports6.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sh_mem.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sound8.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/svg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/tape.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timer.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timer1.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/timer3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdip.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vdip_cmd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vis.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wav.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z80.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/z80_fdc.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-binPROGRAMS \ clean-generic clean-noinstPROGRAMS ctags ctags-recursive \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-binPROGRAMS install-data install-data-am \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags tags-recursive \ uninstall uninstall-am uninstall-binPROGRAMS # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/libaudio/0000755001050700006200000000000011412404773014567 5ustar glaubitzfbedvKCemu-0.5.1/src/libaudio/load_aud.c0000644001050700006200000001173211345001576016506 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "libaudio/libaudioP.h" #ifdef HAVE_LIBAUDIOFILE #include #define BUF_SIZE (1024) static int af_error; static char loader_name[1024]; static libaudio_loader_t *self = NULL; typedef struct audio_data { int eof; int idx; int size; int load_size; unsigned short buf[BUF_SIZE]; AFfilehandle afFile; } aud_data_t; static void loader_aud_error_func(long code, const char *str) { af_error = 1; } static int loader_aud_check(const char *filename, unsigned char *data, long size) { AFerrfunc func; AFfilehandle file; af_error = 0; func = afSetErrorHandler(loader_aud_error_func); file = afOpenFile(filename, "r", AF_NULL_FILESETUP); afSetErrorHandler(func); if (file == AF_NULL_FILEHANDLE) return 0; if (af_error != 0) return 0; afCloseFile(file); return 1; } static libaudio_prop_t * loader_aud_open_prop(const char *filename, libaudio_prop_t *prop) { int sampfmt; int sampwidth; aud_data_t *data; data = (aud_data_t *)malloc(sizeof(aud_data_t)); if (data == NULL) return NULL; data->afFile = afOpenFile(filename, "r", AF_NULL_FILESETUP); if (data->afFile == AF_NULL_FILEHANDLE) { free(data); return NULL; } /* * set the virtual sample format to 16 bit unsigned; this is * exactly the format required by libaudio_read_sample() */ afGetSampleFormat(data->afFile, AF_DEFAULT_TRACK, &sampfmt, &sampwidth); if (afSetVirtualSampleFormat(data->afFile, AF_DEFAULT_TRACK, AF_SAMPFMT_UNSIGNED, 16) != 0) { afCloseFile(data->afFile); free(data); return NULL; } prop->type = LIBAUDIO_TYPE_AUD; prop->loader = self; prop->loader_data = data; prop->sample_freq = (int)afGetRate(data->afFile, AF_DEFAULT_TRACK); prop->sample_size = sampwidth; prop->channels = afGetChannels(data->afFile, AF_DEFAULT_TRACK); data->eof = 0; data->idx = 0; data->load_size = BUF_SIZE / prop->channels; data->size = data->load_size; return prop; } static libaudio_prop_t * loader_aud_open(const char *filename) { libaudio_prop_t *prop, *ret; prop = (libaudio_prop_t *)malloc(sizeof(libaudio_prop_t)); if (prop == NULL) return NULL; ret = loader_aud_open_prop(filename, prop); if (ret == NULL) free(prop); return ret; } static void loader_aud_close(libaudio_prop_t *prop) { aud_data_t *data; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_AUD); assert(prop->loader_data != NULL); data = (aud_data_t *)prop->loader_data; afCloseFile(data->afFile); free(data); } static libaudio_prop_t * loader_aud_rewind(libaudio_prop_t *prop) { assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_AUD); assert(prop->loader_data != NULL); loader_aud_close(prop); return loader_aud_open_prop(prop->filename, prop); } static int loader_aud_read_sample(libaudio_prop_t *prop) { int c, len; aud_data_t *data; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_AUD); assert(prop->loader_data != NULL); data = (aud_data_t *)prop->loader_data; if (data->eof) return EOF; if (data->idx >= data->size) { len = afReadFrames(data->afFile, AF_DEFAULT_TRACK, data->buf, data->load_size); if (len == 0) { data->eof = 1; return EOF; } data->idx = 0; data->size = len * prop->channels; } c = ((unsigned short *)data->buf)[data->idx]; data->idx++; return c; } static const char * loader_aud_get_type(void) { return "AUDIOFILE"; } static const char * loader_aud_get_name(void) { return loader_name; } static libaudio_loader_t loader = { loader_aud_check, loader_aud_open, loader_aud_rewind, loader_aud_close, loader_aud_read_sample, loader_aud_get_type, loader_aud_get_name }; void loader_aud_init(void) { snprintf(loader_name, sizeof(loader_name), "loader for audio files supported by libaudiofile v%d.%d", LIBAUDIOFILE_MAJOR_VERSION, LIBAUDIOFILE_MINOR_VERSION); if (libaudio_register_loader(&loader)) self = &loader; } #else /* HAVE_LIBAUDIOFILE */ void loader_aud_init(void) { } #endif /* HAVE_LIBAUDIOFILE */ KCemu-0.5.1/src/libaudio/Makefile.am0000644001050700006200000000047010527416075016630 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in noinst_LIBRARIES = libaudio.a AM_CPPFLAGS = \ -DDEBUG -DLINUX INCLUDES = \ -I../../include libaudio_a_SOURCES = \ load.c \ load_oss.c \ load_als.c \ load_snd.c \ load_aud.c \ load_mp3.c \ load_ogg.c \ load_flc.c \ load_wav.c \ load_raw.c KCemu-0.5.1/src/libaudio/load_ogg.c0000644001050700006200000001035411345001576016510 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "libaudio/libaudioP.h" #ifdef HAVE_LIBVORBIS #include static char loader_name[1024]; static libaudio_loader_t *self = NULL; #define BUF_SIZE (4096) typedef struct ogg_data { int eof; int idx; int size; unsigned char buf[BUF_SIZE]; OggVorbis_File file; } ogg_data_t; static int loader_ogg_check(const char *filename, unsigned char *data, long size) { FILE *f; OggVorbis_File file; f = fopen(filename, "rb"); if (f == NULL) return 0; if (ov_test(f, &file, NULL, 0) != 0) { fclose(f); return 0; } ov_clear(&file); return 1; } static libaudio_prop_t * loader_ogg_open_prop(const char *filename, libaudio_prop_t *prop) { FILE *f; ogg_data_t *data; vorbis_info *info; data = (ogg_data_t *)malloc(sizeof(ogg_data_t)); if (data == NULL) return NULL; f = fopen(filename, "rb"); if (f == NULL) { free(data); return NULL; } if (ov_open(f, &data->file, NULL, 0) != 0) { free(data); fclose(f); return NULL; } data->eof = 0; data->idx = 0; data->size = 0; prop->type = LIBAUDIO_TYPE_OGG; prop->loader = self; prop->loader_data = data; info = ov_info(&data->file, -1); prop->sample_freq = info->rate; prop->sample_size = 16; prop->channels = info->channels; return prop; } static libaudio_prop_t * loader_ogg_open(const char *filename) { libaudio_prop_t *prop, *ret; prop = (libaudio_prop_t *)malloc(sizeof(libaudio_prop_t)); if (prop == NULL) return NULL; ret = loader_ogg_open_prop(filename, prop); if (ret == NULL) free(prop); return ret; } static void loader_ogg_close(libaudio_prop_t *prop) { ogg_data_t *data; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_OGG); assert(prop->loader_data != NULL); data = (ogg_data_t *)prop->loader_data; ov_clear(&data->file); free(data); } static libaudio_prop_t * loader_ogg_rewind(libaudio_prop_t *prop) { assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_OGG); assert(prop->loader_data != NULL); loader_ogg_close(prop); return loader_ogg_open_prop(prop->filename, prop); } static int loader_ogg_read_sample(libaudio_prop_t *prop) { int c, len; int bitstream; ogg_data_t *data; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_OGG); assert(prop->loader_data != NULL); data = (ogg_data_t *)prop->loader_data; if (data->eof) return EOF; if (data->idx >= data->size) { len = ov_read(&data->file, (char *)data->buf, BUF_SIZE, 0, 2, 1, &bitstream); if (len <= 0) { data->eof = 1; return EOF; } data->idx = 0; data->size = len; } c = 256 * data->buf[data->idx + 1] + data->buf[data->idx]; data->idx += 2; return 32768 + c; } static const char * loader_ogg_get_type(void) { return "OggVorbis"; } static const char * loader_ogg_get_name(void) { return loader_name; } static libaudio_loader_t loader = { loader_ogg_check, loader_ogg_open, loader_ogg_rewind, loader_ogg_close, loader_ogg_read_sample, loader_ogg_get_type, loader_ogg_get_name }; void loader_ogg_init(void) { snprintf(loader_name, sizeof(loader_name), "loader for OggVorbis audio files"); if (libaudio_register_loader(&loader)) self = &loader; } #else /* HAVE_LIBVORBIS */ void loader_ogg_init(void) { } #endif /* HAVE_LIBVORBIS */ KCemu-0.5.1/src/libaudio/load.c0000644001050700006200000001204411345001576015652 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include "libaudio/libaudioP.h" static libaudio_loader_t *loaders[MAX_LIBAUDIO_LOADERS]; void libaudio_init(int l) { memset(loaders, 0, sizeof(loaders)); /* * order is importend * first check for types with unique signatures * unsafe guesses come last */ if ((l & LIBAUDIO_TYPE_OSS) != 0) loader_oss_init(); if ((l & LIBAUDIO_TYPE_ALS) != 0) loader_als_init(); if ((l & LIBAUDIO_TYPE_SND) != 0) loader_snd_init(); if ((l & LIBAUDIO_TYPE_AUD) != 0) loader_aud_init(); if ((l & LIBAUDIO_TYPE_FLC) != 0) loader_flc_init(); if ((l & LIBAUDIO_TYPE_WAV) != 0) loader_wav_init(); if ((l & LIBAUDIO_TYPE_OGG) != 0) loader_ogg_init(); if ((l & LIBAUDIO_TYPE_MP3) != 0) loader_mp3_init(); if ((l & LIBAUDIO_TYPE_UNKNOWN) != 0) loader_raw_init(); /* fallback */ } int libaudio_register_loader(libaudio_loader_t *loader) { int a; for (a = 0;a < MAX_LIBAUDIO_LOADERS;a++) if (loaders[a] == NULL) { loaders[a] = loader; return 1; } return 0; } void libaudio_free_prop(libaudio_prop_t *prop) { free(prop->filename); free(prop); } libaudio_prop_t * libaudio_open(const char *filename) { FILE *f; int a; long size; unsigned char *data; struct stat stat_buf; libaudio_prop_t *retval; size = 0; data = NULL; if (filename == NULL) return NULL; if (stat(filename, &stat_buf) != 0) return NULL; if (S_ISREG(stat_buf.st_mode)) { size = 65536; if (stat_buf.st_size < size) size = stat_buf.st_size; /* prevent malloc(0) */ if (size == 0) size++; data = (unsigned char *)malloc(size); if (data == 0) return NULL; f = fopen(filename, "rb"); if (f == NULL) { free(data); return NULL; } if (fread(data, 1, size, f) != size) { free(data); return NULL; } fclose(f); } retval = NULL; for (a = 0;a < MAX_LIBAUDIO_LOADERS;a++) { if (loaders[a]) if (loaders[a]->check) { /* printf("trying %s...\n", loaders[a]->get_name()); */ if (loaders[a]->check(filename, data, size)) { /* printf("using %s.\n", loaders[a]->get_name()); */ retval = loaders[a]->open(filename); break; } } } if (data) free(data); if (retval != NULL) { retval->filename = (char *)malloc(strlen(filename) + 1); strcpy(retval->filename, filename); } return retval; } void libaudio_rewind(libaudio_prop_t *prop) { libaudio_prop_t *ret; if (prop == NULL) return; if (prop->loader == NULL) return; ret = prop->loader->rewind(prop); if (ret == NULL) libaudio_free_prop(prop); } void libaudio_close(libaudio_prop_t *prop) { if (prop == NULL) return; if (prop->loader == NULL) return; prop->loader->close(prop); libaudio_free_prop(prop); } int libaudio_read_sample(libaudio_prop_t *prop) { if (prop == NULL) return EOF; if (prop->loader == NULL) return EOF; return prop->loader->read_sample(prop); } const char * libaudio_get_type(libaudio_prop_t *prop) { if (prop == NULL) return "?"; if (prop->loader == NULL) return "?"; return prop->loader->get_type(); } const char * libaudio_get_name(libaudio_prop_t *prop) { if (prop == NULL) return "?"; if (prop->loader == NULL) return "?"; return prop->loader->get_name(); } const char * libaudio_get_filename(libaudio_prop_t *prop) { if (prop == NULL) return ""; return prop->filename; } int libaudio_get_sample_freq(libaudio_prop_t *prop) { assert(prop != NULL); return prop->sample_freq; } int libaudio_get_sample_size(libaudio_prop_t *prop) { assert(prop != NULL); return prop->sample_size; } int libaudio_get_channels(libaudio_prop_t *prop) { assert(prop != NULL); return prop->channels; } void libaudio_show_config(void) { int a; printf("available libaudio plugins:\n"); for (a = 0;a < MAX_LIBAUDIO_LOADERS;a++) { if (loaders[a]) printf(" %-10s %s\n", loaders[a]->get_type(), loaders[a]->get_name()); } } KCemu-0.5.1/src/libaudio/load_raw.c0000644001050700006200000000604111345001576016523 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "libaudio/libaudioP.h" static char loader_name[1024]; static libaudio_loader_t *self = NULL; static int loader_raw_check(const char *filename, unsigned char *data, long size) { if (data == NULL) return 0; if (size == 0) return 0; return 1; } static libaudio_prop_t * loader_raw_open_prop(const char *filename, libaudio_prop_t *prop) { FILE *f; f = fopen(filename, "rb"); if (f == NULL) return NULL; prop->type = LIBAUDIO_TYPE_UNKNOWN; prop->loader = self; prop->loader_data = f; prop->sample_freq = 44100; prop->sample_size = 8; prop->channels = 1; return prop; } static libaudio_prop_t * loader_raw_open(const char *filename) { libaudio_prop_t *prop, *ret; prop = (libaudio_prop_t *)malloc(sizeof(libaudio_prop_t)); if (prop == NULL) return NULL; ret = loader_raw_open_prop(filename, prop); if (ret == NULL) free(prop); return ret; } static void loader_raw_close(libaudio_prop_t *prop) { FILE *f; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_UNKNOWN); assert(prop->loader_data != NULL); f = (FILE *)(prop->loader_data); fclose(f); } static libaudio_prop_t * loader_raw_rewind(libaudio_prop_t *prop) { assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_UNKNOWN); assert(prop->loader_data != NULL); loader_raw_close(prop); return loader_raw_open_prop(prop->filename, prop); } static int loader_raw_read_sample(libaudio_prop_t *prop) { FILE *f; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_UNKNOWN); assert(prop->loader_data != NULL); f = (FILE *)(prop->loader_data); return fgetc(f); } static const char * loader_raw_get_type(void) { return "RAW"; } static const char * loader_raw_get_name(void) { return loader_name; } static libaudio_loader_t loader = { loader_raw_check, loader_raw_open, loader_raw_rewind, loader_raw_close, loader_raw_read_sample, loader_raw_get_type, loader_raw_get_name }; void loader_raw_init(void) { snprintf(loader_name, sizeof(loader_name), "loader for raw files (44100kHz 8bit mono samples)"); if (libaudio_register_loader(&loader)) self = &loader; } KCemu-0.5.1/src/libaudio/load_wav.c0000644001050700006200000001024111345001576016524 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include "libaudio/libaudioP.h" typedef struct wav_header { uint32_t MainChunkID; // it will be 'RIFF' uint32_t Length; uint32_t ChunkTypeID; // it will be 'WAVE' uint32_t SubChunkID; // it will be 'fmt ' uint32_t SubChunkLength; uint16_t AudioFormat; uint16_t NumChannels; uint32_t SampleFreq; uint32_t BytesPerSec; uint16_t BytesPerSample; uint16_t BitsPerSample; uint32_t DataChunkID; // it will be 'data' uint32_t DataLength; } wav_header_t; static char loader_name[1024]; static libaudio_loader_t *self = NULL; static int loader_wav_check(const char *filename, unsigned char *data, long size) { if (data == NULL) return 0; if (size < 44) return 0; if (memcmp(&data[0], "RIFF", 4) != 0) return 0; if (memcmp(&data[8], "WAVE", 4) != 0) return 0; if (memcmp(&data[12], "fmt ", 4) != 0) return 0; return 1; } static libaudio_prop_t * loader_wav_open_prop(const char *filename, libaudio_prop_t *prop) { FILE *f; wav_header_t wav_header; f = fopen(filename, "rb"); if (f == NULL) return NULL; if (fread(&wav_header, 1, sizeof(wav_header_t), f) != sizeof(wav_header_t)) return NULL; prop->type = LIBAUDIO_TYPE_WAV; prop->loader = self; prop->loader_data = f; prop->sample_freq = wav_header.SampleFreq; prop->sample_size = wav_header.BitsPerSample; prop->channels = wav_header.NumChannels; return prop; } static libaudio_prop_t * loader_wav_open(const char *filename) { libaudio_prop_t *prop, *ret; prop = (libaudio_prop_t *)malloc(sizeof(libaudio_prop_t)); if (prop == NULL) return NULL; ret = loader_wav_open_prop(filename, prop); if (ret == NULL) free(prop); return ret; } static void loader_wav_close(libaudio_prop_t *prop) { FILE *f; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_WAV); assert(prop->loader_data != NULL); f = (FILE *)(prop->loader_data); fclose(f); } static libaudio_prop_t * loader_wav_rewind(libaudio_prop_t *prop) { assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_WAV); assert(prop->loader_data != NULL); loader_wav_close(prop); return loader_wav_open_prop(prop->filename, prop); } static int loader_wav_read_sample(libaudio_prop_t *prop) { FILE *f; int c1, c2; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_WAV); assert(prop->loader_data != NULL); f = (FILE *)(prop->loader_data); c1 = fgetc(f); if (c1 == EOF) return EOF; if (prop->sample_size == 8) return 256 * c1; if (prop->sample_size == 16) { c2 = fgetc(f); if (c2 == EOF) return EOF; c1 = 256 * c2 + c1; if (c1 > 32767) c1 = c1 - 65536; return c1 + 32768; } return EOF; } static const char * loader_wav_get_type(void) { return "WAV"; } static const char * loader_wav_get_name(void) { return loader_name; } static libaudio_loader_t loader = { loader_wav_check, loader_wav_open, loader_wav_rewind, loader_wav_close, loader_wav_read_sample, loader_wav_get_type, loader_wav_get_name }; void loader_wav_init(void) { snprintf(loader_name, sizeof(loader_name), "loader for wav files"); if (libaudio_register_loader(&loader)) self = &loader; } KCemu-0.5.1/src/libaudio/load_oss.c0000644001050700006200000001023611345001576016537 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include "libaudio/libaudioP.h" #ifdef HAVE_OSS #include #include #include #include #define OSS_BUF_SIZE (1024) static char loader_name[1024]; static libaudio_loader_t *self = NULL; typedef struct oss_data { int fd; int eof; int idx; unsigned char buf[OSS_BUF_SIZE]; } oss_data_t; static int loader_oss_check(const char *filename, unsigned char *data, long size) { if (strcmp(filename, "/dev/dsp") == 0) return 1; return 0; } static libaudio_prop_t * loader_oss_open(const char *filename) { oss_data_t *data; libaudio_prop_t *prop; int speed, bits, stereo; prop = (libaudio_prop_t *)malloc(sizeof(libaudio_prop_t)); if (prop == NULL) return NULL; data = (oss_data_t *)malloc(sizeof(oss_data_t)); if (data == NULL) { free(prop); return NULL; } data->eof = 0; data->idx = 0; data->fd = open(filename, O_RDONLY); if (data->fd < 0) { free(prop); free(data); return NULL; } speed = 44100; bits = 8; stereo = 0; if (ioctl(data->fd, SNDCTL_DSP_SYNC, NULL) < 0) return NULL; if (ioctl(data->fd, SNDCTL_DSP_SPEED, &speed) < 0) return NULL; if (ioctl(data->fd, SNDCTL_DSP_SAMPLESIZE, &bits) < 0) return NULL; if (ioctl(data->fd, SNDCTL_DSP_STEREO, &stereo) < 0) return NULL; prop->type = LIBAUDIO_TYPE_OSS; prop->loader = self; prop->loader_data = data; prop->sample_freq = 44100; prop->sample_size = 8; prop->channels = 1; return prop; } static libaudio_prop_t * loader_oss_rewind(libaudio_prop_t *prop) { assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_OSS); assert(prop->loader_data != NULL); /* * can't do anything sensible here, just checking if called * on the appropriate stream... */ return prop; } static void loader_oss_close(libaudio_prop_t *prop) { oss_data_t *data; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_OSS); assert(prop->loader_data != NULL); data = (oss_data_t *)(prop->loader_data); if (data->fd >= 0) close(data->fd); free(data); } static int loader_oss_read_sample(libaudio_prop_t *prop) { int c; oss_data_t *data; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_OSS); assert(prop->loader_data != NULL); data = (oss_data_t *)(prop->loader_data); if (data->eof) return EOF; if (data->idx >= OSS_BUF_SIZE) { if (read(data->fd, data->buf, OSS_BUF_SIZE) != OSS_BUF_SIZE) { data->eof = 1; close(data->fd); data->fd = -1; return EOF; } data->idx = 0; } c = 256 * data->buf[data->idx]; data->idx++; return c; } static const char * loader_oss_get_type(void) { return "OSS"; } static const char * loader_oss_get_name(void) { return loader_name; } static libaudio_loader_t loader = { loader_oss_check, loader_oss_open, loader_oss_rewind, loader_oss_close, loader_oss_read_sample, loader_oss_get_type, loader_oss_get_name }; void loader_oss_init(void) { snprintf(loader_name, sizeof(loader_name), "loader for Open Sound System line input (/dev/dsp)"); if (libaudio_register_loader(&loader)) self = &loader; } #else /* HAVE_OSS */ void loader_oss_init(void) { } #endif /* HAVE_OSS */ KCemu-0.5.1/src/libaudio/load_flc.c0000644001050700006200000001616611345001576016507 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "libaudio/libaudioP.h" #ifdef HAVE_LIBFLAC #include static char loader_name[1024]; static libaudio_loader_t *self = NULL; typedef struct flc_data { int eof; int idx; int size; const FLAC__int32 *buf_l; const FLAC__int32 *buf_r; FLAC__FileDecoder *decoder; unsigned int sample_rate; unsigned int channels; unsigned int bits_per_sample; } flc_data_t; static int loader_flc_check(const char *filename, unsigned char *data, long size) { if (size < 4) return 0; if (data[0] != 0x66) return 0; if (data[1] != 0x4c) return 0; if (data[2] != 0x61) return 0; if (data[3] != 0x43) return 0; return 1; } static FLAC__StreamDecoderWriteStatus flac_write_callback(const FLAC__FileDecoder *decoder, const FLAC__Frame *frame, const FLAC__int32 * const buffer[], void *client_data) { flc_data_t *data = (flc_data_t *)client_data; data->size = frame->header.blocksize; data->buf_l = buffer[0]; if (data->channels >= 2) data->buf_r = buffer[1]; return FLAC__STREAM_DECODER_WRITE_STATUS_CONTINUE; } static void flac_metadata_callback(const FLAC__FileDecoder *decoder, const FLAC__StreamMetadata *metadata, void *client_data) { flc_data_t *data = (flc_data_t *)client_data; if (metadata->type != FLAC__METADATA_TYPE_STREAMINFO) return; data->sample_rate = metadata->data.stream_info.sample_rate; data->channels = metadata->data.stream_info.channels; data->bits_per_sample = metadata->data.stream_info.bits_per_sample; } static void flac_error_callback(const FLAC__FileDecoder *decoder, const FLAC__StreamDecoderErrorStatus status, void *client_data) { flc_data_t *data = (flc_data_t *)client_data; data->eof = 1; } static FLAC__bool flac_init(FLAC__FileDecoder *decoder, flc_data_t *data, const char *filename) { if (!FLAC__file_decoder_set_md5_checking(decoder, 0)) return 0; if (!FLAC__file_decoder_set_filename(decoder, filename)) return 0; if (!FLAC__file_decoder_set_client_data(decoder, data)) return 0; if (!FLAC__file_decoder_set_write_callback(decoder, flac_write_callback)) return 0; if (!FLAC__file_decoder_set_metadata_callback(decoder, flac_metadata_callback)) return 0; if (!FLAC__file_decoder_set_error_callback(decoder, flac_error_callback)) return 0; return 1; } static libaudio_prop_t * loader_flc_open_prop(const char *filename, libaudio_prop_t *prop) { flc_data_t *data; FLAC__FileDecoder *decoder; data = (flc_data_t *)malloc(sizeof(flc_data_t)); if (data == NULL) return NULL; decoder = FLAC__file_decoder_new(); if (decoder == NULL) return NULL; if (!flac_init(decoder, data, filename)) { FLAC__file_decoder_delete(decoder); free(data); return NULL; } if (FLAC__file_decoder_init(decoder) != FLAC__FILE_DECODER_OK) { FLAC__file_decoder_delete(decoder); free(data); return NULL; } /* * The metadata callback should fill the sample_rate, channels * and bits_per_sample values in our data structure. */ data->sample_rate = 0; if (!FLAC__file_decoder_process_metadata(decoder)) { FLAC__file_decoder_delete(decoder); free(data); return NULL; } if (data->sample_rate == 0) { /* * We got no stream info while processing the metadata, odd. */ FLAC__file_decoder_delete(decoder); free(data); return NULL; } data->eof = 0; data->idx = 0; data->size = 0; data->decoder = decoder; prop->type = LIBAUDIO_TYPE_FLC; prop->loader = self; prop->loader_data = data; prop->sample_freq = data->sample_rate; prop->sample_size = data->bits_per_sample; prop->channels = data->channels; return prop; } static libaudio_prop_t * loader_flc_open(const char *filename) { libaudio_prop_t *prop, *ret; prop = (libaudio_prop_t *)malloc(sizeof(libaudio_prop_t)); if (prop == NULL) return NULL; ret = loader_flc_open_prop(filename, prop); if (ret == NULL) free(prop); return ret; } static void loader_flc_close(libaudio_prop_t *prop) { flc_data_t *data; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_FLC); assert(prop->loader_data != NULL); data = (flc_data_t *)prop->loader_data; FLAC__file_decoder_delete(data->decoder); free(data); } static libaudio_prop_t * loader_flc_rewind(libaudio_prop_t *prop) { flc_data_t *data; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_FLC); assert(prop->loader_data != NULL); data = (flc_data_t *)prop->loader_data; FLAC__file_decoder_seek_absolute(data->decoder, 0); data->eof = 0; data->idx = 0; data->size = 0; return prop; } static int loader_flc_read_sample(libaudio_prop_t *prop) { int c; flc_data_t *data; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_FLC); assert(prop->loader_data != NULL); data = (flc_data_t *)prop->loader_data; if (data->eof) return EOF; if (data->idx >= data->size) { /* * Let the FLAC library process one frame of the audio data * and call the flac_write_callback() which fills the * buffer and the size variable. */ data->size = 0; FLAC__file_decoder_process_one_frame(data->decoder); if (data->size == 0) { data->eof = 1; return EOF; } data->idx = 0; if (prop->channels >= 2) data->size *= 2; } if (prop->channels >= 2) { if ((data->idx & 1) == 0) c = data->buf_l[data->idx / 2]; else c = data->buf_r[data->idx / 2]; } else c = data->buf_l[data->idx]; data->idx++; if (prop->sample_size == 8) return 256 * (128 + c); if (prop->sample_size == 16) return 32768 + c; return EOF; } static const char * loader_flc_get_type(void) { return "FLAC"; } static const char * loader_flc_get_name(void) { return loader_name; } static libaudio_loader_t loader = { loader_flc_check, loader_flc_open, loader_flc_rewind, loader_flc_close, loader_flc_read_sample, loader_flc_get_type, loader_flc_get_name }; void loader_flc_init(void) { snprintf(loader_name, sizeof(loader_name), "loader for FLAC compressed audio files"); if (libaudio_register_loader(&loader)) self = &loader; } #else /* HAVE_LIBFLAC */ void loader_flc_init(void) { } #endif /* HAVE_LIBFLAC */ KCemu-0.5.1/src/libaudio/load_mp3.c0000644001050700006200000001255711345001576016442 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "libaudio/libaudioP.h" #ifdef HAVE_LIBMP3LAME #include #define FILE_BUF_SIZE (1024) /* * FIXME: don't know how to calculate a safe amount of * FIXME: pcm buffer for the decoding routine * FIXME: 32k samples seems to be enough for now... */ #define PCM_BUF_SIZE (32 * 1024) typedef struct mp3_data { FILE *f; int eof; // 1: EOF in file, 2: EOF in decoded data int pcm_idx; int pcm_size; unsigned char f_buf[FILE_BUF_SIZE]; short pcm_l[PCM_BUF_SIZE]; short pcm_r[PCM_BUF_SIZE]; mp3data_struct mp3data; } mp3_data_t; static char loader_name[1024]; static libaudio_loader_t *self = NULL; static int loader_mp3_check(const char *filename, unsigned char *data, long size) { if (size < 2) return 0; if (data[0] != 0xff) return 0; if ((data[1] & 0xe0) != 0xe0) return 0; return 1; } static libaudio_prop_t * loader_mp3_open_prop(const char *filename, libaudio_prop_t *prop) { FILE *f; int len, ret, ok; mp3_data_t *data; data = (mp3_data_t *)malloc(sizeof(mp3_data_t)); if (data == NULL) return NULL; f = fopen(filename, "rb"); if (f == NULL) { free(data); return NULL; } ok = 0; lame_decode_init(); while (242) { len = fread(data->f_buf, 1, FILE_BUF_SIZE, f); ret = lame_decode1_headers(data->f_buf, len, data->pcm_l, data->pcm_r, &data->mp3data); if (len < FILE_BUF_SIZE) break; if (ret < 0) break; if (data->mp3data.header_parsed) { ok = 1; data->eof = 0; data->pcm_idx = 0; data->pcm_size = 2 * ret; break; } } if (!ok) { fclose(f); free(data); return NULL; } data->f = f; prop->type = LIBAUDIO_TYPE_MP3; prop->loader = self; prop->loader_data = data; prop->sample_freq = data->mp3data.samplerate; prop->sample_size = 16; prop->channels = data->mp3data.stereo; return prop; } static libaudio_prop_t * loader_mp3_open(const char *filename) { libaudio_prop_t *prop, *ret; prop = (libaudio_prop_t *)malloc(sizeof(libaudio_prop_t)); if (prop == NULL) return NULL; ret = loader_mp3_open_prop(filename, prop); if (ret == NULL) free(prop); return ret; } static void loader_mp3_close(libaudio_prop_t *prop) { mp3_data_t *data; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_MP3); assert(prop->loader_data != NULL); data = (mp3_data_t *)prop->loader_data; fclose(data->f); free(data); } static libaudio_prop_t * loader_mp3_rewind(libaudio_prop_t *prop) { assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_MP3); assert(prop->loader_data != NULL); loader_mp3_close(prop); return loader_mp3_open_prop(prop->filename, prop); } static int loader_mp3_read_sample(libaudio_prop_t *prop) { int c, len, ret; mp3_data_t *data; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_MP3); assert(prop->loader_data != NULL); data = (mp3_data_t *)prop->loader_data; if (data->pcm_idx >= data->pcm_size) { if (data->eof > 0) { data->eof = 2; return EOF; } while (data->eof == 0) { len = fread(data->f_buf, 1, FILE_BUF_SIZE, data->f); ret = lame_decode(data->f_buf, len, data->pcm_l, data->pcm_r); if (len < FILE_BUF_SIZE) data->eof = 1; if (ret > 0) { data->pcm_idx = 0; data->pcm_size = 2 * ret; break; } if (ret < 0) { data->eof = 2; return EOF; } } } if (data->pcm_idx < data->pcm_size) { if (data->pcm_idx % 1) c = data->pcm_r[data->pcm_idx / 2]; /* always 0 when mp3 file is mono */ else c = data->pcm_l[data->pcm_idx / 2]; data->pcm_idx++; if (data->mp3data.stereo == 1) /* skip second channel on mono files */ data->pcm_idx++; return c + 32768; } return EOF; } static const char * loader_mp3_get_type(void) { return "MP3"; } static const char * loader_mp3_get_name(void) { return loader_name; } static libaudio_loader_t loader = { loader_mp3_check, loader_mp3_open, loader_mp3_rewind, loader_mp3_close, loader_mp3_read_sample, loader_mp3_get_type, loader_mp3_get_name }; void loader_mp3_init(void) { snprintf(loader_name, sizeof(loader_name), "loader for mp3 files (using libmp3lame %s)", get_lame_short_version()); if (libaudio_register_loader(&loader)) self = &loader; } #else /* HAVE_LIBMP3LAME */ void loader_mp3_init(void) { } #endif /* HAVE_LIBMP3LAME */ KCemu-0.5.1/src/libaudio/load_snd.c0000644001050700006200000001267211345001576016525 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include "libaudio/libaudioP.h" #ifdef HAVE_LIBSNDFILE #include #define MAX_CHANNELS (16) static char loader_name[1024]; static libaudio_loader_t *self = NULL; typedef struct snd_data { int eof; int idx; int size; short buf[MAX_CHANNELS]; SNDFILE *sndfile; } snd_data_t; static int loader_snd_check(const char *filename, unsigned char *data, long size) { SF_INFO info; SNDFILE *sndfile; #if HAVE_LIBSNDFILE_V0 sndfile = sf_open_read(filename, &info); #else /* HAVE_LIBSNDFILE_V0 */ sndfile = sf_open(filename, SFM_READ, &info); #endif /* HAVE_LIBSNDFILE_V0 */ if (sndfile == NULL) return 0; #if HAVE_LIBSNDFILE_V0 if ((info.pcmbitwidth != 8) && (info.pcmbitwidth != 16)) return 0; #else /* HAVE_LIBSNDFILE_V0 */ switch (info.format & SF_FORMAT_SUBMASK) { case SF_FORMAT_PCM_U8: case SF_FORMAT_PCM_S8: case SF_FORMAT_PCM_16: break; default: return 0; } #endif /* HAVE_LIBSNDFILE_V0 */ if (info.channels > MAX_CHANNELS) return 0; sf_close(sndfile); return 1; } static libaudio_prop_t * loader_snd_open_prop(const char *filename, libaudio_prop_t *prop) { SF_INFO info; SNDFILE *sndfile; snd_data_t *data; data = (snd_data_t *)malloc(sizeof(snd_data_t)); if (data == NULL) return NULL; #if HAVE_LIBSNDFILE_V0 sndfile = sf_open_read(filename, &info); #else /* HAVE_LIBSNDFILE_V0 */ sndfile = sf_open(filename, SFM_READ, &info); #endif /* HAVE_LIBSNDFILE_V0 */ if (sndfile == NULL) { free(data); return NULL; } data->eof = 0; data->idx = 0; data->size = 0; data->sndfile = sndfile; prop->type = LIBAUDIO_TYPE_SND; prop->loader = self; prop->loader_data = data; prop->sample_freq = info.samplerate; #if HAVE_LIBSNDFILE_V0 prop->sample_size = info.pcmbitwidth; /* hmm, deprecated but quite useful... */ #else /* HAVE_LIBSNDFILE_V0 */ switch (info.format & SF_FORMAT_SUBMASK) { case SF_FORMAT_PCM_U8: case SF_FORMAT_PCM_S8: prop->sample_size = 8; break; case SF_FORMAT_PCM_16: prop->sample_size = 16; break; default: /* should not be reached; blocked by loader_snd_check() */ return NULL; } #endif /* HAVE_LIBSNDFILE_V0 */ prop->channels = info.channels; return prop; } static libaudio_prop_t * loader_snd_open(const char *filename) { libaudio_prop_t *prop, *ret; prop = (libaudio_prop_t *)malloc(sizeof(libaudio_prop_t)); if (prop == NULL) return NULL; ret = loader_snd_open_prop(filename, prop); if (ret == NULL) free(prop); return ret; } static void loader_snd_close(libaudio_prop_t *prop) { snd_data_t *data; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_SND); assert(prop->loader_data != NULL); data = (snd_data_t *)prop->loader_data; sf_close(data->sndfile); free(data); } static libaudio_prop_t * loader_snd_rewind(libaudio_prop_t *prop) { assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_SND); assert(prop->loader_data != NULL); loader_snd_close(prop); return loader_snd_open_prop(prop->filename, prop); } static int loader_snd_read_sample(libaudio_prop_t *prop) { int c, len; snd_data_t *data; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_SND); assert(prop->loader_data != NULL); data = (snd_data_t *)prop->loader_data; if (data->eof) return EOF; if (data->idx >= data->size) { len = sf_readf_short(data->sndfile, data->buf, 1); if (len == 0) { data->eof = 1; return EOF; } data->idx = 0; data->size = prop->channels; } c = data->buf[data->idx]; data->idx++; if (prop->sample_size == 8) return 256 * (128 + c); if (prop->sample_size == 16) return 32768 + c; return EOF; } static const char * loader_snd_get_type(void) { return "SNDFILE"; } static const char * loader_snd_get_name(void) { return loader_name; } static libaudio_loader_t loader = { loader_snd_check, loader_snd_open, loader_snd_rewind, loader_snd_close, loader_snd_read_sample, loader_snd_get_type, loader_snd_get_name }; void loader_snd_init(void) { char buffer[1024]; #if HAVE_LIBSNDFILE_V0 sf_get_lib_version(buffer, sizeof(buffer)); #else /* HAVE_LIBSNDFILE_V0 */ sf_command(NULL, SFC_GET_LIB_VERSION, buffer, sizeof(buffer)); #endif /* HAVE_LIBSNDFILE_V0 */ snprintf(loader_name, sizeof(loader_name), "loader for audio files supported by %s", buffer); if (libaudio_register_loader(&loader)) self = &loader; } #else /* HAVE_LIBSNDFILE */ void loader_snd_init(void) { } #endif /* HAVE_LIBSNDFILE */ KCemu-0.5.1/src/libaudio/load_als.c0000644001050700006200000001135511345001576016515 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "libaudio/libaudioP.h" #ifdef HAVE_LIBASOUND #include #define ALS_BUF_SIZE (1024) static char loader_name[1024]; static libaudio_loader_t *self = NULL; typedef struct als_data { int eof; int idx; snd_pcm_t *capture_handle; unsigned char buf[ALS_BUF_SIZE]; } als_data_t; static int loader_als_check(const char *filename, unsigned char *data, long size) { if (strcmp(filename, "/dev/snd") == 0) return 1; return 0; } static libaudio_prop_t * loader_als_open(const char *filename) { int err; als_data_t *data; libaudio_prop_t *prop; snd_pcm_hw_params_t *hw_params; prop = (libaudio_prop_t *)malloc(sizeof(libaudio_prop_t)); if (prop == NULL) return NULL; data = (als_data_t *)malloc(sizeof(als_data_t)); if (data == NULL) { free(prop); return NULL; } data->eof = 0; data->idx = 0; err = snd_pcm_open(&data->capture_handle, "plughw:0,0", SND_PCM_STREAM_CAPTURE, 0); if (err < 0) return NULL; err = snd_pcm_hw_params_malloc(&hw_params); if (err < 0) return NULL; err = snd_pcm_hw_params_any(data->capture_handle, hw_params); if (err < 0) return NULL; err = snd_pcm_hw_params_set_access(data->capture_handle, hw_params, SND_PCM_ACCESS_RW_INTERLEAVED); if (err < 0) return NULL; err = snd_pcm_hw_params_set_format(data->capture_handle, hw_params, SND_PCM_FORMAT_S8); if (err < 0) return NULL; err = snd_pcm_hw_params_set_rate_near(data->capture_handle, hw_params, 44100, 0); if (err < 0) return NULL; err = snd_pcm_hw_params_set_channels(data->capture_handle, hw_params, 1); if (err < 0) return NULL; err = snd_pcm_hw_params(data->capture_handle, hw_params); if (err < 0) return NULL; snd_pcm_hw_params_free(hw_params); err = snd_pcm_prepare(data->capture_handle); if (err < 0) return NULL; prop->type = LIBAUDIO_TYPE_ALS; prop->loader = self; prop->loader_data = data; prop->sample_freq = 44100; prop->sample_size = 8; prop->channels = 1; return prop; } static libaudio_prop_t * loader_als_rewind(libaudio_prop_t *prop) { assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_ALS); assert(prop->loader_data != NULL); /* * can't do anything sensible here, just checking if called * on the appropriate stream... */ return prop; } static void loader_als_close(libaudio_prop_t *prop) { als_data_t *data; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_ALS); assert(prop->loader_data != NULL); data = (als_data_t *)(prop->loader_data); snd_pcm_close(data->capture_handle); free(data); } static int loader_als_read_sample(libaudio_prop_t *prop) { int c, err; als_data_t *data; assert(prop != NULL); assert(prop->type == LIBAUDIO_TYPE_ALS); assert(prop->loader_data != NULL); data = (als_data_t *)(prop->loader_data); if (data->eof) return EOF; if (data->idx >= ALS_BUF_SIZE) { err = snd_pcm_readi(data->capture_handle, data->buf, ALS_BUF_SIZE); if (err < 0) { snd_pcm_prepare(data->capture_handle); fprintf(stderr, "audio error (%s)\n", snd_strerror(err)); } //if (snd_pcm_readi(data->capture_handle, data->buf, ALS_BUF_SIZE) != ALS_BUF_SIZE) { //data->eof = 1; //return EOF; } data->idx = 0; } c = 256 * data->buf[data->idx]; data->idx++; return c; } static const char * loader_als_get_type(void) { return "ALSA"; } static const char * loader_als_get_name(void) { return loader_name; } static libaudio_loader_t loader = { loader_als_check, loader_als_open, loader_als_rewind, loader_als_close, loader_als_read_sample, loader_als_get_type, loader_als_get_name }; void loader_als_init(void) { snprintf(loader_name, sizeof(loader_name), "loader for ALSA line input (/dev/snd)"); if (libaudio_register_loader(&loader)) self = &loader; } #else /* HAVE_LIBASOUND */ void loader_als_init(void) { } #endif /* HAVE_LIBASOUND */ KCemu-0.5.1/src/libaudio/Makefile.in0000644001050700006200000004227711412404773016650 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/libaudio DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libaudio_a_AR = $(AR) $(ARFLAGS) libaudio_a_LIBADD = am_libaudio_a_OBJECTS = load.$(OBJEXT) load_oss.$(OBJEXT) \ load_als.$(OBJEXT) load_snd.$(OBJEXT) load_aud.$(OBJEXT) \ load_mp3.$(OBJEXT) load_ogg.$(OBJEXT) load_flc.$(OBJEXT) \ load_wav.$(OBJEXT) load_raw.$(OBJEXT) libaudio_a_OBJECTS = $(am_libaudio_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libaudio_a_SOURCES) DIST_SOURCES = $(libaudio_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libaudio.a AM_CPPFLAGS = \ -DDEBUG -DLINUX INCLUDES = \ -I../../include libaudio_a_SOURCES = \ load.c \ load_oss.c \ load_als.c \ load_snd.c \ load_aud.c \ load_mp3.c \ load_ogg.c \ load_flc.c \ load_wav.c \ load_raw.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libaudio/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libaudio/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libaudio.a: $(libaudio_a_OBJECTS) $(libaudio_a_DEPENDENCIES) -rm -f libaudio.a $(libaudio_a_AR) libaudio.a $(libaudio_a_OBJECTS) $(libaudio_a_LIBADD) $(RANLIB) libaudio.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_als.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_aud.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_flc.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_mp3.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_ogg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_oss.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_raw.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_snd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load_wav.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/getopt/0000755001050700006200000000000011412404772014300 5ustar glaubitzfbedvKCemu-0.5.1/src/getopt/Makefile.am0000644001050700006200000000026010527416075016337 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in noinst_LIBRARIES = libgetopt.a INCLUDES = \ -I../../include/getopt libgetopt_a_SOURCES = \ getopt.c \ getopt1.c KCemu-0.5.1/src/getopt/getopt1.c0000644001050700006200000001070410527416075016036 0ustar glaubitzfbedv/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987,88,89,90,91,92,93,94,96,97 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H #include #endif #include "getopt.h" #if !defined (__STDC__) || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const #define const #endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2 #include #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION #define ELIDE_CODE #endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ #include #endif #ifndef NULL #define NULL 0 #endif int getopt_long (argc, argv, options, long_options, opt_index) int argc; char *const *argv; const char *options; const struct option *long_options; int *opt_index; { return _getopt_internal (argc, argv, options, long_options, opt_index, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (argc, argv, options, long_options, opt_index) int argc; char *const *argv; const char *options; const struct option *long_options; int *opt_index; { return _getopt_internal (argc, argv, options, long_options, opt_index, 1); } #endif /* Not ELIDE_CODE. */ #ifdef TEST #include int main (argc, argv) int argc; char **argv; { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case 'd': printf ("option d with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ KCemu-0.5.1/src/getopt/getopt.c0000644001050700006200000007266310527416075015771 0ustar glaubitzfbedv/* Getopt for GNU. NOTE: getopt is now part of the C library, so if you don't know what "Keep this file name-space clean" means, talk to roland@gnu.ai.mit.edu before changing it! Copyright (C) 1987, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with the GNU C Library; see the file COPYING.LIB. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /* This tells Alpha OSF/1 not to define a getopt prototype in . Ditto for AIX 3.2 and . */ #ifndef _NO_PROTO #define _NO_PROTO #endif #ifdef HAVE_CONFIG_H #include #endif #if !defined (__STDC__) || !__STDC__ /* This is a separate conditional since some stdc systems reject `defined (const)'. */ #ifndef const #define const #endif #endif #include /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand `configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #define GETOPT_INTERFACE_VERSION 2 #if !defined (_LIBC) && defined (__GLIBC__) && __GLIBC__ >= 2 #include #if _GNU_GETOPT_INTERFACE_VERSION == GETOPT_INTERFACE_VERSION #define ELIDE_CODE #endif #endif #ifndef ELIDE_CODE /* This needs to come after some library #include to get __GNU_LIBRARY__ defined. */ #ifdef __GNU_LIBRARY__ /* Don't include stdlib.h for non-GNU C libraries because some of them contain conflicting prototypes for getopt. */ #include #include #endif /* GNU C library. */ #ifdef VMS #include #if HAVE_STRING_H - 0 #include #endif #endif #if defined (WIN32) && !defined (__CYGWIN32__) /* It's not Unix, really. See? Capital letters. */ #include #define getpid() GetCurrentProcessId() #endif #ifndef _ /* This is for other GNU distributions with internationalized messages. When compiling libc, the _ macro is predefined. */ #ifdef HAVE_LIBINTL_H # include # define _(msgid) gettext (msgid) #else # define _(msgid) (msgid) #endif #endif /* This version of `getopt' appears to the caller like standard Unix `getopt' but it behaves differently for the user, since it allows the user to intersperse the options with the other arguments. As `getopt' works, it permutes the elements of ARGV so that, when it is done, all the options precede everything else. Thus all application programs are extended to handle flexible argument order. Setting the environment variable POSIXLY_CORRECT disables permutation. Then the behavior is completely standard. GNU application programs can use a third alternative mode in which they can distinguish the relative order of options and other arguments. */ #include "getopt.h" /* For communication from `getopt' to the caller. When `getopt' finds an option that takes an argument, the argument value is returned here. Also, when `ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg = NULL; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to `getopt'. On entry to `getopt', zero means this is the first call; initialize. When `getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, `optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Formerly, initialization of getopt depended on optind==0, which causes problems with re-calling getopt as programs generally don't know that. */ int __getopt_initialized = 0; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ static char *nextchar; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Describe how to deal with options that follow non-option ARGV-elements. If the caller did not specify anything, the default is REQUIRE_ORDER if the environment variable POSIXLY_CORRECT is defined, PERMUTE otherwise. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what Unix does. This mode of operation is selected by either setting the environment variable POSIXLY_CORRECT, or using `+' as the first character of the list of option characters. PERMUTE is the default. We permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. Using `-' as the first character of the list of option characters selects this mode of operation. The special argument `--' forces an end of option-scanning regardless of the value of `ordering'. In the case of RETURN_IN_ORDER, only `--' can cause `getopt' to return -1 with `optind' != ARGC. */ static enum { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER } ordering; /* Value of POSIXLY_CORRECT environment variable. */ static char *posixly_correct; #ifdef __GNU_LIBRARY__ /* We want to avoid inclusion of string.h with non-GNU libraries because there are many ways it can cause trouble. On some systems, it contains special magic macros that don't work in GCC. */ #include #define my_index strchr #else /* Avoid depending on library functions or files whose names are inconsistent. */ char *getenv (); static char * my_index (str, chr) const char *str; int chr; { while (*str) { if (*str == chr) return (char *) str; str++; } return 0; } /* If using GCC, we can safely declare strlen this way. If not using GCC, it is ok not to declare it. */ #ifdef __GNUC__ /* Note that Motorola Delta 68k R3V7 comes with GCC but not stddef.h. That was relevant to code that was here before. */ #if !defined (__STDC__) || !__STDC__ /* gcc with -traditional declares the built-in strlen to return int, and has done so at least since version 2.4.5. -- rms. */ extern int strlen (const char *); #endif /* not __STDC__ */ #endif /* __GNUC__ */ #endif /* not __GNU_LIBRARY__ */ /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. `first_nonopt' is the index in ARGV of the first of them; `last_nonopt' is the index after the last of them. */ static int first_nonopt; static int last_nonopt; #ifdef _LIBC /* Bash 2.0 gives us an environment variable containing flags indicating ARGV elements that should not be considered arguments. */ /* Defined in getopt_init.c */ extern char *__getopt_nonoption_flags; static int nonoption_flags_max_len; static int nonoption_flags_len; static int original_argc; static char *const *original_argv; extern pid_t __libc_pid; /* Make sure the environment variable bash 2.0 puts in the environment is valid for the getopt call we must make sure that the ARGV passed to getopt is that one passed to the process. */ static void __attribute__ ((unused)) store_args_and_env (int argc, char *const *argv) { /* XXX This is no good solution. We should rather copy the args so that we can compare them later. But we must not use malloc(3). */ original_argc = argc; original_argv = argv; } text_set_element (__libc_subinit, store_args_and_env); # define SWAP_FLAGS(ch1, ch2) \ if (nonoption_flags_len > 0) \ { \ char __tmp = __getopt_nonoption_flags[ch1]; \ __getopt_nonoption_flags[ch1] = __getopt_nonoption_flags[ch2]; \ __getopt_nonoption_flags[ch2] = __tmp; \ } #else /* !_LIBC */ # define SWAP_FLAGS(ch1, ch2) #endif /* _LIBC */ /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. `first_nonopt' and `last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ #if defined (__STDC__) && __STDC__ static void exchange (char **); #endif static void exchange (argv) char **argv; { int bottom = first_nonopt; int middle = last_nonopt; int top = optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ #ifdef _LIBC /* First make sure the handling of the `__getopt_nonoption_flags' string can work normally. Our top argument must be in the range of the string. */ if (nonoption_flags_len > 0 && top >= nonoption_flags_max_len) { /* We must extend the array. The user plays games with us and presents new arguments. */ char *new_str = malloc (top + 1); if (new_str == NULL) nonoption_flags_len = nonoption_flags_max_len = 0; else { memcpy (new_str, __getopt_nonoption_flags, nonoption_flags_max_len); memset (&new_str[nonoption_flags_max_len], '\0', top + 1 - nonoption_flags_max_len); nonoption_flags_max_len = top + 1; __getopt_nonoption_flags = new_str; } } #endif while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; register int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; SWAP_FLAGS (bottom + i, top - (middle - bottom) + i); } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; register int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; SWAP_FLAGS (bottom + i, middle + i); } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ first_nonopt += (optind - last_nonopt); last_nonopt = optind; } /* Initialize the internal data when the first call is made. */ #if defined (__STDC__) && __STDC__ static const char *_getopt_initialize (int, char *const *, const char *); #endif static const char * _getopt_initialize (argc, argv, optstring) int argc; char *const *argv; const char *optstring; { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ first_nonopt = last_nonopt = optind; nextchar = NULL; posixly_correct = getenv ("POSIXLY_CORRECT"); /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct != NULL) ordering = REQUIRE_ORDER; else ordering = PERMUTE; #ifdef _LIBC if (posixly_correct == NULL && argc == original_argc && argv == original_argv) { if (nonoption_flags_max_len == 0) { if (__getopt_nonoption_flags == NULL || __getopt_nonoption_flags[0] == '\0') nonoption_flags_max_len = -1; else { const char *orig_str = __getopt_nonoption_flags; int len = nonoption_flags_max_len = strlen (orig_str); if (nonoption_flags_max_len < argc) nonoption_flags_max_len = argc; __getopt_nonoption_flags = (char *) malloc (nonoption_flags_max_len); if (__getopt_nonoption_flags == NULL) nonoption_flags_max_len = -1; else { memcpy (__getopt_nonoption_flags, orig_str, len); memset (&__getopt_nonoption_flags[len], '\0', nonoption_flags_max_len - len); } } } nonoption_flags_len = nonoption_flags_max_len; } else nonoption_flags_len = 0; #endif return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If `getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If `getopt' finds another option character, it returns that character, updating `optind' and `nextchar' so that the next call to `getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, `getopt' returns -1. Then `optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set `opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in `optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in `optarg', otherwise `optarg' is set to zero. If OPTSTRING starts with `-' or `+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with `--' instead of `-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a `=', or else the in next ARGV-element. When `getopt' finds a long-named option, it returns 0 if that option's `flag' field is nonzero, the value of the option's `val' field if the `flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of `struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal (argc, argv, optstring, longopts, longind, long_only) int argc; char *const *argv; const char *optstring; const struct option *longopts; int *longind; int long_only; { optarg = NULL; if (optind == 0 || !__getopt_initialized) { if (optind == 0) optind = 1; /* Don't scan ARGV[0], the program name. */ optstring = _getopt_initialize (argc, argv, optstring); __getopt_initialized = 1; } /* Test whether ARGV[optind] points to a non-option argument. Either it does not have option syntax, or there is an environment flag from the shell indicating it is not an option. The later information is only used when the used in the GNU libc. */ #ifdef _LIBC #define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0' \ || (optind < nonoption_flags_len \ && __getopt_nonoption_flags[optind] == '1')) #else #define NONOPTION_P (argv[optind][0] != '-' || argv[optind][1] == '\0') #endif if (nextchar == NULL || *nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (last_nonopt > optind) last_nonopt = optind; if (first_nonopt > optind) first_nonopt = optind; if (ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (last_nonopt != optind) first_nonopt = optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (optind < argc && NONOPTION_P) optind++; last_nonopt = optind; } /* The special ARGV-element `--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (optind != argc && !strcmp (argv[optind], "--")) { optind++; if (first_nonopt != last_nonopt && last_nonopt != optind) exchange ((char **) argv); else if (first_nonopt == last_nonopt) first_nonopt = optind; last_nonopt = argc; optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (first_nonopt != last_nonopt) optind = first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (ordering == REQUIRE_ORDER) return -1; optarg = argv[optind++]; return 1; } /* We have found another option-ARGV-element. Skip the initial punctuation. */ nextchar = (argv[optind] + 1 + (longopts != NULL && argv[optind][1] == '-')); } /* Decode the current option-ARGV-element. */ /* Check whether the ARGV-element is a long option. If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (longopts != NULL && (argv[optind][1] == '-' || (long_only && (argv[optind][2] || !my_index (optstring, argv[optind][1]))))) { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = -1; int option_index; for (nameend = nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == (unsigned int) strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (opterr) fprintf (stderr, _("%s: option `%s' is ambiguous\n"), argv[0], argv[optind]); nextchar += strlen (nextchar); optind++; optopt = 0; return '?'; } if (pfound != NULL) { option_index = indfound; optind++; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (opterr) if (argv[optind - 1][1] == '-') /* --option */ fprintf (stderr, _("%s: option `--%s' doesn't allow an argument\n"), argv[0], pfound->name); else /* +option or -option */ fprintf (stderr, _("%s: option `%c%s' doesn't allow an argument\n"), argv[0], argv[optind - 1][0], pfound->name); nextchar += strlen (nextchar); optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (opterr) fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); nextchar += strlen (nextchar); optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. Otherwise interpret it as a short option. */ if (!long_only || argv[optind][1] == '-' || my_index (optstring, *nextchar) == NULL) { if (opterr) { if (argv[optind][1] == '-') /* --option */ fprintf (stderr, _("%s: unrecognized option `--%s'\n"), argv[0], nextchar); else /* +option or -option */ fprintf (stderr, _("%s: unrecognized option `%c%s'\n"), argv[0], argv[optind][0], nextchar); } nextchar = (char *) ""; optind++; optopt = 0; return '?'; } } /* Look at and handle the next short option-character. */ { char c = *nextchar++; char *temp = my_index (optstring, c); /* Increment `optind' when we start to process its last character. */ if (*nextchar == '\0') ++optind; if (temp == NULL || c == ':') { if (opterr) { if (posixly_correct) /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: illegal option -- %c\n"), argv[0], c); else fprintf (stderr, _("%s: invalid option -- %c\n"), argv[0], c); } optopt = c; return '?'; } /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';') { char *nameend; const struct option *p; const struct option *pfound = NULL; int exact = 0; int ambig = 0; int indfound = 0; int option_index; /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (opterr) { /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; /* optarg is now the argument, see if it's in the table of longopts. */ for (nextchar = nameend = optarg; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; /* Test all long options for either exact match or abbreviated matches. */ for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, nextchar, nameend - nextchar)) { if ((unsigned int) (nameend - nextchar) == strlen (p->name)) { /* Exact match found. */ pfound = p; indfound = option_index; exact = 1; break; } else if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else /* Second or later nonexact match found. */ ambig = 1; } if (ambig && !exact) { if (opterr) fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"), argv[0], argv[optind]); nextchar += strlen (nextchar); optind++; return '?'; } if (pfound != NULL) { option_index = indfound; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) optarg = nameend + 1; else { if (opterr) fprintf (stderr, _("\ %s: option `-W %s' doesn't allow an argument\n"), argv[0], pfound->name); nextchar += strlen (nextchar); return '?'; } } else if (pfound->has_arg == 1) { if (optind < argc) optarg = argv[optind++]; else { if (opterr) fprintf (stderr, _("%s: option `%s' requires an argument\n"), argv[0], argv[optind - 1]); nextchar += strlen (nextchar); return optstring[0] == ':' ? ':' : '?'; } } nextchar += strlen (nextchar); if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } nextchar = NULL; return 'W'; /* Let the application handle it. */ } if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*nextchar != '\0') { optarg = nextchar; optind++; } else optarg = NULL; nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*nextchar != '\0') { optarg = nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ optind++; } else if (optind == argc) { if (opterr) { /* 1003.2 specifies the format of this message. */ fprintf (stderr, _("%s: option requires an argument -- %c\n"), argv[0], c); } optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented `optind' once; increment it again when taking next ARGV-elt as argument. */ optarg = argv[optind++]; nextchar = NULL; } } return c; } } int getopt (argc, argv, optstring) int argc; char *const *argv; const char *optstring; { return _getopt_internal (argc, argv, optstring, (const struct option *) 0, (int *) 0, 0); } #endif /* Not ELIDE_CODE. */ #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of `getopt'. */ int main (argc, argv) int argc; char **argv; { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value `%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ KCemu-0.5.1/src/getopt/Makefile.in0000644001050700006200000004054211412404772016352 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/getopt DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libgetopt_a_AR = $(AR) $(ARFLAGS) libgetopt_a_LIBADD = am_libgetopt_a_OBJECTS = getopt.$(OBJEXT) getopt1.$(OBJEXT) libgetopt_a_OBJECTS = $(am_libgetopt_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libgetopt_a_SOURCES) DIST_SOURCES = $(libgetopt_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libgetopt.a INCLUDES = \ -I../../include/getopt libgetopt_a_SOURCES = \ getopt.c \ getopt1.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/getopt/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/getopt/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libgetopt.a: $(libgetopt_a_OBJECTS) $(libgetopt_a_DEPENDENCIES) -rm -f libgetopt.a $(libgetopt_a_AR) libgetopt.a $(libgetopt_a_OBJECTS) $(libgetopt_a_LIBADD) $(RANLIB) libgetopt.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getopt1.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/libtape/0000755001050700006200000000000011412404773014417 5ustar glaubitzfbedvKCemu-0.5.1/src/libtape/kct.cc0000644001050700006200000005712511345001576015520 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include "kc/memstream.h" #include "libtape/kct.h" #include "libdbg/dbg.h" #define CHECK_HEAD(buffer, byte) \ (((buffer)[0] & 0xff) == (byte) && \ ((buffer)[1] & 0xff) == (byte) && \ ((buffer)[2] & 0xff) == (byte)) using namespace std; const unsigned short KCTFile::KCT_VERSION = __KCT_VERSION__; const unsigned long KCTFile::BLOCK_SIZE = 256; const unsigned long KCTFile::HEADER_OFFSET = 0; const unsigned long KCTFile::BAM_OFFSET = 256; const unsigned long KCTFile::DIR_BLOCKS = KCT_DIR_BLOCKS; const unsigned long KCTFile::DIR_BLOCK1_OFFSET = 512; const unsigned long KCTFile::DIRBLOCK_OFFSET_MASK = 0xffffff00; const unsigned long KCTFile::DIRBLOCK_INDEX_MASK = 0x000000ff; const unsigned long KCTFile::DIRBLOCK_MAGIC = 0x6564434b; static ostream& cout_write(int width, char fill, ios::fmtflags justify) { cout.width(width); cout.fill(fill); cout.setf(justify, ios::left | ios::right | ios::internal); return cout; } KCTDir::KCTDir(void) { } KCTDir::~KCTDir(void) { clear(); } void KCTDir::clear(void) { for (iterator it = begin();it != end();it++) delete *it; erase(begin(), end()); } void KCTDir::add(kct_dirent_t *dirent) { insert(end(), dirent); } KCTFile::KCTFile(void) { _f = 0; } KCTFile::~KCTFile(void) { close(); } const char * KCTFile::type_name(kct_file_type_t type) { switch (type) { case KCT_TYPE_COM: return "COM"; case KCT_TYPE_BAS: return "BASIC"; case KCT_TYPE_DATA: return "DATA"; case KCT_TYPE_LIST: return "LIST"; case KCT_TYPE_BAS_P: return "BASIC*"; case KCT_TYPE_BIN: return "BIN"; case KCT_TYPE_BASICODE: return "BASICODE"; } return "???"; } /* * HEADER functions */ bool KCTFile::header_read(kct_header_t &header, unsigned long offset) { _f->seekg(offset); if (_f->fail()) { //cerr << "KCTFile::header_read(): seek error" << endl; return false; } _f->read((char *)&header, sizeof(kct_header_t)); if (_f->fail()) { //cerr << "KCTFile::header_read(): read error" << endl; return false; } if (strcmp("KCemu tape file\032", header.id) != 0) return false; if (header.version != KCT_VERSION) { cerr << "Warning: tape version mismatch!" << endl << " expected v" << KCT_VERSION_MAJOR(KCT_VERSION) << "." << KCT_VERSION_MINOR(KCT_VERSION) << " and got v" << KCT_VERSION_MAJOR(header.version) << "." << KCT_VERSION_MINOR(header.version) << endl; } return true; } void KCTFile::header_write(kct_header_t &header, unsigned long offset) { _f->seekp(offset); if (_f->fail()) { cerr << "KCTFile::header_write(): seek error" << endl; exit(1); } _f->write((char *)&header, sizeof(kct_header_t)); if (_f->fail()) { cerr << "KCTFile::header_write(): write error" << endl; exit(1); } } /* * BAM functions */ void KCTFile::bam_clear(kct_bam_t &bam) { memset(bam, 0, sizeof(kct_bam_t)); } bool KCTFile::bam_block_available(kct_bam_t &bam, long block) { long a = block / 8; long b = block % 8; if (bam[a] & (128 >> b)) return false; return true; } void KCTFile::bam_block_free(kct_bam_t &bam, long block) { long a = block / 8; long b = block % 8; bam[a] &= ~(128 >> b); } void KCTFile::bam_block_allocate(kct_bam_t &bam, long block) { long a = block / 8; long b = block % 8; bam[a] |= (128 >> b); } unsigned long KCTFile::bam_block_find_free(kct_bam_t &bam) { unsigned int a; for (a = 0;a < 8 * sizeof(kct_bam_t);a++) { if (bam_block_available(bam, a)) { bam_block_allocate(bam, a); return a * 256; } } return 0; } void KCTFile::bam_read(kct_bam_t &bam, unsigned long offset) { _f->seekg(offset); if (_f->fail()) { cerr << "KCTFile::bam_read(): seek error" << endl; exit(1); } _f->read((char *)bam, sizeof(kct_bam_t)); if (_f->fail()) { cerr << "KCTFile::bam_read(): read error" << endl; exit(1); } } void KCTFile::bam_write(kct_bam_t &bam, unsigned long offset) { _f->seekp(offset); if (_f->fail()) { cerr << "KCTFile::bam_write(): seek error" << endl; exit(1); } _f->write((char *)bam, sizeof(kct_bam_t)); if (_f->fail()) { cerr << "KCTFile::bam_write(): write error" << endl; exit(1); } } /* * DIRENT functions */ kct_error_t KCTFile::dirblock_clear(kct_dirblock_t &dirblock) { memset(dirblock, 0, sizeof(kct_dirblock_t)); dirblock[0].magic = DIRBLOCK_MAGIC; dirblock[1].magic = DIRBLOCK_MAGIC; dirblock[2].magic = DIRBLOCK_MAGIC; dirblock[3].magic = DIRBLOCK_MAGIC; return KCT_OK; } kct_error_t KCTFile::dirblock_read(kct_dirblock_t &dirblock, unsigned long offset) { unsigned long o = offset & DIRBLOCK_OFFSET_MASK; _f->seekg(o); if (_f->fail()) { cerr << "KCTFile::dirblock_read(): seek error" << endl; return KCT_ERROR_IO; } _f->read((char *)dirblock, sizeof(kct_dirblock_t)); if (_f->fail()) { cerr << "KCTFile::dirblock_read(): read error" << endl; return KCT_ERROR_IO; } if ((dirblock[0].magic != DIRBLOCK_MAGIC) || (dirblock[1].magic != DIRBLOCK_MAGIC) || (dirblock[2].magic != DIRBLOCK_MAGIC) || (dirblock[3].magic != DIRBLOCK_MAGIC)) { cerr << "KCTFile::dirblock_read(): wrong magic" << endl; return KCT_ERROR_IO; } return KCT_OK; } kct_error_t KCTFile::dirblock_write(kct_dirblock_t &dirblock, unsigned long offset) { unsigned long o = offset & DIRBLOCK_OFFSET_MASK; _f->seekp(o); if (_f->fail()) { cerr << "KCTFile::dirblock_write(): seek error" << endl; return KCT_ERROR_IO; } _f->write((char *)dirblock, sizeof(kct_dirblock_t)); if (_f->fail()) { cerr << "KCTFile::dirblock_write(): write error" << endl; return KCT_ERROR_IO; } return KCT_OK; } kct_error_t KCTFile::dirent_allocate(const char *filename, unsigned short load, unsigned short start, unsigned long len, unsigned long clen, unsigned long crc, unsigned long *offset, kct_file_type_t type, kct_machine_type_t machine) { int idx, ent; unsigned int a; unsigned long o; unsigned long pos; kct_error_t ret; idx = -1; for (a = 0;a < DIR_BLOCKS;a++) { if ((_header.offset[a] & 0x0f) != 0x0f) { idx = a; break; } } if (idx == -1) return KCT_ERROR_NOMEM; o = _header.offset[idx]; if (o == 0) { ret = dirblock_clear(_dirblock); if (ret != KCT_OK) return ret; _f->seekp(0, ios::end); pos = _f->tellp(); if ((pos % 256) != 0) { cerr << "warning: format error" << endl; } pos = (pos + 255) & DIRBLOCK_OFFSET_MASK; ent = 0; o = *offset; *offset = bam_block_find_free(_bam); if (*offset == 0) return KCT_ERROR_NOMEM; _header.offset[idx] = o | 1; bam_write(_bam, BAM_OFFSET); } else { if ((o & 1) == 0) ent = 0; else if ((o & 2) == 0) ent = 1; else if ((o & 4) == 0) ent = 2; else if ((o & 8) == 0) ent = 3; //o &= DIRBLOCK_OFFSET_MASK; _header.offset[idx] |= (1 << ent); ret = dirblock_read(_dirblock, o); if (ret != KCT_OK) return ret; } header_write(_header, HEADER_OFFSET); _dirblock[ent].magic = DIRBLOCK_MAGIC; _dirblock[ent].file_crc = crc; _dirblock[ent].compressed_size = clen; _dirblock[ent].uncompressed_size = len; _dirblock[ent].offset = *offset; _dirblock[ent].load_addr = load; _dirblock[ent].start_addr = start; _dirblock[ent].type = type; _dirblock[ent].machine = machine; strncpy(_dirblock[ent].name, filename, KCT_NAME_LENGTH); _dirblock[ent].name[KCT_NAME_LENGTH] = '\0'; return dirblock_write(_dirblock, o); } kct_error_t KCTFile::create(const char *filename) { close(); if (access(filename, F_OK) == 0) return KCT_ERROR_EXIST; /* * create file; fails with gcc-3.2 when including ios::in :-( */ _f = new fstream(filename, ios::out | ios::binary | ios::trunc); if (_f->fail()) { delete _f; _f = 0; return KCT_ERROR_IO; } _f->close(); /* * reopen with in/out */ _f = new fstream(filename, ios::in | ios::out | ios::binary); if (_f->fail()) { delete _f; _f = 0; return KCT_ERROR_IO; } memset(&_header, 0, sizeof(kct_header_t)); strcpy(_header.id, "KCemu tape file\032"); _header.version = KCT_VERSION; _f->write((char *)&_header, sizeof(_header)); if (_f->fail()) { /* cerr << "write error (header)" << endl; */ return KCT_ERROR_IO; } bam_clear(_bam); bam_block_allocate(_bam, 0); /* header */ bam_block_allocate(_bam, 1); /* the bam itself */ _f->write((char *)&_bam, sizeof(kct_bam_t)); if (_f->fail()) { /* cerr << "write error (bam)" << endl; */ return KCT_ERROR_IO; } return KCT_OK; } /* * return values: KCT_ERROR_NOENT * KCT_ERROR_IO * KCT_OK */ kct_error_t KCTFile::open(const char *filename) { close(); if (access(filename, R_OK | W_OK) == 0) { _readonly = false; _f = new fstream(filename, ios::in | ios::out | ios::binary); } else if (access(filename, R_OK) == 0) { _readonly = true; _f = new fstream(filename, ios::in | ios::binary); } else { return KCT_ERROR_NOENT; } if (_f->fail()) return KCT_ERROR_NOENT; if (header_read(_header, HEADER_OFFSET) == 0) return KCT_ERROR_IO; bam_read(_bam, BAM_OFFSET); if (_readonly) return KCT_OK_READONLY; return KCT_OK; } bool KCTFile::is_readonly(void) { return _readonly; } kct_error_t KCTFile::close(void) { if (_f != 0) { _f->close(); delete _f; } _f = 0; return KCT_OK; } void KCTFile::list(void) { int com; char *type; float ratio; unsigned long count, c_total, u_total; count = 0; c_total = 0; u_total = 0; cout << "--------------------------------------------------------------------------" << endl << "Filename type load start compr. uncompr." << endl << " addr addr size size" << endl << "--------------------------------------------------------------------------" << endl; for (KCTDir::iterator it = _dir.begin();it != _dir.end();it++) { com = 0; switch ((*it)->type) { case KCT_TYPE_COM: type = "COM"; com = 1; break; case KCT_TYPE_DATA: type = "DATA"; break; case KCT_TYPE_LIST: type = "LIST"; break; case KCT_TYPE_BAS: type = "BAS"; break; case KCT_TYPE_BAS_P: type = "PBAS"; break; case KCT_TYPE_BIN: type = "BIN"; break; case KCT_TYPE_BASICODE: type = "BAC"; break; default: type = "???"; break; } cout_write(32, ' ', ios::left) << (*it)->name << " "; if (com && ((*it)->start_addr == 0xffff)) { cout_write( 5, ' ', ios::left) << type << " 0x"; cout_write( 4, '0', ios::right) << hex << (*it)->load_addr << " - 0x"; cout_write( 8, '0', ios::right) << hex << (*it)->compressed_size << " 0x"; cout_write( 8, '0', ios::right) << hex << (*it)->uncompressed_size << endl; } else if (com) { cout_write( 5, ' ', ios::left) << type << " 0x"; cout_write( 4, '0', ios::right) << hex << (*it)->load_addr << " 0x"; cout_write( 4, '0', ios::right) << hex << (*it)->start_addr << " 0x"; cout_write( 8, '0', ios::right) << hex << (*it)->compressed_size << " 0x"; cout_write( 8, '0', ios::right) << hex << (*it)->uncompressed_size << endl; } else { cout_write( 5, ' ', ios::left) << type << " - - 0x"; cout_write( 8, '0', ios::right) << hex << (*it)->compressed_size << " 0x"; cout_write( 8, '0', ios::right) << hex << (*it)->uncompressed_size << endl; } count++; c_total += (*it)->compressed_size; u_total += (*it)->uncompressed_size; } ratio = 0; if (u_total != 0) ratio = (100.0 * c_total) / u_total; cout << "--------------------------------------------------------------------------" << endl << "files: " << dec << count << ", compressed size: " << c_total << ", uncompressed size: " << u_total << ", ratio: " << setprecision(3) << ratio << "%" << endl << "--------------------------------------------------------------------------" << endl; } KCTDir * KCTFile::readdir(void) { unsigned int a, b; kct_dirent_t *dirent; _dir.clear(); for (a = 0;a < DIR_BLOCKS;a++) { if (_header.offset[a] == 0) continue; dirblock_read(_dirblock, _header.offset[a]); for (b = 0;b < 4;b++) { if (_header.offset[a] & (1 << b)) { dirent = new kct_dirent_t(); memcpy(dirent, &_dirblock[b], sizeof(kct_dirent_t)); _dir.add(dirent); } } } return &_dir; } int KCTFile::translate_index(int idx) { int _idx; unsigned int a, b; _idx = 0; for (a = 0;a < DIR_BLOCKS;a++) { for (b = 0;b < 4;b++) { if (_header.offset[a] & (1 << b)) idx--; if (idx < 0) return _idx; _idx++; } } return -1; } istream * KCTFile::read(int idx, kct_file_props_t *props) { int ret; unsigned long csize, usize; unsigned long offset; kct_data_t data; unsigned char *cbuf, *ubuf, *ptr; idx = translate_index(idx); offset = _header.offset[idx / 4]; dirblock_read(_dirblock, offset); idx %= 4; csize = _dirblock[idx].compressed_size; cbuf = new unsigned char[csize + 256]; ptr = cbuf; offset = _dirblock[idx].offset; while (offset != 0) { _f->seekg(offset); _f->read((char *)&data, BLOCK_SIZE); memcpy(ptr, &data.data, 252); ptr += 252; offset = data.link; } usize = _dirblock[idx].uncompressed_size; ubuf = new unsigned char[usize]; ret = uncompress(ubuf, &usize, cbuf, csize); delete[] cbuf; if (ret != Z_OK) { cerr << "error in uncompress: " << ret << endl; return NULL; } if (props) { if (ubuf[16] < 3) props->auto_start = false; else props->auto_start = true; props->load_addr = _dirblock[idx].load_addr; props->start_addr = _dirblock[idx].start_addr; props->size = usize; props->type = (kct_file_type_t)_dirblock[idx].type; props->machine = (kct_machine_type_t)_dirblock[idx].machine; } else cerr << "kct_props: NULL!" << endl; return new memstream((unsigned char *)ubuf, usize); } istream * KCTFile::read(const char *name, kct_file_props_t *props) { int a; a = 0; for (KCTDir::iterator it = _dir.begin();it != _dir.end();it++) { if (strcmp((*it)->name, name) == 0) return read(a, props); a++; } cerr << "KCTFile::read(): file not found!" << endl; return NULL; } /* * return: KCT_ERROR_EXIST if filename already in archive * KCT_ERROR_NOMEM on memory allocation error * KCT_ERROR_IO if file compression fails or * no block free in the archive * KCT_OK if all went well */ kct_error_t KCTFile::write(const char *filename, const unsigned char *buf, unsigned long len, unsigned short load_addr, unsigned short start_addr, kct_file_type_t type, kct_machine_type_t machine) { int ret; unsigned int a; unsigned long clen; unsigned char *cbuf; unsigned long crc; unsigned long offset; kct_error_t err; /* * check if the filename already exists in the archive */ readdir(); if (find(filename) == KCT_OK) return KCT_ERROR_EXIST; DBG(1, form("KCemu/KCT/write", "KCTFile::write(): name = '%s'\n" "KCTFile::write(): type = %s (%02x)\n" "KCTFile::write(): addr = %04x/%04x\n", filename, type_name(type), type, load_addr, start_addr)); clen = len + (len / 1000 + 1) + 12; cbuf = new unsigned char [clen]; if (cbuf == NULL) return KCT_ERROR_NOMEM; ret = compress(cbuf, &clen, buf, len); DBG(1, form("KCemu/KCT/write", "KCTFile::write(): compress returned %d\n" "KCTFile::write(): len = %d\n" "KCTFile::write(): clen = %d\n", ret, len, clen)); if (ret != Z_OK) { cerr << "error in compress" << endl; return KCT_ERROR_IO; } crc = crc32(0L, Z_NULL, 0); crc = crc32(crc, buf, len); offset = bam_block_find_free(_bam); if (offset == 0) return KCT_ERROR_IO; err = dirent_allocate(filename, load_addr, start_addr, len, clen, crc, &offset, type, machine); if (err != KCT_OK) return err; for (;;) { _f->seekp(offset); if (clen < 252) { offset = 0; _f->write((char *)&offset, 4); _f->write((char *)cbuf, clen); /* pad to 256 byte */ for (a = 0;a < 252 - clen;a++) _f->put(0); break; } else { offset = bam_block_find_free(_bam); if (offset == 0) return KCT_ERROR_IO; _f->write((char *)&offset, 4); _f->write((char *)cbuf, 252); } cbuf += 252; clen -= 252; } bam_write(_bam, BAM_OFFSET); return KCT_OK; } kct_error_t KCTFile::remove(int idx) { int entry; kct_data_t data; unsigned long offset; idx = translate_index(idx); entry = idx % 4; idx /= 4; offset = _header.offset[idx]; _header.offset[idx] &= ~(1 << entry); dirblock_read(_dirblock, offset); if ((_header.offset[idx] & DIRBLOCK_INDEX_MASK) == 0) { /* cerr << "*** free dirblock ***" << endl; */ _header.offset[idx] = 0; bam_block_free(_bam, offset / BLOCK_SIZE); } header_write(_header, HEADER_OFFSET); /* cerr << "KCTFile::remove(): name = " << _dirblock[entry].name << endl; */ offset = _dirblock[entry].offset; while (offset != 0) { bam_block_free(_bam, offset / BLOCK_SIZE); _f->seekg(offset); _f->read((char *)&data, BLOCK_SIZE); offset = data.link; } bam_write(_bam, BAM_OFFSET); readdir(); /* reload internal directory list (_dir) */ return KCT_OK; } kct_error_t KCTFile::rename(int idx, const char *to) { int entry; kct_error_t err; unsigned long offset; idx = translate_index(idx); entry = idx % 4; idx /= 4; offset = _header.offset[idx]; dirblock_read(_dirblock, offset); strncpy(_dirblock[entry].name, to, KCT_NAME_LENGTH); _dirblock[entry].name[KCT_NAME_LENGTH] = '\0'; err = dirblock_write(_dirblock, offset); readdir(); /* reload internal directory list (_dir) */ return err; } int KCTFile::find_entry(const char *name) { int a = 0; for (KCTDir::iterator it = _dir.begin();it != _dir.end();it++) { if (strcmp((*it)->name, name) == 0) return a; a++; } return -1; } kct_error_t KCTFile::find(const char *name) { int idx; idx = find_entry(name); if (idx < 0) return KCT_ERROR_NOENT; return KCT_OK; } kct_error_t KCTFile::remove(const char *name) { int idx; idx = find_entry(name); if (idx < 0) return KCT_ERROR_NOENT; return remove(idx); } kct_error_t KCTFile::rename(const char *name, const char *to) { int idx; idx = find_entry(to); if (idx >= 0) return KCT_ERROR_EXIST; idx = find_entry(name); if (idx < 0) return KCT_ERROR_NOENT; return rename(idx, to); } const char * KCTFile::get_error_string(kct_error_t error) { switch (error) { case KCT_OK_READONLY: return "success"; case KCT_OK: return "success"; case KCT_ERROR_NOENT: return "no such file"; case KCT_ERROR_IO: return "io error"; case KCT_ERROR_NOMEM: return "out of memory error"; case KCT_ERROR_ACCESS: return "access error"; case KCT_ERROR_EXIST: return "file already exists"; case KCT_ERROR_INVAL: return "invalid parameter"; case KCT_ERROR_NAMETOOLONG: return "name too long"; } return ""; } #ifdef DEBUG void KCTFile::test(void) { int a; bool ok; kct_bam_t bam; /* cerr << "***" << endl << "*** KCTFile::test()" << endl << "***" << endl; */ ok = true; if (sizeof(kct_header_t) != 256) { ok = false; cerr << "*** sizeof kct_header_t != 256 (" << sizeof(kct_header_t) << ")" << endl; } if (sizeof(kct_bam_t) != 256) { ok = false; cerr << "*** sizeof kct_bam_t != 256 (" << sizeof(kct_bam_t) << ")" << endl; } if (sizeof(kct_data_t) != 256) { ok = false; cerr << "*** sizeof kct_data_t != 256 (" << sizeof(kct_data_t) << ")" << endl; } if (sizeof(kct_dirblock_t) != 256) { ok = false; cerr << "*** sizeof kct_dirblock_t != 256 (" << sizeof(kct_dirblock_t) << ")" << endl; } bam_clear(bam); for (a = 0;a < 256;a++) { if (bam[a] != 0) { ok = false; cerr << "*** clearing BAM failed" << endl; break; } } for (a = 0;a < 2048;a++) { if (!bam_block_available(bam, a)) { ok = false; cerr << "*** bam_block_available error (1)" << endl; break; } bam_block_allocate(bam, a); if (bam_block_available(bam, a)) { ok = false; cerr << "*** bam_block_available error (2)" << endl; break; } bam_block_free(bam, a); if (!bam_block_available(bam, a)) { ok = false; cerr << "*** bam_block_available error (3)" << endl; break; } bam_block_allocate(bam, a); } if (!ok) cerr << "*** check failed!" << endl; } void KCTFile::print_bam(void) { int a, b, c; for (a = 0;a < 16;a++) { for (b = 0;b < 16;b++) { for (c = 0;c < 8;c += 2) { switch (((_bam[16 * a + b]) & (0xc0 >> c)) >> (6 - c)) { case 0: cout << '-'; break; case 1: cout << ']'; break; case 2: cout << '['; break; case 3: cout << '#'; break; } } } cout << endl; } } void KCTFile::print_block_list(void) { int a, b, c; for (a = 0;a < 16;a++) { for (b = 0;b < 16;b++) { for (c = 0;c < 8;c++) { if ((_bam[16 * a + b]) & (0x80 >> c)) cout << hex << setw(8) << (32768 * a + 2048 * b + 256 * c) << endl; } } } } #endif /* DEBUG */ KCemu-0.5.1/src/libtape/kctape.cc0000644001050700006200000003176511345001576016210 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include "kc/system.h" #ifdef USE_INCLUDED_GETOPT #include "getopt/getopt.h" #else #ifdef HAVE_GETOPT #include #endif #endif #include "libtape/kct.h" #include "fileio/load.h" using namespace std; typedef enum { ADD_MODE_NONE = 0, ADD_MODE_RAW = 1, ADD_MODE_KC85_1 = 2, ADD_MODE_KC85_3 = 3, } add_mode_t; static add_mode_t _add_mode = ADD_MODE_NONE; static int _verbose = 0; static bool _list_flag = false; static bool _create_flag = false; static bool _print_bam = false; static bool _print_block_list = false; static char * _tape_name = 0; static char * _extract_name = 0; static char * _output_name = 0; static char * _remove_name = 0; static char * _dump_name = 0; static KCTFile kct_file; static void banner(void) { cout << (" _ ______ _\n" " | |/ / ___| |_ __ _ _ __ ___ KCtape 0.3\n" " | ' / | | __/ _` | '_ \\ / _ \\ (c) 1997-2003 Torsten Paul\n" " | . \\ |___| || (_| | |_) | __/ \n" " |_|\\_\\____|\\__\\__,_| .__/ \\___| http://kcemu.sourceforge.net/\n" " |_|\n"); } static void usage(char *argv0, int exit_value) { banner(); cout << _("\n" "KCtape is part of KCemu the KC 85/4 Emulator and comes with\n" "ABSOLUTELY NO WARRANTY; for details run `kcemu --warranty'.\n" "This is free software, and you are welcome to redistribute it\n" "under certain conditions; run `kcemu --license' for details.\n" "\n" "usage: kctape -t tapefile [command [command_args]]\n" "\n" " commands:\n" " ---------\n" "\n" " -h|--help show this help text\n" " -v|--verbose be verbose about what's going on\n" " -t|--tape tape archive to process\n" " -l|--list list content of tape archive\n" " -c|--create create tape archive if it doesn't exist\n" " -a|--add add files (KC85/3 mode)\n" " -1|--add1 add files (KC85/1 mode)\n" " -A|--add-raw add binary files\n" " -r|--remove remove file from tape archive\n" " -x|--extract extract file from tape archive\n" " -d|--dump hexdump file\n" " -o|--output output file for extract\n" " -b|--print-bam show internal block allocation map\n" " -B|--print-block-list show internal block list\n"); exit(exit_value); } bool dump_block(istream *s, int addr) { int c, x; bool end; c = s->get(); if (c == EOF) { end = true; return false; } cout << "Block " << hex << setw(2) << setfill('0') << (c & 0xff) << "h (" << dec << (c & 0xff) << ")" << endl; end = false; for (int a = 0;a < 8;a++) { int c; char buf[16]; cout << hex << setw(4) << setfill('0') << (addr + a * 16) << "h: "; x = 16; for (int b = 0;b < 16;b++) { c = s->get(); if (c == EOF) { x = b; end = true; break; } buf[b] = c; } for (int b = 0;b < 16;b++) { if (b == 8) cout << "- "; if (b >= x) cout << " "; else cout << hex << setw(2) << setfill('0') << (buf[b] & 0xff) << " "; } cout << "| "; for (int b = 0;b < 16;b++) { if (b >= x) break; cout << (char)(isprint(buf[b]) ? buf[b] : '.'); } cout << endl; if (end) break; } cout << endl; return !end; } static kct_error_t add_one_file(KCTFile &f, fileio_prop_t *prop, kct_file_type_t type) { char *name; kct_error_t err; int len, idx, nr; len = strlen((const char *)&prop->name[0]); name = new char[len + 3]; strcpy(name, (const char *)&prop->name[0]); idx = min(len, KCT_NAME_LENGTH - 3); nr = 0; do { err = kct_file.write(name, prop->data, prop->size, prop->load_addr, prop->start_addr, type, KCT_MACHINE_ALL); if (err != KCT_ERROR_EXIST) break; name[idx ] = '_'; name[idx + 1] = '1' + nr; name[idx + 2] = '\0'; nr++; if (_verbose > 0) cout << " + trying to add file with new name `" << name << "'..." << endl; } while (nr < 9); if (_verbose > 0) { if (err == KCT_OK) cout << " + added file `" << name << "'" << endl; else cout << " - can't add file `" << prop->name << "'" << endl; } return err; } static kct_error_t add_raw(KCTFile &kct_file, char *filename) { FILE *f; int len; kct_error_t err; byte_t buf[65536]; if (_verbose > 0) cout << "* processing raw file `" << filename << "'...\n"; f = fopen(filename, "rb"); if (f == NULL) return KCT_ERROR_IO; len = fread(buf, 1, 65536, f); fclose(f); err = kct_file.write(filename, buf, len, 0x0000, 0x0000, KCT_TYPE_BIN, KCT_MACHINE_ALL); return err; } static kct_error_t add_file(KCTFile &kct_file, char *filename) { kct_error_t err; kct_file_type_t type; fileio_prop_t *ptr, *prop; if (_verbose > 0) cout << "* processing file `" << filename << "'...\n"; if (fileio_load_file(filename, &prop) != 0) return KCT_ERROR_IO; if (_verbose > 1) fileio_debug_dump(prop, 0); for (ptr = prop;ptr != NULL;ptr = ptr->next) { switch (ptr->type) { case FILEIO_TYPE_COM: type = KCT_TYPE_COM; break; case FILEIO_TYPE_BAS: type = KCT_TYPE_BAS; break; case FILEIO_TYPE_PROT_BAS: type = KCT_TYPE_BAS_P; break; default: cerr << "ERROR: file with unknown type ignored!" << endl; continue; } err = add_one_file(kct_file, ptr, type); if (err != KCT_OK) cout << "ERROR: can't add `" << ptr->name << "': " << kct_file.get_error_string(err) << "." << endl; } return KCT_OK; } static kct_error_t open(KCTFile &f, char *name) { kct_error_t error; error = f.open(name); if (error == KCT_OK_READONLY) return KCT_OK; if (f.open(name) != KCT_OK) { if (_create_flag) { if (f.create(name) != KCT_OK) { cerr << "ERROR: Can't create file `" << name << "'" << endl; return KCT_ERROR_IO; } } else { cerr << "ERROR: Can't open file `" << name << "'" << endl; return KCT_ERROR_NOENT; } } return KCT_OK; } static void do_remove(KCTFile &f, const char *name) { if (name == 0) return; f.readdir(); if (f.remove(name) != KCT_OK) cerr << "ERROR: File not found" << endl; } static FILE * open_output(const char *name) { if (name == 0) return stdout; if (access(name, F_OK) == 0) return 0; return fopen(name, "wb+"); } static void do_extract(KCTFile &f, const char *name, const char *output) { int a, c; FILE *out; istream *s; kct_file_props_t props; if (name == 0) return; out = open_output(output); if (out == 0) { cerr << "ERROR: can't open output file" << endl; return; } f.readdir(); s = f.read(name, &props); if (s == NULL) { cerr << "ERROR: File not found" << endl; return; } cerr << name << ": " << "load = " << hex << setw(4) << props.load_addr << ", " << "size = " << hex << setw(4) << props.size << ", " << "start = " << hex << setw(4) << props.start_addr << (props.auto_start ? " [autostart]" : "") << endl; fputs("\xc3KC-TAPE by AF. ", out); a = 0; while (242) { c = s->get(); if (c == EOF) break; a++; fputc(c, out); } while ((a % 129) != 0) { a++; fputc('\0', out); /* pad to block size */ } } /* * the output parameter is not yet used; need to unify the * type of the output stream (extract() still uses FILE * but * dump() need an ostream) */ static void do_dump(KCTFile &f, const char *name, const char *output) { istream *s; kct_file_props_t props; if (name == 0) return; f.readdir(); s = f.read(name, &props); if (s == NULL) { cerr << "ERROR: File not found: `" << _dump_name << "'" << endl; return ; } cout << "===========================================================================" << endl << "name: `" << name << "'" << endl << "load: " << hex << setfill('0') << setw(4) << props.load_addr << "h" << endl << "size: " << hex << setfill('0') << setw(4) << props.size << "h" << endl << "start: " << hex << setfill('0') << setw(4) << props.start_addr << "h" << (props.auto_start ? " [autostart]" : "") << endl << "===========================================================================" << endl << endl; int addr = 0; while (dump_block(s, addr)) addr += 128; cout << "===========================================================================" << endl; } static void do_add(KCTFile &f, int idx, int argc, char **argv) { int a; switch (_add_mode) { case ADD_MODE_KC85_1: fileio_set_kctype(FILEIO_KC85_1); break; case ADD_MODE_KC85_3: fileio_set_kctype(FILEIO_KC85_3); break; case ADD_MODE_RAW: for (a = idx;a < argc;a++) { if (add_raw(kct_file, argv[a]) != KCT_OK) printf("ERROR\n"); } return; default: return; } for (a = idx;a < argc;a++) { if (add_file(kct_file, argv[a]) != KCT_OK) printf("ERROR\n"); } } int main(int argc, char **argv) { int c, idx; int option_index; #ifdef HAVE_GETOPT_LONG static struct option long_options[] = { { "help", 0, 0, 'h' }, { "list", 0, 0, 'l' }, { "create", 0, 0, 'c' }, { "add", 0, 0, 'a' }, { "add1", 0, 0, '1' }, { "add-raw", 0, 0, 'A' }, { "print-bam", 0, 0, 'b' }, { "print-block-list", 0, 0, 'B' }, { "verbose", 0, 0, 'v' }, { "tape", 1, 0, 't' }, { "remove", 1, 0, 'r' }, { "extract", 1, 0, 'x' }, { "dump", 1, 0, 'd' }, { "output", 1, 0, 'o' }, { 0, 0, 0, 0 } }; #endif /* HAVE_GETOPT_LONG */ idx = 1; if (argc < 2) usage(argv[0], 0); while (242) { #ifdef HAVE_GETOPT_LONG c = getopt_long(argc, argv, "hlca1AbBvt:x:r:d:o:", long_options, &option_index); #else #ifdef HAVE_GETOPT c = getopt(argc, argv, "hlca1AbBvt:x:r:d:o:"); #else #error neither HAVE_GETOPT_LONG nor HAVE_GETOPT defined #endif /* HAVE_GETOPT */ #endif /* #ifdef HAVE_GETOPT_LONG */ if (c == -1) break; switch (c) { case 'l': idx++; _list_flag = true; break; case 'c': idx++; _create_flag = true; break; case '1': idx++; _add_mode = ADD_MODE_KC85_1; break; case 'a': idx++; _add_mode = ADD_MODE_KC85_3; break; case 'A': idx++; _add_mode = ADD_MODE_RAW; break; case 'b': idx++; _print_bam = true; break; case 'B': idx++; _print_block_list = true; break; case 'v': idx++; _verbose++; break; case 't': idx += 2; _tape_name = strdup(optarg); break; case 'x': idx += 2; _extract_name = strdup(optarg); break; case 'r': idx += 2; _remove_name = strdup(optarg); break; case 'd': idx += 2; _dump_name = strdup(optarg); break; case 'o': idx += 2; _output_name = strdup(optarg); break; case ':': case '?': case 'h': default: usage(argv[0], 0); break; } } if (_tape_name == 0) { printf(_("ERROR: no tape specified, use the -t option to select\n" " the tape archive you want to process\n\n")); usage(argv[0], 1); } fileio_init(); kct_file.test(); if (open(kct_file, _tape_name) != KCT_OK) exit(1); do_remove(kct_file, _remove_name); do_extract(kct_file, _extract_name, _output_name); do_dump(kct_file, _dump_name, _output_name); do_add(kct_file, idx, argc, argv); kct_file.readdir(); if (_list_flag) kct_file.list(); if (_print_bam) kct_file.print_bam(); if (_print_block_list) kct_file.print_block_list(); kct_file.close(); } KCemu-0.5.1/src/libtape/show_tap.c0000644001050700006200000000467611345001576016423 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include static int nr = 0; void list_file(FILE *f, const char *name) { FILE *of; char oname[100]; const char *fname; int block, nr_blocks; unsigned char buf[129], kcname[12]; unsigned short addr, start, autostart; fname = strrchr(name, '/'); if (fname) fname++; else fname = name; nr_blocks = 0; while (242) { if (fread(buf, 1, 129, f) != 129) { if (nr_blocks > 0) { printf("read error\n"); } return; } nr_blocks++; block = buf[0]; if (block == 1) { addr = buf[18] | (buf[19] << 8); start = buf[22] | (buf[23] << 8); autostart = (buf[17] > 2); memcpy(kcname, &buf[1], 11); kcname[11] = '\0'; printf("%-40s ", fname); printf("%-13s ", kcname); printf("%04x ", addr); if (!autostart) printf("%04x ", start); else printf("- "); sprintf(oname, "out.%04d.img", nr++); of = fopen(oname, "wb"); } if (of) { fwrite(&buf[1], 1, 128, of); } if (block == 0xff) { printf("%d blocks\n", nr_blocks); nr_blocks = 0; if (of) { fclose(of); of = NULL; } if (fread(buf, 1, 16, f) != 16) { return; } } } } int main(int argc, char **argv) { int a; FILE *f; char buf[16]; printf("FILENAME KC-NAME " "ADDR START LENGTH\n"); for (a = 1;a < argc;a++) { f = fopen(argv[a], "rb"); if (!f) continue; if (fread(buf, 1, 16, f) != 16) { fclose(f); exit(2); } if (strncmp((const char *)&buf[1], "KC-TAPE by AF", 13) != 0) { fclose(f); exit(3); } list_file(f, argv[a]); fclose(f); } return 0; } KCemu-0.5.1/src/libtape/test.c0000644001050700006200000000222011345001576015535 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include int main(void) { int a; FILE *f; f = fopen("testfile.1", "wb"); if (f) { for (a = 0;a < 512;a++) { fputc(a & 0xff, f); } fclose(f); } f = fopen("testfile.2", "wb"); if (f) { for (a = 0;a < 512;a++) { fputc(((a >> 8) & 0xff) * 64 + 64, f); } fclose(f); } return 0; } KCemu-0.5.1/src/libtape/kcread2tap.c0000644001050700006200000000212011345001576016575 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include int main(void) { int c; long idx; fputs("\xc3KC-TAPE by AF. ", stdout); idx = 0; while (242) { c = fgetc(stdin); idx++; if (c == EOF) break; if ((idx % 130) == 0) continue; fputc(c, stdout); } return 0; } KCemu-0.5.1/src/libtape/Makefile.am0000644001050700006200000000162211412401162016441 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in if USE_INCLUDED_GETOPT GETOPTLIB = ../getopt/libgetopt.a endif TESTS = test bin_PROGRAMS = kctape check_PROGRAMS = test noinst_PROGRAMS = show_tap kcread2tap noinst_LIBRARIES = libtape.a AM_CPPFLAGS = \ -DDEBUG -DLINUX INCLUDES = \ -I../../include libtape_a_SOURCES = \ kct.cc kctape_SOURCES = \ kctape.cc show_tap_SOURCES = \ show_tap.c kcread2tap_SOURCES = \ kcread2tap.c kctape_LDADD = \ libtape.a ../fileio/libfileio.a ../libdbg/libdbg.a $(GETOPTLIB) $(INTLLIBS) CLEANFILES = \ testfile.1 \ testfile.2 \ test.kct check: rm -f test.kct testfile.1 testfile.2 ./test ./kctape -t test.kct -c ./kctape -t test.kct --add testfile.1 "Test 1.1" ./kctape -t test.kct --add-raw testfile.1 "Test 1.2" "TEST" 0x0200 ./kctape -t test.kct --add testfile.2 "Test 2.1" ./kctape -t test.kct --add-raw testfile.2 "Test 2.2" "TEST" 0x0200 KCemu-0.5.1/src/libtape/Makefile.in0000644001050700006200000006054411412404773016475 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ TESTS = test$(EXEEXT) bin_PROGRAMS = kctape$(EXEEXT) check_PROGRAMS = test$(EXEEXT) noinst_PROGRAMS = show_tap$(EXEEXT) kcread2tap$(EXEEXT) subdir = src/libtape DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libtape_a_AR = $(AR) $(ARFLAGS) libtape_a_LIBADD = am_libtape_a_OBJECTS = kct.$(OBJEXT) libtape_a_OBJECTS = $(am_libtape_a_OBJECTS) am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) $(noinst_PROGRAMS) am_kcread2tap_OBJECTS = kcread2tap.$(OBJEXT) kcread2tap_OBJECTS = $(am_kcread2tap_OBJECTS) kcread2tap_LDADD = $(LDADD) am_kctape_OBJECTS = kctape.$(OBJEXT) kctape_OBJECTS = $(am_kctape_OBJECTS) am__DEPENDENCIES_1 = kctape_DEPENDENCIES = libtape.a ../fileio/libfileio.a \ ../libdbg/libdbg.a $(GETOPTLIB) $(am__DEPENDENCIES_1) am_show_tap_OBJECTS = show_tap.$(OBJEXT) show_tap_OBJECTS = $(am_show_tap_OBJECTS) show_tap_LDADD = $(LDADD) test_SOURCES = test.c test_OBJECTS = test.$(OBJEXT) test_LDADD = $(LDADD) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(libtape_a_SOURCES) $(kcread2tap_SOURCES) $(kctape_SOURCES) \ $(show_tap_SOURCES) test.c DIST_SOURCES = $(libtape_a_SOURCES) $(kcread2tap_SOURCES) \ $(kctape_SOURCES) $(show_tap_SOURCES) test.c ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @USE_INCLUDED_GETOPT_TRUE@GETOPTLIB = ../getopt/libgetopt.a noinst_LIBRARIES = libtape.a AM_CPPFLAGS = \ -DDEBUG -DLINUX INCLUDES = \ -I../../include libtape_a_SOURCES = \ kct.cc kctape_SOURCES = \ kctape.cc show_tap_SOURCES = \ show_tap.c kcread2tap_SOURCES = \ kcread2tap.c kctape_LDADD = \ libtape.a ../fileio/libfileio.a ../libdbg/libdbg.a $(GETOPTLIB) $(INTLLIBS) CLEANFILES = \ testfile.1 \ testfile.2 \ test.kct all: all-am .SUFFIXES: .SUFFIXES: .c .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libtape/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libtape/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libtape.a: $(libtape_a_OBJECTS) $(libtape_a_DEPENDENCIES) -rm -f libtape.a $(libtape_a_AR) libtape.a $(libtape_a_OBJECTS) $(libtape_a_LIBADD) $(RANLIB) libtape.a install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) test -z "$(bindir)" || $(MKDIR_P) "$(DESTDIR)$(bindir)" @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p; \ then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS) clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) kcread2tap$(EXEEXT): $(kcread2tap_OBJECTS) $(kcread2tap_DEPENDENCIES) @rm -f kcread2tap$(EXEEXT) $(LINK) $(kcread2tap_OBJECTS) $(kcread2tap_LDADD) $(LIBS) kctape$(EXEEXT): $(kctape_OBJECTS) $(kctape_DEPENDENCIES) @rm -f kctape$(EXEEXT) $(CXXLINK) $(kctape_OBJECTS) $(kctape_LDADD) $(LIBS) show_tap$(EXEEXT): $(show_tap_OBJECTS) $(show_tap_DEPENDENCIES) @rm -f show_tap$(EXEEXT) $(LINK) $(show_tap_OBJECTS) $(show_tap_LDADD) $(LIBS) test$(EXEEXT): $(test_OBJECTS) $(test_DEPENDENCIES) @rm -f test$(EXEEXT) $(LINK) $(test_OBJECTS) $(test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kcread2tap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kct.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kctape.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/show_tap.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/test.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile $(LIBRARIES) $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ clean-noinstLIBRARIES clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-binPROGRAMS clean-checkPROGRAMS clean-generic \ clean-noinstLIBRARIES clean-noinstPROGRAMS ctags distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-binPROGRAMS install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-compile mostlyclean-generic pdf pdf-am ps ps-am \ tags uninstall uninstall-am uninstall-binPROGRAMS check: rm -f test.kct testfile.1 testfile.2 ./test ./kctape -t test.kct -c ./kctape -t test.kct --add testfile.1 "Test 1.1" ./kctape -t test.kct --add-raw testfile.1 "Test 1.2" "TEST" 0x0200 ./kctape -t test.kct --add testfile.2 "Test 2.1" ./kctape -t test.kct --add-raw testfile.2 "Test 2.2" "TEST" 0x0200 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/libdbg/0000755001050700006200000000000011412404773014222 5ustar glaubitzfbedvKCemu-0.5.1/src/libdbg/Makefile.am0000644001050700006200000000043410527416075016263 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in noinst_LIBRARIES = libdbg.a noinst_PROGRAMS = dbg-test INCLUDES = \ -I../../include AM_CPPFLAGS = \ -DVERSION=\"$(VERSION)\" libdbg_a_SOURCES = \ dbg.cc dbg_test_SOURCES = \ dbg-test.cc dbg_test_LDADD = \ libdbg.a KCemu-0.5.1/src/libdbg/dbg-test.cc0000644001050700006200000000231411345001576016241 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #define DBG_LEVEL 3 #include "libdbg/dbg.h" using namespace std; int main(void) { DBG_add_path("test/path/s1"); cout << *DBGI(); DBG_add_path("test/path/s2"); cout << *DBGI(); DBG_clear(); DBG_add_path("test/path2/s3"); cout << *DBGI(); DBG(0, form("test/path/s1", "%s -> %d\n", "hallo", 3)); DBG(1, form("test/path/s4", "%s -> %d\n", "hallo", 3)); } KCemu-0.5.1/src/libdbg/dbg.cc0000644001050700006200000001170411345001576015267 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include "libdbg/dbg.h" p_map::p_map(const char *name, bool allow_subkeys) { _name = strdup(name); _allow_subkeys = allow_subkeys; } p_map::~p_map(void) { if (_name) free(_name); } const char * p_map::get_name(void) { if (_name) return _name; return ""; } void p_map::set_allow_subkeys(bool allow_subkeys) { _allow_subkeys = allow_subkeys; } bool p_map::get_allow_subkeys(void) { return _allow_subkeys; } p_tree::p_tree(void) { _map = new p_map("", false); } p_tree::~p_tree(void) { delete _map; } void p_tree::add(const char *data, bool allow_subkeys) { p_map *m; char *ptr, *tmp; char d[1024]; strncpy(d, data, 1024); d[1023] = '\0'; m = _map; ptr = strtok(d, "/"); while (ptr != 0) { p_map::const_iterator m_it = m->find(ptr); if (m_it == m->end()) { tmp = strdup(ptr); p_map *new_map = new p_map(tmp, false); (*m)[tmp] = new_map; m = new_map; } else { m = (*m_it).second; } ptr = strtok(0, "/"); } if (allow_subkeys) m->set_allow_subkeys(true); } bool p_tree::check_path(const char *data) { p_map *m; char *ptr; char d[1024]; strncpy(d, data, 1024); d[1023] = '\0'; m = _map; ptr = strtok(d, "/"); while (ptr != 0) { if (m->get_allow_subkeys()) break; p_map::const_iterator m_it = m->find(ptr); if (m_it == m->end()) { return false; } m = (*m_it).second; ptr = strtok(0, "/"); } return true; } void p_tree::clear() { clear(_map); } void p_tree::clear(p_map *map) { for (p_map::iterator it = map->begin();it != map->end();it++) clear((*it).second); map->clear(); if (_map != map) // don't free top level object delete map; } void p_tree::dump(std::ostream& os, p_map *map, int level) const { for (int a = 0;a < level;a++) os << " "; os << map->get_name(); if (map->get_allow_subkeys()) os << " <*>"; os << std::endl; for (p_map::iterator it = map->begin();it != map->end();it++) dump(os, (*it).second, level + 1); } std::ostream& operator<< (std::ostream& os, const p_tree& t) { os << "p_tree:" << std::endl; t.dump(os, t._map, 0); return os; } DBG_class *DBG_class::_singleton = 0; DBG_class::DBG_class(void) { _o = &std::cout; load_config(); } DBG_class::~DBG_class(void) { _tree.clear(); } DBG_class * DBG_class::instance(void) { if (_singleton == 0) _singleton = new DBG_class(); return _singleton; } void DBG_class::clear(void) { _tree.clear(); } void DBG_class::load_config(void) { char *filename, *tmp; clear(); tmp = getenv("HOME"); if (tmp) { filename = new char[strlen(tmp) + 8]; strcpy(filename, tmp); strcat(filename, "/.debug"); load_file(filename); delete[] filename; } } void DBG_class::load_file(const char *filename) { std::ifstream is; char line[4096]; is.open(filename); if (!is) return; while (242) { is.getline(line, 4096); if (is.eof()) break; if (line[0] != '#') add_path(line, false); } is.close(); } void DBG_class::set_output_stream(std::ostream *os) { _o = os; } void DBG_class::add_path(const char *path, bool allow_subkeys) { _tree.add(path, allow_subkeys); } void DBG_class::form(const char *path, const char *format ...) { char buf[8192]; if (!_tree.check_path(path)) return; va_list ap; va_start(ap, format); vsnprintf(buf, 8192, format, ap); *_o << buf; _o->flush(); va_end(ap); } void DBG_class::print(const char *path, const char *msg) { if (!_tree.check_path(path)) return; *_o << "DEBUG: " << path << " - " << msg; _o->flush(); } void DBG_class::println(const char *path, const char *msg) { if (!_tree.check_path(path)) return; *_o << "DEBUG: " << path << " - " << msg << std::endl; _o->flush(); } bool DBG_class::check(const char *path) { return _tree.check_path(path); } std::ostream& operator<< (std::ostream& os, const DBG_class& dbg) { os << "DBG:" << std::endl; os << dbg._tree; return os; } KCemu-0.5.1/src/libdbg/Makefile.in0000644001050700006200000004164611412404773016302 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ noinst_PROGRAMS = dbg-test$(EXEEXT) subdir = src/libdbg DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libdbg_a_AR = $(AR) $(ARFLAGS) libdbg_a_LIBADD = am_libdbg_a_OBJECTS = dbg.$(OBJEXT) libdbg_a_OBJECTS = $(am_libdbg_a_OBJECTS) PROGRAMS = $(noinst_PROGRAMS) am_dbg_test_OBJECTS = dbg-test.$(OBJEXT) dbg_test_OBJECTS = $(am_dbg_test_OBJECTS) dbg_test_DEPENDENCIES = libdbg.a DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(libdbg_a_SOURCES) $(dbg_test_SOURCES) DIST_SOURCES = $(libdbg_a_SOURCES) $(dbg_test_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libdbg.a INCLUDES = \ -I../../include AM_CPPFLAGS = \ -DVERSION=\"$(VERSION)\" libdbg_a_SOURCES = \ dbg.cc dbg_test_SOURCES = \ dbg-test.cc dbg_test_LDADD = \ libdbg.a all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libdbg/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libdbg/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libdbg.a: $(libdbg_a_OBJECTS) $(libdbg_a_DEPENDENCIES) -rm -f libdbg.a $(libdbg_a_AR) libdbg.a $(libdbg_a_OBJECTS) $(libdbg_a_LIBADD) $(RANLIB) libdbg.a clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) dbg-test$(EXEEXT): $(dbg_test_OBJECTS) $(dbg_test_DEPENDENCIES) @rm -f dbg-test$(EXEEXT) $(CXXLINK) $(dbg_test_OBJECTS) $(dbg_test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbg-test.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbg.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) $(PROGRAMS) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES clean-noinstPROGRAMS ctags distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/libgtkex/0000755001050700006200000000000011412404773014610 5ustar glaubitzfbedvKCemu-0.5.1/src/libgtkex/Makefile.am0000644001050700006200000000033011340261610016627 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in noinst_LIBRARIES = libgtkex.a INCLUDES = \ -I../../include AM_CPPFLAGS = \ $(GTK_CFLAGS) libgtkex_a_SOURCES = \ gtkfilebutton.c \ gtkledline.c KCemu-0.5.1/src/libgtkex/gtkfilebutton.c0000644001050700006200000002167211345001576017644 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "libgtkex/libgtkex.h" enum { FILEBUTTON_CHANGED_SIGNAL, LAST_SIGNAL }; static guint filebutton_signals[LAST_SIGNAL] = { 0 }; G_DEFINE_TYPE(GtkFilebutton, gtk_filebutton, GTK_TYPE_TABLE); static GtkWidget * create_button(const gchar *stock_id) { GtkWidget *button, *image; button = gtk_button_new(); image = gtk_image_new_from_stock(stock_id, GTK_ICON_SIZE_BUTTON); gtk_container_add(GTK_CONTAINER(button), image); gtk_widget_show(image); gtk_widget_show(button); return button; } static GtkWidget * create_comboboxentry(void) { GtkWidget *comboboxentry, *entry; comboboxentry = gtk_combo_box_entry_new(); gtk_combo_box_set_active(GTK_COMBO_BOX(comboboxentry), -1); gtk_combo_box_entry_set_text_column(GTK_COMBO_BOX_ENTRY(comboboxentry), 0); entry = gtk_bin_get_child(GTK_BIN(comboboxentry)); gtk_editable_set_editable(GTK_EDITABLE(entry), FALSE); gtk_widget_show(comboboxentry); return comboboxentry; } static void add_recent_info(const gchar *filename, const gchar *group) { GtkRecentManager *manager = gtk_recent_manager_get_default(); GFile *file = g_file_new_for_path(filename); gchar *uri = g_file_get_uri(file); g_object_unref(file); gchar *groups[2]; GtkRecentData recent_data; memset(&recent_data, 0, sizeof(recent_data)); recent_data.mime_type = "application/octet-stream"; recent_data.app_name = "KCemu"; recent_data.app_exec = "xdg-open %u"; if (group != NULL) { recent_data.groups = groups; recent_data.groups[0] = group; recent_data.groups[1] = NULL; } gtk_recent_manager_add_full(manager, uri, &recent_data); g_free(uri); } static GtkListStore * get_list_store(const gchar *recent_group) { GtkRecentManager *manager = gtk_recent_manager_get_default(); GtkListStore *store = gtk_list_store_new(2, G_TYPE_STRING, G_TYPE_STRING); GList *ptr; int count = 0; GtkTreeIter iter; GList *list = gtk_recent_manager_get_items(manager); for (ptr = list; (ptr != NULL) && (count < 10); ptr = ptr->next) { GtkRecentInfo *info = ptr->data; if (!gtk_recent_info_has_application(info, "KCemu")) continue; if ((recent_group != NULL) && !gtk_recent_info_has_group(info, recent_group)) continue; GFile *file = g_file_new_for_uri(gtk_recent_info_get_uri(info)); if (g_file_is_native(file) /* && g_file_query_exists(file, NULL) */) { gchar *path = g_file_get_path(file); gchar *basename = g_file_get_basename(file); if ((path != NULL) && (basename != NULL)) { gtk_list_store_append(store, &iter); gtk_list_store_set(store, &iter, 0, basename, 1, path, -1); count++; } g_free(path); g_free(basename); } g_object_unref(file); } return store; } GtkWidget* gtk_filebutton_new(const gchar *recent_group) { GtkWidget *widget = GTK_WIDGET(g_object_new(gtk_filebutton_get_type(), NULL)); gtk_filebutton_set_recent_group(GTK_FILEBUTTON(widget), recent_group); return widget; } gchar * gtk_filebutton_get_filename(GtkFilebutton *filebutton) { g_return_val_if_fail(filebutton != NULL, NULL); g_return_val_if_fail(GTK_IS_FILEBUTTON(filebutton), NULL); return g_strdup(filebutton->filename); } void gtk_filebutton_set_recent_group(GtkFilebutton *filebutton, const gchar *recent_group) { g_return_if_fail(filebutton != NULL); g_return_if_fail(GTK_IS_FILEBUTTON(filebutton)); // Prepare for the case that we are called with the old value of // filebutton->recent_group. In this case we need to prevent to // access the old value after it is already feed. gchar *old = filebutton->recent_group; filebutton->recent_group = g_strdup(recent_group); g_free(old); GtkListStore *store = get_list_store(filebutton->recent_group); gtk_combo_box_set_model(GTK_COMBO_BOX(filebutton->comboboxentry), GTK_TREE_MODEL(store)); g_object_unref(store); } static void gtk_filebutton_set_entry_text(GtkFilebutton *filebutton, const gchar *text) { GtkEntry *entry = GTK_ENTRY(gtk_bin_get_child(GTK_BIN(filebutton->comboboxentry))); g_signal_handler_block(filebutton->comboboxentry, filebutton->changed_id); gtk_entry_set_text(entry, text); g_signal_handler_unblock(filebutton->comboboxentry, filebutton->changed_id); } static void gtk_filebutton_set_filename(GtkFilebutton *filebutton, const gchar *filename) { if (g_strcmp0(filebutton->filename, filename) == 0) return; g_free(filebutton->filename); filebutton->filename = g_strdup(filename); const gchar *basename; if (filename == NULL) { filename = ""; basename = ""; } else { GFile *file = g_file_new_for_path(filename); basename = g_file_get_basename(file); g_object_unref(file); add_recent_info(filename, filebutton->recent_group); gtk_filebutton_set_recent_group(filebutton, filebutton->recent_group); } gtk_filebutton_set_entry_text(filebutton, basename); gtk_widget_set_tooltip_text(GTK_WIDGET(filebutton), filename); gtk_widget_set_sensitive(GTK_WIDGET(filebutton->button_clear), filebutton->filename != NULL); g_signal_emit(G_OBJECT(filebutton), filebutton_signals[FILEBUTTON_CHANGED_SIGNAL], 0); } static void gtk_filebutton_class_init(GtkFilebuttonClass *class) { filebutton_signals[FILEBUTTON_CHANGED_SIGNAL] = g_signal_new("changed", G_TYPE_FROM_CLASS(class), G_SIGNAL_RUN_FIRST | G_SIGNAL_ACTION, G_STRUCT_OFFSET(GtkFilebuttonClass, filebutton), NULL, NULL, g_cclosure_marshal_VOID__VOID, G_TYPE_NONE, 0); } static void on_comboboxentry_changed(GtkComboBoxEntry *comboboxentry, GtkFilebutton *filebutton) { GtkTreeIter iter; if (gtk_combo_box_get_active_iter(GTK_COMBO_BOX(comboboxentry), &iter)) { gchar *filename; GtkTreeModel *model = GTK_TREE_MODEL(gtk_combo_box_get_model(GTK_COMBO_BOX(comboboxentry))); gtk_tree_model_get(model, &iter, 1, &filename, -1); gtk_filebutton_set_filename(filebutton, filename); g_free(filename); } else { gtk_filebutton_set_filename(filebutton, NULL); } } static void on_filebutton_clear(GtkButton *button, GtkFilebutton *filebutton) { gtk_filebutton_set_filename(filebutton, NULL); } static void on_filebutton_open(GtkButton *button, GtkFilebutton *filebutton) { GtkWidget *dialog; dialog = gtk_file_chooser_dialog_new("Select file", GTK_WINDOW(gtk_widget_get_toplevel(GTK_WIDGET(filebutton))), GTK_FILE_CHOOSER_ACTION_SAVE, GTK_STOCK_CANCEL, GTK_RESPONSE_CANCEL, GTK_STOCK_SAVE, GTK_RESPONSE_ACCEPT, NULL); gtk_file_chooser_set_do_overwrite_confirmation(GTK_FILE_CHOOSER(dialog), TRUE); if (gtk_dialog_run(GTK_DIALOG(dialog)) == GTK_RESPONSE_ACCEPT) { char *filename = gtk_file_chooser_get_filename(GTK_FILE_CHOOSER(dialog)); gtk_filebutton_set_filename(filebutton, filename); g_free(filename); } gtk_widget_destroy(dialog); } static void gtk_filebutton_init(GtkFilebutton *filebutton) { filebutton->button_open = create_button(GTK_STOCK_OPEN); filebutton->button_clear = create_button(GTK_STOCK_CLOSE); filebutton->comboboxentry = create_comboboxentry(); gtk_widget_set_sensitive(GTK_WIDGET(filebutton->button_clear), FALSE); filebutton->changed_id = g_signal_connect(filebutton->comboboxentry, "changed", G_CALLBACK(on_comboboxentry_changed), filebutton); g_signal_connect(filebutton->button_open, "clicked", G_CALLBACK(on_filebutton_open), filebutton); g_signal_connect(filebutton->button_clear, "clicked", G_CALLBACK(on_filebutton_clear), filebutton); gtk_table_resize(GTK_TABLE(filebutton), 1, 3); gtk_table_attach(GTK_TABLE(filebutton), filebutton->comboboxentry, 0, 1, 0, 1, GTK_FILL | GTK_EXPAND, GTK_FILL, 0, 0); gtk_table_attach(GTK_TABLE(filebutton), filebutton->button_clear, 1, 2, 0, 1, GTK_FILL, GTK_FILL, 2, 0); gtk_table_attach(GTK_TABLE(filebutton), filebutton->button_open, 2, 3, 0, 1, GTK_FILL, GTK_FILL, 0, 0); }KCemu-0.5.1/src/libgtkex/gtkledline.c0000644001050700006200000000663111345001576017103 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "libgtkex/gtkledline.h" G_DEFINE_TYPE(GtkLedLine, gtk_led_line, GTK_TYPE_DRAWING_AREA); GtkWidget * gtk_led_line_new(guint number_of_leds) { if (number_of_leds == 0) number_of_leds = 1; GtkLedLine *led_line = GTK_LED_LINE(g_object_new(GTK_TYPE_LED_LINE, NULL)); led_line->number_of_leds = number_of_leds; return GTK_WIDGET(led_line); } static void draw(GtkWidget *widget, cairo_t *cr) { int a; GtkLedLine *led_line; double x, y, radius, rx, ry; led_line = GTK_LED_LINE(widget); rx = widget->allocation.width / led_line->number_of_leds / 2 - 4; ry = widget->allocation.height / 2 - 4; radius = MIN(rx, ry); x = radius + 2; y = widget->allocation.height / 2; for (a = 0; a < led_line->number_of_leds; a++) { cairo_arc(cr, x, y, radius, 0, 2 * M_PI); cairo_set_source_rgb(cr, 1, 1, 1); cairo_fill_preserve(cr); cairo_set_source_rgb(cr, 0, 0, 0); cairo_stroke(cr); x += 2 * radius + led_line->spacing; } } static void gtk_led_line_size_request(GtkWidget *widget, GtkRequisition *requisition) { g_return_if_fail(widget != NULL); g_return_if_fail(GTK_IS_LED_LINE(widget)); g_return_if_fail(requisition != NULL); GtkLedLine *led_line = GTK_LED_LINE(widget); requisition->width = (20 + led_line->spacing) * led_line->number_of_leds - led_line->spacing; requisition->height = 20; } static void gtk_led_line_size_allocate(GtkWidget *widget, GtkAllocation *allocation) { g_return_if_fail(widget != NULL); g_return_if_fail(GTK_IS_LED_LINE(widget)); g_return_if_fail(allocation != NULL); printf("%dx%d+%d+%d\n", allocation->width, allocation->height, allocation->x, allocation->y); widget->allocation = *allocation; if (GTK_WIDGET_REALIZED(widget)) gdk_window_move_resize(widget->window, allocation->x, allocation->y, allocation->width, allocation->height); } static gboolean gtk_led_line_expose(GtkWidget *widget, GdkEventExpose *event) { cairo_t *cr; cr = gdk_cairo_create(widget->window); cairo_rectangle(cr, event->area.x, event->area.y, event->area.width, event->area.height); cairo_clip(cr); draw(widget, cr); cairo_destroy(cr); return FALSE; } static void gtk_led_line_class_init(GtkLedLineClass *class) { GtkWidgetClass *widget_class; widget_class = GTK_WIDGET_CLASS(class); widget_class->size_request = gtk_led_line_size_request; widget_class->size_allocate = gtk_led_line_size_allocate; widget_class->expose_event = gtk_led_line_expose; } static void gtk_led_line_init(GtkLedLine *led_line) { led_line->spacing = 2; } KCemu-0.5.1/src/libgtkex/Makefile.in0000644001050700006200000004062411412404773016663 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/libgtkex DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libgtkex_a_AR = $(AR) $(ARFLAGS) libgtkex_a_LIBADD = am_libgtkex_a_OBJECTS = gtkfilebutton.$(OBJEXT) gtkledline.$(OBJEXT) libgtkex_a_OBJECTS = $(am_libgtkex_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = $(libgtkex_a_SOURCES) DIST_SOURCES = $(libgtkex_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libgtkex.a INCLUDES = \ -I../../include AM_CPPFLAGS = \ $(GTK_CFLAGS) libgtkex_a_SOURCES = \ gtkfilebutton.c \ gtkledline.c all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/libgtkex/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/libgtkex/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libgtkex.a: $(libgtkex_a_OBJECTS) $(libgtkex_a_DEPENDENCIES) -rm -f libgtkex.a $(libgtkex_a_AR) libgtkex.a $(libgtkex_a_OBJECTS) $(libgtkex_a_LIBADD) $(RANLIB) libgtkex.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtkfilebutton.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gtkledline.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/cmd/0000755001050700006200000000000011412404772013541 5ustar glaubitzfbedvKCemu-0.5.1/src/cmd/cmdargs.cc0000644001050700006200000002065611345001576015501 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "cmd/cmd.h" #include "cmd/cmdargs.h" #include "libdbg/dbg.h" using namespace std; /* * class CMD_ListEntry */ CMD_ListEntry::CMD_ListEntry(CMD *cmd, CMD_Context context, const char *name) { _cmd = cmd; _context = context; _name = 0; if (name) _name = strdup(name); } CMD_ListEntry::~CMD_ListEntry(void) { if (_name) free(_name); } CMD * CMD_ListEntry::get_cmd(void) { return _cmd; } CMD_Context CMD_ListEntry::get_context(void) { return _context; } const char * CMD_ListEntry::get_name(void) { return _name; } /* * class CMD_List */ CMD_List::CMD_List(const char *name) { _name = strdup(name); _cmd_list = new cmd_list_t; } CMD_List::~CMD_List(void) { /* FIXME: free cmds here! */ delete _cmd_list; free(_name); } const char * CMD_List::get_name(void) { return _name; } void CMD_List::add_cmd(CMD *cmd, CMD_Context context) { _cmd_list->push_back(new CMD_ListEntry(cmd, context)); } void CMD_List::remove_cmd(CMD *cmd, CMD_Context context) { /* FIXME: */ } void CMD_List::execute(CMD_Args *args) { CMD_List::iterator it; for (it = _cmd_list->begin(); it != _cmd_list->end();it++) { (*it)->get_cmd()->execute(args, (*it)->get_context()); } } void CMD_List::dump(void) { CMD_List::iterator it; for (it = _cmd_list->begin(); it != _cmd_list->end();it++) DBG(0, form("KCemu/CMD_Repository", " - %-40s [%016p] {%d 0x%x}\n", (*it)->get_cmd()->get_name(), (*it)->get_cmd(), (*it)->get_context())); } /* * class CMD_Arg */ CMD_Arg::CMD_Arg(const char *name, CMD_Arg_Type type) { _name = strdup(name); _type = type; _value_set = false; } CMD_Arg::~CMD_Arg(void) { if (_value_set && (_type == CMD_ARG_STRING)) free(_val.v_string); } const char * CMD_Arg::get_name(void) { return _name; } CMD_Arg_Type CMD_Arg::get_type(void) { return _type; } void CMD_Arg::set_long_arg(long value) { char buf[50]; switch (_type) { case CMD_ARG_LONG: _val.v_long = value; break; case CMD_ARG_STRING: sprintf(buf, "%ld", value); _val.v_string = strdup(buf); break; } _value_set = true; } void CMD_Arg::set_string_arg(const char *value) { switch (_type) { case CMD_ARG_LONG: _val.v_long = strtol(value, NULL, 0); break; case CMD_ARG_STRING: _val.v_string = strdup(value); break; } _value_set = true; } void CMD_Arg::set_pointer_arg(void *value) { switch (_type) { case CMD_ARG_LONG: _val.v_long = (long)value; break; case CMD_ARG_STRING: _val.v_string = (char *)value; break; } _value_set = true; } long CMD_Arg::get_long_arg(void) { switch (_type) { case CMD_ARG_LONG: return _val.v_long; case CMD_ARG_STRING: return strtol(_val.v_string, NULL, 0); } return 0; } const char * CMD_Arg::get_string_arg(void) { switch (_type) { case CMD_ARG_LONG: cerr << "CMD_Arg: accessing LONG arg as STRING" << endl; break; case CMD_ARG_STRING: return _val.v_string; } return ""; } void * CMD_Arg::get_pointer_arg(void) { switch (_type) { case CMD_ARG_LONG: return (void *)_val.v_long; break; case CMD_ARG_STRING: return _val.v_string; } return 0; } /* * class CMD_Args */ CMD_Args::CMD_Args(void) { _user_data = 0; } CMD_Args::~CMD_Args(void) { CMD_Args::arg_iterator it; for (it = _arg_list.begin();it != _arg_list.end();it++) delete (*it); _arg_list.erase(_arg_list.begin(), _arg_list.end()); } CMD_Arg * CMD_Args::lookup(const char *name) { CMD_Args::arg_iterator it; for (it = _arg_list.begin();it != _arg_list.end();it++) { if (strcmp((*it)->get_name(), name) == 0) { return (*it); } } return 0; } CMD_Args * CMD_Args::set_long_arg(const char *name, long value) { CMD_Arg *arg; arg = lookup(name); if (arg == 0) { arg = new CMD_Arg(name, CMD_ARG_LONG); _arg_list.push_back(arg); } arg->set_long_arg(value); notify_change_listeners(); return this; } CMD_Args * CMD_Args::set_string_arg(const char *name, const char *value) { CMD_Arg *arg; arg = lookup(name); if (arg == 0) { arg = new CMD_Arg(name, CMD_ARG_STRING); _arg_list.push_back(arg); } arg->set_string_arg(value); notify_change_listeners(); return this; } CMD_Args * CMD_Args::set_pointer_arg(const char *name, void *value) { CMD_Arg *arg; arg = lookup(name); if (arg == 0) { arg = new CMD_Arg(name, CMD_ARG_STRING); _arg_list.push_back(arg); } arg->set_pointer_arg(value); notify_change_listeners(); return this; } CMD_Args * CMD_Args::add_change_listener(CMD_Change_Listener *listener) { _cl_list.push_back(listener); return this; } long CMD_Args::get_long_arg(const char *name) { CMD_Arg *arg; arg = lookup(name); if (arg == 0) return 0; return arg->get_long_arg(); } const char * CMD_Args::get_string_arg(const char *name) { CMD_Arg *arg; arg = lookup(name); if (arg == 0) return 0; return arg->get_string_arg(); } void * CMD_Args::get_pointer_arg(const char *name) { CMD_Arg *arg; arg = lookup(name); if (arg == 0) return 0; return arg->get_pointer_arg(); } bool CMD_Args::has_arg(const char *name) { if (lookup(name) == 0) return false; return true; } void CMD_Args::set_user_data(void *data) { _user_data = data; } void * CMD_Args::get_user_data(void) { return _user_data; } void CMD_Args::notify_change_listeners(void) { CMD_Args::cl_iterator it; for (it = _cl_list.begin();it != _cl_list.end();it++) { (*it)->cmd_args_changed(); } } void CMD_Args::add_callback(const char *name, CMD *cmd, CMD_Context context) { DBG(2, form("KCemu/CMD_Args/callback/add", "CMD_Args: adding callback '%s' for cmd '%s'\n", name, cmd->get_name())); _cb_list.push_back(new CMD_ListEntry(cmd, context, name)); } void CMD_Args::remove_callback(const char *name, CMD *cmd, CMD_Context context) { DBG(0, form("KCemu/warning", "CMD_Args::remove_callback(): *** NOT IMPLEMENTED ***\n")); DBG(2, form("KCemu/CMD_Args/callback/remove", "CMD_Args: removing callback '%s' for cmd '%s'\n", name, cmd->get_name())); /* FIXME: */ } void CMD_Args::call_callbacks(const char *name) { bool found; CMD *cmd; CMD_Args::cb_iterator it; found = false; for (it = _cb_list.begin();it != _cb_list.end();it++) { if (strcmp((*it)->get_name(), name) == 0) { found = true; cmd = (*it)->get_cmd(); DBG(2, form("KCemu/CMD_Args/callback/call", "CMD_Args: running callback '%s' on cmd '%s' [%d]\n", name, cmd->get_name(), (*it)->get_context())); cmd->execute(this, (*it)->get_context()); } } if (!found) { DBG(2, form("KCemu/CMD_Args/callback/call", "CMD_Args: no cmd registered on callback '%s'\n", name)); } } void CMD_Args::dump(const char *text) { CMD_Args::arg_iterator it; printf("CMD_Args: -=<[%s]>=-\n", text); for (it = _arg_list.begin();it != _arg_list.end();it++) { switch ((*it)->get_type()) { case CMD_ARG_LONG: printf("CMD_Args: %-30s I %ld\n", (*it)->get_name(), (*it)->get_long_arg()); break; case CMD_ARG_STRING: printf("CMD_Args: %-30s S '%s'\n", (*it)->get_name(), (*it)->get_string_arg()); break; default: printf("CMD_Args: %-30s ?", (*it)->get_name()); break; } } } KCemu-0.5.1/src/cmd/Makefile.am0000644001050700006200000000042711340261610015570 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in noinst_LIBRARIES = libcmd.a INCLUDES = \ -I../../include AM_CPPFLAGS = \ $(CPPFLAGS) \ -DVERSION=\"$(VERSION)\" libcmd_a_SOURCES = \ cmd.cc \ cmdargs.cc \ quit.cc \ reset.cc \ image.cc \ load.cc \ dbg.cc KCemu-0.5.1/src/cmd/reset.cc0000644001050700006200000000307611345001577015201 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/system.h" #include "kc/z80.h" #include "ui/status.h" #include "cmd/cmd.h" class CMD_reset : public CMD { public: CMD_reset(void) : CMD("Reset") { register_cmd("emu-reset", 0); register_cmd("emu-power-on", 1); register_cmd("emu-nmi", 2); } void execute(CMD_Args *args, CMD_Context context) { switch (context) { case 0: Status::instance()->setMessage("*** RESET ***"); z80->reset(); break; case 1: Status::instance()->setMessage("*** POWER ON ***"); z80->power_on(); break; case 2: Status::instance()->setMessage("*** NMI ***"); z80->nmi(); break; } } }; __force_link(CMD_reset); KCemu-0.5.1/src/cmd/quit.cc0000644001050700006200000000235611345001576015040 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/kc.h" #include "kc/z80.h" #include "ui/status.h" #include "cmd/cmd.h" class CMD_quit : public CMD { public: CMD_quit(void) : CMD("Quit") { register_cmd("emu-quit"); } void execute(CMD_Args *args, CMD_Context context) { Status::instance()->setMessage("*** QUIT ***"); CMD_Repository::instance()->dump(); z80->quit(); } }; __force_link(CMD_quit); KCemu-0.5.1/src/cmd/cmd.cc0000644001050700006200000001043311345001576014614 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "cmd/cmd.h" #include "libdbg/dbg.h" /* * class CMD */ CMD::CMD(const char *name) { _name = strdup(name); } CMD::~CMD(void) { free(_name); } const char * CMD::get_name(void) { return _name; } void CMD::register_cmd(const char *list_name, CMD_Context context) { DBG(0, form("KCemu/CMD/register", "CMD: registering command '%s', context = %d\n", list_name, context)); CMD_Repository::instance()->add_cmd(this, list_name, context); }; void CMD::unregister_cmd(const char *list_name, CMD_Context context) { DBG(0, form("KCemu/CMD/unregister", "CMD: unregistering command '%s', context = %d\n", list_name, context)); CMD_Repository::instance()->remove_cmd(this, list_name, context); }; void CMD::execute(CMD_Args *args, CMD_Context context) { DBG(0, form("KCemu/CMD/warning", "*** Warning: CMD without execute() function called!\n" "*** command is: '%s' [%p]\n" "*** context is: %d [0x%08x]\n", get_name(), this, context, context)); } /* * class CMD_Repository */ CMD_Repository * CMD_Repository::_singleton = 0; CMD_Repository::CMD_Repository(void) { _cmd_llist = new cmd_llist_t; } CMD_Repository::~CMD_Repository(void) { delete _cmd_llist; } CMD_Repository * CMD_Repository::instance(void) { if (_singleton == 0) _singleton = new CMD_Repository(); return _singleton; } void CMD_Repository::add_cmd(CMD *cmd, const char *list_name, CMD_Context context) { CMD_List *list; CMD_Repository::iterator it; list = 0; for (it = _cmd_llist->begin();it != _cmd_llist->end();it++) { if (strcmp((*it)->get_name(), list_name) == 0) { list = (*it); break; } } if (list == 0) { list = new CMD_List(list_name); _cmd_llist->push_back(list); } list->add_cmd(cmd, context); } void CMD_Repository::remove_cmd(CMD *cmd, const char *list_name, CMD_Context context) { CMD_List *list; CMD_Repository::iterator it; list = 0; for (it = _cmd_llist->begin();it != _cmd_llist->end();it++) { if (strcmp((*it)->get_name(), list_name) == 0) { list = (*it); break; } } if (list) list->remove_cmd(cmd, context); } void CMD_Repository::execute(const char *list_name, CMD_Args *args) { CMD_Repository::iterator it; for (it = _cmd_llist->begin(); it != _cmd_llist->end();it++) { if (strcmp((*it)->get_name(), list_name) == 0) { DBG(0, form("KCemu/CMD/execute", "CMD: executing command '%s'\n", list_name)); (*it)->execute(args); return; } } DBG(0, form("KCemu/CMD/warning", "*** Warning: unknown command list called!\n" "*** command list name: '%s'\n", list_name)); } void CMD_Repository::dump(void) { CMD_Repository::iterator it; DBG(0, form("KCemu/CMD_Repository", "*** CMD_Repository dump ***************************\n")); for (it = _cmd_llist->begin(); it != _cmd_llist->end();it++) { DBG(0, form("KCemu/CMD_Repository", "+ List: %s\n", (*it)->get_name())); (*it)->dump(); } DBG(0, form("KCemu/CMD_Repository", "*** CMD_Repository ********************************\n")); } KCemu-0.5.1/src/cmd/load.cc0000644001050700006200000000361011345001576014767 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/kc.h" #include "kc/memory.h" #include "ui/status.h" #include "cmd/cmd.h" class CMD_load : public CMD, public CMD_Caller, public CMD_Change_Listener { public: CMD_load(void) : CMD("load") { register_cmd("emu-load-image", 0); } void execute(CMD_Args *args, CMD_Context context) { CMD_Args *a; switch (context) { case 0: Status::instance()->setMessage("*** LOAD IMAGE ***"); a = new CMD_Args(); cmd_caller_set_args(a); a->add_change_listener(this); CMD_Repository::instance()->execute("ui-browse", a); a->dump("KCCMD_LOAD_IMAGE"); break; case 1: Status::instance()->setMessage("*** LOAD IMAGE OK ***"); a->dump("KCCMD_LOAD_IMAGE_OK"); break; } } void cmd_args_changed(void) { Status::instance()->setMessage(cmd_caller_get_args()->get_string_arg("file-name")); memory->loadRAM(cmd_caller_get_args()->get_string_arg("file-name")); } }; __force_link(CMD_load); KCemu-0.5.1/src/cmd/dbg.cc0000644001050700006200000000235211345001576014606 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include "kc/kc.h" #include "cmd/cmd.h" #include "ui/status.h" #include "libdbg/dbg.h" class CMD_dbg : public CMD { public: CMD_dbg(void) : CMD("dbg") { register_cmd("reload-debug-config", 0); } void execute(CMD_Args *args, CMD_Context context) { Status::instance()->setMessage("*** RELOAD DEBUG CONFIG ***"); DBG_load_config(); } }; __force_link(CMD_dbg); KCemu-0.5.1/src/cmd/image.cc0000644001050700006200000001457311345001576015144 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include "kc/system.h" #include "kc/kc.h" #include "kc/z80.h" #include "kc/memory.h" #include "cmd/cmd.h" #include "fileio/load.h" #include "libdbg/dbg.h" class CMD_kc_image_load : public CMD { private: enum { _NO_START_ADDR = -1, _NO_LOAD_ADDR = -2, _LOAD_ERROR = -3, }; static const char * _path; protected: public: CMD_kc_image_load(void); virtual ~CMD_kc_image_load(void); virtual void execute(CMD_Args *args, CMD_Context context); int image_save(const char *filename, int start_addr, int end_addr); }; const char * CMD_kc_image_load::_path = NULL; CMD_kc_image_load::CMD_kc_image_load(void) : CMD("kc-image-load") { register_cmd("kc-image-run", 0); register_cmd("kc-image-load", 1); register_cmd("kc-image-save", 5); } CMD_kc_image_load::~CMD_kc_image_load(void) { } void CMD_kc_image_load::execute(CMD_Args *args, CMD_Context context) { byte_t *buf; long a, size; const char *filename; int load, start, autostart; fileio_prop_t *prop; filename = 0; if (args) filename = args->get_string_arg("filename"); else args = new CMD_Args; switch (context) { case 0: /* * entry kc-image-run */ args->set_long_arg("auto-start", 1); /* fall through */ case 1: /* * entry kc-image-load */ if (!args->has_arg("auto-start")) args->set_long_arg("auto-start", 0); if (!filename) { args->set_string_arg("ui-file-select-title", _("KCemu: Select File...")); if (_path) args->set_string_arg("ui-file-select-path", _path); args->add_callback("ui-file-select-CB-ok", this, 2); args->add_callback("ui-file-select-CB-cancel", this, 2); CMD_EXEC_ARGS("ui-file-select", args); break; } /* fall through */ case 2: /* * we should have a valid filename now, if not abort command */ filename = args->get_string_arg("filename"); if (!filename) return; _path = filename; if (fileio_load_file(filename, &prop) != 0) { args->set_string_arg("ui-dialog-title", _("KCemu: Can't load file...")); args->set_string_arg("ui-dialog-text", _("The file you selected couldn't be loaded!")); CMD_EXEC_ARGS("ui-dialog-ok", args); return; } if (DBG_check("KCemu/CMD/image")) fileio_debug_dump(prop, 0); args->set_user_data(prop); if (prop->next != NULL) { args->set_string_arg("ui-dialog-title", _("KCemu: Warning...")); args->set_string_arg("ui-dialog-text", _("The file you selected contains more than one\n" "program. Only the first program will be loaded.\n" "If you want to access all the contained\n" "programs add this file to a tape-archive!")); args->add_callback("ui-dialog-ok-CB", this, 3); CMD_EXEC_ARGS("ui-dialog-ok", args); return; } /* fall through */ case 3: prop = (fileio_prop_t *)args->get_user_data(); if (prop == NULL) { DBG(0, form("KCemu/internal_error", "prop == NULL\n")); return; } switch (prop->type) { case FILEIO_TYPE_BAS: case FILEIO_TYPE_PROT_BAS: args->set_long_arg("load-address", 1025); break; default: if ((prop->valid & FILEIO_V_LOAD_ADDR) != FILEIO_V_LOAD_ADDR) { args->add_callback("ui-image-get-properties-CB-ok", this, 4); CMD_EXEC_ARGS("ui-image-get-properties", args); return; } } /* fall through */ case 4: if ((prop->valid & FILEIO_V_LOAD_ADDR) == FILEIO_V_LOAD_ADDR) load = prop->load_addr; if (args->has_arg("load-address")) load = args->get_long_arg("load-address"); start = 0xe000; if ((prop->valid & FILEIO_V_START_ADDR) == FILEIO_V_START_ADDR) start = prop->start_addr; if (args->has_arg("start-address")) start = args->get_long_arg("start-address"); autostart = 0; if (args->has_arg("auto-start")) autostart = args->get_long_arg("auto-start"); if ((prop->valid & FILEIO_V_AUTOSTART) == FILEIO_V_AUTOSTART) if (prop->autostart == 0) autostart = 0; buf = new byte_t[prop->size]; size = fileio_get_image(prop, buf); DBG(1, form("KCemu/CMD/image", "CMD: [image] file = '%s' (%d bytes / raw image %d)\n" "CMD: [image] load = %04xh\n" "CMD: [image] start = %04xh\n" "CMD: [image] run = %s\n", prop->name, prop->size, size, load, start, autostart ? "start automatically" : "load only")); for (a = 0;a < size;a++) memory->memWrite8(load + a, buf[a]); delete buf; if (autostart) z80->jump(start); break; case 5: filename = args->get_string_arg("filename"); if (!filename) return; if (args->has_arg("start-address") && args->has_arg("end-address")) image_save(filename, args->get_long_arg("start-address"), args->get_long_arg("end-address")); break; } } int CMD_kc_image_load::image_save(const char *filename, int start_addr, int end_addr) { if (start_addr < 0) start_addr = 0; if (end_addr > 0xffff) end_addr = 0xffff; if (start_addr > end_addr) start_addr = end_addr; FILE *f = fopen(filename, "wb"); if (f == NULL) return 1; int length = end_addr - start_addr + 1; byte_t *buf = new byte_t[length]; for (int a = 0;a < length;a++) buf[a] = memory->memRead8(start_addr + a); int ret = fwrite(buf, 1, length, f); fclose(f); delete buf; return ret != length; } __force_link(CMD_kc_image_load); KCemu-0.5.1/src/cmd/Makefile.in0000644001050700006200000004155211412404772015615 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src/cmd DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) AR = ar ARFLAGS = cru libcmd_a_AR = $(AR) $(ARFLAGS) libcmd_a_LIBADD = am_libcmd_a_OBJECTS = cmd.$(OBJEXT) cmdargs.$(OBJEXT) quit.$(OBJEXT) \ reset.$(OBJEXT) image.$(OBJEXT) load.$(OBJEXT) dbg.$(OBJEXT) libcmd_a_OBJECTS = $(am_libcmd_a_OBJECTS) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(libcmd_a_SOURCES) DIST_SOURCES = $(libcmd_a_SOURCES) ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LIBRARIES = libcmd.a INCLUDES = \ -I../../include AM_CPPFLAGS = \ $(CPPFLAGS) \ -DVERSION=\"$(VERSION)\" libcmd_a_SOURCES = \ cmd.cc \ cmdargs.cc \ quit.cc \ reset.cc \ image.cc \ load.cc \ dbg.cc all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/cmd/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/cmd/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) libcmd.a: $(libcmd_a_OBJECTS) $(libcmd_a_DEPENDENCIES) -rm -f libcmd.a $(libcmd_a_AR) libcmd.a $(libcmd_a_OBJECTS) $(libcmd_a_LIBADD) $(RANLIB) libcmd.a mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmd.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cmdargs.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dbg.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/image.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/load.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/quit.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/reset.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstLIBRARIES mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean clean-generic \ clean-noinstLIBRARIES ctags distclean distclean-compile \ distclean-generic distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/src/Makefile.in0000644001050700006200000004737711412404772015065 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = src DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = sys getopt libdbg fileio libtape libdisk libaudio \ libgtkex cmd ui kc util DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @USE_INCLUDED_GETOPT_TRUE@GETOPTDIR = getopt SUBDIRS = \ sys \ $(GETOPTDIR) \ libdbg \ fileio \ libtape \ libdisk \ libaudio \ libgtkex \ cmd \ ui \ kc \ util all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/man/0000755001050700006200000000000011412404771012761 5ustar glaubitzfbedvKCemu-0.5.1/man/Makefile.am0000644001050700006200000000011210527416074015014 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in SUBDIRS = man1 KCemu-0.5.1/man/man1/0000755001050700006200000000000011412404771013615 5ustar glaubitzfbedvKCemu-0.5.1/man/man1/kctape.10000644001050700006200000000256011345001576015152 0ustar glaubitzfbedv.TH KCTAPE 1 .SH NAME kctape \- handle tape files for KCemu .SH SYNOPSIS .B kctape \-t tapefile [command [command_args]] .br .B kctape \-\-help .br .SH "DESCRIPTION" This manual page documents briefly the .BR kctape command. This manual page was written for the Debian GNU/Linux distribution because the original program does not have a manual page. .SH OPTIONS .TP .B \-h, \-\-help Show short help text. .TP .B \-v, \-\-verbose Be verbose about what's going on. .TP .B \-t, \-\-tape tapefile tape archive to process. .TP .B \-l, \-\-list List the content of the tapefile. .TP .B \-c, \-\-create Create the specified tapefile. .TP .B \-a, \-\-add file [file ...] Add new file to tapefile (in KC85/3 mode). .TP .B \-1, \-\-add1 file [file ...] Add new file to tapefile (in KC85/1 mode). .TP .B \-r, \-\-remove filename Remove file from tapefile. .TP .B \-x, \-\-extract filename Extract file to stdout or to the file specified by \-o. .TP .B \-d, \-\-dump filename Hexdump file from tapefile. .TP .B \-o, \-\-output filename Output file for the extract command. .TP .B \-b, \-\-print\-bam Show internal block allocation map. .TP .B \-B, \-\-print\-block\-list Show internal block list. .SH SEE ALSO kcemu(1x), kc2tap(1), kc2wav(1), kc2img(1), kc2raw(1) .SH AUTHOR This manual page was written by Torsten Paul , for the Debian GNU/Linux system (but may be used by others). KCemu-0.5.1/man/man1/kc2wav.10000644001050700006200000000162710527416074015107 0ustar glaubitzfbedv.TH kc2wav 1 .SH NAME kc2wav \- convert KC files audio files (.WAV format) .SH SYNOPSIS .B kc2wav .br .SH DESCRIPTION .B kc2wav converts the following file types to raw KC tape images .LP .IR 1) files used by the KC emulator by Arne Fitzenreiter (usually named .TAP) .LP .IR 2) files used by the GEMINI-SOFT KC emulator (usually named .GPF for machine code files and .GBF for basic files) .LP .IR 3) BASIC files (usually named .SSS) .LP .IR 4) KC image files that contain the data written by the KC tape routines without block number and checksum (usually named .KCC or .KCB where the .KCB files are BASIC files with an autostart routine) .SH BUGS Basic files are not handled properly. .SH SEE ALSO kcemu(1x), kctape(1), kc2tap(1), kc2img(1), kc2raw(1) .SH AUTHOR This manual page was written by Torsten Paul , for the Debian GNU/Linux system (but may be used by others). KCemu-0.5.1/man/man1/tdtodump.10000644001050700006200000000112111345001576015533 0ustar glaubitzfbedv.TH tdtodump 1 .SH NAME tdtodump \- convert TeleDisk images to disk dump files .SH SYNOPSIS .B tdtodump .br .SH DESCRIPTION .B tdtodump converts disk images produced by the Sydex TeleDisk program to uncompressed disk dumps. The format of the disk dumps is compatible with the file format used by the Sydex AnaDisk program. .LP .SH BUGS Currently only images created with normal compression are supported. .SH SEE ALSO kcemu(1x) .SH AUTHOR This manual page was written by Torsten Paul , for the Debian GNU/Linux system (but may be used by others). KCemu-0.5.1/man/man1/Makefile.am0000644001050700006200000000031010527416074015650 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in man_MANS = \ kcemu.1x \ kctape.1 \ kc2raw.1 \ kc2img.1 \ kc2tap.1 \ kc2wav.1 \ tdtodump.1 \ kcemu-remote.1 EXTRA_DIST = $(man_MANS) KCemu-0.5.1/man/man1/kc2tap.10000644001050700006200000000162310527416074015072 0ustar glaubitzfbedv.TH kc2tap 1 .SH NAME kc2tap \- convert KC files to raw KC tape images .SH SYNOPSIS .B kc2tap .br .SH DESCRIPTION .B kc2tap converts the following file types to raw KC tape images .LP .IR 1) files used by the KC emulator by Arne Fitzenreiter (usually named .TAP) .LP .IR 2) files used by the GEMINI-SOFT KC emulator (usually named .GPF for machine code files and .GBF for basic files) .LP .IR 3) BASIC files (usually named .SSS) .LP .IR 4) KC image files that contain the data written by the KC tape routines without block number and checksum (usually named .KCC or .KCB where the .KCB files are BASIC files with an autostart routine) .SH BUGS Basic files are not handled properly. .SH SEE ALSO kcemu(1x), kctape(1), kc2wav(1), kc2img(1), kc2raw(1) .SH AUTHOR This manual page was written by Torsten Paul , for the Debian GNU/Linux system (but may be used by others). KCemu-0.5.1/man/man1/kcemu-remote.10000644001050700006200000000304311345001576016275 0ustar glaubitzfbedv.TH KCEMU-REMOTE 1 .SH NAME kcemu-remote \- A remote controller for the KC 85/4 Emulator .SH SYNOPSIS .B kcemu-remote command [param1=value1] [param2=value2] ... .br .SH "DESCRIPTION" This manual page documents briefly the .BR kcemu-remote command. This manual page was written for the Debian GNU/Linux distribution because the original program does not have a manual page. .PP .B kcemu-remote can control an already running KCemu by sending commands. The communication is done via the X Window System and is network transparent as long as the X Window Display can be accessed. .SH EXAMPLE COMMANDS .TP .B emu-reset Reset the emulator. .TP .B emu-power-on Power-On Reset the emulator. .TP .B emu-quit Exit the emulator. .TP .B kc-image-load filename=/absolute/path/to/imagefile Load a program into the emulator (if the given file is not found a filerequester will pop up). .TP .B kc-image-run filename=/absolute/path/to/imagefile Just like kc-image-load but tries to start the program after it is loaded. .TP .B floppy-attach filename=/absolute/path/to/diskimage The only way to change disk images for now (the user interface is not functional ;-)). .TP .B keyboard-replay test=text_to_insert Send the text to the emulator. .SH BUGS There is no error handling and it's not possible to specify an emulator instance if more than one emulator is running. .SH SEE ALSO kcemu(1x), kctape(1), kc2tap(1), kc2wav(1), kc2img(1), kc2raw(1) .SH AUTHOR This manual page was written by Torsten Paul , for the Debian GNU/Linux system (but may be used by others). KCemu-0.5.1/man/man1/kc2raw.10000644001050700006200000000171710527416074015103 0ustar glaubitzfbedv.TH kc2raw 1 .SH NAME kc2raw \- convert KC files to KC memory dumps .SH SYNOPSIS .B kc2raw .br .SH DESCRIPTION .B kc2raw converts the following file types to KC memory dumps. Those files only represent a memory snapshot without any header. .LP .IR 1) files used by the KC emulator by Arne Fitzenreiter (usually named .TAP) .LP .IR 2) files used by the GEMINI-SOFT KC emulator (usually named .GPF for machine code files and .GBF for basic files) .LP .IR 3) BASIC files (usually named .SSS) .LP .IR 4) KC image files that contain the data written by the KC tape routines without block number and checksum (usually named .KCC or .KCB where the .KCB files are BASIC files with an autostart routine) .SH BUGS Basic files are not handled properly. .SH SEE ALSO kcemu(1x), kctape(1), kc2tap(1), kc2wav(1), kc2img(1) .SH AUTHOR This manual page was written by Torsten Paul , for the Debian GNU/Linux system (but may be used by others). KCemu-0.5.1/man/man1/kcemu.1x0000644001050700006200000000245711345001576015204 0ustar glaubitzfbedv.TH KCEMU 1x .SH NAME kcemu \- The KC 85/4 Emulator .SH SYNOPSIS .B kcemu [\-123478sthdlvLW] .br .SH "DESCRIPTION" This manual page documents briefly the .BR kcemu command. This manual page was written for the Debian GNU/Linux distribution because the original program does not have a manual page. .PP .B kcemu emulates various versions of the KC85 homecomputer series which was quite popular in the former east germany. It already runs quite some original programs and even boots an special old CP/M version. .SH OPTIONS .TP .B \-1 Emulate Z9001 / KC 85/1 computer. .TP .B \-2 Emulate HC-900 / KC 85/2 computer. .TP .B \-3 Emulate KC 85/3 computer. .TP .B \-4 Emulate KC 85/4 computer. .TP .B \-7 Emulate KC 87 computer (KC 85/1 with color expansion). .TP .B \-8 Emulate LC 80 computer. .TP .B \-s \-\-scale Scale display (only values 1 and 2 allowed). .TP .B \-t \-\-tape Attach tape on startup. .TP .B \-h \-\-help Show summary of options. .TP .B \-d \-\-datadir Set data directory (for ROM images). .TP .B \-l \-\-localedir Set locale directory. .TP .B \-v \-\-version Show KCemu version and configuration. .TP .B \-L \-\-license Show license. .TP .B \-W \-\-warranty Show warranty. .SH AUTHOR This manual page was written by Torsten Paul , for the Debian GNU/Linux system (but may be used by others). KCemu-0.5.1/man/man1/kc2img.10000644001050700006200000000246310527416074015065 0ustar glaubitzfbedv.TH kc2img 1 .SH NAME kc2img \- convert KC files to raw KC tape images .SH SYNOPSIS .B kc2img .br .SH DESCRIPTION .B kc2img converts the following file types to raw KC tape images. Those files contain the data bytes as written by the KC tape routines with block number and checksum removed. So each block is saved as 128 bytes. .LP Machine code files start with an 128 byte header (one block) that contains filename, load start address, load end address and optionally a start address whose presence is flagged by a status byte. Basic files only have a 13 byte header with filename and filesize. .LP .IR 1) files used by the KC emulator by Arne Fitzenreiter (usually named .TAP) .LP .IR 2) files used by the GEMINI-SOFT KC emulator (usually named .GPF for machine code files and .GBF for basic files) .LP .IR 3) BASIC files (usually named .SSS) .LP .IR 4) KC image files that contain the data written by the KC tape routines without block number and checksum (usually named .KCC or .KCB where the .KCB files are BASIC files with an autostart routine) .SH BUGS Basic files are not handled properly. .SH SEE ALSO kcemu(1x), kctape(1), kc2tap(1), kc2wav(1), kc2raw(1) .SH AUTHOR This manual page was written by Torsten Paul , for the Debian GNU/Linux system (but may be used by others). KCemu-0.5.1/man/man1/Makefile.in0000644001050700006200000004006011412404771015662 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = man/man1 DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ man_MANS = \ kcemu.1x \ kctape.1 \ kc2raw.1 \ kc2img.1 \ kc2tap.1 \ kc2wav.1 \ tdtodump.1 \ kcemu-remote.1 EXTRA_DIST = $(man_MANS) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/man1/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu man/man1/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-man1: $(man_MANS) @$(NORMAL_INSTALL) test -z "$(man1dir)" || $(MKDIR_P) "$(DESTDIR)$(man1dir)" @list=''; test -n "$(man1dir)" || exit 0; \ { for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ test -z "$$files" || { \ echo " ( cd '$(DESTDIR)$(man1dir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(man1dir)" && rm -f $$files; } tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @list='$(MANS)'; if test -n "$$list"; then \ list=`for p in $$list; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ if test -f "$$d$$p"; then echo "$$d$$p"; else :; fi; done`; \ if test -n "$$list" && \ grep 'ab help2man is required to generate this page' $$list >/dev/null; then \ echo "error: found man pages containing the \`missing help2man' replacement text:" >&2; \ grep -l 'ab help2man is required to generate this page' $$list | sed 's/^/ /' >&2; \ echo " to fix them, install help2man, remove and regenerate the man pages;" >&2; \ echo " typically \`make maintainer-clean' will remove them" >&2; \ exit 1; \ else :; fi; \ else :; fi @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-man uninstall-man1 # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/man/Makefile.in0000644001050700006200000004704011412404771015033 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = man DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = man1 all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu man/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/COPYING.de0000644001050700006200000006444710527416074013654 0ustar glaubitzfbedv Deutsche bersetzung der GNU General Public License Erstellt im Auftrag der S.u.S.E. GmbH [suse@suse.de] von Katja Lachmann bersetzungen [na194@fim.uni-erlangen.de], berarbeitet von Peter Gerwinski [peter.gerwinski@uni-essen.de] (31. Oktober 1996) Diese bersetzung wird mit der Absicht angeboten, das Verstndnis der GNU General Public License (GNU-GPL) zu erleichtern. Es handelt sich jedoch nicht um eine offizielle oder im rechtlichen Sinne anerkannte bersetzung. Die Free Software Foundation (FSF) ist nicht der Herausgeber dieser bersetzung, und sie hat diese bersetzung auch nicht als rechtskrftigen Ersatz fr die Original-GNU-GPL anerkannt. Da die bersetzung nicht sorgfltig von Anwlten berprft wurde, knnen die bersetzer nicht garantieren, da die bersetzung die rechtlichen Aussagen der GNU-GPL exakt wiedergibt. Wenn Sie sichergehen wollen, da von Ihnen geplante Aktivitten im Sinne der GNU-GPL gestattet sind, halten Sie sich bitte an die englischsprachige Originalversion. Die Free Software Foundation mchte Sie darum bitten, diese bersetzung nicht als offizielle Lizenzbedingungen fr von Ihnen geschriebene Programme zu verwenden. Bitte benutzen Sie hierfr stattdessen die von der Free Software Foundation herausgegebene englischsprachige Originalversion. This is a translation of the GNU General Public License into German. This translation is distributed in the hope that it will facilitate understanding, but it is not an official or legally approved translation. The Free Software Foundation is not the publisher of this translation and has not approved it as a legal substitute for the authentic GNU General Public License. The translation has not been reviewed carefully by lawyers, and therefore the translator cannot be sure that it exactly represents the legal meaning of the GNU General Public License. If you wish to be sure whether your planned activities are permitted by the GNU General Public License, please refer to the authentic English version. The Free Software Foundation strongly urges you not to use this translation as the official distribution terms for your programs; instead, please use the authentic English version published by the Free Software Foundation. _________________________________________________________________ GNU General Public License Deutsche bersetzung der Version 2, Juni 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 675 Mass Ave, Cambridge, MA 02139, USA Jeder hat das Recht, diese Lizenzurkunde zu vervielfltigen und unvernderte Kopien zu verbreiten; nderungen sind jedoch nicht gestattet. Diese bersetzung ist kein rechtskrftiger Ersatz fr die englischsprachige Originalversion! Vorwort Die meisten Softwarelizenzen sind daraufhin entworfen worden, Ihnen die Freiheit zu nehmen, die Software weiterzugeben und zu verndern. Im Gegensatz dazu soll Ihnen die GNU General Public License, die allgemeine ffentliche GNU-Lizenz, ebendiese Freiheit garantieren. Sie soll sicherstellen, da die Software fr alle Benutzer frei ist. Diese Lizenz gilt fr den Groteil der von der Free Software Foundation herausgegebenen Software und fr alle anderen Programme, deren Autoren ihr Werk dieser Lizenz unterstellt haben. Auch Sie knnen diese Mglichkeit der Lizenzierung fr Ihre Programme anwenden. (Ein anderer Teil der Software der Free Software Foundation unterliegt stattdessen der GNU Library General Public License, der allgemeinen ffentlichen GNU-Lizenz fr Bibliotheken. ) Die Bezeichnung "freie" Software bezieht sich auf Freiheit, nicht auf den Preis. Unsere Lizenzen sollen Ihnen die Freiheit garantieren, Kopien freier Software zu verbreiten (und etwas fr diesen Service zu berechnen, wenn Sie mchten), die Mglichkeit, die Software im Quelltext zu erhalten oder den Quelltext auf Wunsch zu bekommen. Die Lizenzen sollen garantieren, da Sie die Software ndern oder Teile davon in neuen freien Programmen verwenden drfen - und da Sie wissen, da Sie dies alles tun drfen. Um Ihre Rechte zu schtzen, mssen wir Einschrnkungen machen, die es jedem verbieten, Ihnen diese Rechte zu verweigern oder Sie aufzufordern, auf diese Rechte zu verzichten. Aus diesen Einschrnkungen folgen bestimmte Verantwortlichkeiten fr Sie, wenn Sie Kopien der Software verbreiten oder sie verndern. Beispielsweise mssen Sie den Empfngern alle Rechte gewhren, die Sie selbst haben, wenn Sie - kostenlos oder gegen Bezahlung - Kopien eines solchen Programms verbreiten. Sie mssen sicherstellen, da auch sie den Quelltext erhalten bzw. erhalten knnen. Und Sie mssen ihnen diese Bedingungen zeigen, damit sie ihre Rechte kennen. Wir schtzen Ihre Rechte in zwei Schritten: (1) Wir stellen die Software unter ein Urheberrecht (Copyright), und (2) wir bieten Ihnen diese Lizenz an, die Ihnen das Recht gibt, die Software zu vervielfltigen, zu verbreiten und/oder zu verndern. Um die Autoren und uns zu schtzen, wollen wir darberhinaus sicherstellen, da jeder erfhrt, da fr diese freie Software keinerlei Garantie besteht. Wenn die Software von jemand anderem modifiziert und weitergegeben wird, mchten wir, da die Empfnger wissen, da sie nicht das Original erhalten haben, damit von anderen verursachte Probleme nicht den Ruf des ursprnglichen Autors schdigen. Schlielich und endlich ist jedes freie Programm permanent durch Software-Patente bedroht. Wir mchten die Gefahr ausschlieen, da Distributoren eines freien Programms individuell Patente lizensieren - mit dem Ergebnis, da das Programm proprietr wrde. Um dies zu verhindern, haben wir klargestellt, da jedes Patent entweder fr freie Benutzung durch jedermann lizenziert werden mu oder berhaupt nicht lizenziert werden darf. Es folgen die genauen Bedingungen fr die Vervielfltigung, Verbreitung und Bearbeitung: Bedingungen fr die Vervielfltigung, Verbreitung und Bearbeitung Paragraph 0. Diese Lizenz gilt fr jedes Programm und jedes andere Werk, in dem ein entsprechender Vermerk des Copyright-Inhabers darauf hinweist, da das Werk unter den Bestimmungen dieser General Public License verbreitet werden darf. Im folgenden wird jedes derartige Programm oder Werk als "das Programm" bezeichnet; die Formulierung "auf dem Programm basierendes Werk" bezeichnet das Programm sowie jegliche Bearbeitung des Programms im urheberrechtlichen Sinne, also ein Werk, welches das Programm, auch auszugsweise, sei es unverndert oder verndert und/oder in eine andere Sprache bersetzt, enthlt. (Im folgenden wird die bersetzung ohne Einschrnkung als "Bearbeitung" eingestuft.) Jeder Lizenznehmer wird im folgenden als "Sie" angesprochen. Andere Handlungen als Vervielfltigung, Verbreitung und Bearbeitung werden von dieser Lizenz nicht berhrt; sie fallen nicht in ihren Anwendungsbereich. Der Vorgang der Ausfhrung des Programms wird nicht eingeschrnkt, und die Ausgaben des Programms unterliegen dieser Lizenz nur, wenn der Inhalt ein auf dem Programm basierendes Werk darstellt (unabhngig davon, da die Ausgabe durch die Ausfhrung des Programmes erfolgte). Ob dies zutrifft, hngt von den Funktionen des Programms ab. Paragraph 1. Sie drfen auf beliebigen Medien unvernderte Kopien des Quelltextes des Programms, wie sie ihn erhalten haben, anfertigen und verbreiten. Voraussetzung hierfr ist, da Sie mit jeder Kopie einen entsprechenden Copyright-Vermerk sowie einen Haftungsausschlu verffentlichen, alle Vermerke, die sich auf diese Lizenz und das Fehlen einer Garantie beziehen, unverndert lassen und desweiteren allen anderen Empfngern des Programms zusammen mit dem Programm eine Kopie dieser Lizenz zukommen lassen. Sie drfen fr den eigentlichen Kopiervorgang eine Gebhr verlangen. Wenn Sie es wnschen, drfen Sie auch gegen Entgelt eine Garantie fr das Programm anbieten. Paragraph 2. Sie drfen Ihre Kopie(n) des Programms oder eines Teils davon verndern, wodurch ein auf dem Programm basierendes Werk entsteht; Sie drfen derartige Bearbeitungen unter den Bestimmungen von Paragraph 1 vervielfltigen und verbreiten, vorausgesetzt, da zustzlich alle folgenden Bedingungen erfllt werden: (a) Sie mssen die vernderten Dateien mit einem aufflligen Vermerk versehen, der auf die von Ihnen vorgenommene Modifizierung und das Datum jeder nderung hinweist. (b) Sie mssen dafr sorgen, da jede von Ihnen verbreitete oder verffentlichte Arbeit, die ganz oder teilweise von dem Programm oder Teilen davon abgeleitet ist, Dritten gegenber als Ganzes unter den Bedingungen dieser Lizenz ohne Lizenzgebhren zur Verfgung gestellt wird. (c) Wenn das vernderte Programm normalerweise bei der Ausfhrung interaktiv Kommandos einliest, mssen Sie dafr sorgen, da es, wenn es auf dem blichsten Wege fr solche interaktive Nutzung gestartet wird, eine Meldung ausgibt oder ausdruckt, die einen geeigneten Copyright-Vermerk enthlt sowie einen Hinweis, da es keine Gewhrleistung gibt (oder anderenfalls, da Sie Garantie leisten), und da die Benutzer das Programm unter diesen Bedingungen weiter verbreiten drfen. Auch mu der Benutzer darauf hingewiesen werden, wie er eine Kopie dieser Lizenz ansehen kann. (Ausnahme: Wenn das Programm selbst interaktiv arbeitet, aber normalerweise keine derartige Meldung ausgibt, mu Ihr auf dem Programm basierendes Werk auch keine solche Meldung ausgeben). Diese Anforderungen betreffen das vernderte Werk als Ganzes. Wenn identifizierbare Abschnitte des Werkes nicht von dem Programm abgeleitet sind und vernnftigerweise selbst als unabhngige und eigenstndige Werke betrachtet werden knnen, dann erstrecken sich diese Lizenz und ihre Bedingungen nicht auf diese Abschnitte, wenn sie als eigenstndige Werke verbreitet werden. Wenn Sie jedoch dieselben Abschnitte als Teil eines Ganzen verbreiten, das ein auf dem Programm basierendes Werk darstellt, dann mu die Verbreitung des Ganzen nach den Bedingungen dieser Lizenz erfolgen, deren Bedingungen fr weitere Lizenznehmer somit auf die Gesamtheit ausgedehnt werden - und damit auf jeden einzelnen Teil, unabhngig vom jeweiligen Autor. Somit ist es nicht die Absicht dieses Abschnittes, Rechte fr Werke in Anspruch zu nehmen oder zu beschneiden, die komplett von Ihnen geschrieben wurden; vielmehr ist es die Absicht, die Rechte zur Kontrolle der Verbreitung von Werken, die auf dem Programm basieren oder unter seiner auszugsweisen Verwendung zusammengestellt worden sind, auszuben. Ferner bringt ein einfaches Zusammenstellen eines anderen Werkes, das nicht auf dem Programm basiert, zusammen mit dem Programm oder einem auf dem Programm basierenden Werk auf ein- und demselben Speicher- oder Vertriebsmedium das andere Werk nicht in den Anwendungsbereich dieser Lizenz. Paragraph 3. Sie drfen das Programm (oder ein darauf basierendes Werk gem Paragraph 2) als Objectcode oder in ausfhrbarer Form unter den Bedingungen von Paragraph 1 und 2 vervielfltigen und verbreiten - vorausgesetzt, da Sie auerdem eine der folgenden Leistungen erbringen: (a) Liefern Sie das Programm zusammen mit dem vollstndigen zugehrigen maschinenlesbaren Quelltext auf einem fr den Datenaustausch blichen Medium aus, wobei die Verteilung unter den Bedingungen der Paragraphen 1 und 2 erfolgen mu. Oder: (b) Liefern Sie das Programm zusammen mit einem mindestens drei Jahre lang gltigen schriftlichen Angebot aus, jedem Dritten eine vollstndige maschinenlesbare Kopie des Quelltextes zur Verfgung zu stellen - zu nicht hheren Kosten als denen, die durch den physikalischen Kopiervorgang anfallen -, wobei der Quelltext unter den Bedingungen der Paragraphen 1 und 2 auf einem fr den Datenaustausch blichen Medium weitergegeben wird. Oder: (c) Liefern Sie das Programm zusammen mit dem schriftlichen Angebot der Zurverfgungstellung des Quelltextes aus, das Sie selbst erhalten haben. (Diese Alternative ist nur fr nicht-kommerzielle Verbreitung zulssig und nur, wenn Sie das Programm als Objectcode oder in ausfhrbarer Form mit einem entsprechenden Angebot gem Absatz b erhalten haben.) Unter dem Quelltext eines Werkes wird diejenige Form des Werkes verstanden, die fr Bearbeitungen vorzugsweise verwendet wird. Fr ein ausfhrbares Programm bedeutet "der komplette Quelltext": Der Quelltext aller im Programm enthaltenen Module einschlielich aller zugehrigen Modulschnittstellen-Definitionsdateien sowie der zur Compilation und Installation verwendeten Skripte. Als besondere Ausnahme jedoch braucht der verteilte Quelltext nichts von dem zu enthalten, was blicherweise (entweder als Quelltext oder in binrer Form) zusammen mit den Hauptkomponenten des Betriebssystems (Kernel, Compiler usw.) geliefert wird, unter dem das Programm luft - es sei denn, diese Komponente selbst gehrt zum ausfhrbaren Programm. Wenn die Verbreitung eines ausfhrbaren Programms oder des Objectcodes dadurch erfolgt, da der Kopierzugriff auf eine dafr vorgesehene Stelle gewhrt wird, so gilt die Gewhrung eines gleichwertigen Zugriffs auf den Quelltext als Verbreitung des Quelltextes, auch wenn Dritte nicht dazu gezwungen sind, den Quelltext zusammen mit dem Objectcode zu kopieren. Paragraph 4. Sie drfen das Programm nicht vervielfltigen, verndern, weiter lizenzieren oder verbreiten, sofern es nicht durch diese Lizenz ausdrcklich gestattet ist. Jeder anderweitige Versuch der Vervielfltigung, Modifizierung, Weiterlizenzierung und Verbreitung ist nichtig und beendet automatisch Ihre Rechte unter dieser Lizenz. Jedoch werden die Lizenzen Dritter, die von Ihnen Kopien oder Rechte unter dieser Lizenz erhalten haben, nicht beendet, solange diese die Lizenz voll anerkennen und befolgen. Paragraph 5. Sie sind nicht verpflichtet, diese Lizenz anzunehmen, da Sie sie nicht unterzeichnet haben. Jedoch gibt Ihnen nichts anderes die Erlaubnis, das Programm oder von ihm abgeleitete Werke zu verndern oder zu verbreiten. Diese Handlungen sind gesetzlich verboten, wenn Sie diese Lizenz nicht anerkennen. Indem Sie das Programm (oder ein darauf basierendes Werk) verndern oder verbreiten, erklren Sie Ihr Einverstndnis mit dieser Lizenz und mit allen ihren Bedingungen bezglich der Vervielfltigung, Verbreitung und Vernderung des Programms oder eines darauf basierenden Werkes. Paragraph 6. Jedesmal, wenn Sie das Programm (oder ein auf dem Programm basierendes Werk) weitergeben, erhlt der Empfnger automatisch vom ursprnglichen Lizenzgeber die Lizenz, das Programm entsprechend den hier festgelegten Bestimmungen zu vervielfltigen, zu verbreiten und zu verndern. Sie drfen keine weiteren Einschrnkungen der Durchsetzung der hierin zugestandenen Rechte des Empfngers vornehmen. Sie sind nicht dafr verantwortlich, die Einhaltung dieser Lizenz durch Dritte durchzusetzen. Paragraph 7. Sollten Ihnen infolge eines Gerichtsurteils, des Vorwurfs einer Patentverletzung oder aus einem anderen Grunde (nicht auf Patentfragen begrenzt) Bedingungen (durch Gerichtsbeschlu, Vergleich oder anderweitig) auferlegt werden, die den Bedingungen dieser Lizenz widersprechen, so befreien Sie diese Umstnde nicht von den Bestimmungen dieser Lizenz. Wenn es Ihnen nicht mglich ist, das Programm unter gleichzeitiger Beachtung der Bedingungen in dieser Lizenz und Ihrer anderweitigen Verpflichtungen zu verbreiten, dann drfen Sie als Folge das Programm berhaupt nicht verbreiten. Wenn zum Beispiel ein Patent nicht die gebhrenfreie Weiterverbreitung des Programms durch diejenigen erlaubt, die das Programm direkt oder indirekt von Ihnen erhalten haben, dann besteht der einzige Weg, sowohl das Patentrecht als auch diese Lizenz zu befolgen, darin, ganz auf die Verbreitung des Programms zu verzichten. Sollte sich ein Teil dieses Paragraphen als ungltig oder unter bestimmten Umstnden nicht durchsetzbar erweisen, so soll dieser Paragraph seinem Sinne nach angewandt werden; im brigen soll dieser Paragraph als Ganzes gelten. Zweck dieses Paragraphen ist nicht, Sie dazu zu bringen, irgendwelche Patente oder andere Eigentumsansprche zu verletzen oder die Gltigkeit solcher Ansprche zu bestreiten; dieser Paragraph hat einzig den Zweck, die Integritt des Verbreitungssystems der freien Software zu schtzen, das durch die Praxis ffentlicher Lizenzen verwirklicht wird. Viele Leute haben grozgige Beitrge zu dem groen Angebot der mit diesem System verbreiteten Software im Vertrauen auf die konsistente Anwendung dieses Systems geleistet; es liegt am Autor/Geber, zu entscheiden, ob er die Software mittels irgendeines anderen Systems verbreiten will; ein Lizenznehmer hat auf diese Entscheidung keinen Einflu. Dieser Paragraph ist dazu gedacht, deutlich klarzustellen, was als Konsequenz aus dem Rest dieser Lizenz betrachtet wird. Paragraph 8. Wenn die Verbreitung und/oder die Benutzung des Programms in bestimmten Staaten entweder durch Patente oder durch urheberrechtlich geschtzte Schnittstellen eingeschrnkt ist, kann der Urheberrechtsinhaber, der das Programm unter diese Lizenz gestellt hat, eine explizite geographische Begrenzung der Verbreitung angeben, in der diese Staaten ausgeschlossen werden, so da die Verbreitung nur innerhalb und zwischen den Staaten erlaubt ist, die nicht ausgeschlossen sind. In einem solchen Fall beinhaltet diese Lizenz die Beschrnkung, als wre sie in diesem Text niedergeschrieben. Paragraph 9. Die Free Software Foundation kann von Zeit zu Zeit berarbeitete und/oder neue Versionen der General Public License verffentlichen. Solche neuen Versionen werden vom Grundprinzip her der gegenwrtigen entsprechen, knnen aber im Detail abweichen, um neuen Problemen und Anforderungen gerecht zu werden. Jede Version dieser Lizenz hat eine eindeutige Versionsnummer. Wenn in einem Programm angegeben wird, da es dieser Lizenz in einer bestimmten Versionsnummer oder "jeder spteren Version" ("any later version") unterliegt, so haben Sie die Wahl, entweder den Bestimmungen der genannten Version zu folgen oder denen jeder beliebigen spteren Version, die von der Free Software Foundation verffentlicht wurde. Wenn das Programm keine Versionsnummer angibt, knnen Sie eine beliebige Version whlen, die je von der Free Software Foundation verffentlicht wurde. Paragraph 10. Wenn Sie den Wunsch haben, Teile des Programms in anderen freien Programmen zu verwenden, deren Bedingungen fr die Verbreitung anders sind, schreiben Sie an den Autor, um ihn um die Erlaubnis zu bitten. Fr Software, die unter dem Copyright der Free Software Foundation steht, schreiben Sie an die Free Software Foundation; wir machen zu diesem Zweck gelegentlich Ausnahmen. Unsere Entscheidung wird von den beiden Zielen geleitet werden, zum einen den freien Status aller von unserer freien Software abgeleiteten Werke zu erhalten und zum anderen das gemeinschaftliche Nutzen und Wiederverwenden von Software im allgemeinen zu frdern. Keine Gewhrleistung Paragraph 11. Da das Programm ohne jegliche Kosten lizenziert wird, besteht keinerlei Gewhrleistung fr das Programm, soweit dies gesetzlich zulssig ist. Sofern nicht anderweitig schriftlich besttigt, stellen die Copyright-Inhaber und/oder Dritte das Programm so zur Verfgung, "wie es ist", ohne irgendeine Gewhrleistung, weder ausdrcklich noch implizit, einschlielich - aber nicht begrenzt auf - Marktreife oder Verwendbarkeit fr einen bestimmten Zweck. Das volle Risiko bezglich Qualitt und Leistungsfhigkeit des Programms liegt bei Ihnen. Sollte sich das Programm als fehlerhaft herausstellen, liegen die Kosten fr notwendigen Service, Reparatur oder Korrektur bei Ihnen. Paragraph 12. In keinem Fall, auer wenn durch geltendes Recht gefordert oder schriftlich zugesichert, ist irgendein Copyright-Inhaber oder irgendein Dritter, der das Programm wie oben erlaubt modifiziert oder verbreitet hat, Ihnen gegenber fr irgendwelche Schden haftbar, einschlielich jeglicher allgemeiner oder spezieller Schden, Schden durch Seiteneffekte (Nebenwirkungen) oder Folgeschden, die aus der Benutzung des Programms oder der Unbenutzbarkeit des Programms folgen (einschlielich - aber nicht beschrnkt auf - Datenverluste, fehlerhafte Verarbeitung von Daten, Verluste, die von Ihnen oder anderen getragen werden mssen, oder dem Unvermgen des Programms, mit irgendeinem anderen Programm zusammenzuarbeiten), selbst wenn ein Copyright-Inhaber oder Dritter ber die Mglichkeit solcher Schden unterrichtet worden war. Ende der Bedingungen _________________________________________________________________ Anhang: Wie Sie diese Bedingungen auf Ihre neuen Programme anwendbar machen Wenn Sie ein neues Programm entwickeln und wollen, da es von grtmglichem Nutzen fr die Allgemeinheit ist, dann erreichen Sie das am besten, indem Sie es zu freier Software machen, die jeder unter diesen Bestimmungen weiterverbreiten und verndern kann. Um dies zu erreichen, fgen Sie die folgenden Anmerkungen zu Ihrem Programm hinzu. Am sichersten ist es, sie an den Anfang einer jeden Quelldatei zu stellen, um den Gewhrleistungsausschlu mglichst deutlich darzustellen; auerdem sollte jede Datei mindestens eine "Copyright"-Zeile besitzen sowie einen kurzen Hinweis darauf, wo die vollstndige Lizenz gefunden werden kann. [eine Zeile mit dem Programmnamen und einer kurzen Beschreibung] Copyright (C) 19[yy] [Name des Autors] This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Auf Deutsch: [eine Zeile mit dem Programmnamen und einer kurzen Beschreibung] Copyright (C) 19[jj] [Name des Autors] Dieses Programm ist freie Software. Sie knnen es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2 der Lizenz oder (wenn Sie es wnschen) jeder spteren Version. Die Verffentlichung dieses Programms erfolgt in der Hoffnung, da es Ihnen von Nutzen sein wird, aber OHNE JEDE GEWHRLEISTUNG - sogar ohne die implizite Gewhrleistung der MARKTREIFE oder der EIGNUNG FR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License. Sie sollten eine Kopie der GNU General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, schreiben Sie an die Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. Fgen Sie auch einen kurzen Hinweis hinzu, wie Sie elektronisch und per Brief erreichbar sind. Wenn Ihr Programm interaktiv ist, sorgen Sie dafr, da es nach dem Start einen kurzen Vermerk ausgibt: Gnomovision version 69, Copyright (C) 19[yy] [Name des Autors] Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. Auf Deutsch: Gnomovision Version 69, Copyright (C) 19[jj] [Name des Autors] Fr Gnomovision besteht KEINERLEI GARANTIE; geben Sie `show w' fr Details ein. Gnomovision ist freie Software, die Sie unter bestimmten Bedingungen weitergeben drfen; geben Sie `show c' fr Details ein. Die hypothetischen Kommandos `show w' und `show c' sollten die entsprechenden Teile der GNU-GPL anzeigen. Natrlich knnen die von Ihnen verwendeten Kommandos anders heien als `show w' und `show c'; es knnten auch Mausklicks oder Menpunkte sein - was immer am besten in Ihr Programm pat. Soweit vorhanden, sollten Sie auch Ihren Arbeitgeber (wenn Sie als Programmierer arbeiten) oder Ihre Schule einen Copyright-Verzicht fr das Programm unterschreiben lassen. Hier ein Beispiel; ndern Sie bitte die Namen: Yoyodyne, Inc., hereby disclaims all copyright interest in the program "Gnomovision" (which makes passes at compilers) written by James Hacker. [Unterschrift von Ty Coon], 1 April 1989 Ty Coon, President of Vice Auf Deutsch: Die Yoyodyne GmbH erhebt keinerlei urheberrechtlichen Anspruch auf das Programm "Gnomovision" (einem Schrittmacher fr Compiler), geschrieben von James Hacker. [Unterschrift von Ty Coon], 1. April 1989 Ty Coon, Vizeprsident Diese General Public License gestattet nicht die Einbindung des Programms in proprietre Programme. Ist Ihr Programm eine Funktionsbibliothek, so kann es sinnvoller sein, das Linken proprietrer Programme mit dieser Bibliothek zu gestatten. Wenn Sie dies tun wollen, sollten Sie die GNU Library General Public License anstelle dieser Lizenz verwenden. KCemu-0.5.1/.pc/0000755001050700006200000000000011345001723012661 5ustar glaubitzfbedvKCemu-0.5.1/.pc/.quilt_patches0000644001050700006200000000001711345001576015533 0ustar glaubitzfbedvdebian/patches KCemu-0.5.1/.pc/.quilt_series0000644001050700006200000000000711345001576015375 0ustar glaubitzfbedvseries KCemu-0.5.1/.pc/.version0000644001050700006200000000000211345001576014345 0ustar glaubitzfbedv2 KCemu-0.5.1/TODO0000644001050700006200000000214510527416074012705 0ustar glaubitzfbedv# # $Id: TODO,v 1.9 2002/10/31 16:39:53 torsten_paul Exp $ # - fix key repeat with gtk-2.2 - fix .TAP import/export for files with non-linear block numbering (e.g. os-save) - fix kc2wav -> wav2kc for z9001-mc programs - fix timing bug when loading digger by double click in the tape window and starting the program before the tape loader has timed out - fix interrupt handling, the hardware daisy chain is not honored correctly which breaks some programs (e.g. PHARAO) - fix programs using SPRITE-MC (by Dr. H. Gutzer/ S. Wendt, Funkamateur 3/90) - fix fast tape loading (doesn't switch bank 8 from IRM to RAM) - forward reset/power on signals to modules - convert debugging code in pio.cc to libdbg - improve sound output - expand environment variables in .kcemurc - extend the configuration dialog and save the changed values - don't use tempnam() in ModuleV24::socket_server(): - don't use inputstream.getline() with fixed buffer - transparently handle gzipped files - fix do_dump() in kctape.cc to actually use the specified output file - fix method names in ModuleInterface (e.g. reset() -> module_reset()) KCemu-0.5.1/configure0000755001050700006200000161773011412402531014124 0ustar glaubitzfbedv#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.65. # # # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1998, 1999, 2000, 2001, # 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # # # This configure script is free software; the Free Software Foundation # gives unlimited permission to copy, distribute and modify it. ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH if test "x$CONFIG_SHELL" = x; then as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi " as_required="as_fn_return () { (exit \$1); } as_fn_success () { as_fn_return 0; } as_fn_failure () { as_fn_return 1; } as_fn_ret_success () { return 0; } as_fn_ret_failure () { return 1; } exitcode=0 as_fn_success || { exitcode=1; echo as_fn_success failed.; } as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; } as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; } as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; } if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then : else exitcode=1; echo positional parameters were not saved. fi test x\$exitcode = x0 || exit 1" as_suggested=" as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" && test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1 test \$(( 1 + 1 )) = 2 || exit 1" if (eval "$as_required") 2>/dev/null; then : as_have_required=yes else as_have_required=no fi if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then : else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. as_found=: case $as_dir in #( /*) for as_base in sh bash ksh sh5; do # Try only shells that exist, to save several forks. as_shell=$as_dir/$as_base if { test -f "$as_shell" || test -f "$as_shell.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then : CONFIG_SHELL=$as_shell as_have_required=yes if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then : break 2 fi fi done;; esac as_found=false done $as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } && { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then : CONFIG_SHELL=$SHELL as_have_required=yes fi; } IFS=$as_save_IFS if test "x$CONFIG_SHELL" != x; then : # We cannot yet assume a decent shell, so we have to provide a # neutralization value for shells without unset; and this also # works around shells that cannot unset nonexistent variables. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV export CONFIG_SHELL exec "$CONFIG_SHELL" "$as_myself" ${1+"$@"} fi if test x$as_have_required = xno; then : $as_echo "$0: This script requires a shell more modern than all" $as_echo "$0: the shells that I found on your system." if test x${ZSH_VERSION+set} = xset ; then $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should" $as_echo "$0: be upgraded to zsh 4.3.4 or later." else $as_echo "$0: Please tell bug-autoconf@gnu.org about your system, $0: including any error possibly output before this $0: message. Then install a modern shell, or manually run $0: the script under such a shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith # as_fn_error ERROR [LINENO LOG_FD] # --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with status $?, using 1 if that was 0. as_fn_error () { as_status=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits as_lineno_1=$LINENO as_lineno_1a=$LINENO as_lineno_2=$LINENO as_lineno_2a=$LINENO eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" && test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || { # Blame Lee E. McMahon (1931-1989) for sed's syntax. :-) sed -n ' p /[$]LINENO/= ' <$as_myself | sed ' s/[$]LINENO.*/&-/ t lineno b :lineno N :loop s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/ t loop s/-\n.*// ' >$as_me.lineno && chmod +x "$as_me.lineno" || { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; } # Don't try to exec as it changes $[0], causing all sort of problems # (the dirname of $[0] is not the place where we might find the # original and so on. Autoconf is especially sensitive to this). . "./$as_me.lineno" # Exit status is that of the last command. exit } ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME= PACKAGE_TARNAME= PACKAGE_VERSION= PACKAGE_STRING= PACKAGE_BUGREPORT= PACKAGE_URL= ac_unique_file="include/kc/kc.h" # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" gt_needs= ac_header_list= ac_subst_vars='am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS SDL_LIBS SDL_CFLAGS SDL_CONFIG F_L_A_C_LIBS VORBIS_LIBS MP3LAME_LIBS AUDIOFILE_LIBS SNDFILE_LIBS VNCSERVER_LIBS LIBGIF_LIBS XVIDCORE_LIBS LIBSCHROEDINGER_LIBS LIBSCHROEDINGER_CFLAGS LIBDIRAC_LIBS LIBDIRAC_CFLAGS LIBAVFORMAT_LIBS LIBAVFORMAT_CFLAGS LIBTHEORA_LIBS LIBTHEORA_CFLAGS LIBTHEORA10_LIBS LIBTHEORA10_CFLAGS LIBTHEORA11_LIBS LIBTHEORA11_CFLAGS Z80EX_LIBS XMU_LIBS XMU_CFLAGS X11_LIBS X11_CFLAGS GTK_LIBS GTK_CFLAGS PKG_CONFIG HAVE_CPPUNIT_FALSE HAVE_CPPUNIT_TRUE POSUB LTLIBINTL LIBINTL INTLLIBS INTL_LIBTOOL_SUFFIX_PREFIX INTLOBJS GENCAT INSTOBJEXT DATADIRNAME CATOBJEXT USE_INCLUDED_LIBINTL BUILD_INCLUDED_LIBINTL LTLIBC WINDRES WOE32 WOE32DLL HAVE_WPRINTF HAVE_SNPRINTF HAVE_ASPRINTF HAVE_POSIX_PRINTF INTL_MACOSX_LIBS GLIBC21 INTLBISON LTLIBICONV LIBICONV LTLIBMULTITHREAD LIBMULTITHREAD LTLIBTHREAD LIBTHREAD LIBPTH_PREFIX LTLIBPTH LIBPTH PRI_MACROS_BROKEN ALLOCA HAVE_VISIBILITY CFLAG_VISIBILITY GLIBC2 XGETTEXT_EXTRA_OPTIONS MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 MSGFMT_015 GMSGFMT MSGFMT GETTEXT_MACRO_VERSION USE_NLS USE_INCLUDED_GETOPT_FALSE USE_INCLUDED_GETOPT_TRUE XMKMF TARGET_FREEBSD_FALSE TARGET_FREEBSD_TRUE TARGET_LINUX_FALSE TARGET_LINUX_TRUE TARGET_MINGW_FALSE TARGET_MINGW_TRUE COMPILE_Z80_ASM_FALSE COMPILE_Z80_ASM_TRUE HAVE_P2BIN HAVE_ASL RC RANLIB LN_S am__fastdepCXX_FALSE am__fastdepCXX_TRUE CXXDEPMODE ac_ct_CXX CXXFLAGS CXX am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__quote am__include DEPDIR am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM KCEMU_EXTRA_VERSION_TEXT KCEMU_EXTRA_VERSION KCEMU_MICRO_VERSION KCEMU_MINOR_VERSION KCEMU_MAJOR_VERSION VERSION PACKAGE target_os target_vendor target_cpu target host_os host_vendor host_cpu host build_os build_vendor build_cpu build EGREP GREP CPP OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir localstatedir sharedstatedir sysconfdir datadir datarootdir libexecdir sbindir bindir program_transform_name prefix exec_prefix PACKAGE_URL PACKAGE_BUGREPORT PACKAGE_STRING PACKAGE_VERSION PACKAGE_TARNAME PACKAGE_NAME PATH_SEPARATOR SHELL' ac_subst_files='' ac_user_opts=' enable_option_checking enable_static_z80ex enable_sound enable_libaudiofile enable_libsndfile enable_libflac enable_libvorbis enable_libtheora enable_libxvidcore enable_libdirac enable_libschroedinger enable_libavformat enable_libgif enable_libvncserver enable_libmp3lame enable_ms_bitfields with_ui with_debug_level enable_dependency_tracking with_x enable_nls enable_threads with_gnu_ld enable_rpath with_libpth_prefix with_libiconv_prefix with_included_gettext with_libintl_prefix with_sdl_prefix with_sdl_exec_prefix enable_sdltest ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP CXX CXXFLAGS CCC XMKMF PKG_CONFIG GTK_CFLAGS GTK_LIBS X11_CFLAGS X11_LIBS XMU_CFLAGS XMU_LIBS LIBTHEORA11_CFLAGS LIBTHEORA11_LIBS LIBTHEORA10_CFLAGS LIBTHEORA10_LIBS LIBAVFORMAT_CFLAGS LIBAVFORMAT_LIBS LIBDIRAC_CFLAGS LIBDIRAC_LIBS LIBSCHROEDINGER_CFLAGS LIBSCHROEDINGER_LIBS' # Initialize some variables set by options. ac_init_help= ac_init_version=false ac_unrecognized_opts= ac_unrecognized_sep= # The variables have the same names as the options, with # dashes changed to underlines. cache_file=/dev/null exec_prefix=NONE no_create= no_recursion= prefix=NONE program_prefix=NONE program_suffix=NONE program_transform_name=s,x,x, silent= site= srcdir= verbose= x_includes=NONE x_libraries=NONE # Installation directory options. # These are left unexpanded so users can "make install exec_prefix=/foo" # and all the variables that are supposed to be based on exec_prefix # by default will actually change. # Use braces instead of parens because sh, perl, etc. also accept them. # (The list follows the same order as the GNU Coding Standards.) bindir='${exec_prefix}/bin' sbindir='${exec_prefix}/sbin' libexecdir='${exec_prefix}/libexec' datarootdir='${prefix}/share' datadir='${datarootdir}' sysconfdir='${prefix}/etc' sharedstatedir='${prefix}/com' localstatedir='${prefix}/var' includedir='${prefix}/include' oldincludedir='/usr/include' docdir='${datarootdir}/doc/${PACKAGE}' infodir='${datarootdir}/info' htmldir='${docdir}' dvidir='${docdir}' pdfdir='${docdir}' psdir='${docdir}' libdir='${exec_prefix}/lib' localedir='${datarootdir}/locale' mandir='${datarootdir}/man' ac_prev= ac_dashdash= for ac_option do # If the previous option needs an argument, assign it. if test -n "$ac_prev"; then eval $ac_prev=\$ac_option ac_prev= continue fi case $ac_option in *=*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;; *) ac_optarg=yes ;; esac # Accept the important Cygnus configure options, so we can diagnose typos. case $ac_dashdash$ac_option in --) ac_dashdash=yes ;; -bindir | --bindir | --bindi | --bind | --bin | --bi) ac_prev=bindir ;; -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*) bindir=$ac_optarg ;; -build | --build | --buil | --bui | --bu) ac_prev=build_alias ;; -build=* | --build=* | --buil=* | --bui=* | --bu=*) build_alias=$ac_optarg ;; -cache-file | --cache-file | --cache-fil | --cache-fi \ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c) ac_prev=cache_file ;; -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*) cache_file=$ac_optarg ;; --config-cache | -C) cache_file=config.cache ;; -datadir | --datadir | --datadi | --datad) ac_prev=datadir ;; -datadir=* | --datadir=* | --datadi=* | --datad=*) datadir=$ac_optarg ;; -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \ | --dataroo | --dataro | --datar) ac_prev=datarootdir ;; -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \ | --dataroot=* | --dataroo=* | --dataro=* | --datar=*) datarootdir=$ac_optarg ;; -disable-* | --disable-*) ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=no ;; -docdir | --docdir | --docdi | --doc | --do) ac_prev=docdir ;; -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*) docdir=$ac_optarg ;; -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv) ac_prev=dvidir ;; -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*) dvidir=$ac_optarg ;; -enable-* | --enable-*) ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid feature name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "enable_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval enable_$ac_useropt=\$ac_optarg ;; -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \ | --exec | --exe | --ex) ac_prev=exec_prefix ;; -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \ | --exec=* | --exe=* | --ex=*) exec_prefix=$ac_optarg ;; -gas | --gas | --ga | --g) # Obsolete; use --with-gas. with_gas=yes ;; -help | --help | --hel | --he | -h) ac_init_help=long ;; -help=r* | --help=r* | --hel=r* | --he=r* | -hr*) ac_init_help=recursive ;; -help=s* | --help=s* | --hel=s* | --he=s* | -hs*) ac_init_help=short ;; -host | --host | --hos | --ho) ac_prev=host_alias ;; -host=* | --host=* | --hos=* | --ho=*) host_alias=$ac_optarg ;; -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht) ac_prev=htmldir ;; -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \ | --ht=*) htmldir=$ac_optarg ;; -includedir | --includedir | --includedi | --included | --include \ | --includ | --inclu | --incl | --inc) ac_prev=includedir ;; -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \ | --includ=* | --inclu=* | --incl=* | --inc=*) includedir=$ac_optarg ;; -infodir | --infodir | --infodi | --infod | --info | --inf) ac_prev=infodir ;; -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*) infodir=$ac_optarg ;; -libdir | --libdir | --libdi | --libd) ac_prev=libdir ;; -libdir=* | --libdir=* | --libdi=* | --libd=*) libdir=$ac_optarg ;; -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \ | --libexe | --libex | --libe) ac_prev=libexecdir ;; -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \ | --libexe=* | --libex=* | --libe=*) libexecdir=$ac_optarg ;; -localedir | --localedir | --localedi | --localed | --locale) ac_prev=localedir ;; -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*) localedir=$ac_optarg ;; -localstatedir | --localstatedir | --localstatedi | --localstated \ | --localstate | --localstat | --localsta | --localst | --locals) ac_prev=localstatedir ;; -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \ | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*) localstatedir=$ac_optarg ;; -mandir | --mandir | --mandi | --mand | --man | --ma | --m) ac_prev=mandir ;; -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*) mandir=$ac_optarg ;; -nfp | --nfp | --nf) # Obsolete; use --without-fp. with_fp=no ;; -no-create | --no-create | --no-creat | --no-crea | --no-cre \ | --no-cr | --no-c | -n) no_create=yes ;; -no-recursion | --no-recursion | --no-recursio | --no-recursi \ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) no_recursion=yes ;; -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \ | --oldin | --oldi | --old | --ol | --o) ac_prev=oldincludedir ;; -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*) oldincludedir=$ac_optarg ;; -prefix | --prefix | --prefi | --pref | --pre | --pr | --p) ac_prev=prefix ;; -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*) prefix=$ac_optarg ;; -program-prefix | --program-prefix | --program-prefi | --program-pref \ | --program-pre | --program-pr | --program-p) ac_prev=program_prefix ;; -program-prefix=* | --program-prefix=* | --program-prefi=* \ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*) program_prefix=$ac_optarg ;; -program-suffix | --program-suffix | --program-suffi | --program-suff \ | --program-suf | --program-su | --program-s) ac_prev=program_suffix ;; -program-suffix=* | --program-suffix=* | --program-suffi=* \ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*) program_suffix=$ac_optarg ;; -program-transform-name | --program-transform-name \ | --program-transform-nam | --program-transform-na \ | --program-transform-n | --program-transform- \ | --program-transform | --program-transfor \ | --program-transfo | --program-transf \ | --program-trans | --program-tran \ | --progr-tra | --program-tr | --program-t) ac_prev=program_transform_name ;; -program-transform-name=* | --program-transform-name=* \ | --program-transform-nam=* | --program-transform-na=* \ | --program-transform-n=* | --program-transform-=* \ | --program-transform=* | --program-transfor=* \ | --program-transfo=* | --program-transf=* \ | --program-trans=* | --program-tran=* \ | --progr-tra=* | --program-tr=* | --program-t=*) program_transform_name=$ac_optarg ;; -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd) ac_prev=pdfdir ;; -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*) pdfdir=$ac_optarg ;; -psdir | --psdir | --psdi | --psd | --ps) ac_prev=psdir ;; -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*) psdir=$ac_optarg ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) silent=yes ;; -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) ac_prev=sbindir ;; -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \ | --sbi=* | --sb=*) sbindir=$ac_optarg ;; -sharedstatedir | --sharedstatedir | --sharedstatedi \ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \ | --sharedst | --shareds | --shared | --share | --shar \ | --sha | --sh) ac_prev=sharedstatedir ;; -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \ | --sha=* | --sh=*) sharedstatedir=$ac_optarg ;; -site | --site | --sit) ac_prev=site ;; -site=* | --site=* | --sit=*) site=$ac_optarg ;; -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) srcdir=$ac_optarg ;; -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \ | --syscon | --sysco | --sysc | --sys | --sy) ac_prev=sysconfdir ;; -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*) sysconfdir=$ac_optarg ;; -target | --target | --targe | --targ | --tar | --ta | --t) ac_prev=target_alias ;; -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*) target_alias=$ac_optarg ;; -v | -verbose | --verbose | --verbos | --verbo | --verb) verbose=yes ;; -version | --version | --versio | --versi | --vers | -V) ac_init_version=: ;; -with-* | --with-*) ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=\$ac_optarg ;; -without-* | --without-*) ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'` # Reject names that are not valid shell variable names. expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null && as_fn_error "invalid package name: $ac_useropt" ac_useropt_orig=$ac_useropt ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'` case $ac_user_opts in *" "with_$ac_useropt" "*) ;; *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig" ac_unrecognized_sep=', ';; esac eval with_$ac_useropt=no ;; --x) # Obsolete; use --with-x. with_x=yes ;; -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \ | --x-incl | --x-inc | --x-in | --x-i) ac_prev=x_includes ;; -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*) x_includes=$ac_optarg ;; -x-libraries | --x-libraries | --x-librarie | --x-librari \ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l) ac_prev=x_libraries ;; -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*) x_libraries=$ac_optarg ;; -*) as_fn_error "unrecognized option: \`$ac_option' Try \`$0 --help' for more information." ;; *=*) ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='` # Reject names that are not valid shell variable names. case $ac_envvar in #( '' | [0-9]* | *[!_$as_cr_alnum]* ) as_fn_error "invalid variable name: \`$ac_envvar'" ;; esac eval $ac_envvar=\$ac_optarg export $ac_envvar ;; *) # FIXME: should be removed in autoconf 3.0. $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2 expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null && $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2 : ${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option} ;; esac done if test -n "$ac_prev"; then ac_option=--`echo $ac_prev | sed 's/_/-/g'` as_fn_error "missing argument to $ac_option" fi if test -n "$ac_unrecognized_opts"; then case $enable_option_checking in no) ;; fatal) as_fn_error "unrecognized options: $ac_unrecognized_opts" ;; *) $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;; esac fi # Check all directory arguments for consistency. for ac_var in exec_prefix prefix bindir sbindir libexecdir datarootdir \ datadir sysconfdir sharedstatedir localstatedir includedir \ oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ libdir localedir mandir do eval ac_val=\$$ac_var # Remove trailing slashes. case $ac_val in */ ) ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'` eval $ac_var=\$ac_val;; esac # Be sure to have absolute directory names. case $ac_val in [\\/$]* | ?:[\\/]* ) continue;; NONE | '' ) case $ac_var in *prefix ) continue;; esac;; esac as_fn_error "expected an absolute directory name for --$ac_var: $ac_val" done # There might be people who depend on the old broken behavior: `$host' # used to hold the argument of --host etc. # FIXME: To remove some day. build=$build_alias host=$host_alias target=$target_alias # FIXME: To remove some day. if test "x$host_alias" != x; then if test "x$build_alias" = x; then cross_compiling=maybe $as_echo "$as_me: WARNING: If you wanted to set the --build type, don't use --host. If a cross compiler is detected then cross compile mode will be used." >&2 elif test "x$build_alias" != "x$host_alias"; then cross_compiling=yes fi fi ac_tool_prefix= test -n "$host_alias" && ac_tool_prefix=$host_alias- test "$silent" = yes && exec 6>/dev/null ac_pwd=`pwd` && test -n "$ac_pwd" && ac_ls_di=`ls -di .` && ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` || as_fn_error "working directory cannot be determined" test "X$ac_ls_di" = "X$ac_pwd_ls_di" || as_fn_error "pwd does not report name of working directory" # Find the source files, if location was not specified. if test -z "$srcdir"; then ac_srcdir_defaulted=yes # Try the directory containing this script, then the parent directory. ac_confdir=`$as_dirname -- "$as_myself" || $as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_myself" : 'X\(//\)[^/]' \| \ X"$as_myself" : 'X\(//\)$' \| \ X"$as_myself" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_myself" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` srcdir=$ac_confdir if test ! -r "$srcdir/$ac_unique_file"; then srcdir=.. fi else ac_srcdir_defaulted=no fi if test ! -r "$srcdir/$ac_unique_file"; then test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .." as_fn_error "cannot find sources ($ac_unique_file) in $srcdir" fi ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work" ac_abs_confdir=`( cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error "$ac_msg" pwd)` # When building in place, set srcdir=. if test "$ac_abs_confdir" = "$ac_pwd"; then srcdir=. fi # Remove unnecessary trailing slashes from srcdir. # Double slashes in file names in object file debugging info # mess up M-x gdb in Emacs. case $srcdir in */) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;; esac for ac_var in $ac_precious_vars; do eval ac_env_${ac_var}_set=\${${ac_var}+set} eval ac_env_${ac_var}_value=\$${ac_var} eval ac_cv_env_${ac_var}_set=\${${ac_var}+set} eval ac_cv_env_${ac_var}_value=\$${ac_var} done # # Report the --help message. # if test "$ac_init_help" = "long"; then # Omit some internal or obsolete options to make the list less imposing. # This message is too long to be a string in the A/UX 3.1 sh. cat <<_ACEOF \`configure' configures this package to adapt to many kinds of systems. Usage: $0 [OPTION]... [VAR=VALUE]... To assign environment variables (e.g., CC, CFLAGS...), specify them as VAR=VALUE. See below for descriptions of some of the useful variables. Defaults for the options are specified in brackets. Configuration: -h, --help display this help and exit --help=short display options specific to this package --help=recursive display the short help of all the included packages -V, --version display version information and exit -q, --quiet, --silent do not print \`checking...' messages --cache-file=FILE cache test results in FILE [disabled] -C, --config-cache alias for \`--cache-file=config.cache' -n, --no-create do not create output files --srcdir=DIR find the sources in DIR [configure dir or \`..'] Installation directories: --prefix=PREFIX install architecture-independent files in PREFIX [$ac_default_prefix] --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX [PREFIX] By default, \`make install' will install all the files in \`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc. You can specify an installation prefix other than \`$ac_default_prefix' using \`--prefix', for instance \`--prefix=\$HOME'. For better control, use the options below. Fine tuning of the installation directories: --bindir=DIR user executables [EPREFIX/bin] --sbindir=DIR system admin executables [EPREFIX/sbin] --libexecdir=DIR program executables [EPREFIX/libexec] --sysconfdir=DIR read-only single-machine data [PREFIX/etc] --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] --localstatedir=DIR modifiable single-machine data [PREFIX/var] --libdir=DIR object code libraries [EPREFIX/lib] --includedir=DIR C header files [PREFIX/include] --oldincludedir=DIR C header files for non-gcc [/usr/include] --datarootdir=DIR read-only arch.-independent data root [PREFIX/share] --datadir=DIR read-only architecture-independent data [DATAROOTDIR] --infodir=DIR info documentation [DATAROOTDIR/info] --localedir=DIR locale-dependent data [DATAROOTDIR/locale] --mandir=DIR man documentation [DATAROOTDIR/man] --docdir=DIR documentation root [DATAROOTDIR/doc/PACKAGE] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names X features: --x-includes=DIR X include files are in DIR --x-libraries=DIR X library files are in DIR System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] --target=TARGET configure for building compilers for TARGET [HOST] _ACEOF fi if test -n "$ac_init_help"; then cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-static-z80ex link Z80 emulation statically default=no --enable-sound enable sound using libSDL (broken!) default=no --enable-libaudiofile enable usage of libaudiofile if present default=yes --enable-libsndfile enable usage of libsndfile if present default=yes --enable-libflac enable usage of libFLAC 1.0.x if present default=yes --enable-libvorbis enable usage of libvorbis if present default=yes --enable-libtheora enable usage of libtheora if present default=yes --enable-libxvidcore enable usage of libxvidcore if present default=yes --enable-libdirac enable usage of libdirac if present default=yes --enable-libschroedinger enable usage of libschroedinger if present default=yes --enable-libavformat enable usage of libavformat if present default=yes --enable-libgif enable usage of libgif if present default=yes --enable-libvncserver enable usage of libvncserver if present default=yes --enable-libmp3lame enable usage of libmp3lame if present default=yes --enable-ms-bitfields enable usage of gcc -mms-bitfields on MinGW default=yes --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors --disable-nls do not use Native Language Support --enable-threads={posix|solaris|pth|win32} specify multithreading API --disable-threads build without multithread safety --disable-rpath do not hardcode runtime library paths --disable-sdltest Do not try to compile and run a test SDL program Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-ui=UI use User Interface UI (gtk or sdl) default=auto --with-debug-level=L set debug level to L (0..3) default=1 --with-x use the X Window System --with-gnu-ld assume the C compiler uses GNU ld default=no --with-libpth-prefix[=DIR] search for libpth in DIR/include and DIR/lib --without-libpth-prefix don't search for libpth in includedir and libdir --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-included-gettext use the GNU gettext library included here --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir --with-sdl-prefix=PFX Prefix where SDL is installed (optional) --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional) Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor CXX C++ compiler command CXXFLAGS C++ compiler flags XMKMF Path to xmkmf, Makefile generator for X Window System PKG_CONFIG path to pkg-config utility GTK_CFLAGS C compiler flags for GTK, overriding pkg-config GTK_LIBS linker flags for GTK, overriding pkg-config X11_CFLAGS C compiler flags for X11, overriding pkg-config X11_LIBS linker flags for X11, overriding pkg-config XMU_CFLAGS C compiler flags for XMU, overriding pkg-config XMU_LIBS linker flags for XMU, overriding pkg-config LIBTHEORA11_CFLAGS C compiler flags for LIBTHEORA11, overriding pkg-config LIBTHEORA11_LIBS linker flags for LIBTHEORA11, overriding pkg-config LIBTHEORA10_CFLAGS C compiler flags for LIBTHEORA10, overriding pkg-config LIBTHEORA10_LIBS linker flags for LIBTHEORA10, overriding pkg-config LIBAVFORMAT_CFLAGS C compiler flags for LIBAVFORMAT, overriding pkg-config LIBAVFORMAT_LIBS linker flags for LIBAVFORMAT, overriding pkg-config LIBDIRAC_CFLAGS C compiler flags for LIBDIRAC, overriding pkg-config LIBDIRAC_LIBS linker flags for LIBDIRAC, overriding pkg-config LIBSCHROEDINGER_CFLAGS C compiler flags for LIBSCHROEDINGER, overriding pkg-config LIBSCHROEDINGER_LIBS linker flags for LIBSCHROEDINGER, overriding pkg-config Use these variables to override the choices made by `configure' or to help it to find libraries and programs with nonstandard names/locations. Report bugs to the package provider. _ACEOF ac_status=$? fi if test "$ac_init_help" = "recursive"; then # If there are subdirs, report their specific --help. for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue test -d "$ac_dir" || { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } || continue ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix cd "$ac_dir" || { ac_status=$?; continue; } # Check for guested configure. if test -f "$ac_srcdir/configure.gnu"; then echo && $SHELL "$ac_srcdir/configure.gnu" --help=recursive elif test -f "$ac_srcdir/configure"; then echo && $SHELL "$ac_srcdir/configure" --help=recursive else $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2 fi || ac_status=$? cd "$ac_pwd" || { ac_status=$?; break; } done fi test -n "$ac_init_help" && exit $ac_status if $ac_init_version; then cat <<\_ACEOF configure generated by GNU Autoconf 2.65 Copyright (C) 2009 Free Software Foundation, Inc. This configure script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. _ACEOF exit fi ## ------------------------ ## ## Autoconf initialization. ## ## ------------------------ ## # ac_fn_c_try_compile LINENO # -------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_compile # ac_fn_c_try_cpp LINENO # ---------------------- # Try to preprocess conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_cpp () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_cpp conftest.$ac_ext" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } >/dev/null && { test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" || test ! -s conftest.err }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_cpp # ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists, giving a warning if it cannot be compiled using # the include files in INCLUDES and setting the cache variable VAR # accordingly. ac_fn_c_check_header_mongrel () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } else # Is the header compilable? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5 $as_echo_n "checking $2 usability... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_header_compiler=yes else ac_header_compiler=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5 $as_echo "$ac_header_compiler" >&6; } # Is the header present? { $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5 $as_echo_n "checking $2 presence... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <$2> _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : ac_header_preproc=yes else ac_header_preproc=no fi rm -f conftest.err conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5 $as_echo "$ac_header_preproc" >&6; } # So? What about this header? case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #(( yes:no: ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5 $as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; no:yes:* ) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5 $as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: check for missing prerequisite headers?" >&5 $as_echo "$as_me: WARNING: $2: check for missing prerequisite headers?" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5 $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&5 $as_echo "$as_me: WARNING: $2: section \"Present But Cannot Be Compiled\"" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;} ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else eval "$3=\$ac_header_compiler" fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_mongrel # ac_fn_c_try_run LINENO # ---------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. Assumes # that executables *can* be run. ac_fn_c_try_run () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { ac_try='./conftest$ac_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then : ac_retval=0 else $as_echo "$as_me: program exited with status $ac_status" >&5 $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=$ac_status fi rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_run # ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES # ------------------------------------------------------- # Tests whether HEADER exists and can be compiled using the include files in # INCLUDES, setting the cache variable VAR accordingly. ac_fn_c_check_header_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 #include <$2> _ACEOF if ac_fn_c_try_compile "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_header_compile # ac_fn_cxx_try_compile LINENO # ---------------------------- # Try to compile conftest.$ac_ext, and return whether this succeeded. ac_fn_cxx_try_compile () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_cxx_werror_flag" || test ! -s conftest.err } && test -s conftest.$ac_objext; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_cxx_try_compile # ac_fn_c_try_link LINENO # ----------------------- # Try to link conftest.$ac_ext, and return whether this succeeded. ac_fn_c_try_link () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack rm -f conftest.$ac_objext conftest$ac_exeext if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>conftest.err ac_status=$? if test -s conftest.err; then grep -v '^ *+' conftest.err >conftest.er1 cat conftest.er1 >&5 mv -f conftest.er1 conftest.err fi $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && { test -z "$ac_c_werror_flag" || test ! -s conftest.err } && test -s conftest$ac_exeext && { test "$cross_compiling" = yes || $as_test_x conftest$ac_exeext }; then : ac_retval=0 else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 ac_retval=1 fi # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would # interfere with the next link command; also delete a directory that is # left behind by Apple's compiler. We do this before executing the actions. rm -rf conftest.dSYM conftest_ipa8_conftest.oo eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} as_fn_set_status $ac_retval } # ac_fn_c_try_link # ac_fn_c_check_func LINENO FUNC VAR # ---------------------------------- # Tests whether FUNC exists, setting the cache variable VAR accordingly ac_fn_c_check_func () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Define $2 to an innocuous variant, in case declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #endif #undef $2 /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char $2 (); /* The GNU C library defines this for functions which it implements to always fail with ENOSYS. Some functions are actually named something starting with __ and the normal name is an alias. */ #if defined __stub_$2 || defined __stub___$2 choke me #endif int main () { return $2 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$3=yes" else eval "$3=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_func # ac_fn_c_check_type LINENO TYPE VAR INCLUDES # ------------------------------------------- # Tests whether TYPE exists after having included INCLUDES, setting cache # variable VAR accordingly. ac_fn_c_check_type () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if { as_var=$3; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else eval "$3=no" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof ($2)) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { if (sizeof (($2))) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else eval "$3=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi eval ac_res=\$$3 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } eval $as_lineno_stack; test "x$as_lineno_stack" = x && { as_lineno=; unset as_lineno;} } # ac_fn_c_check_type # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid; break else as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_lo=$ac_mid; break else as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done else ac_lo= ac_hi= fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0 ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_hi=$ac_mid else as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval () { return $2; } static unsigned long int ulongval () { return $2; } #include #include int main () { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : echo >>conftest.val; read $3 config.log <<_ACEOF This file contains any messages produced by compilers while running configure, to aid debugging if configure makes a mistake. It was created by $as_me, which was generated by GNU Autoconf 2.65. Invocation command line was $ $0 $@ _ACEOF exec 5>>config.log { cat <<_ASUNAME ## --------- ## ## Platform. ## ## --------- ## hostname = `(hostname || uname -n) 2>/dev/null | sed 1q` uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown` /bin/uname -X = `(/bin/uname -X) 2>/dev/null || echo unknown` /bin/arch = `(/bin/arch) 2>/dev/null || echo unknown` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null || echo unknown` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown` /usr/bin/hostinfo = `(/usr/bin/hostinfo) 2>/dev/null || echo unknown` /bin/machine = `(/bin/machine) 2>/dev/null || echo unknown` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null || echo unknown` /bin/universe = `(/bin/universe) 2>/dev/null || echo unknown` _ASUNAME as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. $as_echo "PATH: $as_dir" done IFS=$as_save_IFS } >&5 cat >&5 <<_ACEOF ## ----------- ## ## Core tests. ## ## ----------- ## _ACEOF # Keep a trace of the command line. # Strip out --no-create and --no-recursion so they do not pile up. # Strip out --silent because we don't want to record it for future runs. # Also quote any args containing shell meta-characters. # Make two passes to allow for proper duplicate-argument suppression. ac_configure_args= ac_configure_args0= ac_configure_args1= ac_must_keep_next=false for ac_pass in 1 2 do for ac_arg do case $ac_arg in -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil) continue ;; *\'*) ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;; esac case $ac_pass in 1) as_fn_append ac_configure_args0 " '$ac_arg'" ;; 2) as_fn_append ac_configure_args1 " '$ac_arg'" if test $ac_must_keep_next = true; then ac_must_keep_next=false # Got value, back to normal. else case $ac_arg in *=* | --config-cache | -C | -disable-* | --disable-* \ | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \ | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \ | -with-* | --with-* | -without-* | --without-* | --x) case "$ac_configure_args0 " in "$ac_configure_args1"*" '$ac_arg' "* ) continue ;; esac ;; -* ) ac_must_keep_next=true ;; esac fi as_fn_append ac_configure_args " '$ac_arg'" ;; esac done done { ac_configure_args0=; unset ac_configure_args0;} { ac_configure_args1=; unset ac_configure_args1;} # When interrupted or exit'd, cleanup temporary files, and complete # config.log. We remove comments because anyway the quotes in there # would cause problems or look ugly. # WARNING: Use '\'' to represent an apostrophe within the trap. # WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug. trap 'exit_status=$? # Save into config.log some information that might help in debugging. { echo cat <<\_ASBOX ## ---------------- ## ## Cache variables. ## ## ---------------- ## _ASBOX echo # The following way of writing the cache mishandles newlines in values, ( for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #( *${as_nl}ac_space=\ *) sed -n \ "s/'\''/'\''\\\\'\'''\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p" ;; #( *) sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) echo cat <<\_ASBOX ## ----------------- ## ## Output variables. ## ## ----------------- ## _ASBOX echo for ac_var in $ac_subst_vars do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo if test -n "$ac_subst_files"; then cat <<\_ASBOX ## ------------------- ## ## File substitutions. ## ## ------------------- ## _ASBOX echo for ac_var in $ac_subst_files do eval ac_val=\$$ac_var case $ac_val in *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;; esac $as_echo "$ac_var='\''$ac_val'\''" done | sort echo fi if test -s confdefs.h; then cat <<\_ASBOX ## ----------- ## ## confdefs.h. ## ## ----------- ## _ASBOX echo cat confdefs.h echo fi test "$ac_signal" != 0 && $as_echo "$as_me: caught signal $ac_signal" $as_echo "$as_me: exit $exit_status" } >&5 rm -f core *.core core.conftest.* && rm -f -r conftest* confdefs* conf$$* $ac_clean_files && exit $exit_status ' 0 for ac_signal in 1 2 13 15; do trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal done ac_signal=0 # confdefs.h avoids OS command line length limits that DEFS can exceed. rm -f -r conftest* confdefs.h $as_echo "/* confdefs.h */" > confdefs.h # Predefined preprocessor variables. cat >>confdefs.h <<_ACEOF #define PACKAGE_NAME "$PACKAGE_NAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_TARNAME "$PACKAGE_TARNAME" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_VERSION "$PACKAGE_VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_STRING "$PACKAGE_STRING" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT" _ACEOF cat >>confdefs.h <<_ACEOF #define PACKAGE_URL "$PACKAGE_URL" _ACEOF # Let the site file select an alternate cache file if it wants to. # Prefer an explicitly selected file to automatically selected ones. ac_site_file1=NONE ac_site_file2=NONE if test -n "$CONFIG_SITE"; then ac_site_file1=$CONFIG_SITE elif test "x$prefix" != xNONE; then ac_site_file1=$prefix/share/config.site ac_site_file2=$prefix/etc/config.site else ac_site_file1=$ac_default_prefix/share/config.site ac_site_file2=$ac_default_prefix/etc/config.site fi for ac_site_file in "$ac_site_file1" "$ac_site_file2" do test "x$ac_site_file" = xNONE && continue if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5 $as_echo "$as_me: loading site script $ac_site_file" >&6;} sed 's/^/| /' "$ac_site_file" >&5 . "$ac_site_file" fi done if test -r "$cache_file"; then # Some versions of bash will fail to source /dev/null (special files # actually), so we avoid doing that. DJGPP emulates it as a regular file. if test /dev/null != "$cache_file" && test -f "$cache_file"; then { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5 $as_echo "$as_me: loading cache $cache_file" >&6;} case $cache_file in [\\/]* | ?:[\\/]* ) . "$cache_file";; *) . "./$cache_file";; esac fi else { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5 $as_echo "$as_me: creating cache $cache_file" >&6;} >$cache_file fi gt_needs="$gt_needs " as_fn_append ac_header_list " stdlib.h" as_fn_append ac_header_list " unistd.h" as_fn_append ac_header_list " sys/param.h" # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;} ac_cache_corrupted=: ;; ,set) { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5 $as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;} ac_cache_corrupted=: ;; ,);; *) if test "x$ac_old_val" != "x$ac_new_val"; then # differences in whitespace do not lead to failure. ac_old_val_w=`echo x $ac_old_val` ac_new_val_w=`echo x $ac_new_val` if test "$ac_old_val_w" != "$ac_new_val_w"; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5 $as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;} ac_cache_corrupted=: else { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5 $as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;} eval $ac_var=\$ac_old_val fi { $as_echo "$as_me:${as_lineno-$LINENO}: former value: \`$ac_old_val'" >&5 $as_echo "$as_me: former value: \`$ac_old_val'" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: current value: \`$ac_new_val'" >&5 $as_echo "$as_me: current value: \`$ac_new_val'" >&2;} fi;; esac # Pass precious variables to config.status. if test "$ac_new_set" = set; then case $ac_new_val in *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;; *) ac_arg=$ac_var=$ac_new_val ;; esac case " $ac_configure_args " in *" '$ac_arg' "*) ;; # Avoid dups. Use of quotes ensures accuracy. *) as_fn_append ac_configure_args " '$ac_arg'" ;; esac fi done if $ac_cache_corrupted; then { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5 $as_echo "$as_me: error: changes in the environment can compromise the build" >&2;} as_fn_error "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5 fi ## -------------------- ## ## Main body of script. ## ## -------------------- ## ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_aux_dir= for ac_dir in config "$srcdir"/config; do for ac_t in install-sh install.sh shtool; do if test -f "$ac_dir/$ac_t"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/$ac_t -c" break 2 fi done done if test -z "$ac_aux_dir"; then as_fn_error "cannot find install-sh, install.sh, or shtool in config \"$srcdir\"/config" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. ac_config_guess="$SHELL $ac_aux_dir/config.guess" # Please don't use this var. ac_config_sub="$SHELL $ac_aux_dir/config.sub" # Please don't use this var. ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "no acceptable C compiler found in \$PATH See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out" # Try to create an executable without -o first, disregard a.out. # It will help us diagnose broken compilers, and finding out an intuition # of exeext. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5 $as_echo_n "checking whether the C compiler works... " >&6; } ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'` # The possible output files: ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*" ac_rmfiles= for ac_file in $ac_files do case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; * ) ac_rmfiles="$ac_rmfiles $ac_file";; esac done rm -f $ac_rmfiles if { { ac_try="$ac_link_default" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link_default") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # Autoconf-2.13 could set the ac_cv_exeext variable to `no'. # So ignore a value of `no', otherwise this would lead to `EXEEXT = no' # in a Makefile. We should not override ac_cv_exeext if it was cached, # so that the user can short-circuit this test for compilers unknown to # Autoconf. for ac_file in $ac_files '' do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; [ab].out ) # We found the default executable, but exeext='' is most # certainly right. break;; *.* ) if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no; then :; else ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` fi # We set ac_cv_exeext here because the later test for it is not # safe: cross compilers may not add the suffix if given an `-o' # argument, so we may need to know it at that point already. # Even if this section looks crufty: it has the advantage of # actually working. break;; * ) break;; esac done test "$ac_cv_exeext" = no && ac_cv_exeext= else ac_file='' fi if test -z "$ac_file"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} { as_fn_set_status 77 as_fn_error "C compiler cannot create executables See \`config.log' for more details." "$LINENO" 5; }; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5 $as_echo_n "checking for C compiler default output file name... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5 $as_echo "$ac_file" >&6; } ac_exeext=$ac_cv_exeext rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5 $as_echo_n "checking for suffix of executables... " >&6; } if { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : # If both `conftest.exe' and `conftest' are `present' (well, observable) # catch `conftest.exe'. For instance with Cygwin, `ls conftest' will # work properly (i.e., refer to `conftest.exe'), while it won't with # `rm'. for ac_file in conftest.exe conftest conftest.*; do test -f "$ac_file" || continue case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;; *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'` break;; * ) break;; esac done else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot compute suffix of executables: cannot compile and link See \`config.log' for more details." "$LINENO" 5; } fi rm -f conftest conftest$ac_cv_exeext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5 $as_echo "$ac_cv_exeext" >&6; } rm -f conftest.$ac_ext EXEEXT=$ac_cv_exeext ac_exeext=$EXEEXT cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { FILE *f = fopen ("conftest.out", "w"); return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF ac_clean_files="$ac_clean_files conftest.out" # Check that the compiler produces executables we can run. If not, either # the compiler is broken, or we cross compile. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5 $as_echo_n "checking whether we are cross compiling... " >&6; } if test "$cross_compiling" != yes; then { { ac_try="$ac_link" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_link") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if { ac_try='./conftest$ac_cv_exeext' { { case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_try") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; }; then cross_compiling=no else if test "$cross_compiling" = maybe; then cross_compiling=yes else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot run C compiled programs. If you meant to cross compile, use \`--host'. See \`config.log' for more details." "$LINENO" 5; } fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5 $as_echo "$cross_compiling" >&6; } rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out ac_clean_files=$ac_clean_files_save { $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5 $as_echo_n "checking for suffix of object files... " >&6; } if test "${ac_cv_objext+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF rm -f conftest.o conftest.obj if { { ac_try="$ac_compile" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compile") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then : for ac_file in conftest.o conftest.obj conftest.*; do test -f "$ac_file" || continue; case $ac_file in *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;; *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'` break;; esac done else $as_echo "$as_me: failed program was:" >&5 sed 's/^/| /' conftest.$ac_ext >&5 { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot compute suffix of object files: cannot compile See \`config.log' for more details." "$LINENO" 5; } fi rm -f conftest.$ac_cv_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5 $as_echo "$ac_cv_objext" >&6; } OBJEXT=$ac_cv_objext ac_objext=$OBJEXT { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5 $as_echo_n "checking how to run the C preprocessor... " >&6; } # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= fi if test -z "$CPP"; then if test "${ac_cv_prog_CPP+set}" = set; then : $as_echo_n "(cached) " >&6 else # Double quotes because CPP needs to be expanded for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp" do ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : break fi done ac_cv_prog_CPP=$CPP fi CPP=$ac_cv_prog_CPP else ac_cv_prog_CPP=$CPP fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5 $as_echo "$CPP" >&6; } ac_preproc_ok=false for ac_c_preproc_warn_flag in '' yes do # Use a header file that comes with gcc, so configuring glibc # with a fresh cross-compiler works. # Prefer to if __STDC__ is defined, since # exists even on freestanding compilers. # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. "Syntax error" is here to catch this case. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC__ # include #else # include #endif Syntax error _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : else # Broken: fails on valid input. continue fi rm -f conftest.err conftest.$ac_ext # OK, works on sane cases. Now check whether nonexistent headers # can be detected and how. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # Broken: success on invalid input. continue else # Passes both tests. ac_preproc_ok=: break fi rm -f conftest.err conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.err conftest.$ac_ext if $ac_preproc_ok; then : else { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "C preprocessor \"$CPP\" fails sanity check See \`config.log' for more details." "$LINENO" 5; } fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5 $as_echo_n "checking for grep that handles long lines and -e... " >&6; } if test "${ac_cv_path_GREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$GREP"; then ac_path_GREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in grep ggrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_GREP" && $as_test_x "$ac_path_GREP"; } || continue # Check for GNU ac_path_GREP and select it if it is found. # Check for GNU $ac_path_GREP case `"$ac_path_GREP" --version 2>&1` in *GNU*) ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'GREP' >> "conftest.nl" "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_GREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_GREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_GREP"; then as_fn_error "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_GREP=$GREP fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5 $as_echo "$ac_cv_path_GREP" >&6; } GREP="$ac_cv_path_GREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5 $as_echo_n "checking for egrep... " >&6; } if test "${ac_cv_path_EGREP+set}" = set; then : $as_echo_n "(cached) " >&6 else if echo a | $GREP -E '(a|b)' >/dev/null 2>&1 then ac_cv_path_EGREP="$GREP -E" else if test -z "$EGREP"; then ac_path_EGREP_found=false # Loop through the user's path and test for each of PROGNAME-LIST as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in egrep; do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext" { test -f "$ac_path_EGREP" && $as_test_x "$ac_path_EGREP"; } || continue # Check for GNU ac_path_EGREP and select it if it is found. # Check for GNU $ac_path_EGREP case `"$ac_path_EGREP" --version 2>&1` in *GNU*) ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;; *) ac_count=0 $as_echo_n 0123456789 >"conftest.in" while : do cat "conftest.in" "conftest.in" >"conftest.tmp" mv "conftest.tmp" "conftest.in" cp "conftest.in" "conftest.nl" $as_echo 'EGREP' >> "conftest.nl" "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break as_fn_arith $ac_count + 1 && ac_count=$as_val if test $ac_count -gt ${ac_path_EGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_max=$ac_count fi # 10*(2^10) chars as input seems more than enough test $ac_count -gt 10 && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out;; esac $ac_path_EGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_EGREP"; then as_fn_error "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_EGREP=$EGREP fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5 $as_echo "$ac_cv_path_EGREP" >&6; } EGREP="$ac_cv_path_EGREP" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi # On IRIX 5.3, sys/types and inttypes.h are conflicting. for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \ inttypes.h stdint.h unistd.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default" if test "x$ac_cv_header_minix_config_h" = x""yes; then : MINIX=yes else MINIX= fi if test "$MINIX" = yes; then $as_echo "#define _POSIX_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h $as_echo "#define _MINIX 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 $as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test "${ac_cv_safe_to_define___extensions__+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_safe_to_define___extensions__=yes else ac_cv_safe_to_define___extensions__=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5 $as_echo "$ac_cv_safe_to_define___extensions__" >&6; } test $ac_cv_safe_to_define___extensions__ = yes && $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h $as_echo "#define _ALL_SOURCE 1" >>confdefs.h $as_echo "#define _GNU_SOURCE 1" >>confdefs.h $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h # Make sure we can run config.sub. $SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 || as_fn_error "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 $as_echo_n "checking build system type... " >&6; } if test "${ac_cv_build+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"` test "x$ac_build_alias" = x && as_fn_error "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` || as_fn_error "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 $as_echo "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 $as_echo_n "checking host system type... " >&6; } if test "${ac_cv_host+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` || as_fn_error "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 $as_echo "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking target system type" >&5 $as_echo_n "checking target system type... " >&6; } if test "${ac_cv_target+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "x$target_alias" = x; then ac_cv_target=$ac_cv_host else ac_cv_target=`$SHELL "$ac_aux_dir/config.sub" $target_alias` || as_fn_error "$SHELL $ac_aux_dir/config.sub $target_alias failed" "$LINENO" 5 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_target" >&5 $as_echo "$ac_cv_target" >&6; } case $ac_cv_target in *-*-*) ;; *) as_fn_error "invalid value of canonical target" "$LINENO" 5;; esac target=$ac_cv_target ac_save_IFS=$IFS; IFS='-' set x $ac_cv_target shift target_cpu=$1 target_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: target_os=$* IFS=$ac_save_IFS case $target_os in *\ *) target_os=`echo "$target_os" | sed 's/ /-/g'`;; esac # The aliases save the names the user supplied, while $host etc. # will get canonicalized. test -n "$target_alias" && test "$program_prefix$program_suffix$program_transform_name" = \ NONENONEs,x,x, && program_prefix=${target_alias}- # Check whether --enable-static-z80ex was given. if test "${enable_static_z80ex+set}" = set; then : enableval=$enable_static_z80ex; else enable_static_z80ex=no fi # Check whether --enable-sound was given. if test "${enable_sound+set}" = set; then : enableval=$enable_sound; else enable_sound=no fi # Check whether --enable-libaudiofile was given. if test "${enable_libaudiofile+set}" = set; then : enableval=$enable_libaudiofile; else enable_libaudiofile=yes fi # Check whether --enable-libsndfile was given. if test "${enable_libsndfile+set}" = set; then : enableval=$enable_libsndfile; else enable_libsndfile=yes fi # Check whether --enable-libflac was given. if test "${enable_libflac+set}" = set; then : enableval=$enable_libflac; else enable_libflac=yes fi # Check whether --enable-libvorbis was given. if test "${enable_libvorbis+set}" = set; then : enableval=$enable_libvorbis; else enable_libvorbis=yes fi # Check whether --enable-libtheora was given. if test "${enable_libtheora+set}" = set; then : enableval=$enable_libtheora; else enable_libtheora=yes fi # Check whether --enable-libxvidcore was given. if test "${enable_libxvidcore+set}" = set; then : enableval=$enable_libxvidcore; else enable_libxvidcore=yes fi # Check whether --enable-libdirac was given. if test "${enable_libdirac+set}" = set; then : enableval=$enable_libdirac; else enable_libdirac=yes fi # Check whether --enable-libschroedinger was given. if test "${enable_libschroedinger+set}" = set; then : enableval=$enable_libschroedinger; else enable_libschroedinger=yes fi # Check whether --enable-libavformat was given. if test "${enable_libavformat+set}" = set; then : enableval=$enable_libavformat; else enable_libavformat=yes fi # Check whether --enable-libgif was given. if test "${enable_libgif+set}" = set; then : enableval=$enable_libgif; else enable_libgif=yes fi # Check whether --enable-libvncserver was given. if test "${enable_libvncserver+set}" = set; then : enableval=$enable_libvncserver; else enable_libvncserver=yes fi # Check whether --enable-libmp3lame was given. if test "${enable_libmp3lame+set}" = set; then : enableval=$enable_libmp3lame; else enable_libmp3lame=yes fi # Check whether --enable-ms-bitfields was given. if test "${enable_ms_bitfields+set}" = set; then : enableval=$enable_ms_bitfields; else enable_ms_bitfields=yes fi # Check whether --with-ui was given. if test "${with_ui+set}" = set; then : withval=$with_ui; else with_ui=auto fi # Check whether --with-debug_level was given. if test "${with_debug_level+set}" = set; then : withval=$with_debug_level; fi . ./VERSION VERSION=$KCEMU_VERSION cat >>confdefs.h <<_ACEOF #define PACKAGE "$PACKAGE" _ACEOF cat >>confdefs.h <<_ACEOF #define VERSION "$VERSION" _ACEOF cat >>confdefs.h <<_ACEOF #define KCEMU_MAJOR_VERSION $KCEMU_MAJOR_VERSION _ACEOF cat >>confdefs.h <<_ACEOF #define KCEMU_MINOR_VERSION $KCEMU_MINOR_VERSION _ACEOF cat >>confdefs.h <<_ACEOF #define KCEMU_MICRO_VERSION $KCEMU_MICRO_VERSION _ACEOF cat >>confdefs.h <<_ACEOF #define KCEMU_EXTRA_VERSION $KCEMU_EXTRA_VERSION _ACEOF cat >>confdefs.h <<_ACEOF #define KCEMU_EXTRA_VERSION_TEXT "$KCEMU_EXTRA_VERSION_TEXT" _ACEOF cat >>confdefs.h <<_ACEOF #define KCEMU_VERSION "$KCEMU_VERSION" _ACEOF $as_echo "#define PACKAGE_URL \"\$PACKAGE_URL\"" >>confdefs.h $as_echo "#define PACKAGE_NAME \"\$PACKAGE-\$KCEMU_VERSION\"" >>confdefs.h $as_echo "#define PACKAGE_STRING \"\$PACKAGE-\$KCEMU_VERSION\"" >>confdefs.h $as_echo "#define PACKAGE_VERSION \"\$KCEMU_VERSION\"" >>confdefs.h $as_echo "#define PACKAGE_TARNAME \"\$PACKAGE-\${KCEMU_VERSION}.tar.gz\"" >>confdefs.h $as_echo "#define PACKAGE_BUGREPORT \"\$PACKAGE_BUGREPORT\"" >>confdefs.h ac_config_headers="$ac_config_headers include/kc/config.h" am__api_version='1.11' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 $as_echo_n "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test "${ac_cv_path_install+set}" = set; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. # Account for people who put trailing slashes in PATH elements. case $as_dir/ in #(( ./ | .// | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; }; then if test $ac_prog = install && grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test "${ac_cv_path_install+set}" = set; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 $as_echo "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 $as_echo_n "checking whether build environment is sane... " >&6; } # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error "unsafe srcdir value: \`$srcdir'" "$LINENO" 5;; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi test "$2" = conftest.file ) then # Ok. : else as_fn_error "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"` # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: \`missing' script is too old or missing" >&5 $as_echo "$as_me: WARNING: \`missing' script is too old or missing" >&2;} fi if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_STRIP="${ac_tool_prefix}strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 $as_echo "$STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_STRIP+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_STRIP="strip" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 $as_echo "$ac_ct_STRIP" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5 $as_echo_n "checking for a thread-safe mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test "${ac_cv_path_mkdir+set}" = set; then : $as_echo_n "(cached) " >&6 else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do { test -f "$as_dir/$ac_prog$ac_exec_ext" && $as_test_x "$as_dir/$ac_prog$ac_exec_ext"; } || continue case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir (GNU coreutils) '* | \ 'mkdir (coreutils) '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test "${ac_cv_path_mkdir+set}" = set; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 $as_echo "$MKDIR_P" >&6; } mkdir_p="$MKDIR_P" case $mkdir_p in [\\/$]* | ?:[\\/]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_AWK+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_AWK="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 $as_echo "$AWK" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$AWK" && break done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5 $as_echo_n "checking for style of include used by $am_make... " >&6; } am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5 $as_echo "$_am_result" >&6; } rm -f confinc confmf # Check whether --enable-dependency-tracking was given. if test "${enable_dependency_tracking+set}" = set; then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE=$PACKAGE VERSION=$VERSION # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. AMTAR=${AMTAR-"${am_missing_run}tar"} am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -' depcc="$CC" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CC_dependencies_compiler_type+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 $as_echo "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args. set dummy ${ac_tool_prefix}gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_CC"; then ac_ct_CC=$CC # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="gcc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi else CC="$ac_cv_prog_CC" fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args. set dummy ${ac_tool_prefix}cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="${ac_tool_prefix}cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi fi if test -z "$CC"; then # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else ac_prog_rejected=no as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then ac_prog_rejected=yes continue fi ac_cv_prog_CC="cc" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS if test $ac_prog_rejected = yes; then # We found a bogon in the path, so make sure we never use it. set dummy $ac_cv_prog_CC shift if test $# != 0; then # We chose a different compiler from the bogus one. # However, it has the same basename, so the bogon will be chosen # first if we set CC to just the basename; use the full file name. shift ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@" fi fi fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$CC"; then if test -n "$ac_tool_prefix"; then for ac_prog in cl.exe do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CC"; then ac_cv_prog_CC="$CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CC="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CC=$ac_cv_prog_CC if test -n "$CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5 $as_echo "$CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CC" && break done fi if test -z "$CC"; then ac_ct_CC=$CC for ac_prog in cl.exe do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CC"; then ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CC="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CC=$ac_cv_prog_ac_ct_CC if test -n "$ac_ct_CC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5 $as_echo "$ac_ct_CC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CC" && break done if test "x$ac_ct_CC" = x; then CC="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CC=$ac_ct_CC fi fi fi test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "no acceptable C compiler found in \$PATH See \`config.log' for more details." "$LINENO" 5; } # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5 $as_echo_n "checking whether we are using the GNU C compiler... " >&6; } if test "${ac_cv_c_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_c_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5 $as_echo "$ac_cv_c_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GCC=yes else GCC= fi ac_test_CFLAGS=${CFLAGS+set} ac_save_CFLAGS=$CFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5 $as_echo_n "checking whether $CC accepts -g... " >&6; } if test "${ac_cv_prog_cc_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_c_werror_flag=$ac_c_werror_flag ac_c_werror_flag=yes ac_cv_prog_cc_g=no CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes else CFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else ac_c_werror_flag=$ac_save_c_werror_flag CFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_c_werror_flag=$ac_save_c_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5 $as_echo "$ac_cv_prog_cc_g" >&6; } if test "$ac_test_CFLAGS" = set; then CFLAGS=$ac_save_CFLAGS elif test $ac_cv_prog_cc_g = yes; then if test "$GCC" = yes; then CFLAGS="-g -O2" else CFLAGS="-g" fi else if test "$GCC" = yes; then CFLAGS="-O2" else CFLAGS= fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5 $as_echo_n "checking for $CC option to accept ISO C89... " >&6; } if test "${ac_cv_prog_cc_c89+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_prog_cc_c89=no ac_save_CC=$CC cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include /* Most of the following tests are stolen from RCS 5.7's src/conf.sh. */ struct buf { int x; }; FILE * (*rcsopen) (struct buf *, struct stat *, int); static char *e (p, i) char **p; int i; { return p[i]; } static char *f (char * (*g) (char **, int), char **p, ...) { char *s; va_list v; va_start (v,p); s = g (p, va_arg (v,int)); va_end (v); return s; } /* OSF 4.0 Compaq cc is some sort of almost-ANSI by default. It has function prototypes and stuff, but not '\xHH' hex character constants. These don't provoke an error unfortunately, instead are silently treated as 'x'. The following induces an error, until -std is added to get proper ANSI mode. Curiously '\x00'!='x' always comes out true, for an array size at least. It's necessary to write '\x00'==0 to get something that's true only with -std. */ int osf4_cc_array ['\x00' == 0 ? 1 : -1]; /* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters inside strings and character constants. */ #define FOO(x) 'x' int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1]; int test (int i, double x); struct s1 {int (*f) (int a);}; struct s2 {int (*f) (double a);}; int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int); int argc; char **argv; int main () { return f (e, argv, 0) != argv[0] || f (e, argv, 1) != argv[1]; ; return 0; } _ACEOF for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \ -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__" do CC="$ac_save_CC $ac_arg" if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_c89=$ac_arg fi rm -f core conftest.err conftest.$ac_objext test "x$ac_cv_prog_cc_c89" != "xno" && break done rm -f conftest.$ac_ext CC=$ac_save_CC fi # AC_CACHE_VAL case "x$ac_cv_prog_cc_c89" in x) { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5 $as_echo "none needed" >&6; } ;; xno) { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5 $as_echo "unsupported" >&6; } ;; *) CC="$CC $ac_cv_prog_cc_c89" { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5 $as_echo "$ac_cv_prog_cc_c89" >&6; } ;; esac if test "x$ac_cv_prog_cc_c89" != xno; then : fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu if test x$enable_ms_bitfields = xyes; then ac_save_CFLAGS=$CFLAGS CFLAGS="-mms-bitfields" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts $CFLAGS" >&5 $as_echo_n "checking whether $CC accepts $CFLAGS... " >&6; } if test "${ac_cv_prog_cc_mms_bitfields+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_prog_cc_mms_bitfields=yes else ac_cv_prog_cc_mms_bitfields=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_mms_bitfields" >&5 $as_echo "$ac_cv_prog_cc_mms_bitfields" >&6; } if test $ac_cv_prog_cc_mms_bitfields = yes; then use_ms_bitfields="$CFLAGS" else use_ms_bitfields="$CFLAGS" fi CFLAGS="$ac_save_CFLAGS" fi ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu if test -z "$CXX"; then if test -n "$CCC"; then CXX=$CCC else if test -n "$ac_tool_prefix"; then for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args. set dummy $ac_tool_prefix$ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$CXX"; then ac_cv_prog_CXX="$CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_CXX="$ac_tool_prefix$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi CXX=$ac_cv_prog_CXX if test -n "$CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CXX" >&5 $as_echo "$CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$CXX" && break done fi if test -z "$CXX"; then ac_ct_CXX=$CXX for ac_prog in g++ c++ gpp aCC CC cxx cc++ cl.exe FCC KCC RCC xlC_r xlC do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_CXX+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_CXX"; then ac_cv_prog_ac_ct_CXX="$ac_ct_CXX" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_CXX="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_CXX=$ac_cv_prog_ac_ct_CXX if test -n "$ac_ct_CXX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CXX" >&5 $as_echo "$ac_ct_CXX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$ac_ct_CXX" && break done if test "x$ac_ct_CXX" = x; then CXX="g++" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac CXX=$ac_ct_CXX fi fi fi fi # Provide some information about the compiler. $as_echo "$as_me:${as_lineno-$LINENO}: checking for C++ compiler version" >&5 set X $ac_compile ac_compiler=$2 for ac_option in --version -v -V -qversion; do { { ac_try="$ac_compiler $ac_option >&5" case "(($ac_try" in *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;; *) ac_try_echo=$ac_try;; esac eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\"" $as_echo "$ac_try_echo"; } >&5 (eval "$ac_compiler $ac_option >&5") 2>conftest.err ac_status=$? if test -s conftest.err; then sed '10a\ ... rest of stderr output deleted ... 10q' conftest.err >conftest.er1 cat conftest.er1 >&5 fi rm -f conftest.er1 conftest.err $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C++ compiler" >&5 $as_echo_n "checking whether we are using the GNU C++ compiler... " >&6; } if test "${ac_cv_cxx_compiler_gnu+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { #ifndef __GNUC__ choke me #endif ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_compiler_gnu=yes else ac_compiler_gnu=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cv_cxx_compiler_gnu=$ac_compiler_gnu fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_cxx_compiler_gnu" >&5 $as_echo "$ac_cv_cxx_compiler_gnu" >&6; } if test $ac_compiler_gnu = yes; then GXX=yes else GXX= fi ac_test_CXXFLAGS=${CXXFLAGS+set} ac_save_CXXFLAGS=$CXXFLAGS { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CXX accepts -g" >&5 $as_echo_n "checking whether $CXX accepts -g... " >&6; } if test "${ac_cv_prog_cxx_g+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_save_cxx_werror_flag=$ac_cxx_werror_flag ac_cxx_werror_flag=yes ac_cv_prog_cxx_g=no CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes else CXXFLAGS="" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : else ac_cxx_werror_flag=$ac_save_cxx_werror_flag CXXFLAGS="-g" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_cxx_try_compile "$LINENO"; then : ac_cv_prog_cxx_g=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext ac_cxx_werror_flag=$ac_save_cxx_werror_flag fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cxx_g" >&5 $as_echo "$ac_cv_prog_cxx_g" >&6; } if test "$ac_test_CXXFLAGS" = set; then CXXFLAGS=$ac_save_CXXFLAGS elif test $ac_cv_prog_cxx_g = yes; then if test "$GXX" = yes; then CXXFLAGS="-g -O2" else CXXFLAGS="-g" fi else if test "$GXX" = yes; then CXXFLAGS="-O2" else CXXFLAGS= fi fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu depcc="$CXX" am_compiler_list= { $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 $as_echo_n "checking dependency style of $depcc... " >&6; } if test "${am_cv_CXX_dependencies_compiler_type+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CXX_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CXX_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CXX_dependencies_compiler_type=none fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5 $as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; } CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then am__fastdepCXX_TRUE= am__fastdepCXX_FALSE='#' else am__fastdepCXX_TRUE='#' am__fastdepCXX_FALSE= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 $as_echo_n "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5 $as_echo "no, using $LN_S" >&6; } fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. set dummy ${ac_tool_prefix}ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$RANLIB"; then ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RANLIB=$ac_cv_prog_RANLIB if test -n "$RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5 $as_echo "$RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RANLIB"; then ac_ct_RANLIB=$RANLIB # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RANLIB+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RANLIB"; then ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RANLIB="ranlib" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB if test -n "$ac_ct_RANLIB"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5 $as_echo "$ac_ct_RANLIB" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RANLIB" = x; then RANLIB=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RANLIB=$ac_ct_RANLIB fi else RANLIB="$ac_cv_prog_RANLIB" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_RC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$RC"; then ac_cv_prog_RC="$RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_RC="${ac_tool_prefix}windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi RC=$ac_cv_prog_RC if test -n "$RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RC" >&5 $as_echo "$RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_RC"; then ac_ct_RC=$RC # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_RC+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_RC"; then ac_cv_prog_ac_ct_RC="$ac_ct_RC" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_RC="windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_RC=$ac_cv_prog_ac_ct_RC if test -n "$ac_ct_RC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RC" >&5 $as_echo "$ac_ct_RC" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_RC" = x; then RC=":" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac RC=$ac_ct_RC fi else RC="$ac_cv_prog_RC" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5 $as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; } set x ${MAKE-make} ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'` if { as_var=ac_cv_prog_make_${ac_make}_set; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat >conftest.make <<\_ACEOF SHELL = /bin/sh all: @echo '@@@%%%=$(MAKE)=@@@%%%' _ACEOF # GNU make sometimes prints "make[1]: Entering...", which would confuse us. case `${MAKE-make} -f conftest.make 2>/dev/null` in *@@@%%%=?*=@@@%%%*) eval ac_cv_prog_make_${ac_make}_set=yes;; *) eval ac_cv_prog_make_${ac_make}_set=no;; esac rm -f conftest.make fi if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } SET_MAKE= else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } SET_MAKE="MAKE=${MAKE-make}" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking which debug level is requested" >&5 $as_echo_n "checking which debug level is requested... " >&6; } DBG_LEVEL=1 if test "x$with_debug_level" = "x0"; then DBG_LEVEL=0 elif test "x$with_debug_level" = "x1"; then DBG_LEVEL=1 elif test "x$with_debug_level" = "x2"; then DBG_LEVEL=2 elif test "x$with_debug_level" = "x3"; then DBG_LEVEL=3 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DBG_LEVEL" >&5 $as_echo "$DBG_LEVEL" >&6; } cat >>confdefs.h <<_ACEOF #define DBG_LEVEL $DBG_LEVEL _ACEOF # Extract the first word of "asl", so it can be a program name with args. set dummy asl; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_HAVE_ASL+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$HAVE_ASL"; then ac_cv_prog_HAVE_ASL="$HAVE_ASL" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_HAVE_ASL=""yes"" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_HAVE_ASL" && ac_cv_prog_HAVE_ASL=""no"" fi fi HAVE_ASL=$ac_cv_prog_HAVE_ASL if test -n "$HAVE_ASL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_ASL" >&5 $as_echo "$HAVE_ASL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "p2bin", so it can be a program name with args. set dummy p2bin; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_HAVE_P2BIN+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$HAVE_P2BIN"; then ac_cv_prog_HAVE_P2BIN="$HAVE_P2BIN" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_HAVE_P2BIN=""yes"" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_prog_HAVE_P2BIN" && ac_cv_prog_HAVE_P2BIN=""no"" fi fi HAVE_P2BIN=$ac_cv_prog_HAVE_P2BIN if test -n "$HAVE_P2BIN"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_P2BIN" >&5 $as_echo "$HAVE_P2BIN" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if false; then COMPILE_Z80_ASM_TRUE= COMPILE_Z80_ASM_FALSE='#' else COMPILE_Z80_ASM_TRUE='#' COMPILE_Z80_ASM_FALSE= fi if test "x$HAVE_ASL" = "xyes"; then if test "x$HAVE_P2BIN" = "xyes"; then if true; then COMPILE_Z80_ASM_TRUE= COMPILE_Z80_ASM_FALSE='#' else COMPILE_Z80_ASM_TRUE='#' COMPILE_Z80_ASM_FALSE= fi fi fi if false; then TARGET_MINGW_TRUE= TARGET_MINGW_FALSE='#' else TARGET_MINGW_TRUE='#' TARGET_MINGW_FALSE= fi if false; then TARGET_LINUX_TRUE= TARGET_LINUX_FALSE='#' else TARGET_LINUX_TRUE='#' TARGET_LINUX_FALSE= fi if false; then TARGET_FREEBSD_TRUE= TARGET_FREEBSD_FALSE='#' else TARGET_FREEBSD_TRUE='#' TARGET_FREEBSD_FALSE= fi case "$host_os" in beos) as_fn_error " *** *** BeOS is not supported anymore. ***" "$LINENO" 5 ;; mingw32*) HOST_OS="MinGW" HOST_OS_MINGW=1 if true; then TARGET_MINGW_TRUE= TARGET_MINGW_FALSE='#' else TARGET_MINGW_TRUE='#' TARGET_MINGW_FALSE= fi cat >>confdefs.h <<_ACEOF #define HOST_OS_MINGW $HOST_OS_MINGW _ACEOF CFLAGS="$CFLAGS $use_ms_bitfields" CXXFLAGS="$CXXFLAGS $use_ms_bitfields" LDFLAGS="$LDFLAGS $use_ms_bitfields -mwindows" ;; freebsd*) HOST_OS="FreeBSD" HOST_OS_FREEBSD=1 if true; then TARGET_FREEBSD_TRUE= TARGET_FREEBSD_FALSE='#' else TARGET_FREEBSD_TRUE='#' TARGET_FREEBSD_FALSE= fi cat >>confdefs.h <<_ACEOF #define HOST_OS_FREEBSD $HOST_OS_FREEBSD _ACEOF ;; *) HOST_OS="Linux" HOST_OS_LINUX=1 if true; then TARGET_LINUX_TRUE= TARGET_LINUX_FALSE='#' else TARGET_LINUX_TRUE='#' TARGET_LINUX_FALSE= fi cat >>confdefs.h <<_ACEOF #define HOST_OS_LINUX $HOST_OS_LINUX _ACEOF ;; esac cat >>confdefs.h <<_ACEOF #define HOST_OS "$HOST_OS" _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for an ANSI C-conforming const" >&5 $as_echo_n "checking for an ANSI C-conforming const... " >&6; } if test "${ac_cv_c_const+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { /* FIXME: Include the comments suggested by Paul. */ #ifndef __cplusplus /* Ultrix mips cc rejects this. */ typedef int charset[2]; const charset cs; /* SunOS 4.1.1 cc rejects this. */ char const *const *pcpcc; char **ppc; /* NEC SVR4.0.2 mips cc rejects this. */ struct point {int x, y;}; static struct point const zero = {0,0}; /* AIX XL C 1.02.0.0 rejects this. It does not let you subtract one const X* pointer from another in an arm of an if-expression whose if-part is not a constant expression */ const char *g = "string"; pcpcc = &g + (g ? g-g : 0); /* HPUX 7.0 cc rejects these. */ ++pcpcc; ppc = (char**) pcpcc; pcpcc = (char const *const *) ppc; { /* SCO 3.2v4 cc rejects this. */ char *t; char const *s = 0 ? (char *) 0 : (char const *) 0; *t++ = 0; if (s) return 0; } { /* Someone thinks the Sun supposedly-ANSI compiler will reject this. */ int x[] = {25, 17}; const int *foo = &x[0]; ++foo; } { /* Sun SC1.0 ANSI compiler rejects this -- but not the above. */ typedef const int *iptr; iptr p = 0; ++p; } { /* AIX XL C 1.02.0.0 rejects this saying "k.c", line 2.27: 1506-025 (S) Operand must be a modifiable lvalue. */ struct s { int j; const int *ap[3]; }; struct s *b; b->j = 5; } { /* ULTRIX-32 V3.1 (Rev 9) vcc rejects this */ const int foo = 10; if (!foo) return 0; } return !cs[0] && !zero.x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_const=yes else ac_cv_c_const=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_const" >&5 $as_echo "$ac_cv_c_const" >&6; } if test $ac_cv_c_const = no; then $as_echo "#define const /**/" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5 $as_echo_n "checking for inline... " >&6; } if test "${ac_cv_c_inline+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_cv_c_inline=no for ac_kw in inline __inline__ __inline; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __cplusplus typedef int foo_t; static $ac_kw foo_t static_foo () {return 0; } $ac_kw foo_t foo () {return 0; } #endif _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_c_inline=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext test "$ac_cv_c_inline" != no && break done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5 $as_echo "$ac_cv_c_inline" >&6; } case $ac_cv_c_inline in inline | yes) ;; *) case $ac_cv_c_inline in no) ac_val=;; *) ac_val=$ac_cv_c_inline;; esac cat >>confdefs.h <<_ACEOF #ifndef __cplusplus #define inline $ac_val #endif _ACEOF ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether time.h and sys/time.h may both be included" >&5 $as_echo_n "checking whether time.h and sys/time.h may both be included... " >&6; } if test "${ac_cv_header_time+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { if ((struct tm *) 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_time=yes else ac_cv_header_time=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_time" >&5 $as_echo "$ac_cv_header_time" >&6; } if test $ac_cv_header_time = yes; then $as_echo "#define TIME_WITH_SYS_TIME 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5 $as_echo_n "checking for X... " >&6; } # Check whether --with-x was given. if test "${with_x+set}" = set; then : withval=$with_x; fi # $have_x is `yes', `no', `disabled', or empty when we do not yet know. if test "x$with_x" = xno; then # The user explicitly disabled X. have_x=disabled else case $x_includes,$x_libraries in #( *\'*) as_fn_error "cannot use X directory names containing '" "$LINENO" 5;; #( *,NONE | NONE,*) if test "${ac_cv_have_x+set}" = set; then : $as_echo_n "(cached) " >&6 else # One or both of the vars are not set, and there is no cached value. ac_x_includes=no ac_x_libraries=no rm -f -r conftest.dir if mkdir conftest.dir; then cd conftest.dir cat >Imakefile <<'_ACEOF' incroot: @echo incroot='${INCROOT}' usrlibdir: @echo usrlibdir='${USRLIBDIR}' libdir: @echo libdir='${LIBDIR}' _ACEOF if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then # GNU make sometimes prints "make[1]: Entering...", which would confuse us. for ac_var in incroot usrlibdir libdir; do eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`" done # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR. for ac_extension in a so sl dylib la dll; do if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" && test -f "$ac_im_libdir/libX11.$ac_extension"; then ac_im_usrlibdir=$ac_im_libdir; break fi done # Screen out bogus values from the imake configuration. They are # bogus both because they are the default anyway, and because # using them would break gcc on systems where it needs fixed includes. case $ac_im_incroot in /usr/include) ac_x_includes= ;; *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;; esac case $ac_im_usrlibdir in /usr/lib | /usr/lib64 | /lib | /lib64) ;; *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;; esac fi cd .. rm -f -r conftest.dir fi # Standard set of common directories for X headers. # Check X11 before X11Rn because it is often a symlink to the current release. ac_x_header_dirs=' /usr/X11/include /usr/X11R7/include /usr/X11R6/include /usr/X11R5/include /usr/X11R4/include /usr/include/X11 /usr/include/X11R7 /usr/include/X11R6 /usr/include/X11R5 /usr/include/X11R4 /usr/local/X11/include /usr/local/X11R7/include /usr/local/X11R6/include /usr/local/X11R5/include /usr/local/X11R4/include /usr/local/include/X11 /usr/local/include/X11R7 /usr/local/include/X11R6 /usr/local/include/X11R5 /usr/local/include/X11R4 /usr/X386/include /usr/x386/include /usr/XFree86/include/X11 /usr/include /usr/local/include /usr/unsupported/include /usr/athena/include /usr/local/x11r5/include /usr/lpp/Xamples/include /usr/openwin/include /usr/openwin/share/include' if test "$ac_x_includes" = no; then # Guess where to find include files, by looking for Xlib.h. # First, try using that file with no special directory specified. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if ac_fn_c_try_cpp "$LINENO"; then : # We can compile using X headers with no special include directory. ac_x_includes= else for ac_dir in $ac_x_header_dirs; do if test -r "$ac_dir/X11/Xlib.h"; then ac_x_includes=$ac_dir break fi done fi rm -f conftest.err conftest.$ac_ext fi # $ac_x_includes = no if test "$ac_x_libraries" = no; then # Check for the libraries. # See if we find them without any special options. # Don't add to $LIBS permanently. ac_save_LIBS=$LIBS LIBS="-lX11 $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { XrmInitialize () ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBS=$ac_save_LIBS # We can link X programs with no special library path. ac_x_libraries= else LIBS=$ac_save_LIBS for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g` do # Don't even attempt the hair of trying to link an X program! for ac_extension in a so sl dylib la dll; do if test -r "$ac_dir/libX11.$ac_extension"; then ac_x_libraries=$ac_dir break 2 fi done done fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi # $ac_x_libraries = no case $ac_x_includes,$ac_x_libraries in #( no,* | *,no | *\'*) # Didn't find X, or a directory has "'" in its name. ac_cv_have_x="have_x=no";; #( *) # Record where we found X for the cache. ac_cv_have_x="have_x=yes\ ac_x_includes='$ac_x_includes'\ ac_x_libraries='$ac_x_libraries'" esac fi ;; #( *) have_x=yes;; esac eval "$ac_cv_have_x" fi # $with_x != no if test "$have_x" != yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5 $as_echo "$have_x" >&6; } no_x=yes else # If each of the values was on the command line, it overrides each guess. test "x$x_includes" = xNONE && x_includes=$ac_x_includes test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries # Update the cache value to reflect the command line values. ac_cv_have_x="have_x=yes\ ac_x_includes='$x_includes'\ ac_x_libraries='$x_libraries'" { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5 $as_echo "libraries $x_libraries, headers $x_includes" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5 $as_echo_n "checking for ANSI C header files... " >&6; } if test "${ac_cv_header_stdc+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdc=yes else ac_cv_header_stdc=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "memchr" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "free" >/dev/null 2>&1; then : else ac_cv_header_stdc=no fi rm -f conftest* fi if test $ac_cv_header_stdc = yes; then # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if ((' ' & 0x0FF) == 0x020) # define ISLOWER(c) ('a' <= (c) && (c) <= 'z') # define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c)) #else # define ISLOWER(c) \ (('a' <= (c) && (c) <= 'i') \ || ('j' <= (c) && (c) <= 'r') \ || ('s' <= (c) && (c) <= 'z')) # define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c)) #endif #define XOR(e, f) (((e) && !(f)) || (!(e) && (f))) int main () { int i; for (i = 0; i < 256; i++) if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else ac_cv_header_stdc=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5 $as_echo "$ac_cv_header_stdc" >&6; } if test $ac_cv_header_stdc = yes; then $as_echo "#define STDC_HEADERS 1" >>confdefs.h fi for ac_header in sys/time.h mcheck.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done ac_ext=cpp ac_cpp='$CXXCPP $CPPFLAGS' ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_cxx_compiler_gnu ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { $as_echo "$as_me:${as_lineno-$LINENO}: checking return type of signal handlers" >&5 $as_echo_n "checking return type of signal handlers... " >&6; } if test "${ac_cv_type_signal+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { return *(signal (0, 0)) (0) == 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_type_signal=int else ac_cv_type_signal=void fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_signal" >&5 $as_echo "$ac_cv_type_signal" >&6; } cat >>confdefs.h <<_ACEOF #define RETSIGTYPE $ac_cv_type_signal _ACEOF for ac_func in gettimeofday strstr strchr strrchr strtol strcasecmp strncasecmp mtrace do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done ac_fn_c_check_func "$LINENO" "localtime_r" "ac_cv_func_localtime_r" if test "x$ac_cv_func_localtime_r" = x""yes; then : $as_echo "#define HAVE_LOCALTIME_R 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "localtime" "ac_cv_func_localtime" if test "x$ac_cv_func_localtime" = x""yes; then : $as_echo "#define HAVE_LOCALTIME 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "getopt" "ac_cv_func_getopt" if test "x$ac_cv_func_getopt" = x""yes; then : have_getopt=yes $as_echo "#define HAVE_GETOPT 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "getopt_long" "ac_cv_func_getopt_long" if test "x$ac_cv_func_getopt_long" = x""yes; then : have_getopt_long=yes $as_echo "#define HAVE_GETOPT_LONG 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use the included getopt library" >&5 $as_echo_n "checking whether to use the included getopt library... " >&6; } if test x$have_getopt = xyes -o x$have_getopt_long = xyes; then use_included_getopt=no if false; then USE_INCLUDED_GETOPT_TRUE= USE_INCLUDED_GETOPT_FALSE='#' else USE_INCLUDED_GETOPT_TRUE='#' USE_INCLUDED_GETOPT_FALSE= fi else use_included_getopt=yes if true; then USE_INCLUDED_GETOPT_TRUE= USE_INCLUDED_GETOPT_FALSE='#' else USE_INCLUDED_GETOPT_TRUE='#' USE_INCLUDED_GETOPT_FALSE= fi $as_echo "#define USE_INCLUDED_GETOPT 1" >>confdefs.h $as_echo "#define HAVE_GETOPT 1" >>confdefs.h $as_echo "#define HAVE_GETOPT_LONG 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $use_included_getopt" >&5 $as_echo "$use_included_getopt" >&6; } ALL_LINGUAS="en de" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } GETTEXT_MACRO_VERSION=0.17 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_MSGFMT+set}" = set; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_GMSGFMT+set}" = set; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_GMSGFMT="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_XGETTEXT+set}" = set; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_MSGMERGE+set}" = set; then : $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$localedir" || localedir='${datadir}/locale' test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2 or newer" >&5 $as_echo_n "checking whether we are using the GNU C Library 2 or newer... " >&6; } if test "${ac_cv_gnu_library_2+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky GNU user" >/dev/null 2>&1; then : ac_cv_gnu_library_2=yes else ac_cv_gnu_library_2=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2" >&5 $as_echo "$ac_cv_gnu_library_2" >&6; } GLIBC2="$ac_cv_gnu_library_2" CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 $as_echo_n "checking for simple visibility declarations... " >&6; } if test "${gl_cv_cc_visibility+set}" = set; then : $as_echo_n "(cached) " >&6 else gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_cc_visibility=yes else gl_cv_cc_visibility=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 $as_echo "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi cat >>confdefs.h <<_ACEOF #define HAVE_VISIBILITY $HAVE_VISIBILITY _ACEOF ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default" if test "x$ac_cv_type_size_t" = x""yes; then : else cat >>confdefs.h <<_ACEOF #define size_t unsigned int _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5 $as_echo_n "checking for stdint.h... " >&6; } if test "${gl_cv_header_stdint_h+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { uintmax_t i = (uintmax_t) -1; return !i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_stdint_h=yes else gl_cv_header_stdint_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5 $as_echo "$gl_cv_header_stdint_h" >&6; } if test $gl_cv_header_stdint_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H_WITH_UINTMAX 1 _ACEOF fi # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 $as_echo_n "checking for working alloca.h... " >&6; } if test "${ac_cv_working_alloca_h+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_working_alloca_h=yes else ac_cv_working_alloca_h=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5 $as_echo "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then $as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 $as_echo_n "checking for alloca... " >&6; } if test "${ac_cv_func_alloca_works+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __GNUC__ # define alloca __builtin_alloca #else # ifdef _MSC_VER # include # define alloca _alloca # else # ifdef HAVE_ALLOCA_H # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca /* predefined by HP cc +Olibcalls */ char *alloca (); # endif # endif # endif # endif #endif int main () { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_func_alloca_works=yes else ac_cv_func_alloca_works=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5 $as_echo "$ac_cv_func_alloca_works" >&6; } if test $ac_cv_func_alloca_works = yes; then $as_echo "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext $as_echo "#define C_ALLOCA 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5 $as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; } if test "${ac_cv_os_cray+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined CRAY && ! defined CRAY2 webecray #else wenotbecray #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "webecray" >/dev/null 2>&1; then : ac_cv_os_cray=yes else ac_cv_os_cray=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5 $as_echo "$ac_cv_os_cray" >&6; } if test $ac_cv_os_cray = yes; then for ac_func in _getb67 GETB67 getb67; do as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define CRAY_STACKSEG_END $ac_func _ACEOF break fi done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 $as_echo_n "checking stack direction for C alloca... " >&6; } if test "${ac_cv_c_stack_direction+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_c_stack_direction=0 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction () { static char *addr = 0; auto char dummy; if (addr == 0) { addr = &dummy; return find_stack_direction (); } else return (&dummy > addr) ? 1 : -1; } int main () { return find_stack_direction () < 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_c_stack_direction=1 else ac_cv_c_stack_direction=-1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5 $as_echo "$ac_cv_c_stack_direction" >&6; } cat >>confdefs.h <<_ACEOF #define STACK_DIRECTION $ac_cv_c_stack_direction _ACEOF fi for ac_header in $ac_header_list do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default " eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getpagesize do : ac_fn_c_check_func "$LINENO" "getpagesize" "ac_cv_func_getpagesize" if test "x$ac_cv_func_getpagesize" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_GETPAGESIZE 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working mmap" >&5 $as_echo_n "checking for working mmap... " >&6; } if test "${ac_cv_func_mmap_fixed_mapped+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : ac_cv_func_mmap_fixed_mapped=no else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default /* malloc might have been renamed as rpl_malloc. */ #undef malloc /* Thanks to Mike Haertel and Jim Avera for this test. Here is a matrix of mmap possibilities: mmap private not fixed mmap private fixed at somewhere currently unmapped mmap private fixed at somewhere already mapped mmap shared not fixed mmap shared fixed at somewhere currently unmapped mmap shared fixed at somewhere already mapped For private mappings, we should verify that changes cannot be read() back from the file, nor mmap's back from the file at a different address. (There have been systems where private was not correctly implemented like the infamous i386 svr4.0, and systems where the VM page cache was not coherent with the file system buffer cache like early versions of FreeBSD and possibly contemporary NetBSD.) For shared mappings, we should conversely verify that changes get propagated back to all the places they're supposed to be. Grep wants private fixed already mapped. The main things grep needs to know about mmap are: * does it exist and is it safe to write into the mmap'd area * how to use it (BSD variants) */ #include #include #if !defined STDC_HEADERS && !defined HAVE_STDLIB_H char *malloc (); #endif /* This mess was copied from the GNU getpagesize.h. */ #ifndef HAVE_GETPAGESIZE # ifdef _SC_PAGESIZE # define getpagesize() sysconf(_SC_PAGESIZE) # else /* no _SC_PAGESIZE */ # ifdef HAVE_SYS_PARAM_H # include # ifdef EXEC_PAGESIZE # define getpagesize() EXEC_PAGESIZE # else /* no EXEC_PAGESIZE */ # ifdef NBPG # define getpagesize() NBPG * CLSIZE # ifndef CLSIZE # define CLSIZE 1 # endif /* no CLSIZE */ # else /* no NBPG */ # ifdef NBPC # define getpagesize() NBPC # else /* no NBPC */ # ifdef PAGESIZE # define getpagesize() PAGESIZE # endif /* PAGESIZE */ # endif /* no NBPC */ # endif /* no NBPG */ # endif /* no EXEC_PAGESIZE */ # else /* no HAVE_SYS_PARAM_H */ # define getpagesize() 8192 /* punt totally */ # endif /* no HAVE_SYS_PARAM_H */ # endif /* no _SC_PAGESIZE */ #endif /* no HAVE_GETPAGESIZE */ int main () { char *data, *data2, *data3; const char *cdata2; int i, pagesize; int fd, fd2; pagesize = getpagesize (); /* First, make a file with some known garbage in it. */ data = (char *) malloc (pagesize); if (!data) return 1; for (i = 0; i < pagesize; ++i) *(data + i) = rand (); umask (0); fd = creat ("conftest.mmap", 0600); if (fd < 0) return 2; if (write (fd, data, pagesize) != pagesize) return 3; close (fd); /* Next, check that the tail of a page is zero-filled. File must have non-zero length, otherwise we risk SIGBUS for entire page. */ fd2 = open ("conftest.txt", O_RDWR | O_CREAT | O_TRUNC, 0600); if (fd2 < 0) return 4; cdata2 = ""; if (write (fd2, cdata2, 1) != 1) return 5; data2 = (char *) mmap (0, pagesize, PROT_READ | PROT_WRITE, MAP_SHARED, fd2, 0L); if (data2 == MAP_FAILED) return 6; for (i = 0; i < pagesize; ++i) if (*(data2 + i)) return 7; close (fd2); if (munmap (data2, pagesize)) return 8; /* Next, try to mmap the file at a fixed address which already has something else allocated at it. If we can, also make sure that we see the same garbage. */ fd = open ("conftest.mmap", O_RDWR); if (fd < 0) return 9; if (data2 != mmap (data2, pagesize, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_FIXED, fd, 0L)) return 10; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data2 + i)) return 11; /* Finally, make sure that changes to the mapped area do not percolate back to the file as seen by read(). (This is a bug on some variants of i386 svr4.0.) */ for (i = 0; i < pagesize; ++i) *(data2 + i) = *(data2 + i) + 1; data3 = (char *) malloc (pagesize); if (!data3) return 12; if (read (fd, data3, pagesize) != pagesize) return 13; for (i = 0; i < pagesize; ++i) if (*(data + i) != *(data3 + i)) return 14; close (fd); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_mmap_fixed_mapped=yes else ac_cv_func_mmap_fixed_mapped=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_mmap_fixed_mapped" >&5 $as_echo "$ac_cv_func_mmap_fixed_mapped" >&6; } if test $ac_cv_func_mmap_fixed_mapped = yes; then $as_echo "#define HAVE_MMAP 1" >>confdefs.h fi rm -f conftest.mmap conftest.txt { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether integer division by zero raises SIGFPE" >&5 $as_echo_n "checking whether integer division by zero raises SIGFPE... " >&6; } if test "${gt_cv_int_divbyzero_sigfpe+set}" = set; then : $as_echo_n "(cached) " >&6 else gt_cv_int_divbyzero_sigfpe= case "$host_os" in macos* | darwin[6-9]* | darwin[1-9][0-9]*) # On MacOS X 10.2 or newer, just assume the same as when cross- # compiling. If we were to perform the real test, 1 Crash Report # dialog window would pop up. case "$host_cpu" in i[34567]86 | x86_64) gt_cv_int_divbyzero_sigfpe="guessing yes" ;; esac ;; esac if test -z "$gt_cv_int_divbyzero_sigfpe"; then if test "$cross_compiling" = yes; then : # Guess based on the CPU. case "$host_cpu" in alpha* | i[34567]86 | x86_64 | m68k | s390*) gt_cv_int_divbyzero_sigfpe="guessing yes";; *) gt_cv_int_divbyzero_sigfpe="guessing no";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include static void sigfpe_handler (int sig) { /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ exit (sig != SIGFPE); } int x = 1; int y = 0; int z; int nan; int main () { signal (SIGFPE, sigfpe_handler); /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) signal (SIGTRAP, sigfpe_handler); #endif /* Linux/SPARC yields signal SIGILL. */ #if defined (__sparc__) && defined (__linux__) signal (SIGILL, sigfpe_handler); #endif z = x / y; nan = y / y; exit (1); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gt_cv_int_divbyzero_sigfpe=yes else gt_cv_int_divbyzero_sigfpe=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_int_divbyzero_sigfpe" >&5 $as_echo "$gt_cv_int_divbyzero_sigfpe" >&6; } case "$gt_cv_int_divbyzero_sigfpe" in *yes) value=1;; *) value=0;; esac cat >>confdefs.h <<_ACEOF #define INTDIV0_RAISES_SIGFPE $value _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5 $as_echo_n "checking for inttypes.h... " >&6; } if test "${gl_cv_header_inttypes_h+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { uintmax_t i = (uintmax_t) -1; return !i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_header_inttypes_h=yes else gl_cv_header_inttypes_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5 $as_echo "$gl_cv_header_inttypes_h" >&6; } if test $gl_cv_header_inttypes_h = yes; then cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H_WITH_UINTMAX 1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5 $as_echo_n "checking for unsigned long long int... " >&6; } if test "${ac_cv_type_unsigned_long_long_int+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Test preprocessor. */ #if ! (-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) error in preprocessor; #endif #if ! (18446744073709551615ULL <= -1ull) error in preprocessor; #endif /* Test literals. */ long long int ll = 9223372036854775807ll; long long int nll = -9223372036854775807LL; unsigned long long int ull = 18446744073709551615ULL; /* Test constant expressions. */ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) ? 1 : -1)]; typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63; int main () { /* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; unsigned long long int ullmax = 18446744073709551615ull; return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | (llmax / ll) | (llmax % ll) | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | (ullmax / ull) | (ullmax % ull)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_type_unsigned_long_long_int=yes else ac_cv_type_unsigned_long_long_int=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5 $as_echo "$ac_cv_type_unsigned_long_long_int" >&6; } if test $ac_cv_type_unsigned_long_long_int = yes; then $as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h fi if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then test $ac_cv_type_unsigned_long_long_int = yes \ && ac_type='unsigned long long' \ || ac_type='unsigned long' cat >>confdefs.h <<_ACEOF #define uintmax_t $ac_type _ACEOF else $as_echo "#define HAVE_UINTMAX_T 1" >>confdefs.h fi for ac_header in inttypes.h do : ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default" if test "x$ac_cv_header_inttypes_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_INTTYPES_H 1 _ACEOF fi done if test $ac_cv_header_inttypes_h = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5 $as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; } if test "${gt_cv_inttypes_pri_broken+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef PRId32 char *p = PRId32; #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_inttypes_pri_broken=no else gt_cv_inttypes_pri_broken=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5 $as_echo "$gt_cv_inttypes_pri_broken" >&6; } fi if test "$gt_cv_inttypes_pri_broken" = yes; then cat >>confdefs.h <<_ACEOF #define PRI_MACROS_BROKEN 1 _ACEOF PRI_MACROS_BROKEN=1 else PRI_MACROS_BROKEN=0 fi # Check whether --enable-threads was given. if test "${enable_threads+set}" = set; then : enableval=$enable_threads; gl_use_threads=$enableval else case "$host_os" in osf*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac fi if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # For using : case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks . cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_TRY_LINK test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in . case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac fi if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test "${with_gnu_ld+set}" = set; then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ld used by GCC" >&5 $as_echo_n "checking for ld used by GCC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | [A-Za-z]:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 $as_echo_n "checking for GNU ld... " >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 $as_echo_n "checking for non-GNU ld... " >&6; } fi if test "${acl_cv_path_LD+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi fi LD="$acl_cv_path_LD" if test -n "$LD"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 $as_echo "$LD" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -z "$LD" && as_fn_error "no acceptable ld found in \$PATH" "$LINENO" 5 { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 $as_echo_n "checking if the linker ($LD) is GNU ld... " >&6; } if test "${acl_cv_prog_gnu_ld+set}" = set; then : $as_echo_n "(cached) " >&6 else # I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if test "${acl_cv_rpath+set}" = set; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi acl_libdirstem=lib searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi gl_threads_api=none LIBTHREAD= LTLIBTHREAD= LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 $as_echo_n "checking whether imported symbols can be declared weak... " >&6; } gl_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main () { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_have_weak=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_weak" >&5 $as_echo "$gl_have_weak" >&6; } if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks . It's added above, in gl_LOCK_EARLY_BODY. ac_fn_c_check_header_mongrel "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = x""yes; then : gl_have_pthread_h=yes else gl_have_pthread_h=no fi if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads gl_have_pthread= # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pthread_mutex_lock((pthread_mutex_t*)0); pthread_mutexattr_init((pthread_mutexattr_t*)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_have_pthread=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test -n "$gl_have_pthread"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 $as_echo_n "checking for pthread_kill in -lpthread... " >&6; } if test "${ac_cv_lib_pthread_pthread_kill+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_kill (); int main () { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_kill=yes else ac_cv_lib_pthread_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 $as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = x""yes; then : LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. case "$host_os" in solaris* | hpux*) $as_echo "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h esac fi else # Some library is needed. Try libpthread and libc_r. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 $as_echo_n "checking for pthread_kill in -lpthread... " >&6; } if test "${ac_cv_lib_pthread_pthread_kill+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lpthread $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_kill (); int main () { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_pthread_pthread_kill=yes else ac_cv_lib_pthread_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_pthread_pthread_kill" >&5 $as_echo "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = x""yes; then : gl_have_pthread=yes LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread fi if test -z "$gl_have_pthread"; then # For FreeBSD 4. { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 $as_echo_n "checking for pthread_kill in -lc_r... " >&6; } if test "${ac_cv_lib_c_r_pthread_kill+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lc_r $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pthread_kill (); int main () { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_c_r_pthread_kill=yes else ac_cv_lib_c_r_pthread_kill=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_c_r_pthread_kill" >&5 $as_echo "$ac_cv_lib_c_r_pthread_kill" >&6; } if test "x$ac_cv_lib_c_r_pthread_kill" = x""yes; then : gl_have_pthread=yes LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r fi fi fi if test -n "$gl_have_pthread"; then gl_threads_api=posix $as_echo "#define USE_POSIX_THREADS 1" >>confdefs.h if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if test $gl_have_weak = yes; then $as_echo "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= fi fi # OSF/1 4.0 and MacOS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include " if test "x$ac_cv_type_pthread_rwlock_t" = x""yes; then : $as_echo "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h fi # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #if __FreeBSD__ == 4 error "No, in FreeBSD 4.0 recursive mutexes actually don't work." #else int x = (int)PTHREAD_MUTEX_RECURSIVE; return !x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : $as_echo "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi fi fi if test -z "$gl_have_pthread"; then if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then gl_have_solaristhread= gl_save_LIBS="$LIBS" LIBS="$LIBS -lthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { thr_self(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_have_solaristhread=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gl_save_LIBS" if test -n "$gl_have_solaristhread"; then gl_threads_api=solaris LIBTHREAD=-lthread LTLIBTHREAD=-lthread LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" $as_echo "#define USE_SOLARIS_THREADS 1" >>confdefs.h if test $gl_have_weak = yes; then $as_echo "#define USE_SOLARIS_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= fi fi fi fi if test "$gl_use_threads" = pth; then gl_save_CPPFLAGS="$CPPFLAGS" { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libpth" >&5 $as_echo_n "checking how to link with libpth... " >&6; } if test "${ac_cv_libpth_libs+set}" = set; then : $as_echo_n "(cached) " >&6 else use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libpth-prefix was given. if test "${with_libpth_prefix+set}" = set; then : withval=$with_libpth_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi fi LIBPTH= LTLIBPTH= INCPTH= LIBPTH_PREFIX= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='pth ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBPTH="${LIBPTH}${LIBPTH:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_so" else LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBPTH="${LIBPTH}${LIBPTH:+ }$found_a" else LIBPTH="${LIBPTH}${LIBPTH:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` LIBPTH_PREFIX="$basedir" additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCPTH="${INCPTH}${INCPTH:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBPTH="${LIBPTH}${LIBPTH:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBPTH; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBPTH="${LIBPTH}${LIBPTH:+ }$dep" LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }$dep" ;; esac done fi else LIBPTH="${LIBPTH}${LIBPTH:+ }-l$name" LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBPTH="${LIBPTH}${LIBPTH:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBPTH="${LTLIBPTH}${LTLIBPTH:+ }-R$found_dir" done fi ac_cv_libpth_libs="$LIBPTH" ac_cv_libpth_ltlibs="$LTLIBPTH" ac_cv_libpth_cppflags="$INCPTH" ac_cv_libpth_prefix="$LIBPTH_PREFIX" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libpth_libs" >&5 $as_echo "$ac_cv_libpth_libs" >&6; } LIBPTH="$ac_cv_libpth_libs" LTLIBPTH="$ac_cv_libpth_ltlibs" INCPTH="$ac_cv_libpth_cppflags" LIBPTH_PREFIX="$ac_cv_libpth_prefix" for element in $INCPTH; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done HAVE_LIBPTH=yes gl_have_pth= gl_save_LIBS="$LIBS" LIBS="$LIBS -lpth" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { pth_self(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_have_pth=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gl_save_LIBS" if test -n "$gl_have_pth"; then gl_threads_api=pth LIBTHREAD="$LIBPTH" LTLIBTHREAD="$LTLIBPTH" LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" $as_echo "#define USE_PTH_THREADS 1" >>confdefs.h if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if test $gl_have_weak = yes; then $as_echo "#define USE_PTH_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= fi fi else CPPFLAGS="$gl_save_CPPFLAGS" fi fi if test -z "$gl_have_pthread"; then if test "$gl_use_threads" = yes || test "$gl_use_threads" = win32; then if { case "$host_os" in mingw*) true;; *) false;; esac }; then gl_threads_api=win32 $as_echo "#define USE_WIN32_THREADS 1" >>confdefs.h fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 $as_echo_n "checking for multithread API to use... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 $as_echo "$gl_threads_api" >&6; } use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` LIBICONV_PREFIX="$basedir" additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; } int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : $as_echo "#define HAVE_BUILTIN_EXPECT 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext for ac_header in argz.h inttypes.h limits.h unistd.h sys/param.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in getcwd getegid geteuid getgid getuid mempcpy munmap \ stpcpy strcasecmp strdup strtoul tsearch argz_count argz_stringify \ argz_next __fsetlocking do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether feof_unlocked is declared" >&5 $as_echo_n "checking whether feof_unlocked is declared... " >&6; } if test "${ac_cv_have_decl_feof_unlocked+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef feof_unlocked char *p = (char *) feof_unlocked; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_decl_feof_unlocked=yes else ac_cv_have_decl_feof_unlocked=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl_feof_unlocked" >&5 $as_echo "$ac_cv_have_decl_feof_unlocked" >&6; } if test $ac_cv_have_decl_feof_unlocked = yes; then gt_value=1 else gt_value=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FEOF_UNLOCKED $gt_value _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether fgets_unlocked is declared" >&5 $as_echo_n "checking whether fgets_unlocked is declared... " >&6; } if test "${ac_cv_have_decl_fgets_unlocked+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef fgets_unlocked char *p = (char *) fgets_unlocked; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_decl_fgets_unlocked=yes else ac_cv_have_decl_fgets_unlocked=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl_fgets_unlocked" >&5 $as_echo "$ac_cv_have_decl_fgets_unlocked" >&6; } if test $ac_cv_have_decl_fgets_unlocked = yes; then gt_value=1 else gt_value=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_FGETS_UNLOCKED $gt_value _ACEOF am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if test "${am_cv_func_iconv+set}" = set; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if test "${am_cv_func_iconv_works+set}" = set; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi if test "$cross_compiling" = yes; then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes else am_cv_func_iconv_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$am_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv declaration" >&5 $as_echo_n "checking for iconv declaration... " >&6; } if test "${am_cv_proto_iconv+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_cv_proto_iconv_arg1="" else am_cv_proto_iconv_arg1="const" fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);" fi am_cv_proto_iconv=`echo "$am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${ac_t:- }$am_cv_proto_iconv" >&5 $as_echo "${ac_t:- }$am_cv_proto_iconv" >&6; } cat >>confdefs.h <<_ACEOF #define ICONV_CONST $am_cv_proto_iconv_arg1 _ACEOF fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for NL_LOCALE_NAME macro" >&5 $as_echo_n "checking for NL_LOCALE_NAME macro... " >&6; } if test "${gt_cv_nl_locale_name+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { char* cs = nl_langinfo(_NL_LOCALE_NAME(LC_MESSAGES)); return !cs; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_nl_locale_name=yes else gt_cv_nl_locale_name=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_nl_locale_name" >&5 $as_echo "$gt_cv_nl_locale_name" >&6; } if test $gt_cv_nl_locale_name = yes; then $as_echo "#define HAVE_NL_LOCALE_NAME 1" >>confdefs.h fi for ac_prog in bison do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_INTLBISON+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$INTLBISON"; then ac_cv_prog_INTLBISON="$INTLBISON" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_INTLBISON="$ac_prog" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi INTLBISON=$ac_cv_prog_INTLBISON if test -n "$INTLBISON"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INTLBISON" >&5 $as_echo "$INTLBISON" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$INTLBISON" && break done if test -z "$INTLBISON"; then ac_verc_fail=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: checking version of bison" >&5 $as_echo_n "checking version of bison... " >&6; } ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5 $as_echo "$ac_prog_version" >&6; } fi if test $ac_verc_fail = yes; then INTLBISON=: fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5 $as_echo_n "checking for long long int... " >&6; } if test "${ac_cv_type_long_long_int+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Test preprocessor. */ #if ! (-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) error in preprocessor; #endif #if ! (18446744073709551615ULL <= -1ull) error in preprocessor; #endif /* Test literals. */ long long int ll = 9223372036854775807ll; long long int nll = -9223372036854775807LL; unsigned long long int ull = 18446744073709551615ULL; /* Test constant expressions. */ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) ? 1 : -1)]; typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63; int main () { /* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; unsigned long long int ullmax = 18446744073709551615ull; return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | (llmax / ll) | (llmax % ll) | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | (ullmax / ull) | (ullmax % ull)); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : if test "$cross_compiling" = yes; then : ac_cv_type_long_long_int=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef LLONG_MAX # define HALF \ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) # define LLONG_MAX (HALF - 1 + HALF) #endif int main () { long long int n = 1; int i; for (i = 0; ; i++) { long long int m = n << i; if (m >> i != n) return 1; if (LLONG_MAX / 2 < m) break; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_type_long_long_int=yes else ac_cv_type_long_long_int=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else ac_cv_type_long_long_int=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5 $as_echo "$ac_cv_type_long_long_int" >&6; } if test $ac_cv_type_long_long_int = yes; then $as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 $as_echo_n "checking for wchar_t... " >&6; } if test "${gt_cv_c_wchar_t+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include wchar_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_wchar_t=yes else gt_cv_c_wchar_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5 $as_echo "$gt_cv_c_wchar_t" >&6; } if test $gt_cv_c_wchar_t = yes; then $as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 $as_echo_n "checking for wint_t... " >&6; } if test "${gt_cv_c_wint_t+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include wint_t foo = (wchar_t)'\0'; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_wint_t=yes else gt_cv_c_wint_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5 $as_echo "$gt_cv_c_wint_t" >&6; } if test $gt_cv_c_wint_t = yes; then $as_echo "#define HAVE_WINT_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5 $as_echo_n "checking for intmax_t... " >&6; } if test "${gt_cv_c_intmax_t+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #if HAVE_STDINT_H_WITH_UINTMAX #include #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include #endif int main () { intmax_t x = -1; return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_c_intmax_t=yes else gt_cv_c_intmax_t=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5 $as_echo "$gt_cv_c_intmax_t" >&6; } if test $gt_cv_c_intmax_t = yes; then $as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf() supports POSIX/XSI format strings" >&5 $as_echo_n "checking whether printf() supports POSIX/XSI format strings... " >&6; } if test "${gt_cv_func_printf_posix+set}" = set; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __NetBSD__ || defined __BEOS__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ notposix #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "notposix" >/dev/null 2>&1; then : gt_cv_func_printf_posix="guessing no" else gt_cv_func_printf_posix="guessing yes" fi rm -f conftest* else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include /* The string "%2$d %1$d", with dollar characters protected from the shell's dollar expansion (possibly an autoconf bug). */ static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; static char buf[100]; int main () { sprintf (buf, format, 33, 55); return (strcmp (buf, "55 33") != 0); } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gt_cv_func_printf_posix=yes else gt_cv_func_printf_posix=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_printf_posix" >&5 $as_echo "$gt_cv_func_printf_posix" >&6; } case $gt_cv_func_printf_posix in *yes) $as_echo "#define HAVE_POSIX_PRINTF 1" >>confdefs.h ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library 2.1 or newer" >&5 $as_echo_n "checking whether we are using the GNU C Library 2.1 or newer... " >&6; } if test "${ac_cv_gnu_library_2_1+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky GNU user" >/dev/null 2>&1; then : ac_cv_gnu_library_2_1=yes else ac_cv_gnu_library_2_1=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5 $as_echo "$ac_cv_gnu_library_2_1" >&6; } GLIBC21="$ac_cv_gnu_library_2_1" for ac_header in stdint.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5 $as_echo_n "checking for SIZE_MAX... " >&6; } if test "${gl_cv_size_max+set}" = set; then : $as_echo_n "(cached) " >&6 else gl_cv_size_max= cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_STDINT_H #include #endif #ifdef SIZE_MAX Found it #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Found it" >/dev/null 2>&1; then : gl_cv_size_max=yes fi rm -f conftest* if test -z "$gl_cv_size_max"; then if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1" "#include #include "; then : else size_t_bits_minus_1= fi if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint" "#include "; then : else fits_in_uint= fi if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then if test $fits_in_uint = 1; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include extern size_t foo; extern unsigned long foo; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : fits_in_uint=0 fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi if test $fits_in_uint = 1; then gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" else gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" fi else gl_cv_size_max='((size_t)~(size_t)0)' fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5 $as_echo "$gl_cv_size_max" >&6; } if test "$gl_cv_size_max" != yes; then cat >>confdefs.h <<_ACEOF #define SIZE_MAX $gl_cv_size_max _ACEOF fi for ac_header in stdint.h do : ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STDINT_H 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = x""yes; then : else $as_echo "#define ptrdiff_t long" >>confdefs.h fi for ac_header in stddef.h stdlib.h string.h do : as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh` ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default" eval as_val=\$$as_ac_Header if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1 _ACEOF fi done for ac_func in asprintf fwprintf putenv setenv setlocale snprintf wcslen do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" eval as_val=\$$as_ac_var if test "x$as_val" = x""yes; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _snprintf is declared" >&5 $as_echo_n "checking whether _snprintf is declared... " >&6; } if test "${ac_cv_have_decl__snprintf+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _snprintf char *p = (char *) _snprintf; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_decl__snprintf=yes else ac_cv_have_decl__snprintf=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl__snprintf" >&5 $as_echo "$ac_cv_have_decl__snprintf" >&6; } if test $ac_cv_have_decl__snprintf = yes; then gt_value=1 else gt_value=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL__SNPRINTF $gt_value _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _snwprintf is declared" >&5 $as_echo_n "checking whether _snwprintf is declared... " >&6; } if test "${ac_cv_have_decl__snwprintf+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef _snwprintf char *p = (char *) _snwprintf; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_decl__snwprintf=yes else ac_cv_have_decl__snwprintf=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl__snwprintf" >&5 $as_echo "$ac_cv_have_decl__snwprintf" >&6; } if test $ac_cv_have_decl__snwprintf = yes; then gt_value=1 else gt_value=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL__SNWPRINTF $gt_value _ACEOF { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether getc_unlocked is declared" >&5 $as_echo_n "checking whether getc_unlocked is declared... " >&6; } if test "${ac_cv_have_decl_getc_unlocked+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { #ifndef getc_unlocked char *p = (char *) getc_unlocked; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_have_decl_getc_unlocked=yes else ac_cv_have_decl_getc_unlocked=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_have_decl_getc_unlocked" >&5 $as_echo "$ac_cv_have_decl_getc_unlocked" >&6; } if test $ac_cv_have_decl_getc_unlocked = yes; then gt_value=1 else gt_value=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETC_UNLOCKED $gt_value _ACEOF case $gt_cv_func_printf_posix in *yes) HAVE_POSIX_PRINTF=1 ;; *) HAVE_POSIX_PRINTF=0 ;; esac if test "$ac_cv_func_asprintf" = yes; then HAVE_ASPRINTF=1 else HAVE_ASPRINTF=0 fi if test "$ac_cv_func_snprintf" = yes; then HAVE_SNPRINTF=1 else HAVE_SNPRINTF=0 fi if test "$ac_cv_func_wprintf" = yes; then HAVE_WPRINTF=1 else HAVE_WPRINTF=0 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 $as_echo_n "checking for nl_langinfo and CODESET... " >&6; } if test "${am_cv_langinfo_codeset+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { char* cs = nl_langinfo(CODESET); return !cs; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_langinfo_codeset=yes else am_cv_langinfo_codeset=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5 $as_echo "$am_cv_langinfo_codeset" >&6; } if test $am_cv_langinfo_codeset = yes; then $as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LC_MESSAGES" >&5 $as_echo_n "checking for LC_MESSAGES... " >&6; } if test "${gt_cv_val_LC_MESSAGES+set}" = set; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { return LC_MESSAGES ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_val_LC_MESSAGES=yes else gt_cv_val_LC_MESSAGES=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_val_LC_MESSAGES" >&5 $as_echo "$gt_cv_val_LC_MESSAGES" >&6; } if test $gt_cv_val_LC_MESSAGES = yes; then $as_echo "#define HAVE_LC_MESSAGES 1" >>confdefs.h fi if test "$enable_shared" = yes; then case "$host_os" in mingw* | cygwin*) is_woe32dll=yes ;; *) is_woe32dll=no ;; esac else is_woe32dll=no fi WOE32DLL=$is_woe32dll case "$host_os" in mingw* | cygwin*) is_woe32=yes ;; *) is_woe32=no ;; esac WOE32=$is_woe32 if test $WOE32 = yes; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}windres", so it can be a program name with args. set dummy ${ac_tool_prefix}windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_WINDRES+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$WINDRES"; then ac_cv_prog_WINDRES="$WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_WINDRES="${ac_tool_prefix}windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi WINDRES=$ac_cv_prog_WINDRES if test -n "$WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $WINDRES" >&5 $as_echo "$WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_WINDRES"; then ac_ct_WINDRES=$WINDRES # Extract the first word of "windres", so it can be a program name with args. set dummy windres; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_prog_ac_ct_WINDRES+set}" = set; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_WINDRES"; then ac_cv_prog_ac_ct_WINDRES="$ac_ct_WINDRES" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_prog_ac_ct_WINDRES="windres" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS fi fi ac_ct_WINDRES=$ac_cv_prog_ac_ct_WINDRES if test -n "$ac_ct_WINDRES"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_WINDRES" >&5 $as_echo "$ac_ct_WINDRES" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_WINDRES" = x; then WINDRES="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac WINDRES=$ac_ct_WINDRES fi else WINDRES="$ac_cv_prog_WINDRES" fi fi case "$host_os" in hpux*) LTLIBC="" ;; *) LTLIBC="-lc" ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if test "${gt_cv_func_CFPreferencesCopyAppValue+set}" = set; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if test "${gt_cv_func_CFLocaleCopyCurrent+set}" = set; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no LIBINTL= LTLIBINTL= POSUB= case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether included gettext is requested" >&5 $as_echo_n "checking whether included gettext is requested... " >&6; } # Check whether --with-included-gettext was given. if test "${with_included_gettext+set}" = set; then : withval=$with_included_gettext; nls_cv_force_use_gnu_gettext=$withval else nls_cv_force_use_gnu_gettext=no fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $nls_cv_force_use_gnu_gettext" >&5 $as_echo "$nls_cv_force_use_gnu_gettext" >&6; } nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if { as_var=$gt_func_gnugettext_libc; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libc=yes" else eval "$gt_func_gnugettext_libc=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi fi LIBINTL= LTLIBINTL= INCINTL= LIBINTL_PREFIX= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` LIBINTL_PREFIX="$basedir" additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if { as_var=$gt_func_gnugettext_libintl; eval "test \"\${$as_var+set}\" = set"; }; then : $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libintl=yes" else eval "$gt_func_gnugettext_libintl=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test "$gt_use_preinstalled_gnugettext" != "yes"; then nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="\${top_builddir}/intl/libintl.a $LIBICONV $LIBTHREAD" LTLIBINTL="\${top_builddir}/intl/libintl.a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then CATOBJEXT=.gmo fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 $as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 $as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 $as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi nls_cv_header_intl= nls_cv_header_libgt= DATADIRNAME=share INSTOBJEXT=.mo GENCAT=gencat INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi INTL_LIBTOOL_SUFFIX_PREFIX= INTLLIBS="$LIBINTL" if test "x$HOST_OS" = "xMinGW"; then LTLIBINTL="" LIBINTL="" INTLLIBS="-lintl" INTLOBJS="" USE_INCLUDED_LIBINTL=no BUILD_INCLUDED_LIBINTL=no { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Disable building libintl for MinGW compilation" >&5 $as_echo "$as_me: WARNING: Disable building libintl for MinGW compilation" >&2;} fi if test "x$USE_INCLUDED_LIBINTL" = "xyes"; then $as_echo "#define USE_INCLUDED_LIBINTL 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for crc32 in -lz" >&5 $as_echo_n "checking for crc32 in -lz... " >&6; } if test "${ac_cv_lib_z_crc32+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char crc32 (); int main () { return crc32 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z_crc32=yes else ac_cv_lib_z_crc32=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z_crc32" >&5 $as_echo "$ac_cv_lib_z_crc32" >&6; } if test "x$ac_cv_lib_z_crc32" = x""yes; then : have_libz=-lz else have_libz=no fi if test x$have_libz = xno; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for crc32 in -lzdll" >&5 $as_echo_n "checking for crc32 in -lzdll... " >&6; } if test "${ac_cv_lib_zdll_crc32+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lzdll $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char crc32 (); int main () { return crc32 (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_zdll_crc32=yes else ac_cv_lib_zdll_crc32=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_zdll_crc32" >&5 $as_echo "$ac_cv_lib_zdll_crc32" >&6; } if test "x$ac_cv_lib_zdll_crc32" = x""yes; then : have_libz=-lzdll else have_libz=no fi fi if test x$have_libz = xno; then as_fn_error "Cannot link libz -- check CFLAGS/LDFLAGS" "$LINENO" 5 else LIBS="$LIBS $have_libz" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for pow in -lm" >&5 $as_echo_n "checking for pow in -lm... " >&6; } if test "${ac_cv_lib_m_pow+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lm $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char pow (); int main () { return pow (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_m_pow=yes else ac_cv_lib_m_pow=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_m_pow" >&5 $as_echo "$ac_cv_lib_m_pow" >&6; } if test "x$ac_cv_lib_m_pow" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_LIBM 1 _ACEOF LIBS="-lm $LIBS" else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Cannot link libm -- check CFLAGS/LDFLAGS" >&5 $as_echo "$as_me: WARNING: Cannot link libm -- check CFLAGS/LDFLAGS" >&2;} fi if false; then HAVE_CPPUNIT_TRUE= HAVE_CPPUNIT_FALSE='#' else HAVE_CPPUNIT_TRUE='#' HAVE_CPPUNIT_FALSE= fi if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 $as_echo "$PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_ac_pt_PKG_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS ;; esac fi ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 $as_echo "$ac_pt_PKG_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" else case $cross_compiling:$ac_tool_warned in yes:) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;} ac_tool_warned=yes ;; esac PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.20 { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 $as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } PKG_CONFIG="" fi fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GTK" >&5 $as_echo_n "checking for GTK... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$GTK_CFLAGS"; then pkg_cv_GTK_CFLAGS="$GTK_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.16.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.16.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_CFLAGS=`$PKG_CONFIG --cflags "gtk+-2.0 >= 2.16.1" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$GTK_LIBS"; then pkg_cv_GTK_LIBS="$GTK_LIBS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"gtk+-2.0 >= 2.16.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk+-2.0 >= 2.16.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GTK_LIBS=`$PKG_CONFIG --libs "gtk+-2.0 >= 2.16.1" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GTK_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "gtk+-2.0 >= 2.16.1"` else GTK_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "gtk+-2.0 >= 2.16.1"` fi # Put the nasty error message in config.log where it belongs echo "$GTK_PKG_ERRORS" >&5 as_fn_error "Package requirements (gtk+-2.0 >= 2.16.1) were not met: $GTK_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. " "$LINENO" 5 elif test $pkg_failed = untried; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables GTK_CFLAGS and GTK_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details." "$LINENO" 5; } else GTK_CFLAGS=$pkg_cv_GTK_CFLAGS GTK_LIBS=$pkg_cv_GTK_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : fi _sep="" _gtk_libs_temp="" for lib in $GTK_LIBS do if test "x-lfreetype" = "x$lib"; then echo "removing 'freetype' from library list GTK_LIBS" continue elif test "x-lfontconfig" = "x$lib"; then echo "removing 'fontconfig' from library list GTK_LIBS" continue elif test "x-latk-1.0" = "x$lib"; then echo "removing 'atk-1.0' from library list GTK_LIBS" continue fi _gtk_libs_temp="$_gtk_libs_temp$_sep$lib" _sep=" " done GTK_LIBS="$_gtk_libs_temp" if test x$cross_compiling = xno; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for X11" >&5 $as_echo_n "checking for X11... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$X11_CFLAGS"; then pkg_cv_X11_CFLAGS="$X11_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11 >= 1.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11 >= 1.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_X11_CFLAGS=`$PKG_CONFIG --cflags "x11 >= 1.1" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$X11_LIBS"; then pkg_cv_X11_LIBS="$X11_LIBS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"x11 >= 1.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "x11 >= 1.1") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_X11_LIBS=`$PKG_CONFIG --libs "x11 >= 1.1" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then X11_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "x11 >= 1.1"` else X11_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "x11 >= 1.1"` fi # Put the nasty error message in config.log where it belongs echo "$X11_PKG_ERRORS" >&5 as_fn_error "Package requirements (x11 >= 1.1) were not met: $X11_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables X11_CFLAGS and X11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. " "$LINENO" 5 elif test $pkg_failed = untried; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables X11_CFLAGS and X11_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details." "$LINENO" 5; } else X11_CFLAGS=$pkg_cv_X11_CFLAGS X11_LIBS=$pkg_cv_X11_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : fi pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for XMU" >&5 $as_echo_n "checking for XMU... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$XMU_CFLAGS"; then pkg_cv_XMU_CFLAGS="$XMU_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xmu >= 1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "xmu >= 1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_XMU_CFLAGS=`$PKG_CONFIG --cflags "xmu >= 1.0" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$XMU_LIBS"; then pkg_cv_XMU_LIBS="$XMU_LIBS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"xmu >= 1.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "xmu >= 1.0") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_XMU_LIBS=`$PKG_CONFIG --libs "xmu >= 1.0" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then XMU_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "xmu >= 1.0"` else XMU_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "xmu >= 1.0"` fi # Put the nasty error message in config.log where it belongs echo "$XMU_PKG_ERRORS" >&5 as_fn_error "Package requirements (xmu >= 1.0) were not met: $XMU_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. Alternatively, you may set the environment variables XMU_CFLAGS and XMU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. " "$LINENO" 5 elif test $pkg_failed = untried; then { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. Alternatively, you may set the environment variables XMU_CFLAGS and XMU_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details. To get pkg-config, see . See \`config.log' for more details." "$LINENO" 5; } else XMU_CFLAGS=$pkg_cv_XMU_CFLAGS XMU_LIBS=$pkg_cv_XMU_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } : fi fi req_z80ex_api=1 min_z80ex_version_major=1 min_z80ex_version_minor=18 min_z80ex_version="${min_z80ex_version_major}.${min_z80ex_version_minor}" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for z80ex_create in -lz80ex" >&5 $as_echo_n "checking for z80ex_create in -lz80ex... " >&6; } if test "${ac_cv_lib_z80ex_z80ex_create+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lz80ex $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char z80ex_create (); int main () { return z80ex_create (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_z80ex_z80ex_create=yes else ac_cv_lib_z80ex_z80ex_create=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_z80ex_z80ex_create" >&5 $as_echo "$ac_cv_lib_z80ex_z80ex_create" >&6; } if test "x$ac_cv_lib_z80ex_z80ex_create" = x""yes; then : have_libz80ex=yes else have_libz80ex=no fi if test x$have_libz80ex = xyes; then Z80EX_LIBS="-lz80ex -lz80ex_dasm" { $as_echo "$as_me:${as_lineno-$LINENO}: checking for z80ex - api = $req_z80ex_api - version >= $min_z80ex_version" >&5 $as_echo_n "checking for z80ex - api = $req_z80ex_api - version >= $min_z80ex_version... " >&6; } if test x$cross_compiling = xno; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $Z80EX_CFLAGS" LIBS="$Z80EX_LIBS $LIBS" if test "$cross_compiling" = yes; then : { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error "cannot run test program while cross compiling See \`config.log' for more details." "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main() { Z80EX_VERSION *v = z80ex_get_version(); if (v->API_revision != $req_z80ex_api) return 1; if (v->major < $min_z80ex_version_major) return 2; if ((v->major == $min_z80ex_version_major) && (v->minor < $min_z80ex_version_minor)) return 3; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } else have_libz80ex=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" z80_emulation_type="dynamic" else { $as_echo "$as_me:${as_lineno-$LINENO}: result: cross compiling; assumed OK..." >&5 $as_echo "cross compiling; assumed OK..." >&6; } fi fi if test x$have_libz80ex = xno; then as_fn_error " *** *** Can not find required library z80ex. ***" "$LINENO" 5 fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if static linking of z80ex is requested" >&5 $as_echo_n "checking if static linking of z80ex is requested... " >&6; } if test "x$enable_static_z80ex" = "xyes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for path of static z80ex libraries" >&5 $as_echo_n "checking for path of static z80ex libraries... " >&6; } z80ex_so=`gcc $LDFLAGS -lz80ex -Wl,--trace /dev/null 2>/dev/null | grep -- '-lz80ex' | sed -e 's/.*(//; s/).*//;'` z80ex_path=`dirname "$z80ex_so"` z80ex_lib="$z80ex_path/libz80ex.a" z80ex_dasm_lib="$z80ex_path/libz80ex_dasm.a" if test -f "$z80ex_lib" -a -f "$z80ex_dasm_lib"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $z80ex_path" >&5 $as_echo "$z80ex_path" >&6; } Z80EX_LIBS="$z80ex_lib $z80ex_dasm_lib" z80_emulation_type="static" else as_fn_error " *** *** Can not find path for static z80ex library. ***" "$LINENO" 5 fi else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi have_theora=no min_theora="1.0" min_theoraenc="1.1.1" if test "x$enable_libtheora" = xyes; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBTHEORA11" >&5 $as_echo_n "checking for LIBTHEORA11... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$LIBTHEORA11_CFLAGS"; then pkg_cv_LIBTHEORA11_CFLAGS="$LIBTHEORA11_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"theoraenc >= \$min_theoraenc\""; } >&5 ($PKG_CONFIG --exists --print-errors "theoraenc >= $min_theoraenc") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBTHEORA11_CFLAGS=`$PKG_CONFIG --cflags "theoraenc >= $min_theoraenc" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$LIBTHEORA11_LIBS"; then pkg_cv_LIBTHEORA11_LIBS="$LIBTHEORA11_LIBS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"theoraenc >= \$min_theoraenc\""; } >&5 ($PKG_CONFIG --exists --print-errors "theoraenc >= $min_theoraenc") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBTHEORA11_LIBS=`$PKG_CONFIG --libs "theoraenc >= $min_theoraenc" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBTHEORA11_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "theoraenc >= $min_theoraenc"` else LIBTHEORA11_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "theoraenc >= $min_theoraenc"` fi # Put the nasty error message in config.log where it belongs echo "$LIBTHEORA11_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBTHEORA10" >&5 $as_echo_n "checking for LIBTHEORA10... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$LIBTHEORA10_CFLAGS"; then pkg_cv_LIBTHEORA10_CFLAGS="$LIBTHEORA10_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"theoraenc >= \$min_theora theoradec >= \$min_theora\""; } >&5 ($PKG_CONFIG --exists --print-errors "theoraenc >= $min_theora theoradec >= $min_theora") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBTHEORA10_CFLAGS=`$PKG_CONFIG --cflags "theoraenc >= $min_theora theoradec >= $min_theora" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$LIBTHEORA10_LIBS"; then pkg_cv_LIBTHEORA10_LIBS="$LIBTHEORA10_LIBS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"theoraenc >= \$min_theora theoradec >= \$min_theora\""; } >&5 ($PKG_CONFIG --exists --print-errors "theoraenc >= $min_theora theoradec >= $min_theora") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBTHEORA10_LIBS=`$PKG_CONFIG --libs "theoraenc >= $min_theora theoradec >= $min_theora" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBTHEORA10_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "theoraenc >= $min_theora theoradec >= $min_theora"` else LIBTHEORA10_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "theoraenc >= $min_theora theoradec >= $min_theora"` fi # Put the nasty error message in config.log where it belongs echo "$LIBTHEORA10_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find theora library (with version number >= $min_theora)! *** *** This is NO ERROR. It only means you can't capture video in *** theora/ogg format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libtheora ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find theora library (with version number >= $min_theora)! *** *** This is NO ERROR. It only means you can't capture video in *** theora/ogg format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libtheora ***" >&2;} elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find theora library (with version number >= $min_theora)! *** *** This is NO ERROR. It only means you can't capture video in *** theora/ogg format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libtheora ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find theora library (with version number >= $min_theora)! *** *** This is NO ERROR. It only means you can't capture video in *** theora/ogg format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libtheora ***" >&2;} else LIBTHEORA10_CFLAGS=$pkg_cv_LIBTHEORA10_CFLAGS LIBTHEORA10_LIBS=$pkg_cv_LIBTHEORA10_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_theora=yes have_theora_version=" (version 1.0)" $as_echo "#define HAVE_LIBTHEORA 1" >>confdefs.h $as_echo "#define HAVE_LIBTHEORA10 1" >>confdefs.h LIBTHEORA_CFLAGS="$LIBTHEORA10_CFLAGS" LIBTHEORA_LIBS="$LIBTHEORA10_LIBS" fi elif test $pkg_failed = untried; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBTHEORA10" >&5 $as_echo_n "checking for LIBTHEORA10... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$LIBTHEORA10_CFLAGS"; then pkg_cv_LIBTHEORA10_CFLAGS="$LIBTHEORA10_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"theoraenc >= \$min_theora theoradec >= \$min_theora\""; } >&5 ($PKG_CONFIG --exists --print-errors "theoraenc >= $min_theora theoradec >= $min_theora") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBTHEORA10_CFLAGS=`$PKG_CONFIG --cflags "theoraenc >= $min_theora theoradec >= $min_theora" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$LIBTHEORA10_LIBS"; then pkg_cv_LIBTHEORA10_LIBS="$LIBTHEORA10_LIBS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"theoraenc >= \$min_theora theoradec >= \$min_theora\""; } >&5 ($PKG_CONFIG --exists --print-errors "theoraenc >= $min_theora theoradec >= $min_theora") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBTHEORA10_LIBS=`$PKG_CONFIG --libs "theoraenc >= $min_theora theoradec >= $min_theora" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBTHEORA10_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "theoraenc >= $min_theora theoradec >= $min_theora"` else LIBTHEORA10_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "theoraenc >= $min_theora theoradec >= $min_theora"` fi # Put the nasty error message in config.log where it belongs echo "$LIBTHEORA10_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find theora library (with version number >= $min_theora)! *** *** This is NO ERROR. It only means you can't capture video in *** theora/ogg format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libtheora ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find theora library (with version number >= $min_theora)! *** *** This is NO ERROR. It only means you can't capture video in *** theora/ogg format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libtheora ***" >&2;} elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find theora library (with version number >= $min_theora)! *** *** This is NO ERROR. It only means you can't capture video in *** theora/ogg format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libtheora ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find theora library (with version number >= $min_theora)! *** *** This is NO ERROR. It only means you can't capture video in *** theora/ogg format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libtheora ***" >&2;} else LIBTHEORA10_CFLAGS=$pkg_cv_LIBTHEORA10_CFLAGS LIBTHEORA10_LIBS=$pkg_cv_LIBTHEORA10_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_theora=yes have_theora_version=" (version 1.0)" $as_echo "#define HAVE_LIBTHEORA 1" >>confdefs.h $as_echo "#define HAVE_LIBTHEORA10 1" >>confdefs.h LIBTHEORA_CFLAGS="$LIBTHEORA10_CFLAGS" LIBTHEORA_LIBS="$LIBTHEORA10_LIBS" fi else LIBTHEORA11_CFLAGS=$pkg_cv_LIBTHEORA11_CFLAGS LIBTHEORA11_LIBS=$pkg_cv_LIBTHEORA11_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_theora=yes have_theora_version=" (version 1.1)" $as_echo "#define HAVE_LIBTHEORA 1" >>confdefs.h $as_echo "#define HAVE_LIBTHEORA11 1" >>confdefs.h LIBTHEORA_CFLAGS="$LIBTHEORA11_CFLAGS" LIBTHEORA_LIBS="$LIBTHEORA11_LIBS" fi fi have_avformat=no min_libavformat="52.41.0" if test "x$enable_libavformat" = xyes; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBAVFORMAT" >&5 $as_echo_n "checking for LIBAVFORMAT... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$LIBAVFORMAT_CFLAGS"; then pkg_cv_LIBAVFORMAT_CFLAGS="$LIBAVFORMAT_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavformat >= \$min_libavformat\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavformat >= $min_libavformat") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBAVFORMAT_CFLAGS=`$PKG_CONFIG --cflags "libavformat >= $min_libavformat" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$LIBAVFORMAT_LIBS"; then pkg_cv_LIBAVFORMAT_LIBS="$LIBAVFORMAT_LIBS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"libavformat >= \$min_libavformat\""; } >&5 ($PKG_CONFIG --exists --print-errors "libavformat >= $min_libavformat") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBAVFORMAT_LIBS=`$PKG_CONFIG --libs "libavformat >= $min_libavformat" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBAVFORMAT_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "libavformat >= $min_libavformat"` else LIBAVFORMAT_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "libavformat >= $min_libavformat"` fi # Put the nasty error message in config.log where it belongs echo "$LIBAVFORMAT_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find avformat library (with version number >= $min_libavformat)! *** *** This is NO ERROR. It only means you can't capture video in *** avi format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libavformat ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find avformat library (with version number >= $min_libavformat)! *** *** This is NO ERROR. It only means you can't capture video in *** avi format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libavformat ***" >&2;} elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find avformat library (with version number >= $min_libavformat)! *** *** This is NO ERROR. It only means you can't capture video in *** avi format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libavformat ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find avformat library (with version number >= $min_libavformat)! *** *** This is NO ERROR. It only means you can't capture video in *** avi format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libavformat ***" >&2;} else LIBAVFORMAT_CFLAGS=$pkg_cv_LIBAVFORMAT_CFLAGS LIBAVFORMAT_LIBS=$pkg_cv_LIBAVFORMAT_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_avformat=yes $as_echo "#define HAVE_LIBAVFORMAT 1" >>confdefs.h fi fi have_dirac=no min_libdirac="1.0.2" if test "x$enable_libdirac" = xyes; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBDIRAC" >&5 $as_echo_n "checking for LIBDIRAC... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$LIBDIRAC_CFLAGS"; then pkg_cv_LIBDIRAC_CFLAGS="$LIBDIRAC_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dirac >= \$min_libdirac\""; } >&5 ($PKG_CONFIG --exists --print-errors "dirac >= $min_libdirac") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBDIRAC_CFLAGS=`$PKG_CONFIG --cflags "dirac >= $min_libdirac" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$LIBDIRAC_LIBS"; then pkg_cv_LIBDIRAC_LIBS="$LIBDIRAC_LIBS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"dirac >= \$min_libdirac\""; } >&5 ($PKG_CONFIG --exists --print-errors "dirac >= $min_libdirac") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBDIRAC_LIBS=`$PKG_CONFIG --libs "dirac >= $min_libdirac" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBDIRAC_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "dirac >= $min_libdirac"` else LIBDIRAC_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "dirac >= $min_libdirac"` fi # Put the nasty error message in config.log where it belongs echo "$LIBDIRAC_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find dirac library (with version number >= $min_libdirac)! *** *** This is NO ERROR. It only means you can't capture video in *** dirac format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libdirac ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find dirac library (with version number >= $min_libdirac)! *** *** This is NO ERROR. It only means you can't capture video in *** dirac format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libdirac ***" >&2;} elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find dirac library (with version number >= $min_libdirac)! *** *** This is NO ERROR. It only means you can't capture video in *** dirac format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libdirac ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find dirac library (with version number >= $min_libdirac)! *** *** This is NO ERROR. It only means you can't capture video in *** dirac format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libdirac ***" >&2;} else LIBDIRAC_CFLAGS=$pkg_cv_LIBDIRAC_CFLAGS LIBDIRAC_LIBS=$pkg_cv_LIBDIRAC_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_dirac=yes $as_echo "#define HAVE_LIBDIRAC 1" >>confdefs.h fi fi have_libschroedinger=no min_libschroedinger="1.0.8" if test "x$enable_libschroedinger" = xyes; then pkg_failed=no { $as_echo "$as_me:${as_lineno-$LINENO}: checking for LIBSCHROEDINGER" >&5 $as_echo_n "checking for LIBSCHROEDINGER... " >&6; } if test -n "$PKG_CONFIG"; then if test -n "$LIBSCHROEDINGER_CFLAGS"; then pkg_cv_LIBSCHROEDINGER_CFLAGS="$LIBSCHROEDINGER_CFLAGS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"schroedinger-1.0 >= \$min_libschroedinger\""; } >&5 ($PKG_CONFIG --exists --print-errors "schroedinger-1.0 >= $min_libschroedinger") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBSCHROEDINGER_CFLAGS=`$PKG_CONFIG --cflags "schroedinger-1.0 >= $min_libschroedinger" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test -n "$PKG_CONFIG"; then if test -n "$LIBSCHROEDINGER_LIBS"; then pkg_cv_LIBSCHROEDINGER_LIBS="$LIBSCHROEDINGER_LIBS" else if test -n "$PKG_CONFIG" && \ { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"schroedinger-1.0 >= \$min_libschroedinger\""; } >&5 ($PKG_CONFIG --exists --print-errors "schroedinger-1.0 >= $min_libschroedinger") 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_LIBSCHROEDINGER_LIBS=`$PKG_CONFIG --libs "schroedinger-1.0 >= $min_libschroedinger" 2>/dev/null` else pkg_failed=yes fi fi else pkg_failed=untried fi if test $pkg_failed = yes; then if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then LIBSCHROEDINGER_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "schroedinger-1.0 >= $min_libschroedinger"` else LIBSCHROEDINGER_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "schroedinger-1.0 >= $min_libschroedinger"` fi # Put the nasty error message in config.log where it belongs echo "$LIBSCHROEDINGER_PKG_ERRORS" >&5 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find schroedinger library (with version number >= $min_libschroedinger)! *** *** This is NO ERROR. It only means you can't capture video in *** schroedinger format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libschroedinger ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find schroedinger library (with version number >= $min_libschroedinger)! *** *** This is NO ERROR. It only means you can't capture video in *** schroedinger format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libschroedinger ***" >&2;} elif test $pkg_failed = untried; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find schroedinger library (with version number >= $min_libschroedinger)! *** *** This is NO ERROR. It only means you can't capture video in *** schroedinger format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libschroedinger ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find schroedinger library (with version number >= $min_libschroedinger)! *** *** This is NO ERROR. It only means you can't capture video in *** schroedinger format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libschroedinger ***" >&2;} else LIBSCHROEDINGER_CFLAGS=$pkg_cv_LIBSCHROEDINGER_CFLAGS LIBSCHROEDINGER_LIBS=$pkg_cv_LIBSCHROEDINGER_LIBS { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_libschroedinger=yes $as_echo "#define HAVE_LIBSCHROEDINGER 1" >>confdefs.h fi fi have_libxvidcore=no min_libxvidcore="1.2.2" if test "x$enable_libxvidcore" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for xvid_encore in -lxvidcore" >&5 $as_echo_n "checking for xvid_encore in -lxvidcore... " >&6; } if test "${ac_cv_lib_xvidcore_xvid_encore+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lxvidcore $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char xvid_encore (); int main () { return xvid_encore (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_xvidcore_xvid_encore=yes else ac_cv_lib_xvidcore_xvid_encore=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_xvidcore_xvid_encore" >&5 $as_echo "$ac_cv_lib_xvidcore_xvid_encore" >&6; } if test "x$ac_cv_lib_xvidcore_xvid_encore" = x""yes; then : have_libxvidcore=yes else have_libxvidcore=no fi if test x$have_libxvidcore = xyes; then XVIDCORE_LIBS="-lxvidcore" $as_echo "#define HAVE_LIBXVIDCORE 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find libxvidcore (with version number >= $min_libxvidcore)! *** *** This is NO ERROR. It only means you can't capture video in *** mpeg4 format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libxvidcore ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find libxvidcore (with version number >= $min_libxvidcore)! *** *** This is NO ERROR. It only means you can't capture video in *** mpeg4 format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libxvidcore ***" >&2;} fi fi if test "x$enable_libgif" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EGifSetGifVersion in -lgif" >&5 $as_echo_n "checking for EGifSetGifVersion in -lgif... " >&6; } if test "${ac_cv_lib_gif_EGifSetGifVersion+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lgif $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char EGifSetGifVersion (); int main () { return EGifSetGifVersion (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_gif_EGifSetGifVersion=yes else ac_cv_lib_gif_EGifSetGifVersion=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_gif_EGifSetGifVersion" >&5 $as_echo "$ac_cv_lib_gif_EGifSetGifVersion" >&6; } if test "x$ac_cv_lib_gif_EGifSetGifVersion" = x""yes; then : have_libgif=yes else have_libgif=no fi if test x$have_libgif = xyes; then LIBGIF_LIBS="-lgif" $as_echo "#define HAVE_LIBGIF 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find libgif! *** *** This is NO ERROR. It only means you can't capture video in *** animated GIF format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libgif ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find libgif! *** *** This is NO ERROR. It only means you can't capture video in *** animated GIF format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libgif ***" >&2;} fi fi have_libvncserver=no min_libvncserver="0.9" if test "x$enable_libvncserver" = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for rfbGetScreen in -lvncserver" >&5 $as_echo_n "checking for rfbGetScreen in -lvncserver... " >&6; } if test "${ac_cv_lib_vncserver_rfbGetScreen+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lvncserver $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char rfbGetScreen (); int main () { return rfbGetScreen (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_vncserver_rfbGetScreen=yes else ac_cv_lib_vncserver_rfbGetScreen=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vncserver_rfbGetScreen" >&5 $as_echo "$ac_cv_lib_vncserver_rfbGetScreen" >&6; } if test "x$ac_cv_lib_vncserver_rfbGetScreen" = x""yes; then : have_libvncserver=yes else have_libvncserver=no fi if test x$have_libvncserver = xyes; then VNCSERVER_LIBS="-lvncserver -lvncclient -ljpeg" $as_echo "#define HAVE_LIBVNCSERVER 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find libvncserver (with version number >= $min_libvncserver)! *** *** This is NO ERROR. It only means you can't connect to KCemu *** using a VNC client. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libvncserver ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find libvncserver (with version number >= $min_libvncserver)! *** *** This is NO ERROR. It only means you can't connect to KCemu *** using a VNC client. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libvncserver ***" >&2;} fi fi _sep="" _vncserver_libs_temp="" for lib in $VNCSERVER_LIBS do if test "x-ljpeg" = "x$lib"; then echo "removing 'jpeg' from library list VNCSERVER_LIBS" continue fi _vncserver_libs_temp="$_vncserver_libs_temp$_sep$lib" _sep=" " done VNCSERVER_LIBS="$_vncserver_libs_temp" have_libsndfile=no if test x$enable_libsndfile = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sf_open_read in -lsndfile" >&5 $as_echo_n "checking for sf_open_read in -lsndfile... " >&6; } if test "${ac_cv_lib_sndfile_sf_open_read+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsndfile $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sf_open_read (); int main () { return sf_open_read (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_sndfile_sf_open_read=yes else ac_cv_lib_sndfile_sf_open_read=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sndfile_sf_open_read" >&5 $as_echo "$ac_cv_lib_sndfile_sf_open_read" >&6; } if test "x$ac_cv_lib_sndfile_sf_open_read" = x""yes; then : have_libsndfile=yes else have_libsndfile=no fi if test x$have_libsndfile = xyes; then SNDFILE_LIBS=-lsndfile $as_echo "#define HAVE_LIBSNDFILE 1" >>confdefs.h $as_echo "#define HAVE_LIBSNDFILE_V0 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sf_open in -lsndfile" >&5 $as_echo_n "checking for sf_open in -lsndfile... " >&6; } if test "${ac_cv_lib_sndfile_sf_open+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lsndfile $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char sf_open (); int main () { return sf_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_sndfile_sf_open=yes else ac_cv_lib_sndfile_sf_open=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_sndfile_sf_open" >&5 $as_echo "$ac_cv_lib_sndfile_sf_open" >&6; } if test "x$ac_cv_lib_sndfile_sf_open" = x""yes; then : have_libsndfile=yes else have_libsndfile=no fi if test x$have_libsndfile = xyes; then SNDFILE_LIBS=-lsndfile $as_echo "#define HAVE_LIBSNDFILE 1" >>confdefs.h $as_echo "#define HAVE_LIBSNDFILE_V1 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find sndfile library! The audio loader module which *** requires this library will be disabled. *** *** This is NO ERROR. It only means you can't playback certain *** audio file types (e.g. .WAV, .PCM, .AU, .SND) in the emulated *** tape recorder. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libsndfile ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find sndfile library! The audio loader module which *** requires this library will be disabled. *** *** This is NO ERROR. It only means you can't playback certain *** audio file types (e.g. .WAV, .PCM, .AU, .SND) in the emulated *** tape recorder. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libsndfile ***" >&2;} fi fi fi have_libaudiofile=no if test x$enable_libaudiofile = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for afOpenFile in -laudiofile" >&5 $as_echo_n "checking for afOpenFile in -laudiofile... " >&6; } if test "${ac_cv_lib_audiofile_afOpenFile+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-laudiofile $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char afOpenFile (); int main () { return afOpenFile (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_audiofile_afOpenFile=yes else ac_cv_lib_audiofile_afOpenFile=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_audiofile_afOpenFile" >&5 $as_echo "$ac_cv_lib_audiofile_afOpenFile" >&6; } if test "x$ac_cv_lib_audiofile_afOpenFile" = x""yes; then : have_libaudiofile=yes else have_libaudiofile=no fi if test x$have_libaudiofile = xyes; then AUDIOFILE_LIBS=-laudiofile $as_echo "#define HAVE_LIBAUDIOFILE 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find audiofile library! The audio loader module which *** requires this library will be disabled. *** *** This is NO ERROR. It only means you can't playback certain *** audio file types (e.g. .WAV, .AIFF, .AU) in the emulated *** tape recorder. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libaudiofile ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find audiofile library! The audio loader module which *** requires this library will be disabled. *** *** This is NO ERROR. It only means you can't playback certain *** audio file types (e.g. .WAV, .AIFF, .AU) in the emulated *** tape recorder. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libaudiofile ***" >&2;} fi fi have_libmp3lame=no if test x$enable_libmp3lame = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for lame_decode1_headers in -lmp3lame" >&5 $as_echo_n "checking for lame_decode1_headers in -lmp3lame... " >&6; } if test "${ac_cv_lib_mp3lame_lame_decode1_headers+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lmp3lame $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char lame_decode1_headers (); int main () { return lame_decode1_headers (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_mp3lame_lame_decode1_headers=yes else ac_cv_lib_mp3lame_lame_decode1_headers=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_mp3lame_lame_decode1_headers" >&5 $as_echo "$ac_cv_lib_mp3lame_lame_decode1_headers" >&6; } if test "x$ac_cv_lib_mp3lame_lame_decode1_headers" = x""yes; then : have_libmp3lame=yes else have_libmp3lame=no fi if test x$have_libmp3lame = xyes; then MP3LAME_LIBS=-lmp3lame $as_echo "#define HAVE_LIBMP3LAME 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find libmp3lame (part of MP3 encoder LAME)! The audio *** loader module which requires this library will be disabled. *** *** This is NO ERROR. It only means you can't playback certain *** audio file types (e.g. .MP3) in the emulated tape recorder. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libmp3lame ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find libmp3lame (part of MP3 encoder LAME)! The audio *** loader module which requires this library will be disabled. *** *** This is NO ERROR. It only means you can't playback certain *** audio file types (e.g. .MP3) in the emulated tape recorder. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libmp3lame ***" >&2;} fi fi have_libvorbis=no if test x$enable_libvorbis = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ov_open in -lvorbisfile" >&5 $as_echo_n "checking for ov_open in -lvorbisfile... " >&6; } if test "${ac_cv_lib_vorbisfile_ov_open+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lvorbisfile -lvorbis $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char ov_open (); int main () { return ov_open (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_vorbisfile_ov_open=yes else ac_cv_lib_vorbisfile_ov_open=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_vorbisfile_ov_open" >&5 $as_echo "$ac_cv_lib_vorbisfile_ov_open" >&6; } if test "x$ac_cv_lib_vorbisfile_ov_open" = x""yes; then : have_libvorbis=yes else have_libvorbis=no fi if test x$have_libvorbis = xyes; then VORBIS_LIBS="-lvorbisfile -lvorbis" $as_echo "#define HAVE_LIBVORBIS 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find libvorbis library! The audio loader module which *** requires this library will be disabled. *** *** This is NO ERROR. It only means you can't playback certain *** audio file types (e.g. .OGG) in the emulated tape recorder. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libvorbis ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find libvorbis library! The audio loader module which *** requires this library will be disabled. *** *** This is NO ERROR. It only means you can't playback certain *** audio file types (e.g. .OGG) in the emulated tape recorder. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libvorbis ***" >&2;} fi fi have_libflac=no if test x$enable_libflac = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for FLAC__file_decoder_process_metadata in -lFLAC" >&5 $as_echo_n "checking for FLAC__file_decoder_process_metadata in -lFLAC... " >&6; } if test "${ac_cv_lib_FLAC_FLAC__file_decoder_process_metadata+set}" = set; then : $as_echo_n "(cached) " >&6 else ac_check_lib_save_LIBS=$LIBS LIBS="-lFLAC $LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Override any GCC internal prototype to avoid an error. Use char because int might match the return type of a GCC builtin and then its argument prototype would still apply. */ #ifdef __cplusplus extern "C" #endif char FLAC__file_decoder_process_metadata (); int main () { return FLAC__file_decoder_process_metadata (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_FLAC_FLAC__file_decoder_process_metadata=yes else ac_cv_lib_FLAC_FLAC__file_decoder_process_metadata=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS=$ac_check_lib_save_LIBS fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_FLAC_FLAC__file_decoder_process_metadata" >&5 $as_echo "$ac_cv_lib_FLAC_FLAC__file_decoder_process_metadata" >&6; } if test "x$ac_cv_lib_FLAC_FLAC__file_decoder_process_metadata" = x""yes; then : have_libflac=yes else have_libflac=no fi if test x$have_libflac = xyes; then F_L_A_C_LIBS=-lFLAC $as_echo "#define HAVE_LIBFLAC 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find libFLAC library! The audio loader module which *** requires this library will be disabled. *** *** Currently only libFLAC 1.0.x is supported! *** *** This is NO ERROR. It only means you can't playback certain *** audio file types (e.g. .FLAC) in the emulated tape recorder. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libflac ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find libFLAC library! The audio loader module which *** requires this library will be disabled. *** *** Currently only libFLAC 1.0.x is supported! *** *** This is NO ERROR. It only means you can't playback certain *** audio file types (e.g. .FLAC) in the emulated tape recorder. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libflac ***" >&2;} fi fi for ac_header in sys/soundcard.h do : ac_fn_c_check_header_mongrel "$LINENO" "sys/soundcard.h" "ac_cv_header_sys_soundcard_h" "$ac_includes_default" if test "x$ac_cv_header_sys_soundcard_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_SYS_SOUNDCARD_H 1 _ACEOF fi done for ac_header in machine/soundcard.h do : ac_fn_c_check_header_mongrel "$LINENO" "machine/soundcard.h" "ac_cv_header_machine_soundcard_h" "$ac_includes_default" if test "x$ac_cv_header_machine_soundcard_h" = x""yes; then : cat >>confdefs.h <<_ACEOF #define HAVE_MACHINE_SOUNDCARD_H 1 _ACEOF fi done if test x$ac_cv_header_sys_soundcard_h = xyes -o x$ac_cv_header_machine_soundcard_h = xyes; then $as_echo "#define HAVE_OSS 1" >>confdefs.h else { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find OSS header file soundcard.h! The audio loader *** module which requires OSS will be disabled. *** *** This is NO ERROR. It only means you can't directly load programs *** by reading directly from the soundcard line input. ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find OSS header file soundcard.h! The audio loader *** module which requires OSS will be disabled. *** *** This is NO ERROR. It only means you can't directly load programs *** by reading directly from the soundcard line input. ***" >&2;} fi if test x$enable_sound = xyes; then $as_echo "#define ENABLE_SOUND 1" >>confdefs.h # Check whether --with-sdl-prefix was given. if test "${with_sdl_prefix+set}" = set; then : withval=$with_sdl_prefix; sdl_prefix="$withval" else sdl_prefix="" fi # Check whether --with-sdl-exec-prefix was given. if test "${with_sdl_exec_prefix+set}" = set; then : withval=$with_sdl_exec_prefix; sdl_exec_prefix="$withval" else sdl_exec_prefix="" fi # Check whether --enable-sdltest was given. if test "${enable_sdltest+set}" = set; then : enableval=$enable_sdltest; else enable_sdltest=yes fi if test x$sdl_exec_prefix != x ; then sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config fi fi if test x$sdl_prefix != x ; then sdl_config_args="$sdl_config_args --prefix=$sdl_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_prefix/bin/sdl-config fi fi if test "x$prefix" != xNONE; then PATH="$prefix/bin:$prefix/usr/bin:$PATH" fi # Extract the first word of "sdl-config", so it can be a program name with args. set dummy sdl-config; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if test "${ac_cv_path_SDL_CONFIG+set}" = set; then : $as_echo_n "(cached) " >&6 else case $SDL_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_SDL_CONFIG="$SDL_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then ac_cv_path_SDL_CONFIG="$as_dir/$ac_word$ac_exec_ext" $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5 break 2 fi done done IFS=$as_save_IFS test -z "$ac_cv_path_SDL_CONFIG" && ac_cv_path_SDL_CONFIG="no" ;; esac fi SDL_CONFIG=$ac_cv_path_SDL_CONFIG if test -n "$SDL_CONFIG"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $SDL_CONFIG" >&5 $as_echo "$SDL_CONFIG" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi min_sdl_version=1.2.0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SDL - version >= $min_sdl_version" >&5 $as_echo_n "checking for SDL - version >= $min_sdl_version... " >&6; } no_sdl="" if test "$SDL_CONFIG" = "no" ; then no_sdl=yes else SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags` SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs` sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\1/'` sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\2/'` sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([0-9]*\).\([0-9]*\).\([0-9]*\)/\3/'` if test "x$enable_sdltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_CXXFLAGS="$CXXFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $SDL_CFLAGS" CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" rm -f conf.sdltest if test "$cross_compiling" = yes; then : echo $ac_n "cross compiling; assumed OK... $ac_c" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include "SDL.h" char* my_strdup (char *str) { char *new_str; if (str) { new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main (int argc, char *argv[]) { int major, minor, micro; char *tmp_version; /* This hangs on some systems (?) system ("touch conf.sdltest"); */ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_sdl_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_sdl_version"); exit(1); } if (($sdl_major_version > major) || (($sdl_major_version == major) && ($sdl_minor_version > minor)) || (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) { return 0; } else { printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); printf("*** best to upgrade to the required version.\n"); printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); printf("*** to point to the correct copy of sdl-config, and remove the file\n"); printf("*** config.cache before re-running configure\n"); return 1; } } _ACEOF if ac_fn_c_try_run "$LINENO"; then : else no_sdl=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi CFLAGS="$ac_save_CFLAGS" CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_sdl" = x ; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 $as_echo "yes" >&6; } have_libsdl=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } if test "$SDL_CONFIG" = "no" ; then echo "*** The sdl-config script installed by SDL could not be found" echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the SDL_CONFIG environment variable to the" echo "*** full path to sdl-config." else if test -f conf.sdltest ; then : else echo "*** Could not run SDL test program, checking why..." CFLAGS="$CFLAGS $SDL_CFLAGS" CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include "SDL.h" int main(int argc, char *argv[]) { return 0; } #undef main #define main K_and_R_C_main int main () { return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding SDL or finding the wrong" echo "*** version of SDL. If it is not finding SDL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH" else echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means SDL was incorrectly installed" echo "*** or that you have moved SDL since it was installed. In the latter case, you" echo "*** may want to edit the sdl-config script: $SDL_CONFIG" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$ac_save_CFLAGS" CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi SDL_CFLAGS="" SDL_LIBS="" have_libsdl=no fi rm -f conf.sdltest fi if test x$have_libsdl = xyes; then $as_echo "#define HAVE_LIBSDL 1" >>confdefs.h else if test x$enable_sound = xyes; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: *** *** Unable to find SDL library (see http://www.libsdl.org/) *** Sound is disabled! ***" >&5 $as_echo "$as_me: WARNING: *** *** Unable to find SDL library (see http://www.libsdl.org/) *** Sound is disabled! ***" >&2;} enable_sound=no fi fi ac_config_files="$ac_config_files Makefile include/Makefile include/kc/Makefile include/kc/prefs/Makefile include/kc/kcnet/Makefile include/kc/kramermc/Makefile include/kc/muglerpc/Makefile include/kc/vcs80/Makefile include/kc/c80/Makefile include/sys/Makefile include/getopt/Makefile include/cmd/Makefile include/ui/Makefile include/ui/gtk/Makefile include/ui/generic/Makefile include/fileio/Makefile include/libdbg/Makefile include/libtape/Makefile include/libdisk/Makefile include/libaudio/Makefile include/libgtkex/Makefile asm/Makefile asm/autostart/Makefile src/Makefile src/kc/kcemu.rc src/kc/Makefile src/kc/prefs/Makefile src/kc/kcnet/Makefile src/kc/kramermc/Makefile src/kc/muglerpc/Makefile src/kc/vcs80/Makefile src/kc/c80/Makefile src/sys/Makefile src/sys/mingw/Makefile src/sys/linux/Makefile src/getopt/Makefile src/cmd/Makefile src/ui/Makefile src/ui/gtk/Makefile src/ui/generic/Makefile src/fileio/Makefile src/libdbg/Makefile src/libtape/Makefile src/libdisk/Makefile src/libaudio/Makefile src/libgtkex/Makefile src/util/Makefile test/Makefile test/kc/Makefile test/kc/prefs/Makefile test/libaudio/Makefile test/libaudio/data/Makefile test/libgtkex/Makefile images/Makefile images/original/Makefile doc/Makefile doc/kcemu-help.xml intl/Makefile man/Makefile man/man1/Makefile debian/Makefile rpm/Makefile rpm/KCemu.spec po/Makefile.in conf/Makefile setup/Makefile setup/KCemuSetup.nsi" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5 $as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;; esac case $ac_var in #( _ | IFS | as_nl) ;; #( BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #( *) { eval $ac_var=; unset $ac_var;} ;; esac ;; esac done (set) 2>&1 | case $as_nl`(ac_space=' '; set) 2>&1` in #( *${as_nl}ac_space=\ *) # `set' does not quote correctly, so add quotes: double-quote # substitution turns \\\\ into \\, and sed turns \\ into \. sed -n \ "s/'/'\\\\''/g; s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p" ;; #( *) # `set' quotes correctly as required by POSIX, so do not add quotes. sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p" ;; esac | sort ) | sed ' /^ac_cv_env_/b end t clear :clear s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/ t end s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/ :end' >>confcache if diff "$cache_file" confcache >/dev/null 2>&1; then :; else if test -w "$cache_file"; then test "x$cache_file" != "x/dev/null" && { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} cat confcache >$cache_file else { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5 $as_echo "$as_me: not updating unwritable cache $cache_file" >&6;} fi fi rm -f confcache test "x$prefix" = xNONE && prefix=$ac_default_prefix # Let make expand exec_prefix. test "x$exec_prefix" = xNONE && exec_prefix='${prefix}' DEFS=-DHAVE_CONFIG_H ac_libobjs= ac_ltlibobjs= for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue # 1. Remove the extension, and $U if already installed. ac_script='s/\$U\././;s/\.o$//;s/\.obj$//' ac_i=`$as_echo "$ac_i" | sed "$ac_script"` # 2. Prepend LIBOBJDIR. When used with automake>=1.10 LIBOBJDIR # will be set to the directory where LIBOBJS objects are built. as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext" as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo' done LIBOBJS=$ac_libobjs LTLIBOBJS=$ac_ltlibobjs if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then as_fn_error "conditional \"am__fastdepCXX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COMPILE_Z80_ASM_TRUE}" && test -z "${COMPILE_Z80_ASM_FALSE}"; then as_fn_error "conditional \"COMPILE_Z80_ASM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COMPILE_Z80_ASM_TRUE}" && test -z "${COMPILE_Z80_ASM_FALSE}"; then as_fn_error "conditional \"COMPILE_Z80_ASM\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_MINGW_TRUE}" && test -z "${TARGET_MINGW_FALSE}"; then as_fn_error "conditional \"TARGET_MINGW\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_LINUX_TRUE}" && test -z "${TARGET_LINUX_FALSE}"; then as_fn_error "conditional \"TARGET_LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_FREEBSD_TRUE}" && test -z "${TARGET_FREEBSD_FALSE}"; then as_fn_error "conditional \"TARGET_FREEBSD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_MINGW_TRUE}" && test -z "${TARGET_MINGW_FALSE}"; then as_fn_error "conditional \"TARGET_MINGW\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_FREEBSD_TRUE}" && test -z "${TARGET_FREEBSD_FALSE}"; then as_fn_error "conditional \"TARGET_FREEBSD\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${TARGET_LINUX_TRUE}" && test -z "${TARGET_LINUX_FALSE}"; then as_fn_error "conditional \"TARGET_LINUX\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_INCLUDED_GETOPT_TRUE}" && test -z "${USE_INCLUDED_GETOPT_FALSE}"; then as_fn_error "conditional \"USE_INCLUDED_GETOPT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_INCLUDED_GETOPT_TRUE}" && test -z "${USE_INCLUDED_GETOPT_FALSE}"; then as_fn_error "conditional \"USE_INCLUDED_GETOPT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${HAVE_CPPUNIT_TRUE}" && test -z "${HAVE_CPPUNIT_FALSE}"; then as_fn_error "conditional \"HAVE_CPPUNIT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : ${CONFIG_STATUS=./config.status} ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5 $as_echo "$as_me: creating $CONFIG_STATUS" >&6;} as_write_fail=0 cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1 #! $SHELL # Generated by $as_me. # Run this file to recreate the current configuration. # Compiler output produced by configure, useful for debugging # configure, is in config.log if it exists. debug=false ac_cs_recheck=false ac_cs_silent=false SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1 ## -------------------- ## ## M4sh Initialization. ## ## -------------------- ## # Be more Bourne compatible DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in #( *posix*) : set -o posix ;; #( *) : ;; esac fi as_nl=' ' export as_nl # Printing a long string crashes Solaris 7 /usr/bin/printf. as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo # Prefer a ksh shell builtin over an external printf program on Solaris, # but without wasting forks for bash or zsh. if test -z "$BASH_VERSION$ZSH_VERSION" \ && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='print -r --' as_echo_n='print -rn --' elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then as_echo='printf %s\n' as_echo_n='printf %s' else if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"' as_echo_n='/usr/ucb/echo -n' else as_echo_body='eval expr "X$1" : "X\\(.*\\)"' as_echo_n_body='eval arg=$1; case $arg in #( *"$as_nl"*) expr "X$arg" : "X\\(.*\\)$as_nl"; arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;; esac; expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl" ' export as_echo_n_body as_echo_n='sh -c $as_echo_n_body as_echo' fi export as_echo_body as_echo='sh -c $as_echo_body as_echo' fi # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi # IFS # We need space, tab and new line, in precisely that order. Quoting is # there to prevent editors from complaining about space-tab. # (If _AS_PATH_WALK were called with IFS unset, it would disable word # splitting by setting IFS to empty value.) IFS=" "" $as_nl" # Find who we are. Look in the path if we contain no directory separator. case $0 in #(( *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac # We did not find ourselves, most probably we were run as `sh COMMAND' # in which case we are not to be found in the path. if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 exit 1 fi # Unset variables that we do not need and which cause bugs (e.g. in # pre-3.0 UWIN ksh). But do not cause bugs in bash 2.01; the "|| exit 1" # suppresses any "Segmentation fault" message there. '((' could # trigger a bug in pdksh 5.2.14. for as_var in BASH_ENV ENV MAIL MAILPATH do eval test x\${$as_var+set} = xset \ && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || : done PS1='$ ' PS2='> ' PS4='+ ' # NLS nuisances. LC_ALL=C export LC_ALL LANGUAGE=C export LANGUAGE # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # as_fn_error ERROR [LINENO LOG_FD] # --------------------------------- # Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are # provided, also output the error to LOG_FD, referencing LINENO. Then exit the # script with status $?, using 1 if that was 0. as_fn_error () { as_status=$?; test $as_status -eq 0 && as_status=1 if test "$3"; then as_lineno=${as_lineno-"$2"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $1" >&$3 fi $as_echo "$as_me: error: $1" >&2 as_fn_exit $as_status } # as_fn_error # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_append VAR VALUE # ---------------------- # Append the text in VALUE to the end of the definition contained in VAR. Take # advantage of any shell optimizations that allow amortized linear growth over # repeated appends, instead of the typical quadratic growth present in naive # implementations. if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then : eval 'as_fn_append () { eval $1+=\$2 }' else as_fn_append () { eval $1=\$$1\$2 } fi # as_fn_append # as_fn_arith ARG... # ------------------ # Perform arithmetic evaluation on the ARGs, and store the result in the # global $as_val. Take advantage of shells that can avoid forks. The arguments # must be portable across $(()) and expr. if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then : eval 'as_fn_arith () { as_val=$(( $* )) }' else as_fn_arith () { as_val=`expr "$@" || test $? -eq 1` } fi # as_fn_arith if expr a : '\(a\)' >/dev/null 2>&1 && test "X`expr 00001 : '.*\(...\)'`" = X001; then as_expr=expr else as_expr=false fi if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then as_basename=basename else as_basename=false fi if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then as_dirname=dirname else as_dirname=false fi as_me=`$as_basename -- "$0" || $as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \ X"$0" : 'X\(//\)$' \| \ X"$0" : 'X\(/\)' \| . 2>/dev/null || $as_echo X/"$0" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` # Avoid depending upon Character Ranges. as_cr_letters='abcdefghijklmnopqrstuvwxyz' as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ' as_cr_Letters=$as_cr_letters$as_cr_LETTERS as_cr_digits='0123456789' as_cr_alnum=$as_cr_Letters$as_cr_digits ECHO_C= ECHO_N= ECHO_T= case `echo -n x` in #((((( -n*) case `echo 'xy\c'` in *c*) ECHO_T=' ';; # ECHO_T is single tab character. xy) ECHO_C='\c';; *) echo `echo ksh88 bug on AIX 6.1` > /dev/null ECHO_T=' ';; esac;; *) ECHO_N='-n';; esac rm -f conf$$ conf$$.exe conf$$.file if test -d conf$$.dir; then rm -f conf$$.dir/conf$$.file else rm -f conf$$.dir mkdir conf$$.dir 2>/dev/null fi if (echo >conf$$.file) 2>/dev/null; then if ln -s conf$$.file conf$$ 2>/dev/null; then as_ln_s='ln -s' # ... but there are two gotchas: # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail. # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable. # In both cases, we have to default to `cp -p'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -p' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -p' fi else as_ln_s='cp -p' fi rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file rmdir conf$$.dir 2>/dev/null # as_fn_mkdir_p # ------------- # Create "$as_dir" as a directory, including parents if necessary. as_fn_mkdir_p () { case $as_dir in #( -*) as_dir=./$as_dir;; esac test -d "$as_dir" || eval $as_mkdir_p || { as_dirs= while :; do case $as_dir in #( *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'( *) as_qdir=$as_dir;; esac as_dirs="'$as_qdir' $as_dirs" as_dir=`$as_dirname -- "$as_dir" || $as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$as_dir" : 'X\(//\)[^/]' \| \ X"$as_dir" : 'X\(//\)$' \| \ X"$as_dir" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$as_dir" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` test -d "$as_dir" && break done test -z "$as_dirs" || eval "mkdir $as_dirs" } || test -d "$as_dir" || as_fn_error "cannot create directory $as_dir" } # as_fn_mkdir_p if mkdir -p . 2>/dev/null; then as_mkdir_p='mkdir -p "$as_dir"' else test -d ./-p && rmdir ./-p as_mkdir_p=false fi if test -x / >/dev/null 2>&1; then as_test_x='test -x' else if ls -dL / >/dev/null 2>&1; then as_ls_L_option=L else as_ls_L_option= fi as_test_x=' eval sh -c '\'' if test -d "$1"; then test -d "$1/."; else case $1 in #( -*)set "./$1";; esac; case `ls -ld'$as_ls_L_option' "$1" 2>/dev/null` in #(( ???[sx]*):;;*)false;;esac;fi '\'' sh ' fi as_executable_p=$as_test_x # Sed expression to map a string onto a valid CPP name. as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'" # Sed expression to map a string onto a valid variable name. as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'" exec 6>&1 ## ----------------------------------- ## ## Main body of $CONFIG_STATUS script. ## ## ----------------------------------- ## _ASEOF test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Save the log message, to keep $0 and so on meaningful, and to # report actual input values of CONFIG_FILES etc. instead of their # values after options handling. ac_log=" This file was extended by $as_me, which was generated by GNU Autoconf 2.65. Invocation command line was CONFIG_FILES = $CONFIG_FILES CONFIG_HEADERS = $CONFIG_HEADERS CONFIG_LINKS = $CONFIG_LINKS CONFIG_COMMANDS = $CONFIG_COMMANDS $ $0 $@ on `(hostname || uname -n) 2>/dev/null | sed 1q` " _ACEOF case $ac_config_files in *" "*) set x $ac_config_files; shift; ac_config_files=$*;; esac case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_commands="$ac_config_commands" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 ac_cs_usage="\ \`$as_me' instantiates files and other configuration actions from templates according to the current configuration. Unless the files and actions are specified as TAGs, all are instantiated by default. Usage: $0 [OPTION]... [TAG]... -h, --help print this help, then exit -V, --version print version number and configuration settings, then exit --config print configuration, then exit -q, --quiet, --silent do not print progress messages -d, --debug don't remove temporary files --recheck update $as_me by reconfiguring in the same conditions --file=FILE[:TEMPLATE] instantiate the configuration file FILE --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration commands: $config_commands Report bugs to the package provider." _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`" ac_cs_version="\\ config.status configured by $0, generated by GNU Autoconf 2.65, with options \\"\$ac_cs_config\\" Copyright (C) 2009 Free Software Foundation, Inc. This config.status script is free software; the Free Software Foundation gives unlimited permission to copy, distribute and modify it." ac_pwd='$ac_pwd' srcdir='$srcdir' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) $as_echo "$ac_cs_version"; exit ;; --config | --confi | --conf | --con | --co | --c ) $as_echo "$ac_cs_config"; exit ;; --debug | --debu | --deb | --de | --d | -d ) debug=: ;; --file | --fil | --fi | --f ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_FILES " '$ac_optarg'" ac_need_defaults=false;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --help | --hel | -h ) $as_echo "$ac_cs_usage"; exit ;; -q | -quiet | --quiet | --quie | --qui | --qu | --q \ | -silent | --silent | --silen | --sile | --sil | --si | --s) ac_cs_silent=: ;; # This is an error. -*) as_fn_error "unrecognized option: \`$1' Try \`$0 --help' for more information." ;; *) as_fn_append ac_config_targets " $1" ac_need_defaults=false ;; esac shift done ac_configure_extra_args= if $ac_cs_silent; then exec 6>/dev/null ac_configure_extra_args="$ac_configure_extra_args --silent" fi _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 if \$ac_cs_recheck; then set X '$SHELL' '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion shift \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6 CONFIG_SHELL='$SHELL' export CONFIG_SHELL exec "\$@" fi _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 exec 5>>config.log { echo sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX ## Running $as_me. ## _ASBOX $as_echo "$ac_log" } >&5 _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # # INIT-COMMANDS # AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir" # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # Handling of arguments. for ac_config_target in $ac_config_targets do case $ac_config_target in "include/kc/config.h") CONFIG_HEADERS="$CONFIG_HEADERS include/kc/config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "include/Makefile") CONFIG_FILES="$CONFIG_FILES include/Makefile" ;; "include/kc/Makefile") CONFIG_FILES="$CONFIG_FILES include/kc/Makefile" ;; "include/kc/prefs/Makefile") CONFIG_FILES="$CONFIG_FILES include/kc/prefs/Makefile" ;; "include/kc/kcnet/Makefile") CONFIG_FILES="$CONFIG_FILES include/kc/kcnet/Makefile" ;; "include/kc/kramermc/Makefile") CONFIG_FILES="$CONFIG_FILES include/kc/kramermc/Makefile" ;; "include/kc/muglerpc/Makefile") CONFIG_FILES="$CONFIG_FILES include/kc/muglerpc/Makefile" ;; "include/kc/vcs80/Makefile") CONFIG_FILES="$CONFIG_FILES include/kc/vcs80/Makefile" ;; "include/kc/c80/Makefile") CONFIG_FILES="$CONFIG_FILES include/kc/c80/Makefile" ;; "include/sys/Makefile") CONFIG_FILES="$CONFIG_FILES include/sys/Makefile" ;; "include/getopt/Makefile") CONFIG_FILES="$CONFIG_FILES include/getopt/Makefile" ;; "include/cmd/Makefile") CONFIG_FILES="$CONFIG_FILES include/cmd/Makefile" ;; "include/ui/Makefile") CONFIG_FILES="$CONFIG_FILES include/ui/Makefile" ;; "include/ui/gtk/Makefile") CONFIG_FILES="$CONFIG_FILES include/ui/gtk/Makefile" ;; "include/ui/generic/Makefile") CONFIG_FILES="$CONFIG_FILES include/ui/generic/Makefile" ;; "include/fileio/Makefile") CONFIG_FILES="$CONFIG_FILES include/fileio/Makefile" ;; "include/libdbg/Makefile") CONFIG_FILES="$CONFIG_FILES include/libdbg/Makefile" ;; "include/libtape/Makefile") CONFIG_FILES="$CONFIG_FILES include/libtape/Makefile" ;; "include/libdisk/Makefile") CONFIG_FILES="$CONFIG_FILES include/libdisk/Makefile" ;; "include/libaudio/Makefile") CONFIG_FILES="$CONFIG_FILES include/libaudio/Makefile" ;; "include/libgtkex/Makefile") CONFIG_FILES="$CONFIG_FILES include/libgtkex/Makefile" ;; "asm/Makefile") CONFIG_FILES="$CONFIG_FILES asm/Makefile" ;; "asm/autostart/Makefile") CONFIG_FILES="$CONFIG_FILES asm/autostart/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/kc/kcemu.rc") CONFIG_FILES="$CONFIG_FILES src/kc/kcemu.rc" ;; "src/kc/Makefile") CONFIG_FILES="$CONFIG_FILES src/kc/Makefile" ;; "src/kc/prefs/Makefile") CONFIG_FILES="$CONFIG_FILES src/kc/prefs/Makefile" ;; "src/kc/kcnet/Makefile") CONFIG_FILES="$CONFIG_FILES src/kc/kcnet/Makefile" ;; "src/kc/kramermc/Makefile") CONFIG_FILES="$CONFIG_FILES src/kc/kramermc/Makefile" ;; "src/kc/muglerpc/Makefile") CONFIG_FILES="$CONFIG_FILES src/kc/muglerpc/Makefile" ;; "src/kc/vcs80/Makefile") CONFIG_FILES="$CONFIG_FILES src/kc/vcs80/Makefile" ;; "src/kc/c80/Makefile") CONFIG_FILES="$CONFIG_FILES src/kc/c80/Makefile" ;; "src/sys/Makefile") CONFIG_FILES="$CONFIG_FILES src/sys/Makefile" ;; "src/sys/mingw/Makefile") CONFIG_FILES="$CONFIG_FILES src/sys/mingw/Makefile" ;; "src/sys/linux/Makefile") CONFIG_FILES="$CONFIG_FILES src/sys/linux/Makefile" ;; "src/getopt/Makefile") CONFIG_FILES="$CONFIG_FILES src/getopt/Makefile" ;; "src/cmd/Makefile") CONFIG_FILES="$CONFIG_FILES src/cmd/Makefile" ;; "src/ui/Makefile") CONFIG_FILES="$CONFIG_FILES src/ui/Makefile" ;; "src/ui/gtk/Makefile") CONFIG_FILES="$CONFIG_FILES src/ui/gtk/Makefile" ;; "src/ui/generic/Makefile") CONFIG_FILES="$CONFIG_FILES src/ui/generic/Makefile" ;; "src/fileio/Makefile") CONFIG_FILES="$CONFIG_FILES src/fileio/Makefile" ;; "src/libdbg/Makefile") CONFIG_FILES="$CONFIG_FILES src/libdbg/Makefile" ;; "src/libtape/Makefile") CONFIG_FILES="$CONFIG_FILES src/libtape/Makefile" ;; "src/libdisk/Makefile") CONFIG_FILES="$CONFIG_FILES src/libdisk/Makefile" ;; "src/libaudio/Makefile") CONFIG_FILES="$CONFIG_FILES src/libaudio/Makefile" ;; "src/libgtkex/Makefile") CONFIG_FILES="$CONFIG_FILES src/libgtkex/Makefile" ;; "src/util/Makefile") CONFIG_FILES="$CONFIG_FILES src/util/Makefile" ;; "test/Makefile") CONFIG_FILES="$CONFIG_FILES test/Makefile" ;; "test/kc/Makefile") CONFIG_FILES="$CONFIG_FILES test/kc/Makefile" ;; "test/kc/prefs/Makefile") CONFIG_FILES="$CONFIG_FILES test/kc/prefs/Makefile" ;; "test/libaudio/Makefile") CONFIG_FILES="$CONFIG_FILES test/libaudio/Makefile" ;; "test/libaudio/data/Makefile") CONFIG_FILES="$CONFIG_FILES test/libaudio/data/Makefile" ;; "test/libgtkex/Makefile") CONFIG_FILES="$CONFIG_FILES test/libgtkex/Makefile" ;; "images/Makefile") CONFIG_FILES="$CONFIG_FILES images/Makefile" ;; "images/original/Makefile") CONFIG_FILES="$CONFIG_FILES images/original/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "doc/kcemu-help.xml") CONFIG_FILES="$CONFIG_FILES doc/kcemu-help.xml" ;; "intl/Makefile") CONFIG_FILES="$CONFIG_FILES intl/Makefile" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "man/man1/Makefile") CONFIG_FILES="$CONFIG_FILES man/man1/Makefile" ;; "debian/Makefile") CONFIG_FILES="$CONFIG_FILES debian/Makefile" ;; "rpm/Makefile") CONFIG_FILES="$CONFIG_FILES rpm/Makefile" ;; "rpm/KCemu.spec") CONFIG_FILES="$CONFIG_FILES rpm/KCemu.spec" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "conf/Makefile") CONFIG_FILES="$CONFIG_FILES conf/Makefile" ;; "setup/Makefile") CONFIG_FILES="$CONFIG_FILES setup/Makefile" ;; "setup/KCemuSetup.nsi") CONFIG_FILES="$CONFIG_FILES setup/KCemuSetup.nsi" ;; *) as_fn_error "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands fi # Have a temporary directory for convenience. Make it in the build tree # simply because there is no reason against having it here, and in addition, # creating and moving files from /tmp can sometimes cause problems. # Hook for its removal unless debugging. # Note that there is a small window in which the directory will not be cleaned: # after its creation but before its name has been assigned to `$tmp'. $debug || { tmp= trap 'exit_status=$? { test -z "$tmp" || test ! -d "$tmp" || rm -fr "$tmp"; } && exit $exit_status ' 0 trap 'as_fn_exit 1' 1 2 13 15 } # Create a (secure) tmp directory for tmp files. { tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error "cannot create a temporary directory in ." "$LINENO" 5 # Set up the scripts for CONFIG_FILES section. # No need to generate them if there are no CONFIG_FILES. # This happens for instance with `./config.status config.h'. if test -n "$CONFIG_FILES"; then ac_cr=`echo X | tr X '\015'` # On cygwin, bash can eat \r inside `` if the user requested igncr. # But we know of no other shell where ac_cr would be empty at this # point, so we can use a bashism as a fallback. if test "x$ac_cr" = x; then eval ac_cr=\$\'\\r\' fi ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' /dev/null` if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then ac_cs_awk_cr='\r' else ac_cs_awk_cr=$ac_cr fi echo 'BEGIN {' >"$tmp/subs1.awk" && _ACEOF { echo "cat >conf$$subs.awk <<_ACEOF" && echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' && echo "_ACEOF" } >conf$$subs.sh || as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_num=`echo "$ac_subst_vars" | grep -c '$'` ac_delim='%!_!# ' for ac_last_try in false false false false false :; do . ./conf$$subs.sh || as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X` if test $ac_delim_n = $ac_delim_num; then break elif $ac_last_try; then as_fn_error "could not make $CONFIG_STATUS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done rm -f conf$$subs.sh cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 cat >>"\$tmp/subs1.awk" <<\\_ACAWK && _ACEOF sed -n ' h s/^/S["/; s/!.*/"]=/ p g s/^[^!]*!// :repl t repl s/'"$ac_delim"'$// t delim :nl h s/\(.\{148\}\)..*/\1/ t more1 s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/ p n b repl :more1 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t nl :delim h s/\(.\{148\}\)..*/\1/ t more2 s/["\\]/\\&/g; s/^/"/; s/$/"/ p b :more2 s/["\\]/\\&/g; s/^/"/; s/$/"\\/ p g s/.\{148\}// t delim ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { line = $ 0 nfields = split(line, field, "@") substed = 0 len = length(field[1]) for (i = 2; i < nfields; i++) { key = field[i] keylen = length(key) if (S_is_set[key]) { value = S[key] line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3) len += length(value) + length(field[++i]) substed = 1 } else len += 1 + keylen } print line } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g" else cat fi < "$tmp/subs1.awk" > "$tmp/subs.awk" \ || as_fn_error "could not setup config files machinery" "$LINENO" 5 _ACEOF # VPATH may cause trouble with some makes, so we remove $(srcdir), # ${srcdir} and @srcdir@ from VPATH if srcdir is ".", strip leading and # trailing colons and then remove the whole line if VPATH becomes empty # (actually we leave an empty line to preserve line numbers). if test "x$srcdir" = x.; then ac_vpsub='/^[ ]*VPATH[ ]*=/{ s/:*\$(srcdir):*/:/ s/:*\${srcdir}:*/:/ s/:*@srcdir@:*/:/ s/^\([^=]*=[ ]*\):*/\1/ s/:*$// s/^[^=]*=[ ]*$// }' fi cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 fi # test -n "$CONFIG_FILES" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_t=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_t"; then break elif $ac_last_try; then as_fn_error "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :C $CONFIG_COMMANDS" shift for ac_tag do case $ac_tag in :[FHLC]) ac_mode=$ac_tag; continue;; esac case $ac_mode$ac_tag in :[FHL]*:*);; :L* | :C*:*) as_fn_error "invalid tag \`$ac_tag'" "$LINENO" 5;; :[FH]-) ac_tag=-:-;; :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; esac ac_save_IFS=$IFS IFS=: set x $ac_tag IFS=$ac_save_IFS shift ac_file=$1 shift case $ac_mode in :L) ac_source=$1;; :[FH]) ac_file_inputs= for ac_f do case $ac_f in -) ac_f="$tmp/stdin";; *) # Look for the file first in the build tree, then in the source tree # (if the path is not absolute). The absolute path cannot be DOS-style, # because $ac_f cannot contain `:'. test -f "$ac_f" || case $ac_f in [\\/$]*) false;; *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; esac || as_fn_error "cannot find input file: \`$ac_f'" "$LINENO" 5;; esac case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac as_fn_append ac_file_inputs " '$ac_f'" done # Let's still pretend it is `configure' which instantiates (i.e., don't # use $as_me), people would be surprised to read: # /* config.h. Generated by config.status. */ configure_input='Generated from '` $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g' `' by configure.' if test x"$ac_file" != x-; then configure_input="$ac_file. $configure_input" { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5 $as_echo "$as_me: creating $ac_file" >&6;} fi # Neutralize special characters interpreted by sed in replacement strings. case $configure_input in #( *\&* | *\|* | *\\* ) ac_sed_conf_input=`$as_echo "$configure_input" | sed 's/[\\\\&|]/\\\\&/g'`;; #( *) ac_sed_conf_input=$configure_input;; esac case $ac_tag in *:-:* | *:-) cat >"$tmp/stdin" \ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; esac ;; esac ac_dir=`$as_dirname -- "$ac_file" || $as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$ac_file" : 'X\(//\)[^/]' \| \ X"$ac_file" : 'X\(//\)$' \| \ X"$ac_file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$ac_file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir="$ac_dir"; as_fn_mkdir_p ac_builddir=. case "$ac_dir" in .) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'` # A ".." for each directory in $ac_dir_suffix. ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'` case $ac_top_builddir_sub in "") ac_top_builddir_sub=. ac_top_build_prefix= ;; *) ac_top_build_prefix=$ac_top_builddir_sub/ ;; esac ;; esac ac_abs_top_builddir=$ac_pwd ac_abs_builddir=$ac_pwd$ac_dir_suffix # for backward compatibility: ac_top_builddir=$ac_top_build_prefix case $srcdir in .) # We are building in place. ac_srcdir=. ac_top_srcdir=$ac_top_builddir_sub ac_abs_top_srcdir=$ac_pwd ;; [\\/]* | ?:[\\/]* ) # Absolute name. ac_srcdir=$srcdir$ac_dir_suffix; ac_top_srcdir=$srcdir ac_abs_top_srcdir=$srcdir ;; *) # Relative name. ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix ac_top_srcdir=$ac_top_build_prefix$srcdir ac_abs_top_srcdir=$ac_pwd/$srcdir ;; esac ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix case $ac_mode in :F) # # CONFIG_FILE # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5 $as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;} _ACEOF cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_datarootdir_hack=' s&@datadir@&$datadir&g s&@docdir@&$docdir&g s&@infodir@&$infodir&g s&@localedir@&$localedir&g s&@mandir@&$mandir&g s&\\\${datarootdir}&$datarootdir&g' ;; esac _ACEOF # Neutralize VPATH when `$srcdir' = `.'. # Shell code in configure.ac might set extrasub. # FIXME: do we really want to maintain this feature? cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 ac_sed_extra="$ac_vpsub $extrasub _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 :t /@[a-zA-Z_][a-zA-Z_0-9]*@/!b s|@configure_input@|$ac_sed_conf_input|;t t s&@top_builddir@&$ac_top_builddir_sub&;t t s&@top_build_prefix@&$ac_top_build_prefix&;t t s&@srcdir@&$ac_srcdir&;t t s&@abs_srcdir@&$ac_abs_srcdir&;t t s&@top_srcdir@&$ac_top_srcdir&;t t s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t s&@builddir@&$ac_builddir&;t t s&@abs_builddir@&$ac_abs_builddir&;t t s&@abs_top_builddir@&$ac_abs_top_builddir&;t t s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$tmp/subs.awk" >$tmp/out \ || as_fn_error "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' "$tmp/out"`; test -z "$ac_out"; } && { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&5 $as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir' which seems to be undefined. Please make sure it is defined." >&2;} rm -f "$tmp/stdin" case $ac_file in -) cat "$tmp/out" && rm -f "$tmp/out";; *) rm -f "$ac_file" && mv "$tmp/out" "$ac_file";; esac \ || as_fn_error "could not create $ac_file" "$LINENO" 5 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" } >"$tmp/config.h" \ || as_fn_error "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$tmp/config.h" >/dev/null 2>&1; then { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 $as_echo "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$tmp/config.h" "$ac_file" \ || as_fn_error "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :C) { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5 $as_echo "$as_me: executing $ac_file commands" >&6;} ;; esac case $ac_file$ac_mode in "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`$as_dirname -- "$mf" || $as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$mf" : 'X\(//\)[^/]' \| \ X"$mf" : 'X\(//\)$' \| \ X"$mf" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`$as_dirname -- "$file" || $as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$file" : 'X\(//\)[^/]' \| \ X"$file" : 'X\(//\)$' \| \ X"$file" : 'X\(/\)' \| . 2>/dev/null || $as_echo X"$file" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` as_dir=$dirpart/$fdir; as_fn_mkdir_p # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ;; "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit $? fi if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5 $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;} fi echo "" echo "" echo "KCemu configuration summary:" echo "----------------------------" echo "" echo "- version : KCemu $KCEMU_VERSION" echo "" echo "- architecture : $HOST_OS" echo "- host system : $host" echo "- install prefix : $prefix" echo "" echo "- z80 emulation : $z80_emulation_type" echo "- sound : $enable_sound" echo "- debug level : $DBG_LEVEL" echo "" echo "- audio:" echo "" echo " * sndfile : $have_libsndfile" echo " * audiofile : $have_libaudiofile" echo " * vorbis : $have_libvorbis" echo " * mp3lame : $have_libmp3lame" echo " * FLAC : $have_libflac" echo "" echo "- video:" echo "" echo " * theora : $have_theora$have_theora_version" echo " * avformat : $have_avformat" echo " * dirac : $have_dirac" echo " * schroedinger : $have_libschroedinger" echo " * xvid : $have_libxvidcore" echo " * vncserver : $have_libvncserver" echo "" echo "" KCemu-0.5.1/ChangeLog0000644001050700006200000014427011340261610013761 0ustar glaubitzfbedv2010-01-08 gettextize * config/gettext.m4: New file, from gettext-0.17. * config/iconv.m4: New file, from gettext-0.17. * config/lib-ld.m4: New file, from gettext-0.17. * config/lib-link.m4: New file, from gettext-0.17. * config/lib-prefix.m4: New file, from gettext-0.17. * config/nls.m4: New file, from gettext-0.17. * config/po.m4: New file, from gettext-0.17. * config/progtest.m4: New file, from gettext-0.17. * config/codeset.m4: New file, from gettext-0.17. * config/glibc2.m4: New file, from gettext-0.17. * config/glibc21.m4: New file, from gettext-0.17. * config/intdiv0.m4: New file, from gettext-0.17. * config/intl.m4: New file, from gettext-0.17. * config/intldir.m4: New file, from gettext-0.17. * config/intlmacosx.m4: New file, from gettext-0.17. * config/intmax.m4: New file, from gettext-0.17. * config/inttypes_h.m4: New file, from gettext-0.17. * config/inttypes-pri.m4: New file, from gettext-0.17. * config/lcmessage.m4: New file, from gettext-0.17. * config/lock.m4: New file, from gettext-0.17. * config/longlong.m4: New file, from gettext-0.17. * config/printf-posix.m4: New file, from gettext-0.17. * config/size_max.m4: New file, from gettext-0.17. * config/stdint_h.m4: New file, from gettext-0.17. * config/uintmax_t.m4: New file, from gettext-0.17. * config/visibility.m4: New file, from gettext-0.17. * config/wchar_t.m4: New file, from gettext-0.17. * config/wint_t.m4: New file, from gettext-0.17. * config/xsize.m4: New file, from gettext-0.17. 2006-11-17 gettextize * Makefile.am (SUBDIRS): Add intl, m4, po. (EXTRA_DIST): Add m4/ChangeLog. * configure.in (AC_OUTPUT): Add intl/Makefile, po/Makefile.in, Remove command that created po/Makefile. 2005-05-15 Torsten Paul * src/kc/mod_rom1.cc: round module size up to 4k boundary and initialize content with 0xff * include/kc/module.h, src/kc/module.cc, src/kc/mod_list.cc: added the possibility to show an error text when a module can not be inserted (e.g. if it's only possible to have exactly one module of a specific type) * src/kc/mod_js.cc: added configuration for joystick device and better auto probing for some default joystick devices; currently always the first joystick is selected. * src/kc/keyb1.cc: changed kc85/1 keyboard handling with respect to shifted keys; it should be possible now to enter characters that are shifted in the pc layout but not shifted in the kc layout 2005-05-14 Torsten Paul * include/kc/gide.h, src/kc/gide.cc: GIDE support is now working to the extend that it's possible to boot from hard disk. current implementation has two fixed hard disks, master drive is a Seagate ST-157A (42MB) and slave drive is a MyZ80 compatible hard disk. not yet solved is the problem of initializing the directory area of the hard disk file. without this only the first sector of the directory is usable. 2005-05-01 Torsten Paul * src/kc/memory3.cc: reinitialize memory layout on reset * src/kc/mod_ram.cc: fix configuration changes; address changes were only honoured when the active flag was changed too * src/kc/mod_disk.cc: fix initialization 2005-04-30 Torsten Paul * src/kc/pio3.cc: fix meaning of the internal pio ports (according to schematics, due to lack of system handbook) * src/kc/pio.cc: handle byte input mode (which is the PIO default) 2005-04-24 Torsten Paul * include/z80core2/z80io.h: fixed definition of I/O functions to allow usage 16-bit port address; this is neccessary for the GIDE/RTC input 2005-04-23 Torsten Paul * src/kc/fdc_cmd.cc: changed the "format a track" to work with the caosdisk command * include/kc/daisy.h, src/kc/daisy.cc: separated interrupt daisy chain handling so it can be used from module code * include/kc/mod_dio.h, src/kc/mod_dio.cc, include/kc/ctc_dio.h, include/kc/pio_dio.h, src/kc/ctc_dio.cc, src/kc/pio_dio.cc: added digital in/out module (M001) 2004-08-14 Torsten Paul * include/kc/disk.h, src/kc/disk.cc: added method to create new empty disk files (always using AnaDisk Dump format with format 5x1024x2) * src/kc/kc.cc: do some guessing for data and locale directory * src/kc/keyb3.cc: ignore "AltGR" key; fix for keys that are shifted on PC keyboard but not on KC keyboard (e.g. ':'); this might not work correctly on keyboard layout different from german. * src/ui/gtk/ui_gtk.cc (key_press_release): "AltGr" key returns GDK_ISO_Level3_Shift. * src/z80core2/Z80.c: added Z80_ExecuteSingle() method and made InitTables() public with the new name Z80_InitTables(). 2004-06-11 Torsten Paul * include/kc/keyb3k.h: changed the code for the ENTER key from 7fh to 7eh; needed for CAOS 4.4 * src/z80core/CodesXCB.h: implemented undocumented opcodes SET 7,(IX+4),A and RES 7,(IX+4),A that are used by CAOS 4.3 and above * src/kc/ports4.cc: force initial change for all bits 2004-06-10 Torsten Paul * include/kc/mod_4m.h, src/kc/mod_4m.cc: added 4MB RAM module (M035x4, logically 4 1MB modules in one slot) * include/kc/mod_1m.h, src/kc/mod_1m.cc: added module 1MB segmented RAM * include/kc/mod_512k.h, src/kc/mod_512k.cc: added module 512k segmented RAM * include/kc/mod_256k.h, src/kc/mod_256k.cc: added module 256k segmented RAM * include/kc/mod_128k.h, src/kc/mod_128k.cc: added module 128k segmented RAM * include/kc/mod_segm.h, src/kc/mod_segm.cc: base class for segmented RAM modules (kc85/4) * src/kc/module.cc: pass all memory I/O calls to the module interface not only the calls aligned at module addresses (with ((addr >> 8) & 3) == 0); this is needed for the M035x4 4MB module that logically contains 4 1MB modules at all 4 module port addresses of one slot * src/kc/memory4.cc: modified reset routine to also initialize internal state variables * src/kc/memory4.cc: fixed memory segment handling problem for RAM8 * src/kc/mod_ram.cc: grmpf, module memory size was not 16k as it should be but only 8k 2004-03-20 Torsten Paul * src/kc/pio.cc: don't ignore callback return value in bit I/O mode 2004-03-17 Torsten Paul * switched to automake-1.8 2004-02-03 Torsten Paul * src/ui/gtk/ui_gtk.cc: fix keyboard handling resurrecting the key accelerator in the menu bar; full support for main menu access by keyboard 2004-01-31 Torsten Paul * include/kc/basicrun.h: added basic run routine for starting basic programs from both system and basic mode 2004-01-17 Torsten Paul * src/ui/gtk/ui_gtk.cc: added menu entry to enable/disable display effects for scaled screen 2004-01-11 Torsten Paul * include/kc/mod_192k.h, src/kc/mod_192k.cc, include/kc/mod_4131.h, src/kc/mod_4131.cc, include/kc/mod_64k.h, src/kc/mod_64k.cc, include/kc/mod_cpm.h, src/kc/mod_cpm.cc, include/kc/mod_fdc.h, src/kc/mod_fdc.cc, include/kc/mod_gdc.h, src/kc/mod_gdc.cc, include/kc/mod_js.h, src/kc/mod_js.cc, include/kc/mod_r64.h, src/kc/mod_r64.cc, include/kc/mod_ram.h, src/kc/mod_ram.cc, include/kc/mod_ram1.h, src/kc/mod_ram1.cc, include/kc/mod_ram8.h, src/kc/mod_ram8.cc, include/kc/mod_ramf.h, src/kc/mod_ramf.cc, include/kc/mod_rom.h, src/kc/mod_rom.cc, include/kc/mod_rom1.h, src/kc/mod_rom1.cc, include/kc/mod_rtc.h, src/kc/mod_rtc.cc: implement reset() method * include/kc/module.h, src/kc/module.cc: added reset() method to forward reset/power on event; made scratch_mem() static * include/kc/kc.h, src/kc/kc.cc, src/ui/gtk/ui_gtk.cc: added command line switch and config file entry to enable/disable display effects for scaled screen 2004-01-10 Torsten Paul * src/kc/fdc.cc, src/kc/fdc_cmd.cc, src/ui/gtk/debug.cc, src/ui/gtk/copying.cc, src/kc/memory3.cc, src/kc/memory7.cc, src/kc/module.cc, src/kc/mod_list.cc, src/cmd/cmdargs.cc, src/kc/cb_list.cc, src/ui/gtk/ui_gtk.cc, src/libtape/kct.cc: fix memory leaks * include/ui/generic/memaccess.h, src/ui/generic/memaccess.cc: simple implementation of the kc 85/2, kc85/3 display effect caused by access to the screen memory * src/kc/memory2.cc, src/kc/memory3.cc: call user interface when reading or writing from/to IRM * ROM/m006.rom, src/kc/mod_list.cc: fixed rom image, this module is actually 16k and includes a new system rom! * src/kc/memory2.cc, src/kc/pio2.cc: enables memory bank switching 2003-12-24 Torsten Paul * src/ui/gtk/ui_gtk.cc: replaced deprecated gtk_window_set_policy() with gtk_window_set_resizable() 2003-11-23 Torsten Paul * src/kc/tape.cc (do_play_basicode): added play routine for basicode files * include/libtape/kct.h: support for basicode files * src/fileio/load_BASICODE.c (loader_BASICODE_load): added loader for basicode files (in ASCII format) 2003-11-20 Torsten Paul * released version 0.3.7 * src/fileio/load_SSS.c (loader_SSS_check): relaxed the file checking again; now checks if (basic_length_specified_in_file + 129) < size_of_file; previous value was +127 which was too small for some file floating around * src/libtape/kct.cc (list): change stream modifiers to be gcc3 compatible 2003-11-16 Torsten Paul * src/ui/gtk/tape.cc (init): enabled combo box for tape files; now only files that are readable will be included in the combo box 2003-10-15 Torsten Paul * src/kc/memory6.cc (Memory6), src/ui/gtk/tape.cc (init), src/ui/gtk/disk.cc (init), src/ui/gtk/ui_gtk.cc (property_change): fix memory leaks 2003-10-12 Torsten Paul * src/ui/gtk/disk.cc, src/ui/gtk/copying.cc: fixed memory allocation problems pointed out by valgrind * include/kc/keyb3k.h: added BRK, STOP, CLR and _ keys for use with the keyboard window * src/kc/keyb3.cc: fixes for shift handling 2003-10-05 Torsten Paul * redirect output streams and pass -mwindows to gcc to prevent the dos box from popping up under windows * completed kc 85 keyboard window * added generation of windows icon files * generate KCemuSetup.iss from KCemuSetup.iss.in 2003-10-03 Torsten Paul * added KCemuSetup.iss for use with Inno Setup (Windows Setup compiler); contributed by Alexander Schön * src/kc/mod_rom.cc, src/kc/mod_rom1.cc, src/kc/mod_192k.cc: fix open() mode to use binary I/O * src/sys/mingw/sys/sys_gettimeofday.c: fix microsecond return value to actually return microseconds instead of milliseconds * src/sys/mingw/sys/sys_usleep.c: implemented using Sleep() from the Win32 API 2003-07-30 Torsten Paul * src/ui/gtk/debug.cc: fix font usage in debug window * include/ui/copying.h: removed * src/kc/disk.cc (detach): remove duplicated code * src/kc/kc.cc: use gettext for help texts (before call to bind_textdomain_codeset() in ui initialization); splitted license string for commandline and ui usage; added functions to return translated license strings: kc_get_license(), kc_get_warranty(), kc_get_license_trailer() * src/ui/gtk/ui_gtk.cc (init): call bind_textdomain_codeset() to force UTF-8 encoding which is required by the new GTK * po/de.po: changed encoding to UTF-8 2003-06-29 Torsten Paul * integrated emulation of the Polycomputer 880 from development branch into trunk 2003-06-22 Torsten Paul * src/kc/ctc.cc (c_out): added a fixed offset for callback timing added for the poly880 emulation; without offset the CTC caused NMI is triggered one opcode too early 2003-06-18 Torsten Paul * src/kc/pio.cc (out_CTRL): fix debug output 2003-06-17 Torsten Paul * src/kc/keyb1.cc: removed #define KEYB_DEBUG and changed debug code to use libdbg (keyPressed): ignore key press events for keys that are already pressed (e.g. generated by the GTK keyboard code) 2003-06-16 Torsten Paul * configure.in: manually disable AM_PATH_GTK_2_0 check if gtk-check is disabled and use GTK_CFLAGS/GTK_LIBS environment variables; added command line flag --enable-ms-bitfields to enable/disable check for -mms-bitfields gcc flag (MinGW only) 2003-06-15 Torsten Paul * configure.in: replace MD5Init with FLAC__file_decoder_process_metadata in check for libFLAC; this function is present in the 1.0.x FLAC library but not in 1.1.x * include/ui/gtk/tape.h: removed unused enum 2003-06-13 Torsten Paul * include/ui/gtk/tape.h: #undef TAPE_REWIND -- it's defined under MinGW; need to check where this comes from * src/ui/gtk/ui_gtk.cc: removed #include and #include (key_press_release): replaced XKeysymToKeycode() with event->hardware_keycode 2003-06-12 Torsten Paul * configure.in: add AC_DEFINE for USE_INCLUDED_GETOPT * src/libtape/kctape.cc (open_output): open file in binary mode; check which getopt.h to include * src/ui/gtk/ui_gtk.cc: replaced usleep() with g_usleep() * include/sys/sysdep.h, src/sys/linux/sys_gettimeofday.c, src/sys/beos/sys_gettimeofday.c, src/sys/mingw/sys_gettimeofday.c: added sys_gettimeofday() which is a wrapper for gettimeofday() for linux and beos, the mingw function was provided by Alexander Schn * src/ui/gtk/ui_gtk.cc: removed references to gettimeofday() and introduced system dependend function sys_gettimeofday() 2003-06-11 Torsten Paul * src/kc/disk.cc: moved the command call "ui-disk-update-MSG" to attach() and detach(); now initially attached disk images (via command line or init file) are shown in the user interface; allow attaching of disk images from DATADIR without path * include/kc/keys.h: added KC_KEY_SPACE, KC_KEY_RESET and KC_KEY_NMI * include/ui/gtk/keyboard.h, src/ui/gtk/keyboard.cc: complete rewrite based on images for the keyboard display 2003-06-08 Torsten Paul * src/ui/gtk/gtkledline.c: removed unused code * src/libdisk/disk.c: set passed reference to pointer to NULL on failure in libdisk_open() 2003-06-07 Torsten Paul * upgrade to GTK+-2.2.1 * src/ui/gtk/tape.cc, src/ui/gtk/ui_gtk0.cc, src/ui/gtk/ui_gtk1.cc, src/ui/gtk/ui_gtk8.cc, src/ui/gtk/keyboard.cc: fix color specification; pango doesn't like the form "rgb:00/a0/ff" * src/ui/gtk/copying.cc: gtk_text_new() is only available if GTK_ENABLE_BROKEN is defined :-( and this is obviously no joke; removed the text widget and replaced it with two labels in a scrolled window which works quite well; need to check font allocation by libpango as it currently uses hardcoded fontfamily "Courier" * src/ui/gtk/debug.cc: fixed compile problem with overloading do_goto(); can't use style->font anymore -- need new method to set font * src/ui/gtk/disk.cc, src/ui/gtk/tape.cc: char * -> const gchar * * src/ui/gtk/ui_gtk.cc, src/ui/gtk/disk.cc, src/ui/gtk/tape.cc, src/ui/gtk/tapeadd.cc, src/ui/gtk/about.cc, src/ui/gtk/color.cc, src/ui/gtk/module.cc, src/ui/gtk/keyboard.cc, src/ui/gtk/copying.cc, src/ui/gtk/hedit.cc: GTK_WINDOW_DIALOG -> GTK_WINDOW_TOPLEVEL * src/ui/gtk/ui_gtk.cc: removed usage of gdk_key_repeat_disable() and gdk_key_repeat_restore(); both are not available in GTK-2.0 * src/ui/gtk/ui_gtk.cc: changed XA_STRING to GDK_TARGET_STRING * src/ui/gtk/tape.cc: disabled combo box; signal handling is too buggy * src/ui/gtk/about.cc: added KCemu logo 2003-06-06 Torsten Paul * include/kc/memory.h, src/kc/memory.cc: expose the reload_mem_ptr() function for public access (needed by the 192k module) * include/kc/mod_192k.h, src/kc/mod_192k.cc: first implementation of the 192 KByte RAM/EPROM module for kc85/1; still needs some changes to work for kc87 (ROMDI handling) 2003-06-03 Torsten Paul * src/kc/mod_v24.cc: fix initialization 2003-04-26 Torsten Paul * src/kc/keyb*.cc: fixed keyboard reset * include/kc/vis.h, src/kc/vis.cc, src/ui/generic/ui_9.cc: added function to check char set changes so when loading a new charset from disk the screen is updated correctly and not only after redrawing characters * src/kc/gdc.cc: added even more debug output * include/kc/cb_list.h, src/kc/cb_list.cc, src/kc/z80.cc: added function to remove queued callback requests * src/kc/pio.cc: fixed callback handling (missing initialization of callback return variable) * src/fileio/load_TAPE.c: relaxed file type check, the filename is not checked for valid chars anymore; this now allows loading of most .KCC files 2003-04-21 Torsten Paul * include/kc/mod_js.h, src/kc/mod_js.cc: joystick module M008 for kc 85/2-4 using linux joystick interface * src/kc/mod_list.cc: fix inclusion of the v24 (wrong #define); added joystick module 2003-04-18 Torsten Paul * src/ui/gtk/ui_gtk9.cc, src/ui/sdl/ui_sdl9.cc: fix cpu timing (clock frequency is 3,75MHz) * src/ui/generic/ui_9.cc: fix display resolutions for screen modes 3 and 5 * src/kc/vis.cc: implemented read access to char data (port 9ch); fixes text output in graphics mode 2003-04-03 Torsten Paul * src/ui/generic/ui_8.cc: honour clear_cache flag * src/ui/generic/ui_3.cc: honour clear_cache flag * src/ui/generic/ui_0.cc: honour clear_cache flag in GDC update function * src/ui/gtk/ui_gtk8.cc: call generic_update() with clear_cache flag * src/ui/gtk/ui_gtk.cc: render bitmap when calling gtk_update() with the full_update flag set; fixes display update problems when changing the display scaling 2003-04-01 Torsten Paul * some changes to allow compilation in the MinGW/MSYS environment * include/ui/sdlmtk/*, src/ui/sdlmtk/*: small toolkit for a simple libSDL based user interface * src/libaudio/load_oss.c: made optional, added check for necessary headerfile to configure.in * src/kc/kc.cc: added command line switch for showing a verbose listing of available emulations * src/kc/keyb0.cc: latch key value only at start of keyboard scan to prevent missing recognition of the shift keys * src/kc/mod_rtc.cc: use sys_localtime() to fetch time * src/kc/rc.cc: load rc-file from current working directory too (order is $HOME/.kcemurc, $cwd/.kcemurc, DATADIR/.kcemurc) * src/kc/wav.cc: define M_PI if not already defined 2003-03-27 Torsten Paul * src/kc/kc.cc, src/kc/mod_list.cc: added command line switch to set/add modules at startup 2003-03-26 Torsten Paul * src/ui/gtk/ui_gtk.cc, src/kc/mod_ramf.cc, src/kc/rc.cc: don't use environment variable for home directory but overwritable global variable kcemu_homedir; src/libdbg/dbg.cc will still use the environment * src/kc/kc.cc: added command line switches for fullscreen mode and overwriting the home directory 2003-03-23 Torsten Paul * src/ui/sdl/ui_sdl.cc: hide cursor on key press and show it on mouse move events * src/sys/*/sys_localtime.c: added system dependend call to retrieve the local time of the system (for the RTC module) * src/kc/z80.cc: removed get_time() * upgraded to automake 1.6, autoconf 2.57, gettext 0.10.40 2003-03-12 Torsten Paul * src/ui/generic/ui_0.cc: use get_char_rom() instead of the hard coded char set from font0.h * src/kc/memory*.[h,cc]: changed getIRM() to get_irm() and added get_char_rom() 2003-03-10 Torsten Paul * src/ui/generic/ui_9.cc: change window size for hires modes instead of crippling the characters to 4x8 pixels 2003-03-08 Torsten Paul * include/kc/gdc.h, src/kc/gdc.cc: added function to emulate the vertical retrace bit of the control register -- needed by the Z1013 CP/M to prevent the status line from flickering * include/kc/mod_rtc.h, src/kc/mod_rtc.cc: minimal RTC support to allow date/time display for the Z1013 CP/M; the values are read directly from the system clock and setting the RTC is not yet supported * src/kc/mod_list.cc, include/ui/gtk/module.h, src/ui/gtk/module.cc: let the Z1013 have 8 module slots * src/kc/fdc_cmd.cc: return almost correct result values for FORMAT_A_TRACK; sector number is automatically incremented but for now the returned sector is the one when starting the command; set data transfer flag because the FDC needs to receive the sector information after the FORMAT_A_TRACK command execution started 2003-03-07 Torsten Paul * include/kc/gdc.h, src/kc/gdc.cc: support all four subscreens that are possible in textmode; fixes the fancy scrolling routine of the Z1013 CP/M which uses 3 subscreens -- two for screen scrolling without the need to actually copy any data and one for the status line 2003-03-03 Torsten Paul * include/kc/keyb0k.h: added 8x8 keyboard matrix for A2 system rom 2003-02-26 Torsten Paul * src/kc/fdc.cc: splitted i/o interface into separate classes for the different systems 2003-02-20 Torsten Paul * include/kc/pio.h: changed PIOCallbackInterface to allow return values for the input callbacks 2003-02-16 Torsten Paul * src/kc/disk.cc: check if FDC is available * src/kc/mod_4131.cc: added missing call to set_valid() * src/libtape/kctape.cc: fix handling of readonly files * src/libtape/kct.cc: fix file creation with gcc-3.2 * src/kc/mod_rom1.cc: call unregister_memory() after unregister_romdi_handler() in destructor 2003-02-15 Torsten Paul * src/kc/fdc.cc: added set_terminal_count() function; currently used only by the KC87 emulation; terminal count doesn't clear the result data 2003-02-12 Torsten Paul * src/kc/fdc_cmd.cc: retract head to track 0 and set SEEK END; need by CPM-Z9 boot routine * src/kc/mod_cpm.cc: added missing call to set_valid() 2003-02-08 Torsten Paul * src/kc/tape.cc: added autostart for BASIC programs in KC85/1 and KC87 mode (BASIC must be initialized first!); autostart routine is described in MP 3/89, page 86 ("Basic-Run im OS fr die KC87-Familie") 2003-02-02 Torsten Paul * include/kc/mod_ramf.h, src/kc/mod_ramf.cc: 256k ram floppy for z1013; it's possible to use two modules of this type at the same time, the first will get i/o port 98h, the second i/o port 58h; initial content can be loaded from files in headersave format that live in the directories ~/.z1013-ramfloppy_98 and ~/.z1013-ramfloppy_58 respectivly * src/kc/memory.cc, src/kc/tape.cc: added hack to load z1013 files (in headersave format) * src/fileio/load_HS.c: loader for z1013 files in headersave format * src/kc/mod_list.cc: check if module insert is possible by checking the valid flag that must be set by the clone constructor 2003-02-01 Torsten Paul * src/kc/kc.cc: added variant kc87.20 * src/kc/tape.cc: add files with unknown type as KCT_TYPE_BIN, use real filename otherwise not just "new file" * src/libtape/kctape.cc: use new type KCT_TYPE_BIN when adding raw files (via switch -A) * include/libtape/kct.h, src/libtape/kct.cc: added type KCT_TYPE_BIN that will be used for the new emulated systems until the tape i/o really supports those systems 2003-01-29 Torsten Paul * added first pieces of a z1013 emulation; base system is working but there is no tape emulation yet 2003-01-26 Torsten Paul * src/kc/mod_list.cc: added plotter module for kc85/1 (the ROM is identical with the internal ROM BASIC of the KC87.21) * src/kc/kc.cc: added command line flag to attach a disk file on startup 2003-01-20 Torsten Paul * src/libtape/kct.cc: fix file creation bug caused by the changes for gcc-3.x; now uses access() to check for exising files 2003-01-19 Torsten Paul * include/kc/mod_cpm.h, src/kc/mod_cpm.cc: emulation of the floppy module for the KC87 CP/M system CPM-Z9 * include/kc/mod_r64.h, src/kc/mod_r64.cc: emulation of the 64k RAM module required by the KC87 CP/M system CPM-Z9 * include/kc/mod_4131.h, src/kc/mod_4131.cc: started emulation of the plotter XY4131 * src/fileio/load_BIN.c: file loader for tape files with 130 byte block size (as written by the kc tape routines including block number and checksum) * src/kc/mod_rom1.cc: fix memory region registration to be read only; now it's really a rom module * src/kc/memory1.cc, src/kc/memory7.cc: changed priority of IRM memory from 128 to 1 * include/kc/memory7.h, src/kc/memory7.cc: added function to switch of the internal basic and system roms (ROMDI) * include/kc/memory1.h, src/kc/memory1.cc: added function to switch of the internal system rom (ROMDI) * include/kc/romdi.h: definitions for the ROMDI handling * include/kc/module.h: renamed in() and out() to m_in() and m_out() to allow usage of both ModuleInterface and PortInterface 2003-01-15 Torsten Paul * src/kc/mod_list.cc: insert Floppy Disk Basis Module only when emulating kc85/2-4 2003-01-03 Torsten Paul * src/kc/tape.cc: add extra delay between data blocks if the file type is KCT_TYPE_LIST; this is needed to give the basic interpreter enough time to tokenize the lines while reading from the tape with LOAD#1"FILENAME" * include/fileio/load.h, include/libtape/kct.h: renamed the file type MINTEX to DATA because the signature 0xd4, 0xd4, 0xd4 is produced by the data save command CSAVE*"FILENAME";ARRAYNAME, added file type LIST with signature 0xd5, 0xd5, 0xd5 that is generated by LIST#1"FILENAME" 2002-12-22 Torsten Paul * src/kc/memory9.cc: initialize memory configuration on system reset * src/kc/gdc.cc: initialize chip emulation on system reset * src/kc/vis.cc: initialize chip emulation on system reset 2002-12-21 Torsten Paul * added a5105 systemdisk 2002-12-20 Torsten Paul * src/kc/memory9.cc: implemented core dump function 2002-12-15 Torsten Paul * src/kc/tape.cc: workaround for memstream problems in the bic/a5105 functions * src/kc/gdc.cc: fix typo in read-write-modify emulation for the WDAT command * src/ui/generic/ui_9.cc: fixed caching bug (value of the _dirty array was ignored) * include/kc/vis.h, src/kc/vis.cc, include/ui/generic/ui_9.h, src/ui/generic/ui_9.cc: added emulation of screen border 2002-12-08 Torsten Paul * include/kc/kc.h, src/kc/kc.cc, src/kc/memory9.cc: added variant 'bic' and 'k1505' that emulate only the base device and variant 'a5105' that includes the emulation of the disk device 2002-11-30 Torsten Paul * src/libaudio/load_*.c: display version of the used sound library if available * src/libaudio/load_als.c: audio loader for ALSA line input; not enabled yet * configure.in: added check for libsndfile 1.0.x * added support for libsndfile 1.0.x which has a different api compared with version 0.0.x * src/libdisk/tdtodump.c: simple program to convert TeleDisk images to uncompressed disk dumps * include/libdisk/teledisk.h, src/libdisk/teledisk.c, src/libdisk/load_td0.c: added loader for disk images produced by the Sydex TeleDisk program (only normal compression for now) 2002-11-22 Torsten Paul * src/ui/gtk/module.cc: show the toggle button for the color expansion for all kc85/1 and kc87 variants but enable it only for some of those * src/kc/mod_list.cc: differentiate kc85/1 and kc87 variants with and without the color expansion; this should move to a more appropriate place 2002-11-21 Torsten Paul * src/kc/tape.cc (do_play): tape now functional with the new memstream; still needs some workarounds because of problems with the memstream class 2002-11-20 Torsten Paul * lots of compile fixes for g++-3.2; updated names of include files; removed default parameter values from some functions in the *.cc files; replaced the deprecated strstream * src/kc/kc.cc (set_kc_type): added the notion of computer variants to allow to differentiate between e.g. the kc87.11 and kc87.21 model 2002-11-19 Torsten Paul * src/kc/mod_rom1.cc (ModuleROM1): added missing initialization; fixes crash on exit * src/libtape/kct.cc: using memstream now * include/kc/memstream.h: new memory based input/output stream working on a byte array; can't use istringstream to replace istrstream because it truncates on '\0' 2002-11-17 Torsten Paul * ROM/os____f0.87b, basic_c0.87b: dumped system and basic rom of a kc87.21; both roms are different from the kc87.11 * src/kc/memory1.cc (dumpCore): implemented coredump function * src/kc/memory7.cc (dumpCore): implemented coredump function 2002-11-07 Torsten Paul * src/kc/memory1.cc (reset), src/kc/memory7.cc (reset): don't call scratch_mem() for the first ram block at address 0000h this breaks the initialization -- how this is working in the real machine is quite obscure; fixes MAZOGS * src/kc/ctc1.cc (irq_2): output pin of timer channel 2 is connected to channel 3 trigger input pin; fixes system time 2002-11-04 Torsten Paul * include/z80core/z80.h (LSB_FIRST): hardcode LSB_FIRST for the z80 core; needs an endian check in configure * src/ui/generic/ui_9.cc (generic_update_text): added display cache for text mode * src/ui/gtk/ui_gtk.cc: fixed the hack with hard coded dirty buffer size * src/ui/generic/ui_9.cc (generic_update): emulate text screen modes 0,1,8,9; the modes with 80 chars per line are emulated by an ugly hack that simply shrinks the character width * src/kc/gdc.cc: startet to implement READ-MODIFY-WRITE memory access using the mask register 2002-11-03 Torsten Paul * src/cmd/dbg.cc: added command reload-debug-config to reload the debug config * include/libdbg/dbg.h, src/libdbg/dbg.cc: added function to reload the config file while the application is running 2002-11-02 Torsten Paul * src/ui/generic/ui_9.cc (generic_update): added split screen emulation for mixed mode 2002-10-31 Torsten Paul * released version 0.3.6 2002-10-16 Torsten Paul * src/kc/z80.cc: timer is not available for all computer types so don't try to start it if it's not initialized 2002-10-08 Torsten Paul * src/ui/gtk/module.cc: made special entry for the kc85/1 color expansion module as this is not a real module but an internal card * src/kc/mod_list.cc (insert): allow the entry to be NULL; this will remove a module that may be present in the given slot 2002-10-06 Torsten Paul * added kc85/1 rom modules from www.sax.de/~zander: IDAS, BITEX, EDAS, ZSID, R80 and ZM30; thanks to Ulrich Zander * src/ui/generic/ui_1.cc: added emulation of the flash bit; finally makes the cursor visible in kc87 mode * include/kc/timer3.h, src/kc/timer3.cc: new Timer implementation for kc85/2-4; this is a copy of the old timer.h/timer.cc * include/kc/timer1.h, src/kc/timer1.cc: new Timer implementation for kc85/1, kc87; this is needed to emulate the flashing cursor * include/kc/timer.h, src/kc/timer.cc: made class Timer abstract * src/ui/gtk/module.cc: show different module slot layout when emulating a kc85/1 or kc87 * include/kc/mod_rom1.h, src/kc/mod_rom1.cc: rom module for the kc85/1 series * include/kc/memory7.h, src/kc/memory7.h: new files for the kc87 memory layout including basic rom * include/kc/memory1.h, src/kc/memory1.h: removed basic rom as the kc85/1 doesn't have it built in * src/ui/generic/ui_1.cc: added emulation of the screen border and the 20 line display mode 2002-09-11 Torsten Paul * src/fileio/load_TAPE.c (loader_TAPE_load): fixed size calculation * src/kc/tape.cc (remove): refresh display after remove (add): show message in statusline after adding files; also displays the loader which was used to load this file * include/fileio/load.h, include/fileio/loadP.h: added filetype to fileio_prop_t and get_type() to all the loaders 2002-09-07 Torsten Paul * src/kc/tape.cc (export_wav): export tape files as .WAV (export_tap): use fileio_save_tap() to export .TAP files 2002-09-04 Torsten Paul * src/fileio/save_WAV.c, src/fileio/kc2wav.c: convert file to .WAV format * src/fileio/save_TAP.c, src/fileio/kc2tap.c: convert file to .TAP format * include/kc/tape.h (class Tape): renamed extract() to export_tap() and added export_wav() 2002-09-02 Torsten Paul * src/kc/z80_fdc.cc (reset): clear callback list on reset * include/kc/floppy.h, src/kc/floppy.cc: changed return type for attach() to signal failures 2002-08-31 Torsten Paul * src/ui/gtk/ui_gtk.cc: added menu entry to disable the emulation speed limit * src/kc/memory4.cc: changed memory layout for the a800-bfff region; quite obscure but (partly) verified against a real KC; fixes FRACTAL4 * src/kc/wav.cc (do_play): do some padding on the end of the audio input to compensate the delay of the digital filter 2002-08-26 Torsten Paul * src/ui/gtk/ui_gtk1.cc, src/ui/gtk/ui_gtk3.cc, src/ui/gtk/ui_gtk4.cc: removed unnecessary include statements 2002-08-25 Torsten Paul * src/ui/generic/scanline.cc: support for the color scrolling effect moved out of the KC 85/4 display code; the KC 85/3 emulation now uses this code too * include/ui/ui.h (class UI): removed obsolete function memWrite() * src/ui/gtk/ui_gtk.cc (property_change): check values of the event structure * src/ui/generic/ui_8.cc (get_real_height, get_real_width): use width and height which are divideable by 8 for easier display caching * src/ui/gtk/ui_gtk3.cc, src/ui/gtk/ui_gtk4.cc: moved previously static helper function hsv_to_gdk_color() to ui_gtk.cc * src/ui/gtk/ui_gtk.cc (key_press_release): map key pad numbers and some of the special keys * include/ui/gtk/cmd.h, src/ui/gtk/cmd.cc: moved previously static helper functions from header file to cmd.cc * src/libaudio/load.c: added library to load audio files (wav, mp3, flac, ...) * src/kc/kc.cc: added --version command line flag which shows the kcemu version and the configuration of some of the libraries 2002-08-21 Torsten Paul * src/kc/rc.cc (done): free allocated memory * include/kc/rc.h (class RC): made destructor virtual and moved implementation to .cc file, implemented deallocation * fixed lots of memory allocation problems using valgrind, (a great debugging/profiling tool by Julian Seward, http://developer.kde.org/~sewardj) * src/kc/memory.cc: added missing calls delete * src/kc/memory4.cc: added missing call delete * include/kc/cb.h (class Callback): fixed call to delete * src/kc/mod_rom.cc (ModuleROM): fixed initialization * src/kc/mod_ram.cc (ModuleRAM): fixed initialization * src/kc/mod_ram1.cc (ModuleRAM1): fixed initialization * src/kc/mod_ram8.cc (ModuleRAM8): fixed initialization * src/kc/mod_64k.cc (Module64k): fixed initialization * src/kc/keyb3.cc (init): fixed initialization * src/ui/gtk/disk.cc (init): fixed call to delete * src/libdbg/dbg.cc (DBG_class): fixed call to delete * src/kc/rc.cc: fixed calls to delete * src/kc/z80.cc (Z80): fixed initialization * src/kc/mod_list.cc (ModuleList): fixed calls to delete * src/kc/ic.cc (InterfaceCircuit): fixed initialization * src/ui/gtk/ui_gtk.cc (init): fixed initialization, fixed calls to delete * src/ui/gtk/ui_gtk4.cc (reset): fixed initialization 2002-07-05 Torsten Paul * cleaned up lots of warnings produced by -Wall; fixed some bugs that were pointed out by those warnings 2002-06-16 Torsten Paul * src/ui/gtk/ui_gtk.cc: removed profiling code 2002-06-15 Torsten Paul * src/ui/gtk/ui_gtk1.cc (update): fixed display caching bug (color change without value change didn't call the drawing routine) * src/kc/mod_ram1.cc (ModuleRAM1): initialize memory of a new module with random values instead of zero bytes * src/kc/kc.cc: removed obsolete port switch code * include/kc/ports1.h, include/kc/ports3.h, src/kc/ports1.cc, src/kc/ports3.cc: removed, they weren't used for some time because the port switch is now handled somewhere else * src/kc/ports4.cc: removed obsolete port switch code; removed references to CTC/PIO/MODULE; ports now initialized to 0xff instead of 0x00 * src/libtape/kctape.cc: rewrote the argument parsing to use getopt(); command line parameters are not fully compatible to the previous version * src/libtape/kct.cc (list): prevent division by zero when listing empty files (header_read): removed some error messages (that were going to stderr) * src/kc/debug.cc: added function to change the memory * src/kc/z80.cc (LdRZ80): now using a private emulation of the Z80 R register; the one in the Z80 emulation core isn't compatible with the way kcemu uses that core (fixes the missing monsters in JUNGLE) * src/kc/memory4.cc (enableIRM): handle text irm area at a800h when enabling/disabling the irm 2002-06-09 Torsten Paul * released version 0.3.5 2002-06-07 Torsten Paul * src/kc/kc.cc: added -8 to commandline help output * configure.in: added separate variable to enable sound; using HAVE_LIBSDL to enable sound doesn't work after adding SDL user interface code 2002-05-29 Torsten Paul * src/ui/gtk/tape.cc: added menu entry to rename files in the tape archive * include/libtape/kct.h, src/libtape/kct.cc: added method to rename files in the tape archive * src/kc/tape.cc (class CMD_tape_export): fixed return value checking when exporting files 2002-05-28 Torsten Paul * src/kc/tape.cc, src/ui/gtk/tapeadd.cc: handle duplicate file names when adding files to tape archives (resurrection of tapeadd.cc which wasn't used for some time) 2002-05-25 Torsten Paul * src/ui/gtk/tape.cc (tapeNext): changed tape delay from 5 to 10 seconds; this should be enough to allow the basic file loader to initialize basic and call CLOAD * src/libtape/kctape.cc (add_file), src/kc/tape.cc (add): fixed typo in file type handling which caused BASIC files to be added as COM files * src/fileio/load_AF.c (check_end): modified check for file end; basic files can be larger than 255 blocks so we can't check for the block number in this case; fixes loading bug for some files from www.kc85emu.de (e.g. Spiele1M.tap) 2002-04-02 Torsten Paul * include/ui/font1.h, src/ui/gtk/ui_gtk1.cc: changed font to include empty chars between 0h and 20h * include/ui/gtk/font1.h: moved to include/ui/font1.h, it's not only usable for gtk 2002-03-30 Torsten Paul * src/ui/gtk/ui_gtk3.cc: changed obsolete type byte to byte_t * include/ui/gtk/module.h, src/ui/gtk/module.cc: moved constructor and destructor out of the header file * src/kc/kc.cc, src/kc/sound3.cc: removed dependency on libSDL * included first code of a port to BeOS * kc/config.h is now included by kc/system.h, no need to include both in every file 2002-03-25 Torsten Paul * src/ui/gtk/ui_gtk.cc (ui_callback): fixed initialization problem in time frame calculation which was caused by limited value range * src/ui/gtk/ui_gtk.cc, src/ui/gtk/ui_gtk1.cc, src/ui/gtk/ui_gtk3.cc, src/ui/gtk/ui_gtk4.cc, src/ui/gtk/ui_gtk8.cc: moved callback implementation to base UI class as ui_callback() 2002-03-23 Torsten Paul * added emulation of the LC 80 computer 2002-03-08 Torsten Paul * include/kc/tape.h (class Tape): renamed ctcSignal() to tape_signal() and getDelay() to get_delay() * src/kc/pio1.h, src/kc/pio1.cc, src/kc/pio2.h, src/kc/pio2.cc, src/kc/pio3.h, src/kc/pio3.cc, src/kc/pio4.h, src/kc/pio4.cc: added tape_callback() * src/kc/tape.cc (set_tape_callback): set callback function for tape input * include/kc/tape.h: added interface TapeCallback with function tape_callback() that is called when the tape signal changes; this removes the dependency on pio.h 2002-02-15 Torsten Paul * src/libtape/kct.cc (write): refuse to add a file if the filename already exists in the archvie * src/libtape/kct.cc: removed obsolate write() method * src/libtape/kctape.cc: error handling if adding a file with a name that is already in the archive 2002-02-11 Torsten Paul * released version 0.3.4 * src/kc/kc.cc (main): set fileio mode when emulating kc85/1 * src/libtape/kctape.cc (main): added switch to add kc85/1 files; those need to be treated differently with respect to block numbering * include/fileio/load.h, src/fileio/load.c: added functions to get/set the kc-type for the fileio handling 2002-02-10 Torsten Paul * src/fileio/load_TAPE.c (loader_TAPE_load): don't use fill_header_COM() to rewrite the first tape block; this function doesn't handle the difference between kc85/1 and kc85/3 filenames which are padded with '\0' or ' ' respectively 2002-02-09 Torsten Paul * src/kc/kc.cc (main): fixed daisy chain for kc85/1 (tape was broken due to missing interrupts from the first pio) 2002-02-04 Torsten Paul * src/kc/kc.cc (license): changed startup banner, new command line switches to display license and warranty 2002-01-22 Torsten Paul * src/kc/sound.cc: simple sound emulation 2002-01-21 Torsten Paul * added commandline option to scale the display by factor 2, the rc file option is "Display Scale" 2002-01-20 Torsten Paul * changed interrupt handling for ctc and pio, daisy chain is now partially working (makes pharao playable, but still with display errors) 2002-01-19 Torsten Paul * src/kc/ports4.cc (change_0x84), src/kc/memory4.cc: implemented IRM switch 2002-01-18 Torsten Paul * src/kc/debug.cc (DebugZ80): fixed wrong formatting in memory dump 2002-01-09 Torsten Paul * src/ui/gtk/module.cc (init): moved floppy disk basis to be the topmost device in the module window * src/kc/mod_list.cc (ModuleList): fixed typo that prevented the module dialog to show busdrivers even in KC 85/3 and KC 85/4 mode * .kcemurc: system config file now has only config option "Default KC Model" set to 4 * src/kc/ctc3.cc (irq_2): config option "Full Flash Support" is now on by default * src/ui/gtk/ui_gtk3.cc, src/ui/gtk/ui_gtk4.cc: reset was called twice because the ui class registered itself two times via z80->register_ic() - fixes flash bug after reset in KC 85/4 mode 2002-01-08 Torsten Paul * src/ui/gtk/ui_gtk4.cc: changed the flash handling (display of the diamonds in digger seems to be stable now if full flash support is off) * src/fileio/load_UNKNOWN.c (loader_UNKNOWN_load): set start_addr to 0xffff if no real start address is found, set type to COM if load and/or start address found * src/kc/tape.cc (stop): don't change the power signal when stopping the tape * src/kc/kc.cc (main): fixed typo in statement to enable tape power for KC 85/1 and KC 87 2002-01-07 Torsten Paul * src/libdisk/load_22dsk.c: added (readonly) support for disk images that are compressed with gzip, filename handling needs some changes though * src/ui/gtk/disk.cc: activated 3rd disk image (tools.dump) as predefined image * added disk-image tools.dump which contains some importent CP/M programs (most are from the CP/M starter kit from the KC-Club: www.iee.et.tu-dresden.de/~kc-club/DOWNLOAD/DISK001) * src/kc/fdc_cmd.cc (FDC_CMD_WRITE_DATA::execute): fixed missing call to floppy device selection 2002-01-06 Torsten Paul * released version 0.3.3 * src/libdisk/load_22dsk.c (loader_22dsk_write_sector): added write support * src/libdisk/load_cdm.c (loader_cdm_write_sector): added write support * src/ui/gtk/disk.cc: show disks that are installed by default as combobox entries 2002-01-05 Torsten Paul * src/kc/floppy.cc: fixed crash when the emulator tried to access a floppy device with no attached floppy * src/ui/gtk/ui_gtk*.cc: added/changed status info showing the frames per second * src/ui/gtk/tape.cc (init): don't set empty popup on tape combobox * Makefile.am: added the debian package control files to the source distribution * src/libdisk/load_dir.c: first working disk emulation for unix directories (at least if pointed to directories with reasonable content - will most likely crash on directories with many or big files!) * src/kc/fdc_cmd.cc (read_byte): fixed wrong call to fetch_next_sector() which came one byte too early 2002-01-03 Torsten Paul * src/libdisk/load_cdm.c: handles disk format used by the yaze CP/M emulator and its disk handling program cdm (for now only disks created with the cdm command "create disk.img 819200 -b1024 -d127 -o4 -s5" are supported - this is the same format as the CAOS disk that ships with the D004 floppy system) * src/libdisk/load_22dsk.c: handles disk dumps done with the 22DISK tool by Sydex * src/libdisk/load_dir.c: emulate unix directories as CP/M disk * src/libdisk/disk.c: moved the file I/O for floppy disks into a separate library * src/kc/ctc.cc (trigger): don't run interrupt handler if interrupts are not enabled! this seems to fix the MicroDOS boot hang 2002-01-02 Torsten Paul * src/kc/kc.cc: added kc87 mode (equals kc85/1 mode with color expansion installed), color expansion doesn't show up in the module list anymore * src/ui/gtk/module.cc: module user interface only displays modules for the running computer type * include/kc/mod_list.h (class ModuleList): added type field for modules that specifies for which computer type the module is intended for * test/kc/t_cb_list.cc, test/kc/t_ctc.cc: first unit tests based on Cppunit * src/ui/gtk/disk.cc: user interface now somewhat functional - initializastion not correct if disk-images are attached via .kcemurc 2002-01-01 Torsten Paul * src/kc/fdc_cmd.cc: enabled write access * src/kc/fdc.cc: now emulate all four floppies and allows initialization in .kcemurc * src/kc/floppy.cc (attach): fixed missing size calculation of the offset table when attaching CDM floppies (read_offsets): moved sector offset table into the Floppy class 2001-12-31 Torsten Paul * src/kc/ctc.cc: main ctc code is now processor independent and can be used for the base and the floppy system / handling of counter/timer mode changed to be more general but needs some test and optimization eventually * src/kc/z80_fdc.cc, src/kc/ctc_fdc.cc: interrupt handling working partially (MicroDOS system clock is running) but there seems to be a ctc related problem that locks up the MicroDOS system on boot * include/ui/ui.h: removed reference to z80.h 2001-12-30 Torsten Paul * include/kc/z80_fdc.h, src/kc/z80_fdc.cc: moved the floppy systems cpu emulation into separate files * src/kc/z80.cc: lots of dead code removed * test/kc/t_cb_list_1.cc, test/kc/t_cb_list_2.cc: added some testcases for the callback code * include/kc/cb_list.h, src/kc/cb_list.cc: moved the callback handling out of z80.cc so it can also be used for the floppy processor emulation 2001-12-30 Torsten Paul * include/kc/ctc*.h, src/kc/ctc*.cc: added layer between core CTC emulation and system (processor) specific calls to support the CTC usage in the floppy system emulation 2001-12-29 Torsten Paul * compile fixes for gcc-3.0.x * prepared debian binary release * added manpages as required by debian policy 2001-12-28 Torsten Paul * released version 0.3.2 on SourceForge.net 2001-06-17 Torsten Paul * registred SourceForge.net project 2001-01-22 Torsten Paul * include/kc/ctc.h, src/kc/ctc.cc: added CTCCallbackInterface that allows other classes to register some interresting events of the emulated CTC (Timer Value change, Start, Stop, Zero Counter) 2001-01-20 Torsten Paul * include/kc/pio.h (class PIOCallbackInterface): output callbacks now include the value as argument 2001-01-15 Torsten Paul * src/kc/memory4.cc (Memory4): load RAM-File on init (Resource: "Load On Init"), hex number starting with 0x can specify load addres; will only work with a patched System ROM that doesn't zero all available memory 2000-07-12 Torsten Paul * src/fileio/load_SSS.c: new loader for raw BASIC files (without header bytes and filename) 2000-07-10 Torsten Paul * src/ui/gtk/tape.cc: Translation of GtkItemFactoryEntries and the associated text (without the '_' markers) need to be the same or else the retrieving of the widgets will fail!!! * src/kc/tape.cc: fixed saving to tape 2000-07-08 Torsten Paul * src/fileio/load.c: added get_name() function to the loader interface * src/kc/ctc1.cc, src/ui/gtk/ui_gtk1.cc, src/kc/pio3.cc: changed debug code to use libdbg * src/fileio/load_BASIC.c (loader_BASIC_load), src/fileio/load_TAPE.c (loader_TAPE_load): fixed loaders to correctly store the file blocks with the included block number 2000-07-06 Torsten Paul * src/libtape/kctape.cc (add_file): changed file loading to use the fileio library 2000-07-02 Torsten Paul * src/ui/gtk/ui_gtk.cc (create_main_window): didn't get property change events anymore, maybe gtk_widget_set_events() behaves now differently or the default event mask is different? - fixed 2000-07-01 Torsten Paul * src/ui/gtk/module.cc (init): fixed another initialization bug 2000-06-28 Torsten Paul * src/kc/mod_rom.cc (ModuleROM): fixed initialization bug that caused segfaults when leaving the emulator KCemu-0.5.1/test/0000755001050700006200000000000011412404774013170 5ustar glaubitzfbedvKCemu-0.5.1/test/Makefile.am0000644001050700006200000000013211340261611015207 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in SUBDIRS = kc libaudio libgtkex KCemu-0.5.1/test/kc/0000755001050700006200000000000011412404774013565 5ustar glaubitzfbedvKCemu-0.5.1/test/kc/Makefile.am0000644001050700006200000000041311345001576015615 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in SUBDIRS = prefs INCLUDES = -I../../include $(CPPUNIT_CFLAGS) if HAVE_CPPUNIT TESTS = t_memstream check_PROGRAMS = $(TESTS) t_memstream_SOURCES = t_memstream.cc t_memstream_LDADD = $(CPPUNIT_LIBS) endif KCemu-0.5.1/test/kc/prefs/0000755001050700006200000000000011412404774014704 5ustar glaubitzfbedvKCemu-0.5.1/test/kc/prefs/t_prefs.cc0000644001050700006200000000300611345001576016652 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "sys/sysdep.h" #include "kc/prefs/prefs.h" #include "libdbg/dbg.h" using namespace std; int main(void) { string home = sys_gethome(); string sys_config_dir = home + "/sys"; string user_config_dir = home + "/config"; string user_profiles_dir = home + "/profiles"; DBGI()->add_path("KCemu/Preferences", true); Preferences::init(sys_config_dir.c_str(), user_config_dir.c_str(), user_profiles_dir.c_str()); Preferences::instance()->set_current_profile("kc85-4", 0); Profile *p = Preferences::instance()->find_profile("kc85-4"); if (p == NULL) return 1; p->set_int_value("test", 1); Preferences::instance()->save(); return 0; } KCemu-0.5.1/test/kc/prefs/Makefile.am0000644001050700006200000000077611340261611016741 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in TESTS = t_prefs check_PROGRAMS = $(TESTS) INCLUDES = -I../../../include $(CPPUNIT_CFLAGS) LIBS = $(GTK_LIBS) if TARGET_LINUX SYSLIB=../../../src/sys/linux/libsys_linux.a endif if TARGET_FREEBSD SYSLIB=../../../src/sys/linux/libsys_linux.a endif if TARGET_MINGW SYSLIB=../../../src/sys/mingw/libsys_mingw.a endif t_prefs_SOURCES = t_prefs.cc t_prefs_LDADD = $(CPPUNIT_LIBS) ../../../src/libdbg/libdbg.a ../../../src/kc/prefs/libprefs.a $(SYSLIB) KCemu-0.5.1/test/kc/prefs/Makefile.in0000644001050700006200000004663711412404774016771 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ TESTS = t_prefs$(EXEEXT) check_PROGRAMS = $(am__EXEEXT_1) subdir = test/kc/prefs DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__EXEEXT_1 = t_prefs$(EXEEXT) am_t_prefs_OBJECTS = t_prefs.$(OBJEXT) t_prefs_OBJECTS = $(am_t_prefs_OBJECTS) t_prefs_DEPENDENCIES = ../../../src/libdbg/libdbg.a \ ../../../src/kc/prefs/libprefs.a $(SYSLIB) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(t_prefs_SOURCES) DIST_SOURCES = $(t_prefs_SOURCES) ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = $(GTK_LIBS) LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ INCLUDES = -I../../../include $(CPPUNIT_CFLAGS) @TARGET_FREEBSD_TRUE@SYSLIB = ../../../src/sys/linux/libsys_linux.a @TARGET_LINUX_TRUE@SYSLIB = ../../../src/sys/linux/libsys_linux.a @TARGET_MINGW_TRUE@SYSLIB = ../../../src/sys/mingw/libsys_mingw.a t_prefs_SOURCES = t_prefs.cc t_prefs_LDADD = $(CPPUNIT_LIBS) ../../../src/libdbg/libdbg.a ../../../src/kc/prefs/libprefs.a $(SYSLIB) all: all-am .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/kc/prefs/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/kc/prefs/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) t_prefs$(EXEEXT): $(t_prefs_OBJECTS) $(t_prefs_DEPENDENCIES) @rm -f t_prefs$(EXEEXT) $(CXXLINK) $(t_prefs_OBJECTS) $(t_prefs_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_prefs.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic ctags distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/test/kc/t_memstream.cc0000644001050700006200000001332211345001576016410 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include "kc/memstream.h" using namespace std; class MemStreamTest : public CppUnit::TestCase { private: iostream *stream; memstream *mstream; public: void setUp(); void tearDown(); void testRead(void); void testReadBinary(void); void testWrite(void); void testGCount(void); void testPeek(void); void testTellG(void); }; void MemStreamTest::setUp(void) { mstream = new memstream((unsigned char *)"test", 4); stream = mstream; } void MemStreamTest::tearDown(void) { delete stream; } void MemStreamTest::testRead(void) { int c; cout << "MemStreamTest::testRead()" << endl; CPPUNIT_ASSERT(mstream->size() == 4); c = stream->get(); CPPUNIT_ASSERT(c == 't'); c = stream->get(); CPPUNIT_ASSERT(c == 'e'); c = stream->get(); CPPUNIT_ASSERT(c == 's'); c = stream->get(); CPPUNIT_ASSERT(c == 't'); c = stream->get(); CPPUNIT_ASSERT(c == EOF); CPPUNIT_ASSERT(mstream->size() == 4); CPPUNIT_ASSERT(strcmp(mstream->str(), "test") == 0); } void MemStreamTest::testReadBinary(void) { int a, c; unsigned char buf[256]; cout << "MemStreamTest::testReadBinary()" << endl; for (a = 0;a < 256;a++) buf[a] = a; memstream *s = new memstream(buf, 256); for (a = 0;a < 256;a++) CPPUNIT_ASSERT(s->get() == a); CPPUNIT_ASSERT(s->get() == EOF); delete s; } void MemStreamTest::testWrite(void) { int c; cout << "MemStreamTest::testWrite()" << endl; CPPUNIT_ASSERT(mstream->size() == 4); *stream << (unsigned char)0 << (unsigned char)1 << "23" << endl; CPPUNIT_ASSERT(mstream->size() == 9); c = stream->get(); CPPUNIT_ASSERT(c == 't'); c = stream->get(); CPPUNIT_ASSERT(c == 'e'); c = stream->get(); CPPUNIT_ASSERT(c == 's'); c = stream->get(); CPPUNIT_ASSERT(c == 't'); c = stream->get(); CPPUNIT_ASSERT(c == '\0'); c = stream->get(); CPPUNIT_ASSERT(c == '\1'); c = stream->get(); CPPUNIT_ASSERT(c == '2'); c = stream->get(); CPPUNIT_ASSERT(c == '3'); c = stream->get(); CPPUNIT_ASSERT(c == '\n'); c = stream->get(); CPPUNIT_ASSERT(c == EOF); CPPUNIT_ASSERT(mstream->size() == 9); CPPUNIT_ASSERT(memcmp(mstream->str(), "test\000\00123\n", 9) == 0); } void MemStreamTest::testGCount(void) { cout << "MemStreamTest::testGCount()" << endl; cout << stream->gcount() << " "; cout << stream->get() << " "; cout << stream->gcount() << " "; cout << stream->get() << " "; cout << stream->gcount() << " "; cout << stream->get() << " "; cout << stream->gcount() << " "; cout << stream->get() << " "; cout << stream->gcount() << " "; cout << stream->get() << " "; cout << stream->gcount() << " "; cout << endl; } void MemStreamTest::testPeek(void) { cout << "MemStreamTest::testPeek()" << endl; CPPUNIT_ASSERT(stream->peek() == 't'); CPPUNIT_ASSERT(stream->peek() == 't'); CPPUNIT_ASSERT(stream->get() == 't'); CPPUNIT_ASSERT(stream->peek() == 'e'); CPPUNIT_ASSERT(stream->peek() == 'e'); CPPUNIT_ASSERT(stream->get() == 'e'); CPPUNIT_ASSERT(stream->peek() == 's'); CPPUNIT_ASSERT(stream->peek() == 's'); CPPUNIT_ASSERT(stream->get() == 's'); CPPUNIT_ASSERT(stream->peek() == 't'); CPPUNIT_ASSERT(stream->peek() == 't'); CPPUNIT_ASSERT(stream->get() == 't'); CPPUNIT_ASSERT(stream->peek() == EOF); CPPUNIT_ASSERT(stream->peek() == EOF); CPPUNIT_ASSERT(stream->get() == EOF); CPPUNIT_ASSERT(stream->peek() == EOF); CPPUNIT_ASSERT(stream->peek() == EOF); } void MemStreamTest::testTellG(void) { cout << "MemStreamTest::testTellG()" << endl; CPPUNIT_ASSERT(stream->tellg() == 0); CPPUNIT_ASSERT(stream->get() == 't'); CPPUNIT_ASSERT(stream->tellg() == 1); CPPUNIT_ASSERT(stream->get() == 'e'); CPPUNIT_ASSERT(stream->tellg() == 2); CPPUNIT_ASSERT(stream->get() == 's'); CPPUNIT_ASSERT(stream->tellg() == 3); CPPUNIT_ASSERT(stream->get() == 't'); CPPUNIT_ASSERT(stream->tellg() == 4); CPPUNIT_ASSERT(stream->get() == EOF); CPPUNIT_ASSERT(stream->tellg() == 4); } int main(void) { CppUnit::TestResult result; CppUnit::TextTestRunner runner; CppUnit::TestSuite *suite = new CppUnit::TestSuite(); suite->addTest(new CppUnit::TestCaller("testRead", &MemStreamTest::testRead)); suite->addTest(new CppUnit::TestCaller("testReadBinary", &MemStreamTest::testReadBinary)); suite->addTest(new CppUnit::TestCaller("testWrite", &MemStreamTest::testWrite)); suite->addTest(new CppUnit::TestCaller("testGCount", &MemStreamTest::testGCount)); suite->addTest(new CppUnit::TestCaller("testPeek", &MemStreamTest::testPeek)); suite->addTest(new CppUnit::TestCaller("testTellG", &MemStreamTest::testTellG)); runner.addTest(suite); runner.run(); return 0; } KCemu-0.5.1/test/kc/Makefile.in0000644001050700006200000006120211412404774015633 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @HAVE_CPPUNIT_TRUE@TESTS = t_memstream$(EXEEXT) @HAVE_CPPUNIT_TRUE@check_PROGRAMS = $(am__EXEEXT_1) subdir = test/kc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = @HAVE_CPPUNIT_TRUE@am__EXEEXT_1 = t_memstream$(EXEEXT) am__t_memstream_SOURCES_DIST = t_memstream.cc @HAVE_CPPUNIT_TRUE@am_t_memstream_OBJECTS = t_memstream.$(OBJEXT) t_memstream_OBJECTS = $(am_t_memstream_OBJECTS) t_memstream_DEPENDENCIES = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(t_memstream_SOURCES) DIST_SOURCES = $(am__t_memstream_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = prefs INCLUDES = -I../../include $(CPPUNIT_CFLAGS) @HAVE_CPPUNIT_TRUE@t_memstream_SOURCES = t_memstream.cc @HAVE_CPPUNIT_TRUE@t_memstream_LDADD = $(CPPUNIT_LIBS) all: all-recursive .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/kc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/kc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) t_memstream$(EXEEXT): $(t_memstream_OBJECTS) $(t_memstream_DEPENDENCIES) @rm -f t_memstream$(EXEEXT) $(CXXLINK) $(t_memstream_OBJECTS) $(t_memstream_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_memstream.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-checkPROGRAMS clean-generic mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic ctags ctags-recursive \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/test/libaudio/0000755001050700006200000000000011412404775014761 5ustar glaubitzfbedvKCemu-0.5.1/test/libaudio/t_load.cc0000644001050700006200000000715011345001576016532 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include #include #include #include #include #include #include "libaudio/libaudio.h" using namespace std; class LibAudioTest : public CppUnit::TestCase { private: public: void setUp(); void tearDown(); void testOpenNull(void); void testOpenNotExisting(void); void testOpenEmpty(void); void testOpenShort(void); void testOpenRandom(void); }; void LibAudioTest::setUp(void) { libaudio_init(LIBAUDIO_TYPE_ALL & ~LIBAUDIO_TYPE_MP3); } void LibAudioTest::tearDown(void) { } void LibAudioTest::testOpenNull(void) { cout << "LibAudioTest::testOpenNull()" << endl; libaudio_prop_t *prop = libaudio_open(NULL); CPPUNIT_ASSERT(prop == NULL); } void LibAudioTest::testOpenNotExisting(void) { cout << "LibAudioTest::testOpenNotExisting()" << endl; libaudio_prop_t *prop = libaudio_open("data/notexisting.wav"); CPPUNIT_ASSERT(prop == NULL); } void LibAudioTest::testOpenEmpty(void) { cout << "LibAudioTest::testOpenEmpty()" << endl; libaudio_prop_t *prop = libaudio_open("data/empty.wav"); CPPUNIT_ASSERT(prop == NULL); } void LibAudioTest::testOpenShort(void) { FILE *f; int a, b, ret; unsigned char c; libaudio_prop_t *prop; const char *filename = "data/short.wav"; cout << "LibAudioTest::testOpenShort()" << endl; for (a = 1;a < 1024;a++) { f = fopen(filename, "wb"); CPPUNIT_ASSERT(f != NULL); for (b = 0;b < a;b++) { c = b & 0xff; ret = fwrite(&c, 1, 1, f); CPPUNIT_ASSERT(ret == 1); } fclose(f); cout << ".." << a << endl; prop = libaudio_open(filename); CPPUNIT_ASSERT(prop != NULL); ret = unlink(filename); CPPUNIT_ASSERT(ret == 0); } } void LibAudioTest::testOpenRandom(void) { cout << "LibAudioTest::testOpenRandom()" << endl; libaudio_prop_t *prop = libaudio_open("data/random.wav"); CPPUNIT_ASSERT(prop == NULL); } int EF_DISABLE_BANNER = 1; int EF_PROTECT_FREE = 0; int EF_FREE_WIPES = 1; int EF_ALLOW_MALLOC_0 = 1; int main(void) { CppUnit::TestResult result; CppUnit::TextTestRunner runner; CppUnit::TestSuite *suite = new CppUnit::TestSuite(); suite->addTest(new CppUnit::TestCaller("testOpenNull", &LibAudioTest::testOpenNull)); suite->addTest(new CppUnit::TestCaller("testOpenNotExisting", &LibAudioTest::testOpenNotExisting)); suite->addTest(new CppUnit::TestCaller("testOpenEmpty", &LibAudioTest::testOpenEmpty)); suite->addTest(new CppUnit::TestCaller("testOpenShort", &LibAudioTest::testOpenShort)); suite->addTest(new CppUnit::TestCaller("testOpenRandom", &LibAudioTest::testOpenRandom)); runner.addTest(suite); runner.run(); return 0; } KCemu-0.5.1/test/libaudio/Makefile.am0000644001050700006200000000057011345001576017014 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in SUBDIRS = data INCLUDES = -I../../include $(CPPUNIT_CFLAGS) LIBS = \ $(CPPUNIT_LIBS) \ $(SNDFILE_LIBS) \ $(AUDIOFILE_LIBS) \ $(VORBIS_LIBS) \ $(MP3LAME_LIBS) \ -lefence if HAVE_CPPUNIT TESTS = t_load check_PROGRAMS = $(TESTS) t_load_SOURCES = t_load.cc t_load_LDADD = ../../src/libaudio/libaudio.a endif KCemu-0.5.1/test/libaudio/data/0000755001050700006200000000000011412404775015672 5ustar glaubitzfbedvKCemu-0.5.1/test/libaudio/data/Makefile.am0000644001050700006200000000014310527416075017726 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ empty.wav \ random.wav KCemu-0.5.1/test/libaudio/data/random.wav0000644001050700006200000000200010527416075017663 0ustar glaubitzfbedveͬ <]cǾkot I_DO+ dE?7Ž8uD=2P1Θa\ToԺXXT\Οs6'E{.Xdul vLu<[ n` l#p[Ip%8tyθdne t#QԜ 4a܋M\9}ZGk\,rb#ڜ)-oIw=ϑq̺ZNv劒3ԏR}AVϚ@x#rM-"eHRv& n4{u^ee> _+#϶(<_o =.cWД][$ܪURk+2uzFg]/̘  ޵L#-o( ȢEITM?F|X ս۸ AJXl:Wo䁈Q{$L[P '!LD/= ך 3(sC&Rm[;X"^)Q:-HH*"wCf$P[|S&_hBv!O&BgeRsqB(M dk!*0/19:NҬJTH92AoݝPhp/ P_s8EiGVꞧk^#Q97 `_̷\[17U͵bv ^K`z./ٜpKZHIGҮG) dV(莍GSKN M!>KCemu-0.5.1/test/libaudio/data/empty.wav0000644001050700006200000000000010527416075017537 0ustar glaubitzfbedvKCemu-0.5.1/test/libaudio/data/Makefile.in0000644001050700006200000003103111412404775017735 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = test/libaudio/data DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ empty.wav \ random.wav all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/libaudio/data/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/libaudio/data/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/test/libaudio/Makefile.in0000644001050700006200000006134611412404775017040 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @HAVE_CPPUNIT_TRUE@TESTS = t_load$(EXEEXT) @HAVE_CPPUNIT_TRUE@check_PROGRAMS = $(am__EXEEXT_1) subdir = test/libaudio DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = @HAVE_CPPUNIT_TRUE@am__EXEEXT_1 = t_load$(EXEEXT) am__t_load_SOURCES_DIST = t_load.cc @HAVE_CPPUNIT_TRUE@am_t_load_OBJECTS = t_load.$(OBJEXT) t_load_OBJECTS = $(am_t_load_OBJECTS) @HAVE_CPPUNIT_TRUE@t_load_DEPENDENCIES = \ @HAVE_CPPUNIT_TRUE@ ../../src/libaudio/libaudio.a DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \ $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) CXXLD = $(CXX) CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \ -o $@ SOURCES = $(t_load_SOURCES) DIST_SOURCES = $(am__t_load_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags am__tty_colors = \ red=; grn=; lgn=; blu=; std= DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = \ $(CPPUNIT_LIBS) \ $(SNDFILE_LIBS) \ $(AUDIOFILE_LIBS) \ $(VORBIS_LIBS) \ $(MP3LAME_LIBS) \ -lefence LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = data INCLUDES = -I../../include $(CPPUNIT_CFLAGS) @HAVE_CPPUNIT_TRUE@t_load_SOURCES = t_load.cc @HAVE_CPPUNIT_TRUE@t_load_LDADD = ../../src/libaudio/libaudio.a all: all-recursive .SUFFIXES: .SUFFIXES: .cc .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/libaudio/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/libaudio/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) t_load$(EXEEXT): $(t_load_OBJECTS) $(t_load_DEPENDENCIES) @rm -f t_load$(EXEEXT) $(CXXLINK) $(t_load_OBJECTS) $(t_load_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/t_load.Po@am__quote@ .cc.o: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ $< .cc.obj: @am__fastdepCXX_TRUE@ $(CXXCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCXX_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCXX_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCXX_FALSE@ DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCXX_FALSE@ $(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'` # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags check-TESTS: $(TESTS) @failed=0; all=0; xfail=0; xpass=0; skip=0; \ srcdir=$(srcdir); export srcdir; \ list=' $(TESTS) '; \ $(am__tty_colors); \ if test -n "$$list"; then \ for tst in $$list; do \ if test -f ./$$tst; then dir=./; \ elif test -f $$tst; then dir=; \ else dir="$(srcdir)/"; fi; \ if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xpass=`expr $$xpass + 1`; \ failed=`expr $$failed + 1`; \ col=$$red; res=XPASS; \ ;; \ *) \ col=$$grn; res=PASS; \ ;; \ esac; \ elif test $$? -ne 77; then \ all=`expr $$all + 1`; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$tst[\ \ ]*) \ xfail=`expr $$xfail + 1`; \ col=$$lgn; res=XFAIL; \ ;; \ *) \ failed=`expr $$failed + 1`; \ col=$$red; res=FAIL; \ ;; \ esac; \ else \ skip=`expr $$skip + 1`; \ col=$$blu; res=SKIP; \ fi; \ echo "$${col}$$res$${std}: $$tst"; \ done; \ if test "$$all" -eq 1; then \ tests="test"; \ All=""; \ else \ tests="tests"; \ All="All "; \ fi; \ if test "$$failed" -eq 0; then \ if test "$$xfail" -eq 0; then \ banner="$$All$$all $$tests passed"; \ else \ if test "$$xfail" -eq 1; then failures=failure; else failures=failures; fi; \ banner="$$All$$all $$tests behaved as expected ($$xfail expected $$failures)"; \ fi; \ else \ if test "$$xpass" -eq 0; then \ banner="$$failed of $$all $$tests failed"; \ else \ if test "$$xpass" -eq 1; then passes=pass; else passes=passes; fi; \ banner="$$failed of $$all $$tests did not behave as expected ($$xpass unexpected $$passes)"; \ fi; \ fi; \ dashes="$$banner"; \ skipped=""; \ if test "$$skip" -ne 0; then \ if test "$$skip" -eq 1; then \ skipped="($$skip test was not run)"; \ else \ skipped="($$skip tests were not run)"; \ fi; \ test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$skipped"; \ fi; \ report=""; \ if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \ report="Please report to $(PACKAGE_BUGREPORT)"; \ test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \ dashes="$$report"; \ fi; \ dashes=`echo "$$dashes" | sed s/./=/g`; \ if test "$$failed" -eq 0; then \ echo "$$grn$$dashes"; \ else \ echo "$$red$$dashes"; \ fi; \ echo "$$banner"; \ test -z "$$skipped" || echo "$$skipped"; \ test -z "$$report" || echo "$$report"; \ echo "$$dashes$$std"; \ test "$$failed" -eq 0; \ else :; fi distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-checkPROGRAMS clean-generic mostlyclean-am distclean: distclean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) check-am \ ctags-recursive install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic ctags ctags-recursive \ distclean distclean-compile distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-compile mostlyclean-generic pdf pdf-am \ ps ps-am tags tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/test/libgtkex/0000755001050700006200000000000011412404775015002 5ustar glaubitzfbedvKCemu-0.5.1/test/libgtkex/libgtkex-test.c0000644001050700006200000000616311345001576017737 0ustar glaubitzfbedv/* * KCemu -- The emulator for the KC85 homecomputer series and much more. * Copyright (C) 1997-2010 Torsten Paul * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along * with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */ #include #include "libgtkex/libgtkex.h" static guint statusid = 0; static GtkWidget *statusbar = NULL; static gboolean on_timeout(gpointer data) { guint id = (guint) data; if (statusid == id) gtk_statusbar_pop(GTK_STATUSBAR(statusbar), 0); return FALSE; } static void log_text(const char *text) { gtk_statusbar_pop(GTK_STATUSBAR(statusbar), 0); gtk_statusbar_push(GTK_STATUSBAR(statusbar), 0, text); printf("LOG: %s\n", text); statusid++; g_timeout_add_seconds(5, on_timeout, (gpointer)statusid); } static void on_filebutton_changed(GtkFilebutton *filebutton, gpointer user_data) { char buf[4096]; snprintf(buf, sizeof(buf), "Filebutton changed: %s", gtk_filebutton_get_filename(filebutton)); log_text(buf); } static void on_clear_clicked(GtkButton *button, GtkComboBox *combobox) { gtk_combo_box_set_active(combobox, -1); printf("clear\n"); } int main(int argc, char **argv) { gtk_init(&argc, &argv); GtkBuilder *builder = gtk_builder_new(); gtk_builder_add_from_file(builder, "libgtkex-test.xml", NULL); gtk_builder_connect_signals(builder, NULL); GtkWidget *window = GTK_WIDGET(gtk_builder_get_object(builder, "window")); g_signal_connect(window, "delete_event", G_CALLBACK(gtk_main_quit), NULL); GtkWidget *container = GTK_WIDGET(gtk_builder_get_object(builder, "container")); statusbar = GTK_WIDGET(gtk_builder_get_object(builder, "statusbar")); g_object_unref(G_OBJECT(builder)); GtkWidget *led_line = gtk_led_line_new(8); gtk_box_pack_start(GTK_BOX(container), led_line, TRUE, TRUE, 4); GtkWidget *filebutton = gtk_filebutton_new("Image"); g_signal_connect(filebutton, "changed", G_CALLBACK(on_filebutton_changed), NULL); gtk_box_pack_start(GTK_BOX(container), filebutton, TRUE, TRUE, 4); GtkWidget *comboboxentry = gtk_combo_box_entry_new_text(); gtk_combo_box_append_text(GTK_COMBO_BOX(comboboxentry), "blah"); gtk_combo_box_append_text(GTK_COMBO_BOX(comboboxentry), "blubb"); gtk_box_pack_start(GTK_BOX(container), comboboxentry, TRUE, TRUE, 4); GtkWidget *button = gtk_button_new_with_label("clear"); g_signal_connect(button, "clicked", G_CALLBACK(on_clear_clicked), comboboxentry); gtk_box_pack_start(GTK_BOX(container), button, TRUE, TRUE, 4); gtk_widget_show_all(window); gtk_main(); return 0; } KCemu-0.5.1/test/libgtkex/Makefile.am0000644001050700006200000000033011345001576017027 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in EXTRA_DIST = \ libgtkex-test.xml check_PROGRAMS = libgtkex-test INCLUDES = -I../../include $(GTK_CFLAGS) LIBS = ../../src/libgtkex/libgtkex.a $(GTK_LIBS) KCemu-0.5.1/test/libgtkex/libgtkex-test.xml0000644001050700006200000000463111340261611020304 0ustar glaubitzfbedv True vertical True True _File True True gtk-quit True True True False 0 True vertical 1 True 2 False 2 KCemu-0.5.1/test/libgtkex/Makefile.in0000644001050700006200000004036111412404775017053 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ check_PROGRAMS = libgtkex-test$(EXEEXT) subdir = test/libgtkex DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = libgtkex_test_SOURCES = libgtkex-test.c libgtkex_test_OBJECTS = libgtkex-test.$(OBJEXT) libgtkex_test_LDADD = $(LDADD) DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc depcomp = $(SHELL) $(top_srcdir)/config/depcomp am__depfiles_maybe = depfiles am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) CCLD = $(CC) LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ SOURCES = libgtkex-test.c DIST_SOURCES = libgtkex-test.c ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = ../../src/libgtkex/libgtkex.a $(GTK_LIBS) LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = \ libgtkex-test.xml INCLUDES = -I../../include $(GTK_CFLAGS) all: all-am .SUFFIXES: .SUFFIXES: .c .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/libgtkex/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/libgtkex/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-checkPROGRAMS: -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS) libgtkex-test$(EXEEXT): $(libgtkex_test_OBJECTS) $(libgtkex_test_DEPENDENCIES) @rm -f libgtkex-test$(EXEEXT) $(LINK) $(libgtkex_test_OBJECTS) $(libgtkex_test_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libgtkex-test.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c $< .c.obj: @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(COMPILE) -c `$(CYGPATH_W) '$<'` ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-checkPROGRAMS clean-generic mostlyclean-am distclean: distclean-am -rm -rf ./$(DEPDIR) -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -rf ./$(DEPDIR) -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: CTAGS GTAGS all all-am check check-am clean \ clean-checkPROGRAMS clean-generic ctags distclean \ distclean-compile distclean-generic distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am tags uninstall \ uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/test/Makefile.in0000644001050700006200000004706311412404774015247 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = test DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = kc libaudio libgtkex all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu test/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu test/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/VERSION0000644001050700006200000000132311345001613013246 0ustar glaubitzfbedvPACKAGE=KCemu PACKAGE_URL=http://kcemu.sourceforge.net/ PACKAGE_BUGREPORT=Torsten.Paul@gmx.de KCEMU_MAJOR_VERSION=0 KCEMU_MINOR_VERSION=5 KCEMU_MICRO_VERSION=1 KCEMU_EXTRA_VERSION=0 KCEMU_EXTRA_VERSION_TEXT= ################################################################ if test $KCEMU_MICRO_VERSION -eq 0 then KCEMU_VERSION=${KCEMU_MAJOR_VERSION}.${KCEMU_MINOR_VERSION} else KCEMU_VERSION=${KCEMU_MAJOR_VERSION}.${KCEMU_MINOR_VERSION}.${KCEMU_MICRO_VERSION} fi if test x"$KCEMU_EXTRA_VERSION_TEXT" != x then KCEMU_VERSION=${KCEMU_VERSION}${KCEMU_EXTRA_VERSION_TEXT}${KCEMU_EXTRA_VERSION} else KCEMU_EXTRA_VERSION=0 fi ################################################################ KCemu-0.5.1/config/0000755001050700006200000000000011345001723013446 5ustar glaubitzfbedvKCemu-0.5.1/config/config.rpath0000755001050700006200000004364711340261610015772 0ustar glaubitzfbedv#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2007 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a `.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's AC_LIBTOOL_PROG_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; darwin*) case $cc_basename in xlc*) wl='-Wl,' ;; esac ;; mingw* | cygwin* | pw32* | os2*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; newsos6) ;; linux* | k*bsd*-gnu) case $cc_basename in icc* | ecc*) wl='-Wl,' ;; pgcc | pgf77 | pgf90) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) wl='-Wl,' ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's AC_LIBTOOL_PROG_LD_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix3* | aix4* | aix5*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # Samuel A. Falvo II reports # that the semantics of dynamic libraries on AmigaOS, at least up # to version 4, is to share data among multiple programs linked # with the same dynamic library. Since this doesn't match the # behavior of shared libraries on other platforms, we cannot use # them. ld_shlibs=no ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | k*bsd*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix4* | aix5*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix5*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes # see comment about different semantics on the GNU ld section ld_shlibs=no ;; bsdi[45]*) ;; cygwin* | mingw* | pw32*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if test "$GCC" = yes ; then : else case $cc_basename in xlc*) ;; *) ld_shlibs=no ;; esac fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd1*) ld_shlibs=no ;; freebsd2.2*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; freebsd2*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's AC_LIBTOOL_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix4* | aix5*) library_names_spec='$libname$shrext' ;; amigaos*) library_names_spec='$libname.a' ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd1*) ;; freebsd* | dragonfly*) case "$host_os" in freebsd[123]*) library_names_spec='$libname$shrext$versuffix' ;; *) library_names_spec='$libname$shrext' ;; esac ;; gnu*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; nto-qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # This script attempts to guess a canonical system name similar to # config.sub. If it succeeds, it prints the system name on stdout, and # exits with 0. Otherwise, it exits with 1. # # The plan is that this can be called by configure scripts if you # don't specify an explicit build system type. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi trap 'exit 1' 1 2 15 # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. set_cc_for_build=' trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ; trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ; : ${TMPDIR=/tmp} ; { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ; dummy=$tmp/dummy ; tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ; case $CC_FOR_BUILD,$HOST_CC,$CC in ,,) echo "int x;" > $dummy.c ; for c in cc gcc c89 c99 ; do if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then CC_FOR_BUILD="$c"; break ; fi ; done ; if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found ; fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac ; set_cc_for_build= ;' # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if (test -f /.attbin/uname) >/dev/null 2>&1 ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown # Note: order is significant - the case branches are not exclusive. case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tupples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". sysctl="sysctl -n hw.machine_arch" UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \ /usr/sbin/$sysctl 2>/dev/null || echo unknown)` case "${UNAME_MACHINE_ARCH}" in armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; *) machine=${UNAME_MACHINE_ARCH}-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently, or will in the future. case "${UNAME_MACHINE_ARCH}" in arm*|i386|m68k|ns32k|sh3*|sparc|vax) eval $set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep __ELF__ >/dev/null then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case "${UNAME_VERSION}" in Debian*) release='-gnu' ;; *) release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. echo "${machine}-${os}${release}" exit ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE} exit ;; *:ekkoBSD:*:*) echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE} exit ;; *:SolidBSD:*:*) echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE} exit ;; macppc:MirBSD:*:*) echo powerpc-unknown-mirbsd${UNAME_RELEASE} exit ;; *:MirBSD:*:*) echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE} exit ;; alpha:OSF1:*:*) case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case "$ALPHA_CPU_TYPE" in "EV4 (21064)") UNAME_MACHINE="alpha" ;; "EV4.5 (21064)") UNAME_MACHINE="alpha" ;; "LCA4 (21066/21068)") UNAME_MACHINE="alpha" ;; "EV5 (21164)") UNAME_MACHINE="alphaev5" ;; "EV5.6 (21164A)") UNAME_MACHINE="alphaev56" ;; "EV5.6 (21164PC)") UNAME_MACHINE="alphapca56" ;; "EV5.7 (21164PC)") UNAME_MACHINE="alphapca57" ;; "EV6 (21264)") UNAME_MACHINE="alphaev6" ;; "EV6.7 (21264A)") UNAME_MACHINE="alphaev67" ;; "EV6.8CB (21264C)") UNAME_MACHINE="alphaev68" ;; "EV6.8AL (21264B)") UNAME_MACHINE="alphaev68" ;; "EV6.8CX (21264D)") UNAME_MACHINE="alphaev68" ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE="alphaev69" ;; "EV7 (21364)") UNAME_MACHINE="alphaev7" ;; "EV7.9 (21364A)") UNAME_MACHINE="alphaev79" ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` exit ;; Alpha\ *:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # Should we change UNAME_MACHINE based on the output of uname instead # of the specific Alpha model? echo alpha-pc-interix exit ;; 21064:Windows_NT:50:3) echo alpha-dec-winnt3.5 exit ;; Amiga*:UNIX_System_V:4.0:*) echo m68k-unknown-sysv4 exit ;; *:[Aa]miga[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-amigaos exit ;; *:[Mm]orph[Oo][Ss]:*:*) echo ${UNAME_MACHINE}-unknown-morphos exit ;; *:OS/390:*:*) echo i370-ibm-openedition exit ;; *:z/VM:*:*) echo s390-ibm-zvmoe exit ;; *:OS400:*:*) echo powerpc-ibm-os400 exit ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) echo arm-acorn-riscix${UNAME_RELEASE} exit ;; arm:riscos:*:*|arm:RISCOS:*:*) echo arm-unknown-riscos exit ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) echo hppa1.1-hitachi-hiuxmpp exit ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. if test "`(/bin/universe) 2>/dev/null`" = att ; then echo pyramid-pyramid-sysv3 else echo pyramid-pyramid-bsd fi exit ;; NILE*:*:*:dcosx) echo pyramid-pyramid-svr4 exit ;; DRS?6000:unix:4.0:6*) echo sparc-icl-nx6 exit ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) echo sparc-icl-nx7; exit ;; esac ;; sun4H:SunOS:5.*:*) echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) echo i386-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; sun4*:SunOS:*:*) case "`/usr/bin/arch -k`" in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'` exit ;; sun3*:SunOS:*:*) echo m68k-sun-sunos${UNAME_RELEASE} exit ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3 case "`/bin/arch`" in sun3) echo m68k-sun-sunos${UNAME_RELEASE} ;; sun4) echo sparc-sun-sunos${UNAME_RELEASE} ;; esac exit ;; aushp:SunOS:*:*) echo sparc-auspex-sunos${UNAME_RELEASE} exit ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) echo m68k-atari-mint${UNAME_RELEASE} exit ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) echo m68k-milan-mint${UNAME_RELEASE} exit ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) echo m68k-hades-mint${UNAME_RELEASE} exit ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) echo m68k-unknown-mint${UNAME_RELEASE} exit ;; m68k:machten:*:*) echo m68k-apple-machten${UNAME_RELEASE} exit ;; powerpc:machten:*:*) echo powerpc-apple-machten${UNAME_RELEASE} exit ;; RISC*:Mach:*:*) echo mips-dec-mach_bsd4.3 exit ;; RISC*:ULTRIX:*:*) echo mips-dec-ultrix${UNAME_RELEASE} exit ;; VAX*:ULTRIX*:*:*) echo vax-dec-ultrix${UNAME_RELEASE} exit ;; 2020:CLIX:*:* | 2430:CLIX:*:*) echo clipper-intergraph-clix${UNAME_RELEASE} exit ;; mips:*:*:UMIPS | mips:*:*:RISCos) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`$dummy $dummyarg` && { echo "$SYSTEM_NAME"; exit; } echo mips-mips-riscos${UNAME_RELEASE} exit ;; Motorola:PowerMAX_OS:*:*) echo powerpc-motorola-powermax exit ;; Motorola:*:4.3:PL8-*) echo powerpc-harris-powermax exit ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) echo powerpc-harris-powermax exit ;; Night_Hawk:Power_UNIX:*:*) echo powerpc-harris-powerunix exit ;; m88k:CX/UX:7*:*) echo m88k-harris-cxux7 exit ;; m88k:*:4*:R4*) echo m88k-motorola-sysv4 exit ;; m88k:*:3*:R3*) echo m88k-motorola-sysv3 exit ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ] then if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \ [ ${TARGET_BINARY_INTERFACE}x = x ] then echo m88k-dg-dgux${UNAME_RELEASE} else echo m88k-dg-dguxbcs${UNAME_RELEASE} fi else echo i586-dg-dgux${UNAME_RELEASE} fi exit ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) echo m88k-dolphin-sysv3 exit ;; M88*:*:R3*:*) # Delta 88k system running SVR3 echo m88k-motorola-sysv3 exit ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) echo m88k-tektronix-sysv3 exit ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) echo m68k-tektronix-bsd exit ;; *:IRIX*:*:*) echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'` exit ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. echo romp-ibm-aix # uname -m gives an 8 hex-code CPU id exit ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) echo i386-ibm-aix exit ;; ia64:AIX:*:*) if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${UNAME_MACHINE}-ibm-aix${IBM_REV} exit ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` then echo "$SYSTEM_NAME" else echo rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then echo rs6000-ibm-aix3.2.4 else echo rs6000-ibm-aix3.2 fi exit ;; *:AIX:*:[456]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if [ -x /usr/bin/oslevel ] ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE} fi echo ${IBM_ARCH}-ibm-aix${IBM_REV} exit ;; *:AIX:*:*) echo rs6000-ibm-aix exit ;; ibmrt:4.4BSD:*|romp-ibm:BSD:*) echo romp-ibm-bsd4.4 exit ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and echo romp-ibm-bsd${UNAME_RELEASE} # 4.3 with uname added to exit ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) echo rs6000-bull-bosx exit ;; DPX/2?00:B.O.S.:*:*) echo m68k-bull-sysv3 exit ;; 9000/[34]??:4.3bsd:1.*:*) echo m68k-hp-bsd exit ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) echo m68k-hp-bsd4.4 exit ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` case "${UNAME_MACHINE}" in 9000/31? ) HP_ARCH=m68000 ;; 9000/[34]?? ) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if [ -x /usr/bin/getconf ]; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case "${sc_cpu_version}" in 523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0 528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case "${sc_kernel_bits}" in 32) HP_ARCH="hppa2.0n" ;; 64) HP_ARCH="hppa2.0w" ;; '') HP_ARCH="hppa2.0" ;; # HP-UX 10.20 esac ;; esac fi if [ "${HP_ARCH}" = "" ]; then eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if [ ${HP_ARCH} = "hppa2.0w" ] then eval $set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | grep __LP64__ >/dev/null then HP_ARCH="hppa2.0w" else HP_ARCH="hppa64" fi fi echo ${HP_ARCH}-hp-hpux${HPUX_REV} exit ;; ia64:HP-UX:*:*) HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'` echo ia64-hp-hpux${HPUX_REV} exit ;; 3050*:HI-UX:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } echo unknown-hitachi-hiuxwe2 exit ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* ) echo hppa1.1-hp-bsd exit ;; 9000/8??:4.3bsd:*:*) echo hppa1.0-hp-bsd exit ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) echo hppa1.0-hp-mpeix exit ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* ) echo hppa1.1-hp-osf exit ;; hp8??:OSF1:*:*) echo hppa1.0-hp-osf exit ;; i*86:OSF1:*:*) if [ -x /usr/sbin/sysversion ] ; then echo ${UNAME_MACHINE}-unknown-osf1mk else echo ${UNAME_MACHINE}-unknown-osf1 fi exit ;; parisc*:Lites*:*:*) echo hppa1.1-hp-lites exit ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) echo c1-convex-bsd exit ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) echo c34-convex-bsd exit ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) echo c38-convex-bsd exit ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) echo c4-convex-bsd exit ;; CRAY*Y-MP:*:*:*) echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*[A-Z]90:*:*:*) echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*T3E:*:*:*) echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; CRAY*SV1:*:*:*) echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; *:UNICOS/mp:*:*) echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/' exit ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'` FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'` echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'` FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'` echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}" exit ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE} exit ;; sparc*:BSD/OS:*:*) echo sparc-unknown-bsdi${UNAME_RELEASE} exit ;; *:BSD/OS:*:*) echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE} exit ;; *:FreeBSD:*:*) case ${UNAME_MACHINE} in pc98) echo i386-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_MACHINE}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; i*:windows32*:*) # uname -m includes "-pc" on this system. echo ${UNAME_MACHINE}-mingw32 exit ;; i*:PW*:*) echo ${UNAME_MACHINE}-pc-pw32 exit ;; *:Interix*:[3456]*) case ${UNAME_MACHINE} in x86) echo i586-pc-interix${UNAME_RELEASE} exit ;; EM64T | authenticamd) echo x86_64-unknown-interix${UNAME_RELEASE} exit ;; IA64) echo ia64-unknown-interix${UNAME_RELEASE} exit ;; esac ;; [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*) echo i${UNAME_MACHINE}-pc-mks exit ;; i*:Windows_NT*:* | Pentium*:Windows_NT*:*) # How do we know it's Interix rather than the generic POSIX subsystem? # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we # UNAME_MACHINE based on the output of uname instead of i386? echo i586-pc-interix exit ;; i*:UWIN*:*) echo ${UNAME_MACHINE}-pc-uwin exit ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) echo x86_64-unknown-cygwin exit ;; p*:CYGWIN*:*) echo powerpcle-unknown-cygwin exit ;; prep*:SunOS:5.*:*) echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'` exit ;; *:GNU:*:*) # the GNU system echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'` exit ;; *:GNU/*:*:*) # other systems with GNU libc and userland echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-gnu exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; arm*:Linux:*:*) eval $set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then echo ${UNAME_MACHINE}-unknown-linux-gnu else echo ${UNAME_MACHINE}-unknown-linux-gnueabi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; cris:Linux:*:*) echo cris-axis-linux-gnu exit ;; crisv32:Linux:*:*) echo crisv32-axis-linux-gnu exit ;; frv:Linux:*:*) echo frv-unknown-linux-gnu exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; mips:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips #undef mipsel #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mipsel #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; mips64:Linux:*:*) eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #undef CPU #undef mips64 #undef mips64el #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) CPU=mips64el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) CPU=mips64 #else CPU= #endif #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^CPU/{ s: ::g p }'`" test x"${CPU}" != x && { echo "${CPU}-unknown-linux-gnu"; exit; } ;; or32:Linux:*:*) echo or32-unknown-linux-gnu exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-gnu exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-gnu exit ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep ld.so.1 >/dev/null if test "$?" = 0 ; then LIBC="libc1" ; else LIBC="" ; fi echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} exit ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) echo hppa1.1-unknown-linux-gnu ;; PA8*) echo hppa2.0-unknown-linux-gnu ;; *) echo hppa-unknown-linux-gnu ;; esac exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-gnu exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-gnu exit ;; x86_64:Linux:*:*) echo x86_64-unknown-linux-gnu exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-gnu exit ;; i*86:Linux:*:*) # The BFD linker knows what the default object file format is, so # first see if it will tell us. cd to the root directory to prevent # problems with other programs or directories called `ld' in the path. # Set LC_ALL=C to ensure ld outputs messages in English. ld_supported_targets=`cd /; LC_ALL=C ld --help 2>&1 \ | sed -ne '/supported targets:/!d s/[ ][ ]*/ /g s/.*supported targets: *// s/ .*// p'` case "$ld_supported_targets" in elf32-i386) TENTATIVE="${UNAME_MACHINE}-pc-linux-gnu" ;; a.out-i386-linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" exit ;; coff-i386) echo "${UNAME_MACHINE}-pc-linux-gnucoff" exit ;; "") # Either a pre-BFD a.out linker (linux-gnuoldld) or # one that does not give us useful --help. echo "${UNAME_MACHINE}-pc-linux-gnuoldld" exit ;; esac # Determine whether the default compiler is a.out or elf eval $set_cc_for_build sed 's/^ //' << EOF >$dummy.c #include #ifdef __ELF__ # ifdef __GLIBC__ # if __GLIBC__ >= 2 LIBC=gnu # else LIBC=gnulibc1 # endif # else LIBC=gnulibc1 # endif #else #if defined(__INTEL_COMPILER) || defined(__PGI) || defined(__SUNPRO_C) || defined(__SUNPRO_CC) LIBC=gnu #else LIBC=gnuaout #endif #endif #ifdef __dietlibc__ LIBC=dietlibc #endif EOF eval "`$CC_FOR_BUILD -E $dummy.c 2>/dev/null | sed -n ' /^LIBC/{ s: ::g p }'`" test x"${LIBC}" != x && { echo "${UNAME_MACHINE}-pc-linux-${LIBC}" exit } test x"${TENTATIVE}" != x && { echo "${TENTATIVE}"; exit; } ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. echo i386-sequent-sysv4 exit ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION} exit ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. echo ${UNAME_MACHINE}-pc-os2-emx exit ;; i*86:XTS-300:*:STOP) echo ${UNAME_MACHINE}-unknown-stop exit ;; i*86:atheos:*:*) echo ${UNAME_MACHINE}-unknown-atheos exit ;; i*86:syllable:*:*) echo ${UNAME_MACHINE}-pc-syllable exit ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.0*:*) echo i386-unknown-lynxos${UNAME_RELEASE} exit ;; i*86:*DOS:*:*) echo ${UNAME_MACHINE}-pc-msdosdjgpp exit ;; i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*) UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL} else echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL} fi exit ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} exit ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 echo ${UNAME_MACHINE}-pc-sco$UNAME_REL else echo ${UNAME_MACHINE}-pc-sysv32 fi exit ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i386. echo i386-pc-msdosdjgpp exit ;; Intel:Mach:3*:*) echo i386-pc-mach3 exit ;; paragon:*:*:*) echo i860-intel-osf1 exit ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. echo i860-unknown-sysv${UNAME_RELEASE} # Unknown i860-SVR4 fi exit ;; mini*:CTIX:SYS*5:*) # "miniframe" echo m68010-convergent-sysv exit ;; mc68k:UNIX:SYSTEM5:3.51m) echo m68k-convergent-sysv exit ;; M680?0:D-NIX:5.3:*) echo m68k-diab-dnix exit ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3${OS_REL}; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) echo m68k-unknown-lynxos${UNAME_RELEASE} exit ;; mc68030:UNIX_System_V:4.*:*) echo m68k-atari-sysv4 exit ;; TSUNAMI:LynxOS:2.*:*) echo sparc-unknown-lynxos${UNAME_RELEASE} exit ;; rs6000:LynxOS:2.*:*) echo rs6000-unknown-lynxos${UNAME_RELEASE} exit ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.0*:*) echo powerpc-unknown-lynxos${UNAME_RELEASE} exit ;; SM[BE]S:UNIX_SV:*:*) echo mips-dde-sysv${UNAME_RELEASE} exit ;; RM*:ReliantUNIX-*:*:*) echo mips-sni-sysv4 exit ;; RM*:SINIX-*:*:*) echo mips-sni-sysv4 exit ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` echo ${UNAME_MACHINE}-sni-sysv4 else echo ns32k-sni-sysv fi exit ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm echo hppa1.1-stratus-sysv4 exit ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. echo i860-stratus-sysv4 exit ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. echo ${UNAME_MACHINE}-stratus-vos exit ;; *:VOS:*:*) # From Paul.Green@stratus.com. echo hppa1.1-stratus-vos exit ;; mc68*:A/UX:*:*) echo m68k-apple-aux${UNAME_RELEASE} exit ;; news*:NEWS-OS:6*:*) echo mips-sony-newsos6 exit ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if [ -d /usr/nec ]; then echo mips-nec-sysv${UNAME_RELEASE} else echo mips-unknown-sysv${UNAME_RELEASE} fi exit ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. echo powerpc-be-beos exit ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. echo powerpc-apple-beos exit ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. echo i586-pc-beos exit ;; SX-4:SUPER-UX:*:*) echo sx4-nec-superux${UNAME_RELEASE} exit ;; SX-5:SUPER-UX:*:*) echo sx5-nec-superux${UNAME_RELEASE} exit ;; SX-6:SUPER-UX:*:*) echo sx6-nec-superux${UNAME_RELEASE} exit ;; SX-7:SUPER-UX:*:*) echo sx7-nec-superux${UNAME_RELEASE} exit ;; SX-8:SUPER-UX:*:*) echo sx8-nec-superux${UNAME_RELEASE} exit ;; SX-8R:SUPER-UX:*:*) echo sx8r-nec-superux${UNAME_RELEASE} exit ;; Power*:Rhapsody:*:*) echo powerpc-apple-rhapsody${UNAME_RELEASE} exit ;; *:Rhapsody:*:*) echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE} exit ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE} exit ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = "x86"; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE} exit ;; *:QNX:*:4*) echo i386-pc-qnx exit ;; NSE-?:NONSTOP_KERNEL:*:*) echo nse-tandem-nsk${UNAME_RELEASE} exit ;; NSR-?:NONSTOP_KERNEL:*:*) echo nsr-tandem-nsk${UNAME_RELEASE} exit ;; *:NonStop-UX:*:*) echo mips-compaq-nonstopux exit ;; BS2000:POSIX*:*:*) echo bs2000-siemens-sysv exit ;; DS/*:UNIX_System_V:*:*) echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE} exit ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "$cputype" = "386"; then UNAME_MACHINE=i386 else UNAME_MACHINE="$cputype" fi echo ${UNAME_MACHINE}-unknown-plan9 exit ;; *:TOPS-10:*:*) echo pdp10-unknown-tops10 exit ;; *:TENEX:*:*) echo pdp10-unknown-tenex exit ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) echo pdp10-dec-tops20 exit ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) echo pdp10-xkl-tops20 exit ;; *:TOPS-20:*:*) echo pdp10-unknown-tops20 exit ;; *:ITS:*:*) echo pdp10-unknown-its exit ;; SEI:*:*:SEIUX) echo mips-sei-seiux${UNAME_RELEASE} exit ;; *:DragonFly:*:*) echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` exit ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case "${UNAME_MACHINE}" in A*) echo alpha-dec-vms ; exit ;; I*) echo ia64-dec-vms ; exit ;; V*) echo vax-dec-vms ; exit ;; esac ;; *:XENIX:*:SysV) echo i386-pc-xenix exit ;; i*86:skyos:*:*) echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//' exit ;; i*86:rdos:*:*) echo ${UNAME_MACHINE}-pc-rdos exit ;; esac #echo '(No uname command or uname output not recognized.)' 1>&2 #echo "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" 1>&2 eval $set_cc_for_build cat >$dummy.c < # include #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (__arm) && defined (__acorn) && defined (__unix) printf ("arm-acorn-riscix\n"); exit (0); #endif #if defined (hp300) && !defined (hpux) printf ("m68k-hp-bsd\n"); exit (0); #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) # if !defined (ultrix) # include # if defined (BSD) # if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); # else # if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); # else printf ("vax-dec-bsd\n"); exit (0); # endif # endif # else printf ("vax-dec-bsd\n"); exit (0); # endif # else printf ("vax-dec-ultrix\n"); exit (0); # endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null && SYSTEM_NAME=`$dummy` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo ${ISP}-apollo-${SYSTYPE}; exit; } # Convex versions that predate uname can use getsysinfo(1) if [ -x /usr/convex/getsysinfo ] then case `getsysinfo -f cpu_type` in c1*) echo c1-convex-bsd exit ;; c2*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; c34*) echo c34-convex-bsd exit ;; c38*) echo c38-convex-bsd exit ;; c4*) echo c4-convex-bsd exit ;; esac fi cat >&2 < in order to provide the needed information to handle your system. config.guess timestamp = $timestamp uname -m = `(uname -m) 2>/dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = ${UNAME_MACHINE} UNAME_RELEASE = ${UNAME_RELEASE} UNAME_SYSTEM = ${UNAME_SYSTEM} UNAME_VERSION = ${UNAME_VERSION} EOF exit 1 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: KCemu-0.5.1/config/depcomp0000755001050700006200000004271311163443005015033 0ustar glaubitzfbedv#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2007-03-29.01 # Copyright (C) 1999, 2000, 2003, 2004, 2005, 2006, 2007 Free Software # Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try \`$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by `PROGRAMS ARGS'. object Object file output by `PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputing dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" alpha=ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz ## The second -e expression handles DOS-style file names with drive letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the `deleted header file' problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. tr ' ' ' ' < "$tmpdepfile" | ## Some versions of gcc put a space before the `:'. On the theory ## that the space means something, we add a space to the output as ## well. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like `#:fec' to the end of the # dependency line. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' | \ tr ' ' ' ' >> $depfile echo >> $depfile # The second pass generates a dummy entry for each header file. tr ' ' ' ' < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> $depfile else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts `$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then # Each line is of the form `foo.o: dependent.h'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else # The sourcefile does not contain any dependencies, so just # store a dummy comment line, to avoid errors with the Makefile # "include basename.Plo" scheme. echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; icc) # Intel's C compiler understands `-MD -MF file'. However on # icc -MD -MF foo.d -c -o sub/foo.o sub/foo.c # ICC 7.0 will fill foo.d with something like # foo.o: sub/foo.c # foo.o: sub/foo.h # which is wrong. We want: # sub/foo.o: sub/foo.c # sub/foo.o: sub/foo.h # sub/foo.c: # sub/foo.h: # ICC 7.1 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using \ : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," "$tmpdepfile" > "$depfile" # Add `dependent.h:' lines. sed -ne '2,${; s/^ *//; s/ \\*$//; s/$/:/; p;}' "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. `cc -MD -o foo.o ...' puts the dependencies into `foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in `foo.d' instead, so we check for that too. # Subdirectories are respected. dir=`echo "$object" | sed -e 's|/[^/]*$|/|'` test "x$dir" = "x$object" && dir= base=`echo "$object" | sed -e 's|^.*/||' -e 's/\.o$//' -e 's/\.lo$//'` if test "$libtool" = yes; then # With Tru64 cc, shared objects can also be used to make a # static library. This mechanism is used in libtool 1.4 series to # handle both shared and static libraries in a single compilation. # With libtool 1.4, dependencies were output in $dir.libs/$base.lo.d. # # With libtool 1.5 this exception was removed, and libtool now # generates 2 separate objects for the 2 libraries. These two # compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir.libs/$base.lo.d # libtool 1.4 tmpdepfile2=$dir$base.o.d # libtool 1.5 tmpdepfile3=$dir.libs/$base.o.d # libtool 1.5 tmpdepfile4=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.o.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d tmpdepfile4=$dir$base.d "$@" -MD fi stat=$? if test $stat -eq 0; then : else rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" "$tmpdepfile4" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[a-z]*:,$object:," < "$tmpdepfile" > "$depfile" # That's a tab and a space in the []. sed -e 's,^.*\.[a-z]*:[ ]*,,' -e 's,$,:,' < "$tmpdepfile" >> "$depfile" else echo "#dummy" > "$depfile" fi rm -f "$tmpdepfile" ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for `:' # in the target name. This is to cope with DOS-style filenames: # a dependency such as `c:/foo/bar' could be seen as target `c' otherwise. "$@" $dashmflag | sed 's:^[ ]*[^: ][^:][^:]*\:[ ]*:'"$object"'\: :' > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" tr ' ' ' ' < "$tmpdepfile" | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # X makedepend shift cleared=no for arg in "$@"; do case $cleared in no) set ""; shift cleared=yes ;; esac case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix="`echo $object | sed 's/^.*\././'`" touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" sed '1,2d' "$tmpdepfile" | tr ' ' ' ' | \ ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test $1 != '--mode=compile'; do shift done shift fi # Remove `-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o, # because we must use -o when running libtool. "$@" || exit $? IFS=" " for arg do case "$arg" in "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::echo "`cygpath -u \\"\1\\"`":p' | sort | uniq > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s:: \1 \\:p' >> "$depfile" echo " " >> "$depfile" . "$tmpdepfile" | sed 's% %\\ %g' | sed -n '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: KCemu-0.5.1/config/config.sub0000755001050700006200000010115311163443003015431 0ustar glaubitzfbedv#! /bin/sh # Configuration validation subroutine script. # Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, # 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 # Free Software Foundation, Inc. timestamp='2008-01-16' # This file is (in principle) common to ALL GNU software. # The presence of a machine in this file suggests that SOME GNU software # can handle that machine. It does not imply ALL GNU software can. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street - Fifth Floor, Boston, MA # 02110-1301, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Please send patches to . Submit a context # diff and a properly formatted ChangeLog entry. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS $0 [OPTION] ALIAS Canonicalize a configuration name. Operation modes: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.sub ($timestamp) Copyright (C) 1992, 1993, 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" exit 1 ;; *local*) # First pass through any local machine types. echo $1 exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any). # Here we must recognize all the valid KERNEL-OS combinations. maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'` case $maybe_os in nto-qnx* | linux-gnu* | linux-dietlibc | linux-newlib* | linux-uclibc* | \ uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* | \ storm-chaos* | os2-emx* | rtmk-nova*) os=-$maybe_os basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'` ;; *) basic_machine=`echo $1 | sed 's/-[^-]*$//'` if [ $basic_machine != $1 ] then os=`echo $1 | sed 's/.*-/-/'` else os=; fi ;; esac ### Let's recognize common machines as not being operating systems so ### that things like config.sub decstation-3100 work. We also ### recognize some manufacturers as not being operating systems, so we ### can provide default operating systems below. case $os in -sun*os*) # Prevent following clause from handling this invalid input. ;; -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \ -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \ -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \ -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\ -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \ -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \ -apple | -axis | -knuth | -cray) os= basic_machine=$1 ;; -sim | -cisco | -oki | -wec | -winbond) os= basic_machine=$1 ;; -scout) ;; -wrs) os=-vxworks basic_machine=$1 ;; -chorusos*) os=-chorusos basic_machine=$1 ;; -chorusrdb) os=-chorusrdb basic_machine=$1 ;; -hiux*) os=-hiuxwe2 ;; -sco6) os=-sco5v6 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5) os=-sco3.2v5 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco4) os=-sco3.2v4 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2.[4-9]*) os=`echo $os | sed -e 's/sco3.2./sco3.2v/'` basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco3.2v[4-9]*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco5v6*) # Don't forget version if it is 3.2v4 or newer. basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -sco*) os=-sco3.2v2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -udk*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -isc) os=-isc2.2 basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -clix*) basic_machine=clipper-intergraph ;; -isc*) basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'` ;; -lynx*) os=-lynxos ;; -ptx*) basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'` ;; -windowsnt*) os=`echo $os | sed -e 's/windowsnt/winnt/'` ;; -psos*) os=-psos ;; -mint | -mint[0-9]*) basic_machine=m68k-atari os=-mint ;; esac # Decode aliases for certain CPU-COMPANY combinations. case $basic_machine in # Recognize the basic CPU types without company name. # Some are omitted here because they have special meanings below. 1750a | 580 \ | a29k \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arm | arm[bl]e | arme[lb] | armv[2345] | armv[345][lb] | avr | avr32 \ | bfin \ | c4x | clipper \ | d10v | d30v | dlx | dsp16xx \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | mcore | mep \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64el \ | mips64vr | mips64vrel \ | mips64orion | mips64orionel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | mt \ | msp430 \ | nios | nios2 \ | ns16k | ns32k \ | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle | ppcbe \ | pyramid \ | score \ | sh | sh[1234] | sh[24]a | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \ | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v \ | spu | strongarm \ | tahoe | thumb | tic4x | tic80 | tron \ | v850 | v850e \ | we32k \ | x86 | xc16x | xscale | xscalee[bl] | xstormy16 | xtensa \ | z8k) basic_machine=$basic_machine-unknown ;; m6811 | m68hc11 | m6812 | m68hc12) # Motorola 68HC11/12. basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) basic_machine=$basic_machine-pc ;; # Object if more than one company name word. *-*-*) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; # Recognize the basic CPU types with company name. 580-* \ | a29k-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* | c54x-* | c55x-* | c6x-* \ | clipper-* | craynv-* | cydra-* \ | d10v-* | d30v-* | dlx-* \ | elxsi-* \ | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \ | h8300-* | h8500-* \ | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* \ | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \ | mips16-* \ | mips64-* | mips64el-* \ | mips64vr-* | mips64vrel-* \ | mips64orion-* | mips64orionel-* \ | mips64vr4100-* | mips64vr4100el-* \ | mips64vr4300-* | mips64vr4300el-* \ | mips64vr5000-* | mips64vr5000el-* \ | mips64vr5900-* | mips64vr5900el-* \ | mipsisa32-* | mipsisa32el-* \ | mipsisa32r2-* | mipsisa32r2el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nios-* | nios2-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* | ppcbe-* \ | pyramid-* \ | romp-* | rs6000-* \ | sh-* | sh[1234]-* | sh[24]a-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \ | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \ | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \ | sparclite-* \ | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | strongarm-* | sv1-* | sx?-* \ | tahoe-* | thumb-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tron-* \ | v850-* | v850e-* | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* | xscale-* | xscalee[bl]-* \ | xstormy16-* | xtensa*-* \ | ymp-* \ | z8k-*) ;; # Recognize the basic CPU types without company name, with glob match. xtensa*) basic_machine=$basic_machine-unknown ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 386bsd) basic_machine=i386-unknown os=-bsd ;; 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) basic_machine=m68000-att ;; 3b*) basic_machine=we32k-att ;; a29khif) basic_machine=a29k-amd os=-udi ;; abacus) basic_machine=abacus-unknown ;; adobe68k) basic_machine=m68010-adobe os=-scout ;; alliant | fx80) basic_machine=fx80-alliant ;; altos | altos3068) basic_machine=m68k-altos ;; am29k) basic_machine=a29k-none os=-bsd ;; amd64) basic_machine=x86_64-pc ;; amd64-*) basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; amdahl) basic_machine=580-amdahl os=-sysv ;; amiga | amiga-*) basic_machine=m68k-unknown ;; amigaos | amigados) basic_machine=m68k-unknown os=-amigaos ;; amigaunix | amix) basic_machine=m68k-unknown os=-sysv4 ;; apollo68) basic_machine=m68k-apollo os=-sysv ;; apollo68bsd) basic_machine=m68k-apollo os=-bsd ;; aux) basic_machine=m68k-apple os=-aux ;; balance) basic_machine=ns32k-sequent os=-dynix ;; blackfin) basic_machine=bfin-unknown os=-linux ;; blackfin-*) basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; c90) basic_machine=c90-cray os=-unicos ;; convex-c1) basic_machine=c1-convex os=-bsd ;; convex-c2) basic_machine=c2-convex os=-bsd ;; convex-c32) basic_machine=c32-convex os=-bsd ;; convex-c34) basic_machine=c34-convex os=-bsd ;; convex-c38) basic_machine=c38-convex os=-bsd ;; cray | j90) basic_machine=j90-cray os=-unicos ;; craynv) basic_machine=craynv-cray os=-unicosmp ;; cr16) basic_machine=cr16-unknown os=-elf ;; crds | unos) basic_machine=m68k-crds ;; crisv32 | crisv32-* | etraxfs*) basic_machine=crisv32-axis ;; cris | cris-* | etrax*) basic_machine=cris-axis ;; crx) basic_machine=crx-unknown os=-elf ;; da30 | da30-*) basic_machine=m68k-da30 ;; decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn) basic_machine=mips-dec ;; decsystem10* | dec10*) basic_machine=pdp10-dec os=-tops10 ;; decsystem20* | dec20*) basic_machine=pdp10-dec os=-tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) basic_machine=m68k-motorola ;; delta88) basic_machine=m88k-motorola os=-sysv3 ;; djgpp) basic_machine=i586-pc os=-msdosdjgpp ;; dpx20 | dpx20-*) basic_machine=rs6000-bull os=-bosx ;; dpx2* | dpx2*-bull) basic_machine=m68k-bull os=-sysv3 ;; ebmon29k) basic_machine=a29k-amd os=-ebmon ;; elxsi) basic_machine=elxsi-elxsi os=-bsd ;; encore | umax | mmax) basic_machine=ns32k-encore ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson os=-ose ;; fx2800) basic_machine=i860-alliant ;; genix) basic_machine=ns32k-ns ;; gmicro) basic_machine=tron-gmicro os=-sysv ;; go32) basic_machine=i386-pc os=-go32 ;; h3050r* | hiux*) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; h8300hms) basic_machine=h8300-hitachi os=-hms ;; h8300xray) basic_machine=h8300-hitachi os=-xray ;; h8500hms) basic_machine=h8500-hitachi os=-hms ;; harris) basic_machine=m88k-harris os=-sysv3 ;; hp300-*) basic_machine=m68k-hp ;; hp300bsd) basic_machine=m68k-hp os=-bsd ;; hp300hpux) basic_machine=m68k-hp os=-hpux ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) basic_machine=m68000-hp ;; hp9k3[2-9][0-9]) basic_machine=m68k-hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) basic_machine=hppa1.0-hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) basic_machine=hppa1.1-hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp basic_machine=hppa1.1-hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) basic_machine=hppa1.1-hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) basic_machine=hppa1.0-hp ;; hppa-next) os=-nextstep3 ;; hppaosf) basic_machine=hppa1.1-hp os=-osf ;; hppro) basic_machine=hppa1.1-hp os=-proelf ;; i370-ibm* | ibm*) basic_machine=i370-ibm ;; # I'm not sure what "Sysv32" means. Should this be sysv3.2? i*86v32) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv32 ;; i*86v4*) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv4 ;; i*86v) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-sysv ;; i*86sol2) basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'` os=-solaris2 ;; i386mach) basic_machine=i386-mach os=-mach ;; i386-vsta | vsta) basic_machine=i386-unknown os=-vsta ;; iris | iris4d) basic_machine=mips-sgi case $os in -irix*) ;; *) os=-irix4 ;; esac ;; isi68 | isi) basic_machine=m68k-isi os=-sysv ;; m68knommu) basic_machine=m68k-unknown os=-linux ;; m68knommu-*) basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; m88k-omron*) basic_machine=m88k-omron ;; magnum | m3230) basic_machine=mips-mips os=-sysv ;; merlin) basic_machine=ns32k-utek os=-sysv ;; mingw32) basic_machine=i386-pc os=-mingw32 ;; mingw32ce) basic_machine=arm-unknown os=-mingw32ce ;; miniframe) basic_machine=m68000-convergent ;; *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*) basic_machine=m68k-atari os=-mint ;; mips3*-*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'` ;; mips3*) basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown ;; monitor) basic_machine=m68k-rom68k os=-coff ;; morphos) basic_machine=powerpc-unknown os=-morphos ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; mvs) basic_machine=i370-ibm os=-mvs ;; ncr3000) basic_machine=i486-ncr os=-sysv4 ;; netbsd386) basic_machine=i386-unknown os=-netbsd ;; netwinder) basic_machine=armv4l-rebel os=-linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony os=-newsos ;; news1000) basic_machine=m68030-sony os=-newsos ;; news-3600 | risc-news) basic_machine=mips-sony os=-newsos ;; necv70) basic_machine=v70-nec os=-sysv ;; next | m*-next ) basic_machine=m68k-next case $os in -nextstep* ) ;; -ns2*) os=-nextstep2 ;; *) os=-nextstep3 ;; esac ;; nh3000) basic_machine=m68k-harris os=-cxux ;; nh[45]000) basic_machine=m88k-harris os=-cxux ;; nindy960) basic_machine=i960-intel os=-nindy ;; mon960) basic_machine=i960-intel os=-mon960 ;; nonstopux) basic_machine=mips-compaq os=-nonstopux ;; np1) basic_machine=np1-gould ;; nsr-tandem) basic_machine=nsr-tandem ;; op50n-* | op60c-*) basic_machine=hppa1.1-oki os=-proelf ;; openrisc | openrisc-*) basic_machine=or32-unknown ;; os400) basic_machine=powerpc-ibm os=-os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson os=-ose ;; os68k) basic_machine=m68k-none os=-os68k ;; pa-hitachi) basic_machine=hppa1.1-hitachi os=-hiuxwe2 ;; paragon) basic_machine=i860-intel os=-osf ;; parisc) basic_machine=hppa-unknown os=-linux ;; parisc-*) basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'` os=-linux ;; pbd) basic_machine=sparc-tti ;; pbb) basic_machine=m68k-tti ;; pc532 | pc532-*) basic_machine=ns32k-pc532 ;; pc98) basic_machine=i386-pc ;; pc98-*) basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium | p5 | k5 | k6 | nexgen | viac3) basic_machine=i586-pc ;; pentiumpro | p6 | 6x86 | athlon | athlon_*) basic_machine=i686-pc ;; pentiumii | pentium2 | pentiumiii | pentium3) basic_machine=i686-pc ;; pentium4) basic_machine=i786-pc ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumpro-* | p6-* | 6x86-* | athlon-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pentium4-*) basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'` ;; pn) basic_machine=pn-gould ;; power) basic_machine=power-ibm ;; ppc) basic_machine=powerpc-unknown ;; ppc-*) basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppcle | powerpclittle | ppc-le | powerpc-little) basic_machine=powerpcle-unknown ;; ppcle-* | powerpclittle-*) basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64) basic_machine=powerpc64-unknown ;; ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ppc64le | powerpc64little | ppc64-le | powerpc64-little) basic_machine=powerpc64le-unknown ;; ppc64le-* | powerpc64little-*) basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'` ;; ps2) basic_machine=i386-ibm ;; pw32) basic_machine=i586-unknown os=-pw32 ;; rdos) basic_machine=i386-pc os=-rdos ;; rom68k) basic_machine=m68k-rom68k os=-coff ;; rm[46]00) basic_machine=mips-siemens ;; rtpc | rtpc-*) basic_machine=romp-ibm ;; s390 | s390-*) basic_machine=s390-ibm ;; s390x | s390x-*) basic_machine=s390x-ibm ;; sa29200) basic_machine=a29k-amd os=-udi ;; sb1) basic_machine=mipsisa64sb1-unknown ;; sb1el) basic_machine=mipsisa64sb1el-unknown ;; sde) basic_machine=mipsisa32-sde os=-elf ;; sei) basic_machine=mips-sei os=-seiux ;; sequent) basic_machine=i386-sequent ;; sh) basic_machine=sh-hitachi os=-hms ;; sh5el) basic_machine=sh5le-unknown ;; sh64) basic_machine=sh64-unknown ;; sparclite-wrs | simso-wrs) basic_machine=sparclite-wrs os=-vxworks ;; sps7) basic_machine=m68k-bull os=-sysv2 ;; spur) basic_machine=spur-unknown ;; st2000) basic_machine=m68k-tandem ;; stratus) basic_machine=i860-stratus os=-sysv4 ;; sun2) basic_machine=m68000-sun ;; sun2os3) basic_machine=m68000-sun os=-sunos3 ;; sun2os4) basic_machine=m68000-sun os=-sunos4 ;; sun3os3) basic_machine=m68k-sun os=-sunos3 ;; sun3os4) basic_machine=m68k-sun os=-sunos4 ;; sun4os3) basic_machine=sparc-sun os=-sunos3 ;; sun4os4) basic_machine=sparc-sun os=-sunos4 ;; sun4sol2) basic_machine=sparc-sun os=-solaris2 ;; sun3 | sun3-*) basic_machine=m68k-sun ;; sun4) basic_machine=sparc-sun ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun ;; sv1) basic_machine=sv1-cray os=-unicos ;; symmetry) basic_machine=i386-sequent os=-dynix ;; t3e) basic_machine=alphaev5-cray os=-unicos ;; t90) basic_machine=t90-cray os=-unicos ;; tic54x | c54x*) basic_machine=tic54x-unknown os=-coff ;; tic55x | c55x*) basic_machine=tic55x-unknown os=-coff ;; tic6x | c6x*) basic_machine=tic6x-unknown os=-coff ;; tile*) basic_machine=tile-unknown os=-linux-gnu ;; tx39) basic_machine=mipstx39-unknown ;; tx39el) basic_machine=mipstx39el-unknown ;; toad1) basic_machine=pdp10-xkl os=-tops20 ;; tower | tower-32) basic_machine=m68k-ncr ;; tpf) basic_machine=s390x-ibm os=-tpf ;; udi29k) basic_machine=a29k-amd os=-udi ;; ultra3) basic_machine=a29k-nyu os=-sym1 ;; v810 | necv810) basic_machine=v810-nec os=-none ;; vaxv) basic_machine=vax-dec os=-sysv ;; vms) basic_machine=vax-dec os=-vms ;; vpp*|vx|vx-*) basic_machine=f301-fujitsu ;; vxworks960) basic_machine=i960-wrs os=-vxworks ;; vxworks68) basic_machine=m68k-wrs os=-vxworks ;; vxworks29k) basic_machine=a29k-wrs os=-vxworks ;; w65*) basic_machine=w65-wdc os=-none ;; w89k-*) basic_machine=hppa1.1-winbond os=-proelf ;; xbox) basic_machine=i686-pc os=-mingw32 ;; xps | xps100) basic_machine=xps100-honeywell ;; ymp) basic_machine=ymp-cray os=-unicos ;; z8k-*-coff) basic_machine=z8k-unknown os=-sim ;; none) basic_machine=none-none os=-none ;; # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) basic_machine=hppa1.1-winbond ;; op50n) basic_machine=hppa1.1-oki ;; op60c) basic_machine=hppa1.1-oki ;; romp) basic_machine=romp-ibm ;; mmix) basic_machine=mmix-knuth ;; rs6000) basic_machine=rs6000-ibm ;; vax) basic_machine=vax-dec ;; pdp10) # there are many clones, so DEC is not a safe bet basic_machine=pdp10-unknown ;; pdp11) basic_machine=pdp11-dec ;; we32k) basic_machine=we32k-att ;; sh[1234] | sh[24]a | sh[34]eb | sh[1234]le | sh[23]ele) basic_machine=sh-unknown ;; sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v) basic_machine=sparc-sun ;; cydra) basic_machine=cydra-cydrome ;; orion) basic_machine=orion-highlevel ;; orion105) basic_machine=clipper-highlevel ;; mac | mpw | mac-mpw) basic_machine=m68k-apple ;; pmac | pmac-mpw) basic_machine=powerpc-apple ;; *-unknown) # Make sure to match an already-canonicalized machine name. ;; *) echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2 exit 1 ;; esac # Here we canonicalize certain aliases for manufacturers. case $basic_machine in *-digital*) basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'` ;; *-commodore*) basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'` ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if [ x"$os" != x"" ] then case $os in # First match some system type aliases # that might get confused with valid system types. # -solaris* is a basic system type, with this one exception. -solaris1 | -solaris1.*) os=`echo $os | sed -e 's|solaris1|sunos4|'` ;; -solaris) os=-solaris2 ;; -svr4*) os=-sysv4 ;; -unixware*) os=-sysv4.2uw ;; -gnu/linux*) os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'` ;; # First accept the basic system types. # The portable systems comes first. # Each alternative MUST END IN A *, to match a version number. # -sysv* is not here because it comes later, after sysvr4. -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \ | -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\ | -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \ | -aos* \ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \ | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \ | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \ | -openbsd* | -solidbsd* \ | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \ | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \ | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \ | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \ | -chorusos* | -chorusrdb* \ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -linux-gnu* | -linux-newlib* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* \ | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \ | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \ | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \ | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \ | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \ | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \ | -skyos* | -haiku* | -rdos* | -toppers* | -drops*) # Remember, each alternative MUST END IN *, to match a version number. ;; -qnx*) case $basic_machine in x86-* | i*86-*) ;; *) os=-nto$os ;; esac ;; -nto-qnx*) ;; -nto*) os=`echo $os | sed -e 's|nto|nto-qnx|'` ;; -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \ | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \ | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*) ;; -mac*) os=`echo $os | sed -e 's|mac|macos|'` ;; -linux-dietlibc) os=-linux-dietlibc ;; -linux*) os=`echo $os | sed -e 's|linux|linux-gnu|'` ;; -sunos5*) os=`echo $os | sed -e 's|sunos5|solaris2|'` ;; -sunos6*) os=`echo $os | sed -e 's|sunos6|solaris3|'` ;; -opened*) os=-openedition ;; -os400*) os=-os400 ;; -wince*) os=-wince ;; -osfrose*) os=-osfrose ;; -osf*) os=-osf ;; -utek*) os=-bsd ;; -dynix*) os=-bsd ;; -acis*) os=-aos ;; -atheos*) os=-atheos ;; -syllable*) os=-syllable ;; -386bsd) os=-bsd ;; -ctix* | -uts*) os=-sysv ;; -nova*) os=-rtmk-nova ;; -ns2 ) os=-nextstep2 ;; -nsk*) os=-nsk ;; # Preserve the version number of sinix5. -sinix5.*) os=`echo $os | sed -e 's|sinix|sysv|'` ;; -sinix*) os=-sysv4 ;; -tpf*) os=-tpf ;; -triton*) os=-sysv3 ;; -oss*) os=-sysv3 ;; -svr4) os=-sysv4 ;; -svr3) os=-sysv3 ;; -sysvr4) os=-sysv4 ;; # This must come after -sysvr4. -sysv*) ;; -ose*) os=-ose ;; -es1800*) os=-ose ;; -xenix) os=-xenix ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) os=-mint ;; -aros*) os=-aros ;; -kaos*) os=-kaos ;; -zvmoe) os=-zvmoe ;; -none) ;; *) # Get rid of the `-' at the beginning of $os. os=`echo $os | sed 's/[^-]*-//'` echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2 exit 1 ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. case $basic_machine in score-*) os=-elf ;; spu-*) os=-elf ;; *-acorn) os=-riscix1.2 ;; arm*-rebel) os=-linux ;; arm*-semi) os=-aout ;; c4x-* | tic4x-*) os=-coff ;; # This must come before the *-dec entry. pdp10-*) os=-tops20 ;; pdp11-*) os=-none ;; *-dec | vax-*) os=-ultrix4.2 ;; m68*-apollo) os=-domain ;; i386-sun) os=-sunos4.0.2 ;; m68000-sun) os=-sunos3 # This also exists in the configure program, but was not the # default. # os=-sunos4 ;; m68*-cisco) os=-aout ;; mep-*) os=-elf ;; mips*-cisco) os=-elf ;; mips*-*) os=-elf ;; or32-*) os=-coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=-sysv3 ;; sparc-* | *-sun) os=-sunos4.1.1 ;; *-be) os=-beos ;; *-haiku) os=-haiku ;; *-ibm) os=-aix ;; *-knuth) os=-mmixware ;; *-wec) os=-proelf ;; *-winbond) os=-proelf ;; *-oki) os=-proelf ;; *-hp) os=-hpux ;; *-hitachi) os=-hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=-sysv ;; *-cbm) os=-amigaos ;; *-dg) os=-dgux ;; *-dolphin) os=-sysv3 ;; m68k-ccur) os=-rtu ;; m88k-omron*) os=-luna ;; *-next ) os=-nextstep ;; *-sequent) os=-ptx ;; *-crds) os=-unos ;; *-ns) os=-genix ;; i370-*) os=-mvs ;; *-next) os=-nextstep3 ;; *-gould) os=-sysv ;; *-highlevel) os=-bsd ;; *-encore) os=-bsd ;; *-sgi) os=-irix ;; *-siemens) os=-sysv4 ;; *-masscomp) os=-rtu ;; f30[01]-fujitsu | f700-fujitsu) os=-uxpv ;; *-rom68k) os=-coff ;; *-*bug) os=-coff ;; *-apple) os=-macos ;; *-atari*) os=-mint ;; *) os=-none ;; esac fi # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. vendor=unknown case $basic_machine in *-unknown) case $os in -riscix*) vendor=acorn ;; -sunos*) vendor=sun ;; -aix*) vendor=ibm ;; -beos*) vendor=be ;; -hpux*) vendor=hp ;; -mpeix*) vendor=hp ;; -hiux*) vendor=hitachi ;; -unos*) vendor=crds ;; -dgux*) vendor=dg ;; -luna*) vendor=omron ;; -genix*) vendor=ns ;; -mvs* | -opened*) vendor=ibm ;; -os400*) vendor=ibm ;; -ptx*) vendor=sequent ;; -tpf*) vendor=ibm ;; -vxsim* | -vxworks* | -windiss*) vendor=wrs ;; -aux*) vendor=apple ;; -hms*) vendor=hitachi ;; -mpw* | -macos*) vendor=apple ;; -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*) vendor=atari ;; -vos*) vendor=stratus ;; esac basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"` ;; esac echo $basic_machine$os exit # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: KCemu-0.5.1/config/missing0000755001050700006200000002557711163443003015064 0ustar glaubitzfbedv#! /bin/sh # Common stub for a few missing GNU programs while installing. scriptversion=2006-05-10.23 # Copyright (C) 1996, 1997, 1999, 2000, 2002, 2003, 2004, 2005, 2006 # Free Software Foundation, Inc. # Originally by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA # 02110-1301, USA. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try \`$0 --help' for more information" exit 1 fi run=: sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p' sed_minuso='s/.* -o \([^ ]*\).*/\1/p' # In the cases where this matters, `missing' is being run in the # srcdir already. if test -f configure.ac; then configure_ac=configure.ac else configure_ac=configure.in fi msg="missing on your system" case $1 in --run) # Try to run requested program, and just exit if it succeeds. run= shift "$@" && exit 0 # Exit code 63 means version mismatch. This often happens # when the user try to use an ancient version of a tool on # a file that requires a minimum version. In this case we # we should proceed has if the program had been absent, or # if --run hadn't been passed. if test $? = 63; then run=: msg="probably too old" fi ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Handle \`PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an error status if there is no known handling for PROGRAM. Options: -h, --help display this help and exit -v, --version output version information and exit --run try to run the given command, and emulate it if it fails Supported PROGRAM values: aclocal touch file \`aclocal.m4' autoconf touch file \`configure' autoheader touch file \`config.h.in' autom4te touch the output file, or create a stub one automake touch all \`Makefile.in' files bison create \`y.tab.[ch]', if possible, from existing .[ch] flex create \`lex.yy.c', if possible, from existing .c help2man touch the output file lex create \`lex.yy.c', if possible, from existing .c makeinfo touch the output file tar try tar, gnutar, gtar, then tar without non-portable flags yacc create \`y.tab.[ch]', if possible, from existing .[ch] Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: Unknown \`$1' option" echo 1>&2 "Try \`$0 --help' for more information" exit 1 ;; esac # Now exit if we have it, but it failed. Also exit now if we # don't have it and --version was passed (most likely to detect # the program). case $1 in lex|yacc) # Not GNU programs, they don't have --version. ;; tar) if test -n "$run"; then echo 1>&2 "ERROR: \`tar' requires --run" exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then exit 1 fi ;; *) if test -z "$run" && ($1 --version) > /dev/null 2>&1; then # We have it, but it failed. exit 1 elif test "x$2" = "x--version" || test "x$2" = "x--help"; then # Could not run --version or --help. This is probably someone # running `$TOOL --version' or `$TOOL --help' to check whether # $TOOL exists and not knowing $TOOL uses missing. exit 1 fi ;; esac # If it does not exist, or fails to run (possibly an outdated version), # try to emulate it. case $1 in aclocal*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." touch aclocal.m4 ;; autoconf) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." touch configure ;; autoheader) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`acconfig.h' or \`${configure_ac}'. You might want to install the \`Autoconf' and \`GNU m4' packages. Grab them from any GNU archive site." files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}` test -z "$files" && files="config.h" touch_files= for f in $files; do case $f in *:*) touch_files="$touch_files "`echo "$f" | sed -e 's/^[^:]*://' -e 's/:.*//'`;; *) touch_files="$touch_files $f.in";; esac done touch $touch_files ;; automake*) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified \`Makefile.am', \`acinclude.m4' or \`${configure_ac}'. You might want to install the \`Automake' and \`Perl' packages. Grab them from any GNU archive site." find . -type f -name Makefile.am -print | sed 's/\.am$/.in/' | while read f; do touch "$f"; done ;; autom4te) echo 1>&2 "\ WARNING: \`$1' is needed, but is $msg. You might have modified some files without having the proper tools for further handling them. You can get \`$1' as part of \`Autoconf' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo "#! /bin/sh" echo "# Created by GNU Automake missing as a replacement of" echo "# $ $@" echo "exit 0" chmod +x $file exit 1 fi ;; bison|yacc) echo 1>&2 "\ WARNING: \`$1' $msg. You should only need it if you modified a \`.y' file. You may need the \`Bison' package in order for those modifications to take effect. You can get \`Bison' from any GNU archive site." rm -f y.tab.c y.tab.h if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.y) SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.c fi SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'` if test -f "$SRCFILE"; then cp "$SRCFILE" y.tab.h fi ;; esac fi if test ! -f y.tab.h; then echo >y.tab.h fi if test ! -f y.tab.c; then echo 'main() { return 0; }' >y.tab.c fi ;; lex|flex) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.l' file. You may need the \`Flex' package in order for those modifications to take effect. You can get \`Flex' from any GNU archive site." rm -f lex.yy.c if test $# -ne 1; then eval LASTARG="\${$#}" case $LASTARG in *.l) SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'` if test -f "$SRCFILE"; then cp "$SRCFILE" lex.yy.c fi ;; esac fi if test ! -f lex.yy.c; then echo 'main() { return 0; }' >lex.yy.c fi ;; help2man) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a dependency of a manual page. You may need the \`Help2man' package in order for those modifications to take effect. You can get \`Help2man' from any GNU archive site." file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -f "$file"; then touch $file else test -z "$file" || exec >$file echo ".ab help2man is required to generate this page" exit 1 fi ;; makeinfo) echo 1>&2 "\ WARNING: \`$1' is $msg. You should only need it if you modified a \`.texi' or \`.texinfo' file, or any other file indirectly affecting the aspect of the manual. The spurious call might also be the consequence of using a buggy \`make' (AIX, DU, IRIX). You might want to install the \`Texinfo' package or the \`GNU make' package. Grab either from any GNU archive site." # The file to touch is that specified with -o ... file=`echo "$*" | sed -n "$sed_output"` test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"` if test -z "$file"; then # ... or it is the one specified with @setfilename ... infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'` file=`sed -n ' /^@setfilename/{ s/.* \([^ ]*\) *$/\1/ p q }' $infile` # ... or it is derived from the source name (dir/f.texi becomes f.info) test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info fi # If the file does not exist, the user really needs makeinfo; # let's fail without touching anything. test -f $file || exit 1 touch $file ;; tar) shift # We have already tried tar in the generic part. # Look for gnutar/gtar before invocation to avoid ugly error # messages. if (gnutar --version > /dev/null 2>&1); then gnutar "$@" && exit 0 fi if (gtar --version > /dev/null 2>&1); then gtar "$@" && exit 0 fi firstarg="$1" if shift; then case $firstarg in *o*) firstarg=`echo "$firstarg" | sed s/o//` tar "$firstarg" "$@" && exit 0 ;; esac case $firstarg in *h*) firstarg=`echo "$firstarg" | sed s/h//` tar "$firstarg" "$@" && exit 0 ;; esac fi echo 1>&2 "\ WARNING: I can't seem to be able to run \`tar' with the given arguments. You may want to install GNU tar or Free paxutils, or check the command line arguments." exit 1 ;; *) echo 1>&2 "\ WARNING: \`$1' is needed, and is $msg. You might have modified some files without having the proper tools for further handling them. Check the \`README' file, it often tells you about the needed prerequisites for installing this package. You may also peek at any GNU archive site, in case some other package would contain this missing \`$1' program." exit 1 ;; esac exit 0 # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: KCemu-0.5.1/config/m4/0000755001050700006200000000000011345001723013766 5ustar glaubitzfbedvKCemu-0.5.1/config/m4/lib-link.m40000644001050700006200000007205511340261610015740 0ustar glaubitzfbedv# lib-link.m4 serial 13 (gettext-0.17) dnl Copyright (C) 2001-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ(2.54) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes undefine([Name]) undefine([NAME]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. If found, it dnl sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} and dnl LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) define([Name],[translit([$1],[./-], [___])]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" LIBS="$LIBS $LIB[]NAME" AC_TRY_LINK([$3], [$4], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name=no]) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the $1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) undefine([Name]) undefine([NAME]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Tell automake >= 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], acl_cv_rpath, [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE(rpath, [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) define([NAME],[translit([$1],[abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])]) dnl Autoconf >= 2.61 supports dots in --with options. define([N_A_M_E],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[translit([$1],[.],[_])],[$1])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib]N_A_M_E[-prefix], [ --with-lib]N_A_M_E[-prefix[=DIR] search for lib$1 in DIR/include and DIR/lib --without-lib]N_A_M_E[-prefix don't search for lib$1 in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./-|ABCDEFGHIJKLMNOPQRSTUVWXYZ___|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no || test "X$found_dir" = "X/usr/$acl_libdirstem"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` LIB[]NAME[]_PREFIX="$basedir" additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) KCemu-0.5.1/config/m4/progtest.m40000644001050700006200000000555011321666454016120 0ustar glaubitzfbedv# progtest.m4 serial 4 (gettext-0.14.2) dnl Copyright (C) 1996-2003, 2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1996. AC_PREREQ(2.50) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then echo "#! /bin/sh" >conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL(ac_cv_path_$1, [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$]$1) else AC_MSG_RESULT(no) fi AC_SUBST($1)dnl ]) KCemu-0.5.1/config/m4/gettext.m40000644001050700006200000003457011340261610015723 0ustar glaubitzfbedv# gettext.m4 serial 60 (gettext-0.17) dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2006. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value `$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on MacOS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH(included-gettext, [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT($nls_cv_force_use_gnu_gettext) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings;], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *);], [bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("")], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE(ENABLE_NLS, 1, [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE(HAVE_GETTEXT, 1, [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE(HAVE_DCGETTEXT, 1, [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST(BUILD_INCLUDED_LIBINTL) AC_SUBST(USE_INCLUDED_LIBINTL) AC_SUBST(CATOBJEXT) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST(DATADIRNAME) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST(INSTOBJEXT) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST(GENCAT) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST(INTLOBJS) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST(INTL_LIBTOOL_SUFFIX_PREFIX) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST(INTLLIBS) dnl Make all documented variables known to autoconf. AC_SUBST(LIBINTL) AC_SUBST(LTLIBINTL) AC_SUBST(POSUB) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) KCemu-0.5.1/config/m4/visibility.m40000644001050700006200000000413011321666454016431 0ustar glaubitzfbedv# visibility.m4 serial 1 (gettext-0.15) dnl Copyright (C) 2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Tests whether the compiler supports the command-line option dnl -fvisibility=hidden and the function and variable attributes dnl __attribute__((__visibility__("hidden"))) and dnl __attribute__((__visibility__("default"))). dnl Does *not* test for __visibility__("protected") - which has tricky dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on dnl MacOS X. dnl Does *not* test for __visibility__("internal") - which has processor dnl dependent semantics. dnl Does *not* test for #pragma GCC visibility push(hidden) - which is dnl "really only recommended for legacy code". dnl Set the variable CFLAG_VISIBILITY. dnl Defines and sets the variable HAVE_VISIBILITY. AC_DEFUN([gl_VISIBILITY], [ AC_REQUIRE([AC_PROG_CC]) CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then AC_MSG_CHECKING([for simple visibility declarations]) AC_CACHE_VAL(gl_cv_cc_visibility, [ gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" AC_TRY_COMPILE( [extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void);], [], gl_cv_cc_visibility=yes, gl_cv_cc_visibility=no) CFLAGS="$gl_save_CFLAGS"]) AC_MSG_RESULT([$gl_cv_cc_visibility]) if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi AC_SUBST([CFLAG_VISIBILITY]) AC_SUBST([HAVE_VISIBILITY]) AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) ]) KCemu-0.5.1/config/m4/wint_t.m40000644001050700006200000000170711340261610015537 0ustar glaubitzfbedv# wint_t.m4 serial 2 (gettext-0.17) dnl Copyright (C) 2003, 2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether has the 'wint_t' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WINT_T], [ AC_CACHE_CHECK([for wint_t], gt_cv_c_wint_t, [AC_TRY_COMPILE([ /* Tru64 with Desktop Toolkit C has a bug: must be included before . BSD/OS 4.0.1 has a bug: , and must be included before . */ #include #include #include #include wint_t foo = (wchar_t)'\0';], , gt_cv_c_wint_t=yes, gt_cv_c_wint_t=no)]) if test $gt_cv_c_wint_t = yes; then AC_DEFINE(HAVE_WINT_T, 1, [Define if you have the 'wint_t' type.]) fi ]) KCemu-0.5.1/config/m4/intl.m40000644001050700006200000002525011340261610015200 0ustar glaubitzfbedv# intl.m4 serial 8 (gettext-0.17) dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2006. AC_PREREQ(2.52) dnl Checks for all prerequisites of the intl subdirectory, dnl except for INTL_LIBTOOL_SUFFIX_PREFIX (and possibly LIBTOOL), INTLOBJS, dnl USE_INCLUDED_LIBINTL, BUILD_INCLUDED_LIBINTL. AC_DEFUN([AM_INTL_SUBDIR], [ AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([gt_GLIBC2])dnl AC_REQUIRE([AC_PROG_RANLIB])dnl AC_REQUIRE([gl_VISIBILITY])dnl AC_REQUIRE([gt_INTL_SUBDIR_CORE])dnl AC_REQUIRE([AC_TYPE_LONG_LONG_INT])dnl AC_REQUIRE([gt_TYPE_WCHAR_T])dnl AC_REQUIRE([gt_TYPE_WINT_T])dnl AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gt_TYPE_INTMAX_T]) AC_REQUIRE([gt_PRINTF_POSIX]) AC_REQUIRE([gl_GLIBC21])dnl AC_REQUIRE([gl_XSIZE])dnl AC_REQUIRE([gt_INTL_MACOSX])dnl AC_CHECK_TYPE([ptrdiff_t], , [AC_DEFINE([ptrdiff_t], [long], [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) ]) AC_CHECK_HEADERS([stddef.h stdlib.h string.h]) AC_CHECK_FUNCS([asprintf fwprintf putenv setenv setlocale snprintf wcslen]) dnl Use the _snprintf function only if it is declared (because on NetBSD it dnl is defined as a weak alias of snprintf; we prefer to use the latter). gt_CHECK_DECL(_snprintf, [#include ]) gt_CHECK_DECL(_snwprintf, [#include ]) dnl Use the *_unlocked functions only if they are declared. dnl (because some of them were defined without being declared in Solaris dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built dnl on Solaris 2.5.1 to run on Solaris 2.6). dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13. gt_CHECK_DECL(getc_unlocked, [#include ]) case $gt_cv_func_printf_posix in *yes) HAVE_POSIX_PRINTF=1 ;; *) HAVE_POSIX_PRINTF=0 ;; esac AC_SUBST([HAVE_POSIX_PRINTF]) if test "$ac_cv_func_asprintf" = yes; then HAVE_ASPRINTF=1 else HAVE_ASPRINTF=0 fi AC_SUBST([HAVE_ASPRINTF]) if test "$ac_cv_func_snprintf" = yes; then HAVE_SNPRINTF=1 else HAVE_SNPRINTF=0 fi AC_SUBST([HAVE_SNPRINTF]) if test "$ac_cv_func_wprintf" = yes; then HAVE_WPRINTF=1 else HAVE_WPRINTF=0 fi AC_SUBST([HAVE_WPRINTF]) AM_LANGINFO_CODESET gt_LC_MESSAGES dnl Compilation on mingw and Cygwin needs special Makefile rules, because dnl 1. when we install a shared library, we must arrange to export dnl auxiliary pointer variables for every exported variable, dnl 2. when we install a shared library and a static library simultaneously, dnl the include file specifies __declspec(dllimport) and therefore we dnl must arrange to define the auxiliary pointer variables for the dnl exported variables _also_ in the static library. if test "$enable_shared" = yes; then case "$host_os" in mingw* | cygwin*) is_woe32dll=yes ;; *) is_woe32dll=no ;; esac else is_woe32dll=no fi WOE32DLL=$is_woe32dll AC_SUBST([WOE32DLL]) dnl On mingw and Cygwin, we can activate special Makefile rules which add dnl version information to the shared libraries and executables. case "$host_os" in mingw* | cygwin*) is_woe32=yes ;; *) is_woe32=no ;; esac WOE32=$is_woe32 AC_SUBST([WOE32]) if test $WOE32 = yes; then dnl Check for a program that compiles Windows resource files. AC_CHECK_TOOL([WINDRES], [windres]) fi dnl Determine whether when creating a library, "-lc" should be passed to dnl libtool or not. On many platforms, it is required for the libtool option dnl -no-undefined to work. On HP-UX, however, the -lc - stored by libtool dnl in the *.la files - makes it impossible to create multithreaded programs, dnl because libtool also reorders the -lc to come before the -pthread, and dnl this disables pthread_create() . case "$host_os" in hpux*) LTLIBC="" ;; *) LTLIBC="-lc" ;; esac AC_SUBST([LTLIBC]) dnl Rename some macros and functions used for locking. AH_BOTTOM([ #define __libc_lock_t gl_lock_t #define __libc_lock_define gl_lock_define #define __libc_lock_define_initialized gl_lock_define_initialized #define __libc_lock_init gl_lock_init #define __libc_lock_lock gl_lock_lock #define __libc_lock_unlock gl_lock_unlock #define __libc_lock_recursive_t gl_recursive_lock_t #define __libc_lock_define_recursive gl_recursive_lock_define #define __libc_lock_define_initialized_recursive gl_recursive_lock_define_initialized #define __libc_lock_init_recursive gl_recursive_lock_init #define __libc_lock_lock_recursive gl_recursive_lock_lock #define __libc_lock_unlock_recursive gl_recursive_lock_unlock #define glthread_in_use libintl_thread_in_use #define glthread_lock_init libintl_lock_init #define glthread_lock_lock libintl_lock_lock #define glthread_lock_unlock libintl_lock_unlock #define glthread_lock_destroy libintl_lock_destroy #define glthread_rwlock_init libintl_rwlock_init #define glthread_rwlock_rdlock libintl_rwlock_rdlock #define glthread_rwlock_wrlock libintl_rwlock_wrlock #define glthread_rwlock_unlock libintl_rwlock_unlock #define glthread_rwlock_destroy libintl_rwlock_destroy #define glthread_recursive_lock_init libintl_recursive_lock_init #define glthread_recursive_lock_lock libintl_recursive_lock_lock #define glthread_recursive_lock_unlock libintl_recursive_lock_unlock #define glthread_recursive_lock_destroy libintl_recursive_lock_destroy #define glthread_once libintl_once #define glthread_once_call libintl_once_call #define glthread_once_singlethreaded libintl_once_singlethreaded ]) ]) dnl Checks for the core files of the intl subdirectory: dnl dcigettext.c dnl eval-plural.h dnl explodename.c dnl finddomain.c dnl gettextP.h dnl gmo.h dnl hash-string.h hash-string.c dnl l10nflist.c dnl libgnuintl.h.in (except the *printf stuff) dnl loadinfo.h dnl loadmsgcat.c dnl localealias.c dnl log.c dnl plural-exp.h plural-exp.c dnl plural.y dnl Used by libglocale. AC_DEFUN([gt_INTL_SUBDIR_CORE], [ AC_REQUIRE([AC_C_INLINE])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_REQUIRE([AC_FUNC_ALLOCA])dnl AC_REQUIRE([AC_FUNC_MMAP])dnl AC_REQUIRE([gt_INTDIV0])dnl AC_REQUIRE([gl_AC_TYPE_UINTMAX_T])dnl AC_REQUIRE([gt_INTTYPES_PRI])dnl AC_REQUIRE([gl_LOCK])dnl AC_TRY_LINK( [int foo (int a) { a = __builtin_expect (a, 10); return a == 10 ? 0 : 1; }], [], [AC_DEFINE([HAVE_BUILTIN_EXPECT], 1, [Define to 1 if the compiler understands __builtin_expect.])]) AC_CHECK_HEADERS([argz.h inttypes.h limits.h unistd.h sys/param.h]) AC_CHECK_FUNCS([getcwd getegid geteuid getgid getuid mempcpy munmap \ stpcpy strcasecmp strdup strtoul tsearch argz_count argz_stringify \ argz_next __fsetlocking]) dnl Use the *_unlocked functions only if they are declared. dnl (because some of them were defined without being declared in Solaris dnl 2.5.1 but were removed in Solaris 2.6, whereas we want binaries built dnl on Solaris 2.5.1 to run on Solaris 2.6). dnl Don't use AC_CHECK_DECLS because it isn't supported in autoconf-2.13. gt_CHECK_DECL(feof_unlocked, [#include ]) gt_CHECK_DECL(fgets_unlocked, [#include ]) AM_ICONV dnl glibc >= 2.4 has a NL_LOCALE_NAME macro when _GNU_SOURCE is defined, dnl and a _NL_LOCALE_NAME macro always. AC_CACHE_CHECK([for NL_LOCALE_NAME macro], gt_cv_nl_locale_name, [AC_TRY_LINK([#include #include ], [char* cs = nl_langinfo(_NL_LOCALE_NAME(LC_MESSAGES)); return !cs; ], gt_cv_nl_locale_name=yes, gt_cv_nl_locale_name=no) ]) if test $gt_cv_nl_locale_name = yes; then AC_DEFINE(HAVE_NL_LOCALE_NAME, 1, [Define if you have and it defines the NL_LOCALE_NAME macro if _GNU_SOURCE is defined.]) fi dnl intl/plural.c is generated from intl/plural.y. It requires bison, dnl because plural.y uses bison specific features. It requires at least dnl bison-1.26 because earlier versions generate a plural.c that doesn't dnl compile. dnl bison is only needed for the maintainer (who touches plural.y). But in dnl order to avoid separate Makefiles or --enable-maintainer-mode, we put dnl the rule in general Makefile. Now, some people carelessly touch the dnl files or have a broken "make" program, hence the plural.c rule will dnl sometimes fire. To avoid an error, defines BISON to ":" if it is not dnl present or too old. AC_CHECK_PROGS([INTLBISON], [bison]) if test -z "$INTLBISON"; then ac_verc_fail=yes else dnl Found it, now check the version. AC_MSG_CHECKING([version of bison]) changequote(<<,>>)dnl ac_prog_version=`$INTLBISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` case $ac_prog_version in '') ac_prog_version="v. ?.??, bad"; ac_verc_fail=yes;; 1.2[6-9]* | 1.[3-9][0-9]* | [2-9].*) changequote([,])dnl ac_prog_version="$ac_prog_version, ok"; ac_verc_fail=no;; *) ac_prog_version="$ac_prog_version, bad"; ac_verc_fail=yes;; esac AC_MSG_RESULT([$ac_prog_version]) fi if test $ac_verc_fail = yes; then INTLBISON=: fi ]) dnl gt_CHECK_DECL(FUNC, INCLUDES) dnl Check whether a function is declared. AC_DEFUN([gt_CHECK_DECL], [ AC_CACHE_CHECK([whether $1 is declared], ac_cv_have_decl_$1, [AC_TRY_COMPILE([$2], [ #ifndef $1 char *p = (char *) $1; #endif ], ac_cv_have_decl_$1=yes, ac_cv_have_decl_$1=no)]) if test $ac_cv_have_decl_$1 = yes; then gt_value=1 else gt_value=0 fi AC_DEFINE_UNQUOTED([HAVE_DECL_]translit($1, [a-z], [A-Z]), [$gt_value], [Define to 1 if you have the declaration of `$1', and to 0 if you don't.]) ]) KCemu-0.5.1/config/m4/printf-posix.m40000644001050700006200000000271111340261610016671 0ustar glaubitzfbedv# printf-posix.m4 serial 3 (gettext-0.17) dnl Copyright (C) 2003, 2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether the printf() function supports POSIX/XSI format strings with dnl positions. AC_DEFUN([gt_PRINTF_POSIX], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([whether printf() supports POSIX/XSI format strings], gt_cv_func_printf_posix, [ AC_TRY_RUN([ #include #include /* The string "%2$d %1$d", with dollar characters protected from the shell's dollar expansion (possibly an autoconf bug). */ static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; static char buf[100]; int main () { sprintf (buf, format, 33, 55); return (strcmp (buf, "55 33") != 0); }], gt_cv_func_printf_posix=yes, gt_cv_func_printf_posix=no, [ AC_EGREP_CPP(notposix, [ #if defined __NetBSD__ || defined __BEOS__ || defined _MSC_VER || defined __MINGW32__ || defined __CYGWIN__ notposix #endif ], gt_cv_func_printf_posix="guessing no", gt_cv_func_printf_posix="guessing yes") ]) ]) case $gt_cv_func_printf_posix in *yes) AC_DEFINE(HAVE_POSIX_PRINTF, 1, [Define if your printf() function supports format strings with positions.]) ;; esac ]) KCemu-0.5.1/config/m4/intmax.m40000644001050700006200000000201111340261610015520 0ustar glaubitzfbedv# intmax.m4 serial 3 (gettext-0.16) dnl Copyright (C) 2002-2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether the system has the 'intmax_t' type, but don't attempt to dnl find a replacement if it is lacking. AC_DEFUN([gt_TYPE_INTMAX_T], [ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_CACHE_CHECK(for intmax_t, gt_cv_c_intmax_t, [AC_TRY_COMPILE([ #include #include #if HAVE_STDINT_H_WITH_UINTMAX #include #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include #endif ], [intmax_t x = -1; return !x;], gt_cv_c_intmax_t=yes, gt_cv_c_intmax_t=no)]) if test $gt_cv_c_intmax_t = yes; then AC_DEFINE(HAVE_INTMAX_T, 1, [Define if you have the 'intmax_t' type in or .]) fi ]) KCemu-0.5.1/config/m4/lib-ld.m40000644001050700006200000000653111321666454015414 0ustar glaubitzfbedv# lib-ld.m4 serial 3 (gettext-0.13) dnl Copyright (C) 1996-2003 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/AC_/AC_LIB/ and s/lt_cv/acl_cv/ to avoid collision dnl with libtool.m4. dnl From libtool-1.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], acl_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU ld's only accept -v. case `$LD -v 2>&1 conf$$.sh echo "exit 0" >>conf$$.sh chmod +x conf$$.sh if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then PATH_SEPARATOR=';' else PATH_SEPARATOR=: fi rm -f conf$$.sh fi ac_prog=ld if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by GCC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]* | [A-Za-z]:[\\/]*)] [re_direlt='/[^/][^/]*/\.\./'] # Canonicalize the path of ld ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` done test -z "$LD" && LD="$ac_prog" ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(acl_cv_path_LD, [if test -z "$LD"; then IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" for ac_dir in $PATH; do test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some GNU ld's only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 < /dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$ac_save_ifs" else acl_cv_path_LD="$LD" # Let the user override the test with a path. fi]) LD="$acl_cv_path_LD" if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) AC_LIB_PROG_LD_GNU ]) KCemu-0.5.1/config/m4/intdiv0.m40000644001050700006200000000443111340261610015605 0ustar glaubitzfbedv# intdiv0.m4 serial 2 (gettext-0.17) dnl Copyright (C) 2002, 2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([gt_INTDIV0], [ AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_CACHE_CHECK([whether integer division by zero raises SIGFPE], gt_cv_int_divbyzero_sigfpe, [ gt_cv_int_divbyzero_sigfpe= changequote(,)dnl case "$host_os" in macos* | darwin[6-9]* | darwin[1-9][0-9]*) # On MacOS X 10.2 or newer, just assume the same as when cross- # compiling. If we were to perform the real test, 1 Crash Report # dialog window would pop up. case "$host_cpu" in i[34567]86 | x86_64) gt_cv_int_divbyzero_sigfpe="guessing yes" ;; esac ;; esac changequote([,])dnl if test -z "$gt_cv_int_divbyzero_sigfpe"; then AC_TRY_RUN([ #include #include static void sigfpe_handler (int sig) { /* Exit with code 0 if SIGFPE, with code 1 if any other signal. */ exit (sig != SIGFPE); } int x = 1; int y = 0; int z; int nan; int main () { signal (SIGFPE, sigfpe_handler); /* IRIX and AIX (when "xlc -qcheck" is used) yield signal SIGTRAP. */ #if (defined (__sgi) || defined (_AIX)) && defined (SIGTRAP) signal (SIGTRAP, sigfpe_handler); #endif /* Linux/SPARC yields signal SIGILL. */ #if defined (__sparc__) && defined (__linux__) signal (SIGILL, sigfpe_handler); #endif z = x / y; nan = y / y; exit (1); } ], gt_cv_int_divbyzero_sigfpe=yes, gt_cv_int_divbyzero_sigfpe=no, [ # Guess based on the CPU. changequote(,)dnl case "$host_cpu" in alpha* | i[34567]86 | x86_64 | m68k | s390*) gt_cv_int_divbyzero_sigfpe="guessing yes";; *) gt_cv_int_divbyzero_sigfpe="guessing no";; esac changequote([,])dnl ]) fi ]) case "$gt_cv_int_divbyzero_sigfpe" in *yes) value=1;; *) value=0;; esac AC_DEFINE_UNQUOTED(INTDIV0_RAISES_SIGFPE, $value, [Define if integer division by zero raises signal SIGFPE.]) ]) KCemu-0.5.1/config/m4/glibc21.m40000644001050700006200000000144511321666454015473 0ustar glaubitzfbedv# glibc21.m4 serial 3 dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Test for the GNU C Library, version 2.1 or newer. # From Bruno Haible. AC_DEFUN([gl_GLIBC21], [ AC_CACHE_CHECK(whether we are using the GNU C Library 2.1 or newer, ac_cv_gnu_library_2_1, [AC_EGREP_CPP([Lucky GNU user], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2) Lucky GNU user #endif #endif ], ac_cv_gnu_library_2_1=yes, ac_cv_gnu_library_2_1=no) ] ) AC_SUBST(GLIBC21) GLIBC21="$ac_cv_gnu_library_2_1" ] ) KCemu-0.5.1/config/m4/size_max.m40000644001050700006200000000513311340261610016047 0ustar glaubitzfbedv# size_max.m4 serial 6 dnl Copyright (C) 2003, 2005-2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([gl_SIZE_MAX], [ AC_CHECK_HEADERS(stdint.h) dnl First test whether the system already has SIZE_MAX. AC_MSG_CHECKING([for SIZE_MAX]) AC_CACHE_VAL([gl_cv_size_max], [ gl_cv_size_max= AC_EGREP_CPP([Found it], [ #include #if HAVE_STDINT_H #include #endif #ifdef SIZE_MAX Found it #endif ], gl_cv_size_max=yes) if test -z "$gl_cv_size_max"; then dnl Define it ourselves. Here we assume that the type 'size_t' is not wider dnl than the type 'unsigned long'. Try hard to find a definition that can dnl be used in a preprocessor #if, i.e. doesn't contain a cast. AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1], [#include #include ], size_t_bits_minus_1=) AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)], [#include ], fits_in_uint=) if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then if test $fits_in_uint = 1; then dnl Even though SIZE_MAX fits in an unsigned int, it must be of type dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. AC_TRY_COMPILE([#include extern size_t foo; extern unsigned long foo; ], [], fits_in_uint=0) fi dnl We cannot use 'expr' to simplify this expression, because 'expr' dnl works only with 'long' integers in the host environment, while we dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. if test $fits_in_uint = 1; then gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" else gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" fi else dnl Shouldn't happen, but who knows... gl_cv_size_max='((size_t)~(size_t)0)' fi fi ]) AC_MSG_RESULT([$gl_cv_size_max]) if test "$gl_cv_size_max" != yes; then AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max], [Define as the maximum value of type 'size_t', if the system doesn't define it.]) fi ]) dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in. dnl Remove this when we can assume autoconf >= 2.61. m4_ifdef([AC_COMPUTE_INT], [], [ AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])]) ]) KCemu-0.5.1/config/m4/iconv.m40000644001050700006200000001375311340261610015355 0ustar glaubitzfbedv# iconv.m4 serial AM6 (gettext-0.17) dnl Copyright (C) 2000-2002, 2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_TRY_LINK will then fail, the second AC_TRY_LINK will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], am_cv_func_iconv, [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_func_iconv=yes) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_TRY_LINK([#include #include ], [iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);], am_cv_lib_iconv=yes am_cv_func_iconv=yes) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], am_cv_func_iconv_works, [ dnl This tests against bugs in AIX 5.1 and HP-UX 11.11. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi AC_TRY_RUN([ #include #include int main () { /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) return 1; } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) return 1; } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) return 1; return 0; }], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE(HAVE_ICONV, 1, [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST(LIBICONV) AC_SUBST(LTLIBICONV) ]) AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL(am_cv_proto_iconv, [ AC_TRY_COMPILE([ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ], [], am_cv_proto_iconv_arg1="", am_cv_proto_iconv_arg1="const") am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([$]{ac_t:- }[$]am_cv_proto_iconv) AC_DEFINE_UNQUOTED(ICONV_CONST, $am_cv_proto_iconv_arg1, [Define as const if the declaration of iconv() needs const.]) fi ]) KCemu-0.5.1/config/m4/xsize.m40000644001050700006200000000064511321666454015413 0ustar glaubitzfbedv# xsize.m4 serial 3 dnl Copyright (C) 2003-2004 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_XSIZE], [ dnl Prerequisites of lib/xsize.h. AC_REQUIRE([gl_SIZE_MAX]) AC_REQUIRE([AC_C_INLINE]) AC_CHECK_HEADERS(stdint.h) ]) KCemu-0.5.1/config/m4/stdint_h.m40000644001050700006200000000161411340261610016044 0ustar glaubitzfbedv# stdint_h.m4 serial 6 dnl Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_STDINT_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_STDINT_H], [ AC_CACHE_CHECK([for stdint.h], gl_cv_header_stdint_h, [AC_TRY_COMPILE( [#include #include ], [uintmax_t i = (uintmax_t) -1; return !i;], gl_cv_header_stdint_h=yes, gl_cv_header_stdint_h=no)]) if test $gl_cv_header_stdint_h = yes; then AC_DEFINE_UNQUOTED(HAVE_STDINT_H_WITH_UINTMAX, 1, [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) KCemu-0.5.1/config/m4/uintmax_t.m40000644001050700006200000000211211340261610016232 0ustar glaubitzfbedv# uintmax_t.m4 serial 10 dnl Copyright (C) 1997-2004, 2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_PREREQ(2.13) # Define uintmax_t to 'unsigned long' or 'unsigned long long' # if it is not already defined in or . AC_DEFUN([gl_AC_TYPE_UINTMAX_T], [ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT]) test $ac_cv_type_unsigned_long_long_int = yes \ && ac_type='unsigned long long' \ || ac_type='unsigned long' AC_DEFINE_UNQUOTED(uintmax_t, $ac_type, [Define to unsigned long or unsigned long long if and don't define.]) else AC_DEFINE(HAVE_UINTMAX_T, 1, [Define if you have the 'uintmax_t' type in or .]) fi ]) KCemu-0.5.1/config/m4/longlong.m40000644001050700006200000001005411340261610016045 0ustar glaubitzfbedv# longlong.m4 serial 13 dnl Copyright (C) 1999-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_LONG_LONG_INT if 'long long int' works. # This fixes a bug in Autoconf 2.61, but can be removed once we # assume 2.62 everywhere. # Note: If the type 'long long int' exists but is only 32 bits large # (as on some very old compilers), HAVE_LONG_LONG_INT will not be # defined. In this case you can treat 'long long int' like 'long int'. AC_DEFUN([AC_TYPE_LONG_LONG_INT], [ AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int], [AC_LINK_IFELSE( [_AC_TYPE_LONG_LONG_SNIPPET], [dnl This catches a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004. dnl If cross compiling, assume the bug isn't important, since dnl nobody cross compiles for this platform as far as we know. AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[@%:@include @%:@ifndef LLONG_MAX @%:@ define HALF \ (1LL << (sizeof (long long int) * CHAR_BIT - 2)) @%:@ define LLONG_MAX (HALF - 1 + HALF) @%:@endif]], [[long long int n = 1; int i; for (i = 0; ; i++) { long long int m = n << i; if (m >> i != n) return 1; if (LLONG_MAX / 2 < m) break; } return 0;]])], [ac_cv_type_long_long_int=yes], [ac_cv_type_long_long_int=no], [ac_cv_type_long_long_int=yes])], [ac_cv_type_long_long_int=no])]) if test $ac_cv_type_long_long_int = yes; then AC_DEFINE([HAVE_LONG_LONG_INT], 1, [Define to 1 if the system has the type `long long int'.]) fi ]) # Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works. # This fixes a bug in Autoconf 2.61, but can be removed once we # assume 2.62 everywhere. # Note: If the type 'unsigned long long int' exists but is only 32 bits # large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT # will not be defined. In this case you can treat 'unsigned long long int' # like 'unsigned long int'. AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT], [ AC_CACHE_CHECK([for unsigned long long int], [ac_cv_type_unsigned_long_long_int], [AC_LINK_IFELSE( [_AC_TYPE_LONG_LONG_SNIPPET], [ac_cv_type_unsigned_long_long_int=yes], [ac_cv_type_unsigned_long_long_int=no])]) if test $ac_cv_type_unsigned_long_long_int = yes; then AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], 1, [Define to 1 if the system has the type `unsigned long long int'.]) fi ]) # Expands to a C program that can be used to test for simultaneous support # of 'long long' and 'unsigned long long'. We don't want to say that # 'long long' is available if 'unsigned long long' is not, or vice versa, # because too many programs rely on the symmetry between signed and unsigned # integer types (excluding 'bool'). AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET], [ AC_LANG_PROGRAM( [[/* Test preprocessor. */ #if ! (-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) error in preprocessor; #endif #if ! (18446744073709551615ULL <= -1ull) error in preprocessor; #endif /* Test literals. */ long long int ll = 9223372036854775807ll; long long int nll = -9223372036854775807LL; unsigned long long int ull = 18446744073709551615ULL; /* Test constant expressions. */ typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll) ? 1 : -1)]; typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1 ? 1 : -1)]; int i = 63;]], [[/* Test availability of runtime routines for shift and division. */ long long int llmax = 9223372036854775807ll; unsigned long long int ullmax = 18446744073709551615ull; return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i) | (llmax / ll) | (llmax % ll) | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i) | (ullmax / ull) | (ullmax % ull));]]) ]) KCemu-0.5.1/config/m4/inttypes-pri.m40000644001050700006200000000215211340261610016675 0ustar glaubitzfbedv# inttypes-pri.m4 serial 4 (gettext-0.16) dnl Copyright (C) 1997-2002, 2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ(2.52) # Define PRI_MACROS_BROKEN if exists and defines the PRI* # macros to non-string values. This is the case on AIX 4.3.3. AC_DEFUN([gt_INTTYPES_PRI], [ AC_CHECK_HEADERS([inttypes.h]) if test $ac_cv_header_inttypes_h = yes; then AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken], gt_cv_inttypes_pri_broken, [ AC_TRY_COMPILE([#include #ifdef PRId32 char *p = PRId32; #endif ], [], gt_cv_inttypes_pri_broken=no, gt_cv_inttypes_pri_broken=yes) ]) fi if test "$gt_cv_inttypes_pri_broken" = yes; then AC_DEFINE_UNQUOTED(PRI_MACROS_BROKEN, 1, [Define if exists and defines unusable PRI* macros.]) PRI_MACROS_BROKEN=1 else PRI_MACROS_BROKEN=0 fi AC_SUBST([PRI_MACROS_BROKEN]) ]) KCemu-0.5.1/config/m4/glibc2.m40000644001050700006200000000135411321666454015411 0ustar glaubitzfbedv# glibc2.m4 serial 1 dnl Copyright (C) 2000-2002, 2004 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Test for the GNU C Library, version 2.0 or newer. # From Bruno Haible. AC_DEFUN([gt_GLIBC2], [ AC_CACHE_CHECK(whether we are using the GNU C Library 2 or newer, ac_cv_gnu_library_2, [AC_EGREP_CPP([Lucky GNU user], [ #include #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) Lucky GNU user #endif #endif ], ac_cv_gnu_library_2=yes, ac_cv_gnu_library_2=no) ] ) AC_SUBST(GLIBC2) GLIBC2="$ac_cv_gnu_library_2" ] ) KCemu-0.5.1/config/m4/lib-prefix.m40000644001050700006200000001503611321666454016312 0ustar glaubitzfbedv# lib-prefix.m4 serial 5 (gettext-0.15) dnl Copyright (C) 2001-2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates a variable acl_libdirstem, containing dnl the basename of the libdir, either "lib" or "lib64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. The current dnl practice is that on a system supporting 32-bit and 64-bit instruction dnl sets or ABIs, 64-bit libraries go under $prefix/lib64 and 32-bit dnl libraries go under $prefix/lib. We determine the compiler's default dnl mode by looking at the compiler's library search path. If at least dnl of its elements ends in /lib64 or points to a directory whose absolute dnl pathname ends in /lib64, we assume a 64-bit ABI. Otherwise we use the dnl default, namely "lib". acl_libdirstem=lib searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ]) KCemu-0.5.1/config/m4/wchar_t.m40000644001050700006200000000132611321666454015675 0ustar glaubitzfbedv# wchar_t.m4 serial 1 (gettext-0.12) dnl Copyright (C) 2002-2003 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether has the 'wchar_t' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WCHAR_T], [ AC_CACHE_CHECK([for wchar_t], gt_cv_c_wchar_t, [AC_TRY_COMPILE([#include wchar_t foo = (wchar_t)'\0';], , gt_cv_c_wchar_t=yes, gt_cv_c_wchar_t=no)]) if test $gt_cv_c_wchar_t = yes; then AC_DEFINE(HAVE_WCHAR_T, 1, [Define if you have the 'wchar_t' type.]) fi ]) KCemu-0.5.1/config/m4/inttypes_h.m40000644001050700006200000000164411340261610016421 0ustar glaubitzfbedv# inttypes_h.m4 serial 7 dnl Copyright (C) 1997-2004, 2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_INTTYPES_H_WITH_UINTMAX if exists, # doesn't clash with , and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], gl_cv_header_inttypes_h, [AC_TRY_COMPILE( [#include #include ], [uintmax_t i = (uintmax_t) -1; return !i;], gl_cv_header_inttypes_h=yes, gl_cv_header_inttypes_h=no)]) if test $gl_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED(HAVE_INTTYPES_H_WITH_UINTMAX, 1, [Define if exists, doesn't clash with , and declares uintmax_t. ]) fi ]) KCemu-0.5.1/config/m4/intlmacosx.m40000644001050700006200000000456511340261610016421 0ustar glaubitzfbedv# intlmacosx.m4 serial 1 (gettext-0.17) dnl Copyright (C) 2004-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on MacOS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in MacOS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], gt_cv_func_CFPreferencesCopyAppValue, [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_TRY_LINK([#include ], [CFPreferencesCopyAppValue(NULL, NULL)], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], 1, [Define to 1 if you have the MacOS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in MacOS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], gt_cv_func_CFLocaleCopyCurrent, [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_TRY_LINK([#include ], [CFLocaleCopyCurrent();], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], 1, [Define to 1 if you have the MacOS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) KCemu-0.5.1/config/m4/nls.m40000644001050700006200000000226611321666454015046 0ustar glaubitzfbedv# nls.m4 serial 3 (gettext-0.15) dnl Copyright (C) 1995-2003, 2005-2006 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ(2.50) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE(nls, [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT($USE_NLS) AC_SUBST(USE_NLS) ]) KCemu-0.5.1/config/m4/po.m40000644001050700006200000004460611340261610014656 0ustar glaubitzfbedv# po.m4 serial 15 (gettext-0.17) dnl Copyright (C) 1995-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ(2.50) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.17]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG(GMSGFMT, gmsgfmt, $MSGFMT) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assigment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix="/`echo "$ac_dir"|sed 's%^\./%%'`" ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" <], [char* cs = nl_langinfo(CODESET); return !cs;], am_cv_langinfo_codeset=yes, am_cv_langinfo_codeset=no) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE(HAVE_LANGINFO_CODESET, 1, [Define if you have and nl_langinfo(CODESET).]) fi ]) KCemu-0.5.1/config/m4/lock.m40000644001050700006200000003022311340261610015156 0ustar glaubitzfbedv# lock.m4 serial 7 (gettext-0.17) dnl Copyright (C) 2005-2007 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Tests for a multithreading library to be used. dnl Defines at most one of the macros USE_POSIX_THREADS, USE_SOLARIS_THREADS, dnl USE_PTH_THREADS, USE_WIN32_THREADS dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with dnl libtool). dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for dnl programs that really need multithread functionality. The difference dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak dnl symbols, typically LIBTHREAD="" whereas LIBMULTITHREAD="-lpthread". dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. AC_DEFUN([gl_LOCK_EARLY], [ AC_REQUIRE([gl_LOCK_EARLY_BODY]) ]) dnl The guts of gl_LOCK_EARLY. Needs to be expanded only once. AC_DEFUN([gl_LOCK_EARLY_BODY], [ dnl Ordering constraints: This macro modifies CPPFLAGS in a way that dnl influences the result of the autoconf tests that test for *_unlocked dnl declarations, on AIX 5 at least. Therefore it must come early. AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl AC_BEFORE([$0], [gl_ARGP])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems. dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes dnl AC_GNU_SOURCE. m4_ifdef([AC_USE_SYSTEM_EXTENSIONS], [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])], [AC_REQUIRE([AC_GNU_SOURCE])]) dnl Check for multithreading. AC_ARG_ENABLE(threads, AC_HELP_STRING([--enable-threads={posix|solaris|pth|win32}], [specify multithreading API]) AC_HELP_STRING([--disable-threads], [build without multithread safety]), [gl_use_threads=$enableval], [case "$host_os" in dnl Disable multithreading by default on OSF/1, because it interferes dnl with fork()/exec(): When msgexec is linked with -lpthread, its child dnl process gets an endless segmentation fault inside execvp(). osf*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ]) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # For using : case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks . cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_TRY_LINK test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in . case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac fi ]) dnl The guts of gl_LOCK. Needs to be expanded only once. AC_DEFUN([gl_LOCK_BODY], [ AC_REQUIRE([gl_LOCK_EARLY_BODY]) gl_threads_api=none LIBTHREAD= LTLIBTHREAD= LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then dnl Check whether the compiler and linker support weak declarations. AC_MSG_CHECKING([whether imported symbols can be declared weak]) gl_have_weak=no AC_TRY_LINK([extern void xyzzy (); #pragma weak xyzzy], [xyzzy();], [gl_have_weak=yes]) AC_MSG_RESULT([$gl_have_weak]) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks . It's added above, in gl_LOCK_EARLY_BODY. AC_CHECK_HEADER(pthread.h, gl_have_pthread_h=yes, gl_have_pthread_h=no) if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads gl_have_pthread= # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. AC_TRY_LINK([#include ], [pthread_mutex_lock((pthread_mutex_t*)0); pthread_mutexattr_init((pthread_mutexattr_t*)0);], [gl_have_pthread=yes]) # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test -n "$gl_have_pthread"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. AC_CHECK_LIB(pthread, pthread_kill, [LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. case "$host_os" in solaris* | hpux*) AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], 1, [Define if the pthread_in_use() detection is hard.]) esac ]) else # Some library is needed. Try libpthread and libc_r. AC_CHECK_LIB(pthread, pthread_kill, [gl_have_pthread=yes LIBTHREAD=-lpthread LTLIBTHREAD=-lpthread LIBMULTITHREAD=-lpthread LTLIBMULTITHREAD=-lpthread]) if test -z "$gl_have_pthread"; then # For FreeBSD 4. AC_CHECK_LIB(c_r, pthread_kill, [gl_have_pthread=yes LIBTHREAD=-lc_r LTLIBTHREAD=-lc_r LIBMULTITHREAD=-lc_r LTLIBMULTITHREAD=-lc_r]) fi fi if test -n "$gl_have_pthread"; then gl_threads_api=posix AC_DEFINE([USE_POSIX_THREADS], 1, [Define if the POSIX multithreading library can be used.]) if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if test $gl_have_weak = yes; then AC_DEFINE([USE_POSIX_THREADS_WEAK], 1, [Define if references to the POSIX multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= fi fi # OSF/1 4.0 and MacOS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. AC_CHECK_TYPE([pthread_rwlock_t], [AC_DEFINE([HAVE_PTHREAD_RWLOCK], 1, [Define if the POSIX multithreading library has read/write locks.])], [], [#include ]) # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. AC_TRY_COMPILE([#include ], [#if __FreeBSD__ == 4 error "No, in FreeBSD 4.0 recursive mutexes actually don't work." #else int x = (int)PTHREAD_MUTEX_RECURSIVE; return !x; #endif], [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], 1, [Define if the defines PTHREAD_MUTEX_RECURSIVE.])]) fi fi fi if test -z "$gl_have_pthread"; then if test "$gl_use_threads" = yes || test "$gl_use_threads" = solaris; then gl_have_solaristhread= gl_save_LIBS="$LIBS" LIBS="$LIBS -lthread" AC_TRY_LINK([#include #include ], [thr_self();], [gl_have_solaristhread=yes]) LIBS="$gl_save_LIBS" if test -n "$gl_have_solaristhread"; then gl_threads_api=solaris LIBTHREAD=-lthread LTLIBTHREAD=-lthread LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" AC_DEFINE([USE_SOLARIS_THREADS], 1, [Define if the old Solaris multithreading library can be used.]) if test $gl_have_weak = yes; then AC_DEFINE([USE_SOLARIS_THREADS_WEAK], 1, [Define if references to the old Solaris multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= fi fi fi fi if test "$gl_use_threads" = pth; then gl_save_CPPFLAGS="$CPPFLAGS" AC_LIB_LINKFLAGS(pth) gl_have_pth= gl_save_LIBS="$LIBS" LIBS="$LIBS -lpth" AC_TRY_LINK([#include ], [pth_self();], gl_have_pth=yes) LIBS="$gl_save_LIBS" if test -n "$gl_have_pth"; then gl_threads_api=pth LIBTHREAD="$LIBPTH" LTLIBTHREAD="$LTLIBPTH" LIBMULTITHREAD="$LIBTHREAD" LTLIBMULTITHREAD="$LTLIBTHREAD" AC_DEFINE([USE_PTH_THREADS], 1, [Define if the GNU Pth multithreading library can be used.]) if test -n "$LIBMULTITHREAD" || test -n "$LTLIBMULTITHREAD"; then if test $gl_have_weak = yes; then AC_DEFINE([USE_PTH_THREADS_WEAK], 1, [Define if references to the GNU Pth multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= fi fi else CPPFLAGS="$gl_save_CPPFLAGS" fi fi if test -z "$gl_have_pthread"; then if test "$gl_use_threads" = yes || test "$gl_use_threads" = win32; then if { case "$host_os" in mingw*) true;; *) false;; esac }; then gl_threads_api=win32 AC_DEFINE([USE_WIN32_THREADS], 1, [Define if the Win32 multithreading API can be used.]) fi fi fi fi AC_MSG_CHECKING([for multithread API to use]) AC_MSG_RESULT([$gl_threads_api]) AC_SUBST(LIBTHREAD) AC_SUBST(LTLIBTHREAD) AC_SUBST(LIBMULTITHREAD) AC_SUBST(LTLIBMULTITHREAD) ]) AC_DEFUN([gl_LOCK], [ AC_REQUIRE([gl_LOCK_EARLY]) AC_REQUIRE([gl_LOCK_BODY]) gl_PREREQ_LOCK ]) # Prerequisites of lib/lock.c. AC_DEFUN([gl_PREREQ_LOCK], [ AC_REQUIRE([AC_C_INLINE]) ]) dnl Survey of platforms: dnl dnl Platform Available Compiler Supports test-lock dnl flavours option weak result dnl --------------- --------- --------- -------- --------- dnl Linux 2.4/glibc posix -lpthread Y OK dnl dnl GNU Hurd/glibc posix dnl dnl FreeBSD 5.3 posix -lc_r Y dnl posix -lkse ? Y dnl posix -lpthread ? Y dnl posix -lthr Y dnl dnl FreeBSD 5.2 posix -lc_r Y dnl posix -lkse Y dnl posix -lthr Y dnl dnl FreeBSD 4.0,4.10 posix -lc_r Y OK dnl dnl NetBSD 1.6 -- dnl dnl OpenBSD 3.4 posix -lpthread Y OK dnl dnl MacOS X 10.[123] posix -lpthread Y OK dnl dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK dnl solaris -lthread Y Sol 7,8: 0.0; Sol 9: OK dnl dnl HP-UX 11 posix -lpthread N (cc) OK dnl Y (gcc) dnl dnl IRIX 6.5 posix -lpthread Y 0.5 dnl dnl AIX 4.3,5.1 posix -lpthread N AIX 4: 0.5; AIX 5: OK dnl dnl OSF/1 4.0,5.1 posix -pthread (cc) N OK dnl -lpthread (gcc) Y dnl dnl Cygwin posix -lpthread Y OK dnl dnl Any of the above pth -lpth 0.0 dnl dnl Mingw win32 N OK dnl dnl BeOS 5 -- dnl dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is dnl turned off: dnl OK if all three tests terminate OK, dnl 0.5 if the first test terminates OK but the second one loops endlessly, dnl 0.0 if the first test already loops endlessly. KCemu-0.5.1/config/m4/lcmessage.m40000644001050700006200000000240411321666454016207 0ustar glaubitzfbedv# lcmessage.m4 serial 4 (gettext-0.14.2) dnl Copyright (C) 1995-2002, 2004-2005 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995. # Check whether LC_MESSAGES is available in . AC_DEFUN([gt_LC_MESSAGES], [ AC_CACHE_CHECK([for LC_MESSAGES], gt_cv_val_LC_MESSAGES, [AC_TRY_LINK([#include ], [return LC_MESSAGES], gt_cv_val_LC_MESSAGES=yes, gt_cv_val_LC_MESSAGES=no)]) if test $gt_cv_val_LC_MESSAGES = yes; then AC_DEFINE(HAVE_LC_MESSAGES, 1, [Define if your file defines LC_MESSAGES.]) fi ]) KCemu-0.5.1/config/install-sh0000755001050700006200000003246411163443003015462 0ustar glaubitzfbedv#!/bin/sh # install - install a program, script, or datafile scriptversion=2006-12-25.00 # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # `make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. nl=' ' IFS=" "" $nl" # set DOITPROG to echo to test this script # Don't use :- since 4.3BSD and earlier shells don't like it. doit=${DOITPROG-} if test -z "$doit"; then doit_exec=exec else doit_exec=$doit fi # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_glob='?' initialize_posix_glob=' test "$posix_glob" != "?" || { if (set -f) 2>/dev/null; then posix_glob= else posix_glob=: fi } ' posix_mkdir= # Desired mode of installed file. mode=0755 chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false no_target_directory= usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve the last data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -s $stripprog installed files. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *' '* | *' '* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -s) stripcmd=$stripprog;; -t) dst_arg=$2 shift;; -T) no_target_directory=true;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call `install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then trap '(exit $?); exit' 1 2 13 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names starting with `-'. case $src in -*) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # Protect names starting with `-'. case $dst in -*) dst=./$dst;; esac # If destination is a directory, append the input filename; won't work # if double slashes aren't ignored. if test -d "$dst"; then if test -n "$no_target_directory"; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dst=$dstdir/`basename "$src"` dstdir_status=0 else # Prefer dirname, but fall back on a substitute if dirname fails. dstdir=` (dirname "$dst") 2>/dev/null || expr X"$dst" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$dst" : 'X\(//\)[^/]' \| \ X"$dst" : 'X\(//\)$' \| \ X"$dst" : 'X\(/\)' \| . 2>/dev/null || echo X"$dst" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q' ` test -d "$dstdir" dstdir_status=$? fi fi obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # Create intermediate dirs using mode 755 as modified by the umask. # This is like FreeBSD 'install' as of 1997-10-28. umask=`umask` case $stripcmd.$umask in # Optimize common cases. *[2367][2367]) mkdir_umask=$umask;; .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;; *[0-7]) mkdir_umask=`expr $umask + 22 \ - $umask % 100 % 40 + $umask % 20 \ - $umask % 10 % 4 + $umask % 2 `;; *) mkdir_umask=$umask,go-w;; esac # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false case $umask in *[123567][0-7][0-7]) # POSIX mkdir -p sets u+wx bits regardless of umask, which # is incompatible with FreeBSD 'install' when (umask & 300) != 0. ;; *) tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0 if (umask $mkdir_umask && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writeable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. ls_ld_tmpdir=`ls -ld "$tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/d" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null fi trap '' 0;; esac;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # The umask is ridiculous, or mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; -*) prefix='./';; *) prefix='';; esac eval "$initialize_posix_glob" oIFS=$IFS IFS=/ $posix_glob set -f set fnord $dstdir shift $posix_glob set +f IFS=$oIFS prefixes= for d do test -z "$d" && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask=$mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=$dstdir/_inst.$$_ rmtmp=$dstdir/_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && eval "$initialize_posix_glob" && $posix_glob set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && $posix_glob set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd -f "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'write-file-hooks 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: KCemu-0.5.1/intl/0000755001050700006200000000000011345001723013147 5ustar glaubitzfbedvKCemu-0.5.1/intl/version.c0000644001050700006200000000173111321666453015015 0ustar glaubitzfbedv/* libintl library version. Copyright (C) 2005 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include "libgnuintl.h" /* Version number: (major<<16) + (minor<<8) + subminor */ int libintl_version = LIBINTL_VERSION; KCemu-0.5.1/intl/loadinfo.h0000644001050700006200000001211311321666453015124 0ustar glaubitzfbedv/* Copyright (C) 1996-1999, 2000-2003, 2005-2006 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Ulrich Drepper , 1996. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _LOADINFO_H #define _LOADINFO_H 1 /* Declarations of locale dependent catalog lookup functions. Implemented in localealias.c Possibly replace a locale name by another. explodename.c Split a locale name into its various fields. l10nflist.c Generate a list of filenames of possible message catalogs. finddomain.c Find and open the relevant message catalogs. The main function _nl_find_domain() in finddomain.c is declared in gettextP.h. */ #ifndef internal_function # define internal_function #endif #ifndef LIBINTL_DLL_EXPORTED # define LIBINTL_DLL_EXPORTED #endif /* Tell the compiler when a conditional or integer expression is almost always true or almost always false. */ #ifndef HAVE_BUILTIN_EXPECT # define __builtin_expect(expr, val) (expr) #endif /* Separator in PATH like lists of pathnames. */ #if ((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Win32, OS/2, DOS */ # define PATH_SEPARATOR ';' #else /* Unix */ # define PATH_SEPARATOR ':' #endif /* Encoding of locale name parts. */ #define XPG_NORM_CODESET 1 #define XPG_CODESET 2 #define XPG_TERRITORY 4 #define XPG_MODIFIER 8 struct loaded_l10nfile { const char *filename; int decided; const void *data; struct loaded_l10nfile *next; struct loaded_l10nfile *successor[1]; }; /* Normalize codeset name. There is no standard for the codeset names. Normalization allows the user to use any of the common names. The return value is dynamically allocated and has to be freed by the caller. */ extern const char *_nl_normalize_codeset (const char *codeset, size_t name_len); /* Lookup a locale dependent file. *L10NFILE_LIST denotes a pool of lookup results of locale dependent files of the same kind, sorted in decreasing order of ->filename. DIRLIST and DIRLIST_LEN are an argz list of directories in which to look, containing at least one directory (i.e. DIRLIST_LEN > 0). MASK, LANGUAGE, TERRITORY, CODESET, NORMALIZED_CODESET, MODIFIER are the pieces of the locale name, as produced by _nl_explode_name(). FILENAME is the filename suffix. The return value is the lookup result, either found in *L10NFILE_LIST, or - if DO_ALLOCATE is nonzero - freshly allocated, or possibly NULL. If the return value is non-NULL, it is added to *L10NFILE_LIST, and its ->next field denotes the chaining inside *L10NFILE_LIST, and furthermore its ->successor[] field contains a list of other lookup results from which this lookup result inherits. */ extern struct loaded_l10nfile * _nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list, const char *dirlist, size_t dirlist_len, int mask, const char *language, const char *territory, const char *codeset, const char *normalized_codeset, const char *modifier, const char *filename, int do_allocate); /* Lookup the real locale name for a locale alias NAME, or NULL if NAME is not a locale alias (but possibly a real locale name). The return value is statically allocated and must not be freed. */ /* Part of the libintl ABI only for the sake of the gettext.m4 macro. */ extern LIBINTL_DLL_EXPORTED const char *_nl_expand_alias (const char *name); /* Split a locale name NAME into its pieces: language, modifier, territory, codeset. NAME gets destructively modified: NUL bytes are inserted here and there. *LANGUAGE gets assigned NAME. Each of *MODIFIER, *TERRITORY, *CODESET gets assigned either a pointer into the old NAME string, or NULL. *NORMALIZED_CODESET gets assigned the expanded *CODESET, if it is different from *CODESET; this one is dynamically allocated and has to be freed by the caller. The return value is a bitmask, where each bit corresponds to one filled-in value: XPG_MODIFIER for *MODIFIER, XPG_TERRITORY for *TERRITORY, XPG_CODESET for *CODESET, XPG_NORM_CODESET for *NORMALIZED_CODESET. */ extern int _nl_explode_name (char *name, const char **language, const char **modifier, const char **territory, const char **codeset, const char **normalized_codeset); #endif /* loadinfo.h */ KCemu-0.5.1/intl/lock.h0000644001050700006200000012735611340261610014264 0ustar glaubitzfbedv/* Locking in multithreaded situations. Copyright (C) 2005-2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible , 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, gthr-win32.h. */ /* This file contains locking primitives for use with a given thread library. It does not contain primitives for creating threads or for other synchronization primitives. Normal (non-recursive) locks: Type: gl_lock_t Declaration: gl_lock_define(extern, name) Initializer: gl_lock_define_initialized(, name) Initialization: gl_lock_init (name); Taking the lock: gl_lock_lock (name); Releasing the lock: gl_lock_unlock (name); De-initialization: gl_lock_destroy (name); Read-Write (non-recursive) locks: Type: gl_rwlock_t Declaration: gl_rwlock_define(extern, name) Initializer: gl_rwlock_define_initialized(, name) Initialization: gl_rwlock_init (name); Taking the lock: gl_rwlock_rdlock (name); gl_rwlock_wrlock (name); Releasing the lock: gl_rwlock_unlock (name); De-initialization: gl_rwlock_destroy (name); Recursive locks: Type: gl_recursive_lock_t Declaration: gl_recursive_lock_define(extern, name) Initializer: gl_recursive_lock_define_initialized(, name) Initialization: gl_recursive_lock_init (name); Taking the lock: gl_recursive_lock_lock (name); Releasing the lock: gl_recursive_lock_unlock (name); De-initialization: gl_recursive_lock_destroy (name); Once-only execution: Type: gl_once_t Initializer: gl_once_define(extern, name) Execution: gl_once (name, initfunction); */ #ifndef _LOCK_H #define _LOCK_H /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include # include # ifdef __cplusplus extern "C" { # endif # if PTHREAD_IN_USE_DETECTION_HARD /* The pthread_in_use() detection needs to be done at runtime. */ # define pthread_in_use() \ glthread_in_use () extern int glthread_in_use (void); # endif # if USE_POSIX_THREADS_WEAK /* Use weak references to the POSIX threads library. */ /* Weak references avoid dragging in external libraries if the other parts of the program don't use them. Here we use them, because we don't want every program that uses libintl to depend on libpthread. This assumes that libpthread would not be loaded after libintl; i.e. if libintl is loaded first, by an executable that does not depend on libpthread, and then a module is dynamically loaded that depends on libpthread, libintl will not be multithread-safe. */ /* The way to test at runtime whether libpthread is present is to test whether a function pointer's value, such as &pthread_mutex_init, is non-NULL. However, some versions of GCC have a bug through which, in PIC mode, &foo != NULL always evaluates to true if there is a direct call to foo(...) in the same function. To avoid this, we test the address of a function in libpthread that we don't use. */ # pragma weak pthread_mutex_init # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock # pragma weak pthread_mutex_destroy # pragma weak pthread_rwlock_init # pragma weak pthread_rwlock_rdlock # pragma weak pthread_rwlock_wrlock # pragma weak pthread_rwlock_unlock # pragma weak pthread_rwlock_destroy # pragma weak pthread_once # pragma weak pthread_cond_init # pragma weak pthread_cond_wait # pragma weak pthread_cond_signal # pragma weak pthread_cond_broadcast # pragma weak pthread_cond_destroy # pragma weak pthread_mutexattr_init # pragma weak pthread_mutexattr_settype # pragma weak pthread_mutexattr_destroy # ifndef pthread_self # pragma weak pthread_self # endif # if !PTHREAD_IN_USE_DETECTION_HARD # pragma weak pthread_cancel # define pthread_in_use() (pthread_cancel != NULL) # endif # else # if !PTHREAD_IN_USE_DETECTION_HARD # define pthread_in_use() 1 # endif # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef pthread_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ PTHREAD_MUTEX_INITIALIZER # define gl_lock_init(NAME) \ do \ { \ if (pthread_in_use () && pthread_mutex_init (&NAME, NULL) != 0) \ abort (); \ } \ while (0) # define gl_lock_lock(NAME) \ do \ { \ if (pthread_in_use () && pthread_mutex_lock (&NAME) != 0) \ abort (); \ } \ while (0) # define gl_lock_unlock(NAME) \ do \ { \ if (pthread_in_use () && pthread_mutex_unlock (&NAME) != 0) \ abort (); \ } \ while (0) # define gl_lock_destroy(NAME) \ do \ { \ if (pthread_in_use () && pthread_mutex_destroy (&NAME) != 0) \ abort (); \ } \ while (0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK # ifdef PTHREAD_RWLOCK_INITIALIZER typedef pthread_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ PTHREAD_RWLOCK_INITIALIZER # define gl_rwlock_init(NAME) \ do \ { \ if (pthread_in_use () && pthread_rwlock_init (&NAME, NULL) != 0) \ abort (); \ } \ while (0) # define gl_rwlock_rdlock(NAME) \ do \ { \ if (pthread_in_use () && pthread_rwlock_rdlock (&NAME) != 0) \ abort (); \ } \ while (0) # define gl_rwlock_wrlock(NAME) \ do \ { \ if (pthread_in_use () && pthread_rwlock_wrlock (&NAME) != 0) \ abort (); \ } \ while (0) # define gl_rwlock_unlock(NAME) \ do \ { \ if (pthread_in_use () && pthread_rwlock_unlock (&NAME) != 0) \ abort (); \ } \ while (0) # define gl_rwlock_destroy(NAME) \ do \ { \ if (pthread_in_use () && pthread_rwlock_destroy (&NAME) != 0) \ abort (); \ } \ while (0) # else typedef struct { int initialized; pthread_mutex_t guard; /* protects the initialization */ pthread_rwlock_t rwlock; /* read-write lock */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { 0, PTHREAD_MUTEX_INITIALIZER } # define gl_rwlock_init(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_rwlock_init (&NAME); \ } \ while (0) # define gl_rwlock_rdlock(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_rwlock_rdlock (&NAME); \ } \ while (0) # define gl_rwlock_wrlock(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_rwlock_wrlock (&NAME); \ } \ while (0) # define gl_rwlock_unlock(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_rwlock_unlock (&NAME); \ } \ while (0) # define gl_rwlock_destroy(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_rwlock_destroy (&NAME); \ } \ while (0) extern void glthread_rwlock_init (gl_rwlock_t *lock); extern void glthread_rwlock_rdlock (gl_rwlock_t *lock); extern void glthread_rwlock_wrlock (gl_rwlock_t *lock); extern void glthread_rwlock_unlock (gl_rwlock_t *lock); extern void glthread_rwlock_destroy (gl_rwlock_t *lock); # endif # else typedef struct { pthread_mutex_t lock; /* protects the remaining fields */ pthread_cond_t waiting_readers; /* waiting readers */ pthread_cond_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 } # define gl_rwlock_init(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_rwlock_init (&NAME); \ } \ while (0) # define gl_rwlock_rdlock(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_rwlock_rdlock (&NAME); \ } \ while (0) # define gl_rwlock_wrlock(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_rwlock_wrlock (&NAME); \ } \ while (0) # define gl_rwlock_unlock(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_rwlock_unlock (&NAME); \ } \ while (0) # define gl_rwlock_destroy(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_rwlock_destroy (&NAME); \ } \ while (0) extern void glthread_rwlock_init (gl_rwlock_t *lock); extern void glthread_rwlock_rdlock (gl_rwlock_t *lock); extern void glthread_rwlock_wrlock (gl_rwlock_t *lock); extern void glthread_rwlock_unlock (gl_rwlock_t *lock); extern void glthread_rwlock_destroy (gl_rwlock_t *lock); # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP typedef pthread_mutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_recursive_lock_initializer; # ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER # else # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP # endif # define gl_recursive_lock_init(NAME) \ do \ { \ if (pthread_in_use () && pthread_mutex_init (&NAME, NULL) != 0) \ abort (); \ } \ while (0) # define gl_recursive_lock_lock(NAME) \ do \ { \ if (pthread_in_use () && pthread_mutex_lock (&NAME) != 0) \ abort (); \ } \ while (0) # define gl_recursive_lock_unlock(NAME) \ do \ { \ if (pthread_in_use () && pthread_mutex_unlock (&NAME) != 0) \ abort (); \ } \ while (0) # define gl_recursive_lock_destroy(NAME) \ do \ { \ if (pthread_in_use () && pthread_mutex_destroy (&NAME) != 0) \ abort (); \ } \ while (0) # else typedef struct { pthread_mutex_t recmutex; /* recursive mutex */ pthread_mutex_t guard; /* protects the initialization */ int initialized; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0 } # define gl_recursive_lock_init(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_recursive_lock_init (&NAME); \ } \ while (0) # define gl_recursive_lock_lock(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_recursive_lock_lock (&NAME); \ } \ while (0) # define gl_recursive_lock_unlock(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_recursive_lock_unlock (&NAME); \ } \ while (0) # define gl_recursive_lock_destroy(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_recursive_lock_destroy (&NAME); \ } \ while (0) extern void glthread_recursive_lock_init (gl_recursive_lock_t *lock); extern void glthread_recursive_lock_lock (gl_recursive_lock_t *lock); extern void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock); extern void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock); # endif # else /* Old versions of POSIX threads on Solaris did not have recursive locks. We have to implement them ourselves. */ typedef struct { pthread_mutex_t mutex; pthread_t owner; unsigned long depth; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, (pthread_t) 0, 0 } # define gl_recursive_lock_init(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_recursive_lock_init (&NAME); \ } \ while (0) # define gl_recursive_lock_lock(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_recursive_lock_lock (&NAME); \ } \ while (0) # define gl_recursive_lock_unlock(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_recursive_lock_unlock (&NAME); \ } \ while (0) # define gl_recursive_lock_destroy(NAME) \ do \ { \ if (pthread_in_use ()) \ glthread_recursive_lock_destroy (&NAME); \ } \ while (0) extern void glthread_recursive_lock_init (gl_recursive_lock_t *lock); extern void glthread_recursive_lock_lock (gl_recursive_lock_t *lock); extern void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock); extern void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock); # endif /* -------------------------- gl_once_t datatype -------------------------- */ typedef pthread_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT; # define gl_once(NAME, INITFUNCTION) \ do \ { \ if (pthread_in_use ()) \ { \ if (pthread_once (&NAME, INITFUNCTION) != 0) \ abort (); \ } \ else \ { \ if (glthread_once_singlethreaded (&NAME)) \ INITFUNCTION (); \ } \ } \ while (0) extern int glthread_once_singlethreaded (pthread_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_PTH_THREADS /* Use the GNU Pth threads library. */ # include # include # ifdef __cplusplus extern "C" { # endif # if USE_PTH_THREADS_WEAK /* Use weak references to the GNU Pth threads library. */ # pragma weak pth_mutex_init # pragma weak pth_mutex_acquire # pragma weak pth_mutex_release # pragma weak pth_rwlock_init # pragma weak pth_rwlock_acquire # pragma weak pth_rwlock_release # pragma weak pth_once # pragma weak pth_cancel # define pth_in_use() (pth_cancel != NULL) # else # define pth_in_use() 1 # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef pth_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ PTH_MUTEX_INIT # define gl_lock_init(NAME) \ do \ { \ if (pth_in_use() && !pth_mutex_init (&NAME)) \ abort (); \ } \ while (0) # define gl_lock_lock(NAME) \ do \ { \ if (pth_in_use() && !pth_mutex_acquire (&NAME, 0, NULL)) \ abort (); \ } \ while (0) # define gl_lock_unlock(NAME) \ do \ { \ if (pth_in_use() && !pth_mutex_release (&NAME)) \ abort (); \ } \ while (0) # define gl_lock_destroy(NAME) \ (void)(&NAME) /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef pth_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS pth_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pth_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ PTH_RWLOCK_INIT # define gl_rwlock_init(NAME) \ do \ { \ if (pth_in_use() && !pth_rwlock_init (&NAME)) \ abort (); \ } \ while (0) # define gl_rwlock_rdlock(NAME) \ do \ { \ if (pth_in_use() \ && !pth_rwlock_acquire (&NAME, PTH_RWLOCK_RD, 0, NULL)) \ abort (); \ } \ while (0) # define gl_rwlock_wrlock(NAME) \ do \ { \ if (pth_in_use() \ && !pth_rwlock_acquire (&NAME, PTH_RWLOCK_RW, 0, NULL)) \ abort (); \ } \ while (0) # define gl_rwlock_unlock(NAME) \ do \ { \ if (pth_in_use() && !pth_rwlock_release (&NAME)) \ abort (); \ } \ while (0) # define gl_rwlock_destroy(NAME) \ (void)(&NAME) /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* In Pth, mutexes are recursive by default. */ typedef pth_mutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pth_mutex_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ PTH_MUTEX_INIT # define gl_recursive_lock_init(NAME) \ do \ { \ if (pth_in_use() && !pth_mutex_init (&NAME)) \ abort (); \ } \ while (0) # define gl_recursive_lock_lock(NAME) \ do \ { \ if (pth_in_use() && !pth_mutex_acquire (&NAME, 0, NULL)) \ abort (); \ } \ while (0) # define gl_recursive_lock_unlock(NAME) \ do \ { \ if (pth_in_use() && !pth_mutex_release (&NAME)) \ abort (); \ } \ while (0) # define gl_recursive_lock_destroy(NAME) \ (void)(&NAME) /* -------------------------- gl_once_t datatype -------------------------- */ typedef pth_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS pth_once_t NAME = PTH_ONCE_INIT; # define gl_once(NAME, INITFUNCTION) \ do \ { \ if (pth_in_use ()) \ { \ void (*gl_once_temp) (void) = INITFUNCTION; \ if (!pth_once (&NAME, glthread_once_call, &gl_once_temp)) \ abort (); \ } \ else \ { \ if (glthread_once_singlethreaded (&NAME)) \ INITFUNCTION (); \ } \ } \ while (0) extern void glthread_once_call (void *arg); extern int glthread_once_singlethreaded (pth_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ # include # include # include # ifdef __cplusplus extern "C" { # endif # if USE_SOLARIS_THREADS_WEAK /* Use weak references to the old Solaris threads library. */ # pragma weak mutex_init # pragma weak mutex_lock # pragma weak mutex_unlock # pragma weak mutex_destroy # pragma weak rwlock_init # pragma weak rw_rdlock # pragma weak rw_wrlock # pragma weak rw_unlock # pragma weak rwlock_destroy # pragma weak thr_self # pragma weak thr_suspend # define thread_in_use() (thr_suspend != NULL) # else # define thread_in_use() 1 # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ DEFAULTMUTEX # define gl_lock_init(NAME) \ do \ { \ if (thread_in_use () && mutex_init (&NAME, USYNC_THREAD, NULL) != 0) \ abort (); \ } \ while (0) # define gl_lock_lock(NAME) \ do \ { \ if (thread_in_use () && mutex_lock (&NAME) != 0) \ abort (); \ } \ while (0) # define gl_lock_unlock(NAME) \ do \ { \ if (thread_in_use () && mutex_unlock (&NAME) != 0) \ abort (); \ } \ while (0) # define gl_lock_destroy(NAME) \ do \ { \ if (thread_in_use () && mutex_destroy (&NAME) != 0) \ abort (); \ } \ while (0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ DEFAULTRWLOCK # define gl_rwlock_init(NAME) \ do \ { \ if (thread_in_use () && rwlock_init (&NAME, USYNC_THREAD, NULL) != 0) \ abort (); \ } \ while (0) # define gl_rwlock_rdlock(NAME) \ do \ { \ if (thread_in_use () && rw_rdlock (&NAME) != 0) \ abort (); \ } \ while (0) # define gl_rwlock_wrlock(NAME) \ do \ { \ if (thread_in_use () && rw_wrlock (&NAME) != 0) \ abort (); \ } \ while (0) # define gl_rwlock_unlock(NAME) \ do \ { \ if (thread_in_use () && rw_unlock (&NAME) != 0) \ abort (); \ } \ while (0) # define gl_rwlock_destroy(NAME) \ do \ { \ if (thread_in_use () && rwlock_destroy (&NAME) != 0) \ abort (); \ } \ while (0) /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* Old Solaris threads did not have recursive locks. We have to implement them ourselves. */ typedef struct { mutex_t mutex; thread_t owner; unsigned long depth; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { DEFAULTMUTEX, (thread_t) 0, 0 } # define gl_recursive_lock_init(NAME) \ do \ { \ if (thread_in_use ()) \ glthread_recursive_lock_init (&NAME); \ } \ while (0) # define gl_recursive_lock_lock(NAME) \ do \ { \ if (thread_in_use ()) \ glthread_recursive_lock_lock (&NAME); \ } \ while (0) # define gl_recursive_lock_unlock(NAME) \ do \ { \ if (thread_in_use ()) \ glthread_recursive_lock_unlock (&NAME); \ } \ while (0) # define gl_recursive_lock_destroy(NAME) \ do \ { \ if (thread_in_use ()) \ glthread_recursive_lock_destroy (&NAME); \ } \ while (0) extern void glthread_recursive_lock_init (gl_recursive_lock_t *lock); extern void glthread_recursive_lock_lock (gl_recursive_lock_t *lock); extern void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock); extern void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock); /* -------------------------- gl_once_t datatype -------------------------- */ typedef struct { volatile int inited; mutex_t mutex; } gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = { 0, DEFAULTMUTEX }; # define gl_once(NAME, INITFUNCTION) \ do \ { \ if (thread_in_use ()) \ { \ glthread_once (&NAME, INITFUNCTION); \ } \ else \ { \ if (glthread_once_singlethreaded (&NAME)) \ INITFUNCTION (); \ } \ } \ while (0) extern void glthread_once (gl_once_t *once_control, void (*initfunction) (void)); extern int glthread_once_singlethreaded (gl_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WIN32_THREADS # include # ifdef __cplusplus extern "C" { # endif /* We can use CRITICAL_SECTION directly, rather than the Win32 Event, Mutex, Semaphore types, because - we need only to synchronize inside a single process (address space), not inter-process locking, - we don't need to support trylock operations. (TryEnterCriticalSection does not work on Windows 95/98/ME. Packages that need trylock usually define their own mutex type.) */ /* There is no way to statically initialize a CRITICAL_SECTION. It needs to be done lazily, once only. For this we need spinlocks. */ typedef struct { volatile int done; volatile long started; } gl_spinlock_t; /* -------------------------- gl_lock_t datatype -------------------------- */ typedef struct { gl_spinlock_t guard; /* protects the initialization */ CRITICAL_SECTION lock; } gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME = gl_lock_initializer; # define gl_lock_initializer \ { { 0, -1 } } # define gl_lock_init(NAME) \ glthread_lock_init (&NAME) # define gl_lock_lock(NAME) \ glthread_lock_lock (&NAME) # define gl_lock_unlock(NAME) \ glthread_lock_unlock (&NAME) # define gl_lock_destroy(NAME) \ glthread_lock_destroy (&NAME) extern void glthread_lock_init (gl_lock_t *lock); extern void glthread_lock_lock (gl_lock_t *lock); extern void glthread_lock_unlock (gl_lock_t *lock); extern void glthread_lock_destroy (gl_lock_t *lock); /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* It is impossible to implement read-write locks using plain locks, without introducing an extra thread dedicated to managing read-write locks. Therefore here we need to use the low-level Event type. */ typedef struct { HANDLE *array; /* array of waiting threads, each represented by an event */ unsigned int count; /* number of waiting threads */ unsigned int alloc; /* length of allocated array */ unsigned int offset; /* index of first waiting thread in array */ } gl_waitqueue_t; typedef struct { gl_spinlock_t guard; /* protects the initialization */ CRITICAL_SECTION lock; /* protects the remaining fields */ gl_waitqueue_t waiting_readers; /* waiting readers */ gl_waitqueue_t waiting_writers; /* waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { { 0, -1 } } # define gl_rwlock_init(NAME) \ glthread_rwlock_init (&NAME) # define gl_rwlock_rdlock(NAME) \ glthread_rwlock_rdlock (&NAME) # define gl_rwlock_wrlock(NAME) \ glthread_rwlock_wrlock (&NAME) # define gl_rwlock_unlock(NAME) \ glthread_rwlock_unlock (&NAME) # define gl_rwlock_destroy(NAME) \ glthread_rwlock_destroy (&NAME) extern void glthread_rwlock_init (gl_rwlock_t *lock); extern void glthread_rwlock_rdlock (gl_rwlock_t *lock); extern void glthread_rwlock_wrlock (gl_rwlock_t *lock); extern void glthread_rwlock_unlock (gl_rwlock_t *lock); extern void glthread_rwlock_destroy (gl_rwlock_t *lock); /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* The Win32 documentation says that CRITICAL_SECTION already implements a recursive lock. But we need not rely on it: It's easy to implement a recursive lock without this assumption. */ typedef struct { gl_spinlock_t guard; /* protects the initialization */ DWORD owner; unsigned long depth; CRITICAL_SECTION lock; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { { 0, -1 }, 0, 0 } # define gl_recursive_lock_init(NAME) \ glthread_recursive_lock_init (&NAME) # define gl_recursive_lock_lock(NAME) \ glthread_recursive_lock_lock (&NAME) # define gl_recursive_lock_unlock(NAME) \ glthread_recursive_lock_unlock (&NAME) # define gl_recursive_lock_destroy(NAME) \ glthread_recursive_lock_destroy (&NAME) extern void glthread_recursive_lock_init (gl_recursive_lock_t *lock); extern void glthread_recursive_lock_lock (gl_recursive_lock_t *lock); extern void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock); extern void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock); /* -------------------------- gl_once_t datatype -------------------------- */ typedef struct { volatile int inited; volatile long started; CRITICAL_SECTION lock; } gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = { -1, -1 }; # define gl_once(NAME, INITFUNCTION) \ glthread_once (&NAME, INITFUNCTION) extern void glthread_once (gl_once_t *once_control, void (*initfunction) (void)); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_POSIX_THREADS || USE_PTH_THREADS || USE_SOLARIS_THREADS || USE_WIN32_THREADS) /* Provide dummy implementation if threads are not supported. */ /* -------------------------- gl_lock_t datatype -------------------------- */ typedef int gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) # define gl_lock_define_initialized(STORAGECLASS, NAME) # define gl_lock_init(NAME) # define gl_lock_lock(NAME) # define gl_lock_unlock(NAME) /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef int gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) # define gl_rwlock_define_initialized(STORAGECLASS, NAME) # define gl_rwlock_init(NAME) # define gl_rwlock_rdlock(NAME) # define gl_rwlock_wrlock(NAME) # define gl_rwlock_unlock(NAME) /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef int gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) # define gl_recursive_lock_init(NAME) # define gl_recursive_lock_lock(NAME) # define gl_recursive_lock_unlock(NAME) /* -------------------------- gl_once_t datatype -------------------------- */ typedef int gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = 0; # define gl_once(NAME, INITFUNCTION) \ do \ { \ if (NAME == 0) \ { \ NAME = ~ 0; \ INITFUNCTION (); \ } \ } \ while (0) #endif /* ========================================================================= */ #endif /* _LOCK_H */ KCemu-0.5.1/intl/export.h0000644001050700006200000000023511321666453014654 0ustar glaubitzfbedv #if @HAVE_VISIBILITY@ && BUILDING_LIBINTL #define LIBINTL_DLL_EXPORTED __attribute__((__visibility__("default"))) #else #define LIBINTL_DLL_EXPORTED #endif KCemu-0.5.1/intl/dngettext.c0000644001050700006200000000354611321666453015344 0ustar glaubitzfbedv/* Implementation of the dngettext(3) function. Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #include #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DNGETTEXT __dngettext # define DCNGETTEXT __dcngettext #else # define DNGETTEXT libintl_dngettext # define DCNGETTEXT libintl_dcngettext #endif /* Look up MSGID in the DOMAINNAME message catalog of the current LC_MESSAGES locale and skip message according to the plural form. */ char * DNGETTEXT (const char *domainname, const char *msgid1, const char *msgid2, unsigned long int n) { return DCNGETTEXT (domainname, msgid1, msgid2, n, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dngettext, dngettext); #endif KCemu-0.5.1/intl/lock.c0000644001050700006200000005413011340261610014244 0ustar glaubitzfbedv/* Locking in multithreaded situations. Copyright (C) 2005-2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible , 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-solaris.h, gthr-win32.h. */ #include #include "lock.h" /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # if PTHREAD_IN_USE_DETECTION_HARD /* The function to be executed by a dummy thread. */ static void * dummy_thread_func (void *arg) { return arg; } int glthread_in_use (void) { static int tested; static int result; /* 1: linked with -lpthread, 0: only with libc */ if (!tested) { pthread_t thread; if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0) /* Thread creation failed. */ result = 0; else { /* Thread creation works. */ void *retval; if (pthread_join (thread, &retval) != 0) abort (); result = 1; } tested = 1; } return result; } # endif /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK # if !defined PTHREAD_RWLOCK_INITIALIZER void glthread_rwlock_init (gl_rwlock_t *lock) { if (pthread_rwlock_init (&lock->rwlock, NULL) != 0) abort (); lock->initialized = 1; } void glthread_rwlock_rdlock (gl_rwlock_t *lock) { if (!lock->initialized) { if (pthread_mutex_lock (&lock->guard) != 0) abort (); if (!lock->initialized) glthread_rwlock_init (lock); if (pthread_mutex_unlock (&lock->guard) != 0) abort (); } if (pthread_rwlock_rdlock (&lock->rwlock) != 0) abort (); } void glthread_rwlock_wrlock (gl_rwlock_t *lock) { if (!lock->initialized) { if (pthread_mutex_lock (&lock->guard) != 0) abort (); if (!lock->initialized) glthread_rwlock_init (lock); if (pthread_mutex_unlock (&lock->guard) != 0) abort (); } if (pthread_rwlock_wrlock (&lock->rwlock) != 0) abort (); } void glthread_rwlock_unlock (gl_rwlock_t *lock) { if (!lock->initialized) abort (); if (pthread_rwlock_unlock (&lock->rwlock) != 0) abort (); } void glthread_rwlock_destroy (gl_rwlock_t *lock) { if (!lock->initialized) abort (); if (pthread_rwlock_destroy (&lock->rwlock) != 0) abort (); lock->initialized = 0; } # endif # else void glthread_rwlock_init (gl_rwlock_t *lock) { if (pthread_mutex_init (&lock->lock, NULL) != 0) abort (); if (pthread_cond_init (&lock->waiting_readers, NULL) != 0) abort (); if (pthread_cond_init (&lock->waiting_writers, NULL) != 0) abort (); lock->waiting_writers_count = 0; lock->runcount = 0; } void glthread_rwlock_rdlock (gl_rwlock_t *lock) { if (pthread_mutex_lock (&lock->lock) != 0) abort (); /* Test whether only readers are currently running, and whether the runcount field will not overflow. */ /* POSIX says: "It is implementation-defined whether the calling thread acquires the lock when a writer does not hold the lock and there are writers blocked on the lock." Let's say, no: give the writers a higher priority. */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ if (pthread_cond_wait (&lock->waiting_readers, &lock->lock) != 0) abort (); } lock->runcount++; if (pthread_mutex_unlock (&lock->lock) != 0) abort (); } void glthread_rwlock_wrlock (gl_rwlock_t *lock) { if (pthread_mutex_lock (&lock->lock) != 0) abort (); /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; if (pthread_cond_wait (&lock->waiting_writers, &lock->lock) != 0) abort (); lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ if (pthread_mutex_unlock (&lock->lock) != 0) abort (); } void glthread_rwlock_unlock (gl_rwlock_t *lock) { if (pthread_mutex_lock (&lock->lock) != 0) abort (); if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) abort (); lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) abort (); lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers_count > 0) { /* Wake up one of the waiting writers. */ if (pthread_cond_signal (&lock->waiting_writers) != 0) abort (); } else { /* Wake up all waiting readers. */ if (pthread_cond_broadcast (&lock->waiting_readers) != 0) abort (); } } if (pthread_mutex_unlock (&lock->lock) != 0) abort (); } void glthread_rwlock_destroy (gl_rwlock_t *lock) { if (pthread_mutex_destroy (&lock->lock) != 0) abort (); if (pthread_cond_destroy (&lock->waiting_readers) != 0) abort (); if (pthread_cond_destroy (&lock->waiting_writers) != 0) abort (); } # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if !(defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP) void glthread_recursive_lock_init (gl_recursive_lock_t *lock) { pthread_mutexattr_t attributes; if (pthread_mutexattr_init (&attributes) != 0) abort (); if (pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE) != 0) abort (); if (pthread_mutex_init (&lock->recmutex, &attributes) != 0) abort (); if (pthread_mutexattr_destroy (&attributes) != 0) abort (); lock->initialized = 1; } void glthread_recursive_lock_lock (gl_recursive_lock_t *lock) { if (!lock->initialized) { if (pthread_mutex_lock (&lock->guard) != 0) abort (); if (!lock->initialized) glthread_recursive_lock_init (lock); if (pthread_mutex_unlock (&lock->guard) != 0) abort (); } if (pthread_mutex_lock (&lock->recmutex) != 0) abort (); } void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock) { if (!lock->initialized) abort (); if (pthread_mutex_unlock (&lock->recmutex) != 0) abort (); } void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock) { if (!lock->initialized) abort (); if (pthread_mutex_destroy (&lock->recmutex) != 0) abort (); lock->initialized = 0; } # endif # else void glthread_recursive_lock_init (gl_recursive_lock_t *lock) { if (pthread_mutex_init (&lock->mutex, NULL) != 0) abort (); lock->owner = (pthread_t) 0; lock->depth = 0; } void glthread_recursive_lock_lock (gl_recursive_lock_t *lock) { pthread_t self = pthread_self (); if (lock->owner != self) { if (pthread_mutex_lock (&lock->mutex) != 0) abort (); lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ abort (); } void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock) { if (lock->owner != pthread_self ()) abort (); if (lock->depth == 0) abort (); if (--(lock->depth) == 0) { lock->owner = (pthread_t) 0; if (pthread_mutex_unlock (&lock->mutex) != 0) abort (); } } void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock) { if (lock->owner != (pthread_t) 0) abort (); if (pthread_mutex_destroy (&lock->mutex) != 0) abort (); } # endif /* -------------------------- gl_once_t datatype -------------------------- */ static const pthread_once_t fresh_once = PTHREAD_ONCE_INIT; int glthread_once_singlethreaded (pthread_once_t *once_control) { /* We don't know whether pthread_once_t is an integer type, a floating-point type, a pointer type, or a structure type. */ char *firstbyte = (char *)once_control; if (*firstbyte == *(const char *)&fresh_once) { /* First time use of once_control. Invert the first byte. */ *firstbyte = ~ *(const char *)&fresh_once; return 1; } else return 0; } #endif /* ========================================================================= */ #if USE_PTH_THREADS /* Use the GNU Pth threads library. */ /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* --------------------- gl_recursive_lock_t datatype --------------------- */ /* -------------------------- gl_once_t datatype -------------------------- */ void glthread_once_call (void *arg) { void (**gl_once_temp_addr) (void) = (void (**) (void)) arg; void (*initfunction) (void) = *gl_once_temp_addr; initfunction (); } int glthread_once_singlethreaded (pth_once_t *once_control) { /* We know that pth_once_t is an integer type. */ if (*once_control == PTH_ONCE_INIT) { /* First time use of once_control. Invert the marker. */ *once_control = ~ PTH_ONCE_INIT; return 1; } else return 0; } #endif /* ========================================================================= */ #if USE_SOLARIS_THREADS /* Use the old Solaris threads library. */ /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ /* --------------------- gl_recursive_lock_t datatype --------------------- */ void glthread_recursive_lock_init (gl_recursive_lock_t *lock) { if (mutex_init (&lock->mutex, USYNC_THREAD, NULL) != 0) abort (); lock->owner = (thread_t) 0; lock->depth = 0; } void glthread_recursive_lock_lock (gl_recursive_lock_t *lock) { thread_t self = thr_self (); if (lock->owner != self) { if (mutex_lock (&lock->mutex) != 0) abort (); lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ abort (); } void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock) { if (lock->owner != thr_self ()) abort (); if (lock->depth == 0) abort (); if (--(lock->depth) == 0) { lock->owner = (thread_t) 0; if (mutex_unlock (&lock->mutex) != 0) abort (); } } void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock) { if (lock->owner != (thread_t) 0) abort (); if (mutex_destroy (&lock->mutex) != 0) abort (); } /* -------------------------- gl_once_t datatype -------------------------- */ void glthread_once (gl_once_t *once_control, void (*initfunction) (void)) { if (!once_control->inited) { /* Use the mutex to guarantee that if another thread is already calling the initfunction, this thread waits until it's finished. */ if (mutex_lock (&once_control->mutex) != 0) abort (); if (!once_control->inited) { once_control->inited = 1; initfunction (); } if (mutex_unlock (&once_control->mutex) != 0) abort (); } } int glthread_once_singlethreaded (gl_once_t *once_control) { /* We know that gl_once_t contains an integer type. */ if (!once_control->inited) { /* First time use of once_control. Invert the marker. */ once_control->inited = ~ 0; return 1; } else return 0; } #endif /* ========================================================================= */ #if USE_WIN32_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ void glthread_lock_init (gl_lock_t *lock) { InitializeCriticalSection (&lock->lock); lock->guard.done = 1; } void glthread_lock_lock (gl_lock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_lock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } EnterCriticalSection (&lock->lock); } void glthread_lock_unlock (gl_lock_t *lock) { if (!lock->guard.done) abort (); LeaveCriticalSection (&lock->lock); } void glthread_lock_destroy (gl_lock_t *lock) { if (!lock->guard.done) abort (); DeleteCriticalSection (&lock->lock); lock->guard.done = 0; } /* ------------------------- gl_rwlock_t datatype ------------------------- */ static inline void gl_waitqueue_init (gl_waitqueue_t *wq) { wq->array = NULL; wq->count = 0; wq->alloc = 0; wq->offset = 0; } /* Enqueues the current thread, represented by an event, in a wait queue. Returns INVALID_HANDLE_VALUE if an allocation failure occurs. */ static HANDLE gl_waitqueue_add (gl_waitqueue_t *wq) { HANDLE event; unsigned int index; if (wq->count == wq->alloc) { unsigned int new_alloc = 2 * wq->alloc + 1; HANDLE *new_array = (HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE)); if (new_array == NULL) /* No more memory. */ return INVALID_HANDLE_VALUE; /* Now is a good opportunity to rotate the array so that its contents starts at offset 0. */ if (wq->offset > 0) { unsigned int old_count = wq->count; unsigned int old_alloc = wq->alloc; unsigned int old_offset = wq->offset; unsigned int i; if (old_offset + old_count > old_alloc) { unsigned int limit = old_offset + old_count - old_alloc; for (i = 0; i < limit; i++) new_array[old_alloc + i] = new_array[i]; } for (i = 0; i < old_count; i++) new_array[i] = new_array[old_offset + i]; wq->offset = 0; } wq->array = new_array; wq->alloc = new_alloc; } event = CreateEvent (NULL, TRUE, FALSE, NULL); if (event == INVALID_HANDLE_VALUE) /* No way to allocate an event. */ return INVALID_HANDLE_VALUE; index = wq->offset + wq->count; if (index >= wq->alloc) index -= wq->alloc; wq->array[index] = event; wq->count++; return event; } /* Notifies the first thread from a wait queue and dequeues it. */ static inline void gl_waitqueue_notify_first (gl_waitqueue_t *wq) { SetEvent (wq->array[wq->offset + 0]); wq->offset++; wq->count--; if (wq->count == 0 || wq->offset == wq->alloc) wq->offset = 0; } /* Notifies all threads from a wait queue and dequeues them all. */ static inline void gl_waitqueue_notify_all (gl_waitqueue_t *wq) { unsigned int i; for (i = 0; i < wq->count; i++) { unsigned int index = wq->offset + i; if (index >= wq->alloc) index -= wq->alloc; SetEvent (wq->array[index]); } wq->count = 0; wq->offset = 0; } void glthread_rwlock_init (gl_rwlock_t *lock) { InitializeCriticalSection (&lock->lock); gl_waitqueue_init (&lock->waiting_readers); gl_waitqueue_init (&lock->waiting_writers); lock->runcount = 0; lock->guard.done = 1; } void glthread_rwlock_rdlock (gl_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_rwlock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } EnterCriticalSection (&lock->lock); /* Test whether only readers are currently running, and whether the runcount field will not overflow. */ if (!(lock->runcount + 1 > 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ HANDLE event = gl_waitqueue_add (&lock->waiting_readers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_readers, incremented lock->runcount. */ if (!(lock->runcount > 0)) abort (); return; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount + 1 > 0)); } } lock->runcount++; LeaveCriticalSection (&lock->lock); } void glthread_rwlock_wrlock (gl_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_rwlock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } EnterCriticalSection (&lock->lock); /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ HANDLE event = gl_waitqueue_add (&lock->waiting_writers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_writers, set lock->runcount = -1. */ if (!(lock->runcount == -1)) abort (); return; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount == 0)); } } lock->runcount--; /* runcount becomes -1 */ LeaveCriticalSection (&lock->lock); } void glthread_rwlock_unlock (gl_rwlock_t *lock) { if (!lock->guard.done) abort (); EnterCriticalSection (&lock->lock); if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) abort (); lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) abort (); lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers.count > 0) { /* Wake up one of the waiting writers. */ lock->runcount--; gl_waitqueue_notify_first (&lock->waiting_writers); } else { /* Wake up all waiting readers. */ lock->runcount += lock->waiting_readers.count; gl_waitqueue_notify_all (&lock->waiting_readers); } } LeaveCriticalSection (&lock->lock); } void glthread_rwlock_destroy (gl_rwlock_t *lock) { if (!lock->guard.done) abort (); if (lock->runcount != 0) abort (); DeleteCriticalSection (&lock->lock); if (lock->waiting_readers.array != NULL) free (lock->waiting_readers.array); if (lock->waiting_writers.array != NULL) free (lock->waiting_writers.array); lock->guard.done = 0; } /* --------------------- gl_recursive_lock_t datatype --------------------- */ void glthread_recursive_lock_init (gl_recursive_lock_t *lock) { lock->owner = 0; lock->depth = 0; InitializeCriticalSection (&lock->lock); lock->guard.done = 1; } void glthread_recursive_lock_lock (gl_recursive_lock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glthread_recursive_lock_init (lock); else /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } { DWORD self = GetCurrentThreadId (); if (lock->owner != self) { EnterCriticalSection (&lock->lock); lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ abort (); } } void glthread_recursive_lock_unlock (gl_recursive_lock_t *lock) { if (lock->owner != GetCurrentThreadId ()) abort (); if (lock->depth == 0) abort (); if (--(lock->depth) == 0) { lock->owner = 0; LeaveCriticalSection (&lock->lock); } } void glthread_recursive_lock_destroy (gl_recursive_lock_t *lock) { if (lock->owner != 0) abort (); DeleteCriticalSection (&lock->lock); lock->guard.done = 0; } /* -------------------------- gl_once_t datatype -------------------------- */ void glthread_once (gl_once_t *once_control, void (*initfunction) (void)) { if (once_control->inited <= 0) { if (InterlockedIncrement (&once_control->started) == 0) { /* This thread is the first one to come to this once_control. */ InitializeCriticalSection (&once_control->lock); EnterCriticalSection (&once_control->lock); once_control->inited = 0; initfunction (); once_control->inited = 1; LeaveCriticalSection (&once_control->lock); } else { /* Undo last operation. */ InterlockedDecrement (&once_control->started); /* Some other thread has already started the initialization. Yield the CPU while waiting for the other thread to finish initializing and taking the lock. */ while (once_control->inited < 0) Sleep (0); if (once_control->inited <= 0) { /* Take the lock. This blocks until the other thread has finished calling the initfunction. */ EnterCriticalSection (&once_control->lock); LeaveCriticalSection (&once_control->lock); if (!(once_control->inited > 0)) abort (); } } } } #endif /* ========================================================================= */ KCemu-0.5.1/intl/localealias.c0000644001050700006200000002454611340261610015575 0ustar glaubitzfbedv/* Handle aliases for locale names. Copyright (C) 1995-1999, 2000-2001, 2003, 2005-2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Tell glibc's to provide a prototype for mempcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #if defined _LIBC || defined HAVE___FSETLOCKING # include #endif #include #ifdef __GNUC__ # undef alloca # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # ifdef _MSC_VER # include # define alloca _alloca # else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif # endif #endif #include #include #include "gettextP.h" #if ENABLE_RELOCATABLE # include "relocatable.h" #else # define relocate(pathname) (pathname) #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define strcasecmp __strcasecmp # ifndef mempcpy # define mempcpy __mempcpy # endif # define HAVE_MEMPCPY 1 # define HAVE___FSETLOCKING 1 #endif /* Handle multi-threaded applications. */ #ifdef _LIBC # include #else # include "lock.h" #endif #ifndef internal_function # define internal_function #endif /* Some optimizations for glibc. */ #ifdef _LIBC # define FEOF(fp) feof_unlocked (fp) # define FGETS(buf, n, fp) fgets_unlocked (buf, n, fp) #else # define FEOF(fp) feof (fp) # define FGETS(buf, n, fp) fgets (buf, n, fp) #endif /* For those losing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA # define freea(p) /* nothing */ #else # define alloca(n) malloc (n) # define freea(p) free (p) #endif #if defined _LIBC_REENTRANT || HAVE_DECL_FGETS_UNLOCKED # undef fgets # define fgets(buf, len, s) fgets_unlocked (buf, len, s) #endif #if defined _LIBC_REENTRANT || HAVE_DECL_FEOF_UNLOCKED # undef feof # define feof(s) feof_unlocked (s) #endif __libc_lock_define_initialized (static, lock) struct alias_map { const char *alias; const char *value; }; #ifndef _LIBC # define libc_freeres_ptr(decl) decl #endif libc_freeres_ptr (static char *string_space); static size_t string_space_act; static size_t string_space_max; libc_freeres_ptr (static struct alias_map *map); static size_t nmap; static size_t maxmap; /* Prototypes for local functions. */ static size_t read_alias_file (const char *fname, int fname_len) internal_function; static int extend_alias_table (void); static int alias_compare (const struct alias_map *map1, const struct alias_map *map2); const char * _nl_expand_alias (const char *name) { static const char *locale_alias_path; struct alias_map *retval; const char *result = NULL; size_t added; __libc_lock_lock (lock); if (locale_alias_path == NULL) locale_alias_path = LOCALE_ALIAS_PATH; do { struct alias_map item; item.alias = name; if (nmap > 0) retval = (struct alias_map *) bsearch (&item, map, nmap, sizeof (struct alias_map), (int (*) (const void *, const void *) ) alias_compare); else retval = NULL; /* We really found an alias. Return the value. */ if (retval != NULL) { result = retval->value; break; } /* Perhaps we can find another alias file. */ added = 0; while (added == 0 && locale_alias_path[0] != '\0') { const char *start; while (locale_alias_path[0] == PATH_SEPARATOR) ++locale_alias_path; start = locale_alias_path; while (locale_alias_path[0] != '\0' && locale_alias_path[0] != PATH_SEPARATOR) ++locale_alias_path; if (start < locale_alias_path) added = read_alias_file (start, locale_alias_path - start); } } while (added != 0); __libc_lock_unlock (lock); return result; } static size_t internal_function read_alias_file (const char *fname, int fname_len) { FILE *fp; char *full_fname; size_t added; static const char aliasfile[] = "/locale.alias"; full_fname = (char *) alloca (fname_len + sizeof aliasfile); #ifdef HAVE_MEMPCPY mempcpy (mempcpy (full_fname, fname, fname_len), aliasfile, sizeof aliasfile); #else memcpy (full_fname, fname, fname_len); memcpy (&full_fname[fname_len], aliasfile, sizeof aliasfile); #endif #ifdef _LIBC /* Note the file is opened with cancellation in the I/O functions disabled. */ fp = fopen (relocate (full_fname), "rc"); #else fp = fopen (relocate (full_fname), "r"); #endif freea (full_fname); if (fp == NULL) return 0; #ifdef HAVE___FSETLOCKING /* No threads present. */ __fsetlocking (fp, FSETLOCKING_BYCALLER); #endif added = 0; while (!FEOF (fp)) { /* It is a reasonable approach to use a fix buffer here because a) we are only interested in the first two fields b) these fields must be usable as file names and so must not be that long We avoid a multi-kilobyte buffer here since this would use up stack space which we might not have if the program ran out of memory. */ char buf[400]; char *alias; char *value; char *cp; int complete_line; if (FGETS (buf, sizeof buf, fp) == NULL) /* EOF reached. */ break; /* Determine whether the line is complete. */ complete_line = strchr (buf, '\n') != NULL; cp = buf; /* Ignore leading white space. */ while (isspace ((unsigned char) cp[0])) ++cp; /* A leading '#' signals a comment line. */ if (cp[0] != '\0' && cp[0] != '#') { alias = cp++; while (cp[0] != '\0' && !isspace ((unsigned char) cp[0])) ++cp; /* Terminate alias name. */ if (cp[0] != '\0') *cp++ = '\0'; /* Now look for the beginning of the value. */ while (isspace ((unsigned char) cp[0])) ++cp; if (cp[0] != '\0') { value = cp++; while (cp[0] != '\0' && !isspace ((unsigned char) cp[0])) ++cp; /* Terminate value. */ if (cp[0] == '\n') { /* This has to be done to make the following test for the end of line possible. We are looking for the terminating '\n' which do not overwrite here. */ *cp++ = '\0'; *cp = '\n'; } else if (cp[0] != '\0') *cp++ = '\0'; #ifdef IN_LIBGLOCALE /* glibc's locale.alias contains entries for ja_JP and ko_KR that make it impossible to use a Japanese or Korean UTF-8 locale under the name "ja_JP" or "ko_KR". Ignore these entries. */ if (strchr (alias, '_') == NULL) #endif { size_t alias_len; size_t value_len; if (nmap >= maxmap) if (__builtin_expect (extend_alias_table (), 0)) goto out; alias_len = strlen (alias) + 1; value_len = strlen (value) + 1; if (string_space_act + alias_len + value_len > string_space_max) { /* Increase size of memory pool. */ size_t new_size = (string_space_max + (alias_len + value_len > 1024 ? alias_len + value_len : 1024)); char *new_pool = (char *) realloc (string_space, new_size); if (new_pool == NULL) goto out; if (__builtin_expect (string_space != new_pool, 0)) { size_t i; for (i = 0; i < nmap; i++) { map[i].alias += new_pool - string_space; map[i].value += new_pool - string_space; } } string_space = new_pool; string_space_max = new_size; } map[nmap].alias = (const char *) memcpy (&string_space[string_space_act], alias, alias_len); string_space_act += alias_len; map[nmap].value = (const char *) memcpy (&string_space[string_space_act], value, value_len); string_space_act += value_len; ++nmap; ++added; } } } /* Possibly not the whole line fits into the buffer. Ignore the rest of the line. */ if (! complete_line) do if (FGETS (buf, sizeof buf, fp) == NULL) /* Make sure the inner loop will be left. The outer loop will exit at the `feof' test. */ break; while (strchr (buf, '\n') == NULL); } out: /* Should we test for ferror()? I think we have to silently ignore errors. --drepper */ fclose (fp); if (added > 0) qsort (map, nmap, sizeof (struct alias_map), (int (*) (const void *, const void *)) alias_compare); return added; } static int extend_alias_table () { size_t new_size; struct alias_map *new_map; new_size = maxmap == 0 ? 100 : 2 * maxmap; new_map = (struct alias_map *) realloc (map, (new_size * sizeof (struct alias_map))); if (new_map == NULL) /* Simply don't extend: we don't have any more core. */ return -1; map = new_map; maxmap = new_size; return 0; } static int alias_compare (const struct alias_map *map1, const struct alias_map *map2) { #if defined _LIBC || defined HAVE_STRCASECMP return strcasecmp (map1->alias, map2->alias); #else const unsigned char *p1 = (const unsigned char *) map1->alias; const unsigned char *p2 = (const unsigned char *) map2->alias; unsigned char c1, c2; if (p1 == p2) return 0; do { /* I know this seems to be odd but the tolower() function in some systems libc cannot handle nonalpha characters. */ c1 = isupper (*p1) ? tolower (*p1) : *p1; c2 = isupper (*p2) ? tolower (*p2) : *p2; if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); return c1 - c2; #endif } KCemu-0.5.1/intl/intl-compat.c0000644001050700006200000000662411321666453015565 0ustar glaubitzfbedv/* intl-compat.c - Stub functions to call gettext functions from GNU gettext Library. Copyright (C) 1995, 2000-2003, 2005 Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" /* @@ end of prolog @@ */ /* This file redirects the gettext functions (without prefix) to those defined in the included GNU libintl library (with "libintl_" prefix). It is compiled into libintl in order to make the AM_GNU_GETTEXT test of gettext <= 0.11.2 work with the libintl library >= 0.11.3 which has the redirections primarily in the include file. It is also compiled into libgnuintl so that libgnuintl.so can be used as LD_PRELOADable library on glibc systems, to provide the extra features that the functions in the libc don't have (namely, logging). */ #undef gettext #undef dgettext #undef dcgettext #undef ngettext #undef dngettext #undef dcngettext #undef textdomain #undef bindtextdomain #undef bind_textdomain_codeset /* When building a DLL, we must export some functions. Note that because the functions are only defined for binary backward compatibility, we don't need to use __declspec(dllimport) in any case. */ #if HAVE_VISIBILITY && BUILDING_DLL # define DLL_EXPORTED __attribute__((__visibility__("default"))) #elif defined _MSC_VER && BUILDING_DLL # define DLL_EXPORTED __declspec(dllexport) #else # define DLL_EXPORTED #endif DLL_EXPORTED char * gettext (const char *msgid) { return libintl_gettext (msgid); } DLL_EXPORTED char * dgettext (const char *domainname, const char *msgid) { return libintl_dgettext (domainname, msgid); } DLL_EXPORTED char * dcgettext (const char *domainname, const char *msgid, int category) { return libintl_dcgettext (domainname, msgid, category); } DLL_EXPORTED char * ngettext (const char *msgid1, const char *msgid2, unsigned long int n) { return libintl_ngettext (msgid1, msgid2, n); } DLL_EXPORTED char * dngettext (const char *domainname, const char *msgid1, const char *msgid2, unsigned long int n) { return libintl_dngettext (domainname, msgid1, msgid2, n); } DLL_EXPORTED char * dcngettext (const char *domainname, const char *msgid1, const char *msgid2, unsigned long int n, int category) { return libintl_dcngettext (domainname, msgid1, msgid2, n, category); } DLL_EXPORTED char * textdomain (const char *domainname) { return libintl_textdomain (domainname); } DLL_EXPORTED char * bindtextdomain (const char *domainname, const char *dirname) { return libintl_bindtextdomain (domainname, dirname); } DLL_EXPORTED char * bind_textdomain_codeset (const char *domainname, const char *codeset) { return libintl_bind_textdomain_codeset (domainname, codeset); } KCemu-0.5.1/intl/vasnprintf.h0000644001050700006200000000544311340261610015516 0ustar glaubitzfbedv/* vsprintf with automatic memory allocation. Copyright (C) 2002-2004 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _VASNPRINTF_H #define _VASNPRINTF_H /* Get va_list. */ #include /* Get size_t. */ #include #ifndef __attribute__ /* This feature is available in gcc versions 2.5 and later. */ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) || __STRICT_ANSI__ # define __attribute__(Spec) /* empty */ # endif /* The __-protected variants of `format' and `printf' attributes are accepted by gcc versions 2.6.4 (effectively 2.7) and later. */ # if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 7) # define __format__ format # define __printf__ printf # endif #endif #ifdef __cplusplus extern "C" { #endif /* Write formatted output to a string dynamically allocated with malloc(). You can pass a preallocated buffer for the result in RESULTBUF and its size in *LENGTHP; otherwise you pass RESULTBUF = NULL. If successful, return the address of the string (this may be = RESULTBUF if no dynamic memory allocation was necessary) and set *LENGTHP to the number of resulting bytes, excluding the trailing NUL. Upon error, set errno and return NULL. When dynamic memory allocation occurs, the preallocated buffer is left alone (with possibly modified contents). This makes it possible to use a statically allocated or stack-allocated buffer, like this: char buf[100]; size_t len = sizeof (buf); char *output = vasnprintf (buf, &len, format, args); if (output == NULL) ... error handling ...; else { ... use the output string ...; if (output != buf) free (output); } */ extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args) __attribute__ ((__format__ (__printf__, 3, 0))); #ifdef __cplusplus } #endif #endif /* _VASNPRINTF_H */ KCemu-0.5.1/intl/explodename.c0000644001050700006200000000654611340261610015625 0ustar glaubitzfbedv/* Copyright (C) 1995-1998, 2000-2001, 2003, 2005, 2007 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "loadinfo.h" /* On some strange systems still no definition of NULL is found. Sigh! */ #ifndef NULL # if defined __STDC__ && __STDC__ # define NULL ((void *) 0) # else # define NULL 0 # endif #endif /* @@ end of prolog @@ */ /* Split a locale name NAME into a leading language part and all the rest. Return a pointer to the first character after the language, i.e. to the first byte of the rest. */ static char *_nl_find_language (const char *name); static char * _nl_find_language (const char *name) { while (name[0] != '\0' && name[0] != '_' && name[0] != '@' && name[0] != '.') ++name; return (char *) name; } int _nl_explode_name (char *name, const char **language, const char **modifier, const char **territory, const char **codeset, const char **normalized_codeset) { char *cp; int mask; *modifier = NULL; *territory = NULL; *codeset = NULL; *normalized_codeset = NULL; /* Now we determine the single parts of the locale name. First look for the language. Termination symbols are `_', '.', and `@'. */ mask = 0; *language = cp = name; cp = _nl_find_language (*language); if (*language == cp) /* This does not make sense: language has to be specified. Use this entry as it is without exploding. Perhaps it is an alias. */ cp = strchr (*language, '\0'); else { if (cp[0] == '_') { /* Next is the territory. */ cp[0] = '\0'; *territory = ++cp; while (cp[0] != '\0' && cp[0] != '.' && cp[0] != '@') ++cp; mask |= XPG_TERRITORY; } if (cp[0] == '.') { /* Next is the codeset. */ cp[0] = '\0'; *codeset = ++cp; while (cp[0] != '\0' && cp[0] != '@') ++cp; mask |= XPG_CODESET; if (*codeset != cp && (*codeset)[0] != '\0') { *normalized_codeset = _nl_normalize_codeset (*codeset, cp - *codeset); if (*normalized_codeset == NULL) return -1; else if (strcmp (*codeset, *normalized_codeset) == 0) free ((char *) *normalized_codeset); else mask |= XPG_NORM_CODESET; } } } if (cp[0] == '@') { /* Next is the modifier. */ cp[0] = '\0'; *modifier = ++cp; if (cp[0] != '\0') mask |= XPG_MODIFIER; } if (*territory != NULL && (*territory)[0] == '\0') mask &= ~XPG_TERRITORY; if (*codeset != NULL && (*codeset)[0] == '\0') mask &= ~XPG_CODESET; return mask; } KCemu-0.5.1/intl/gmo.h0000644001050700006200000001151211340261610014100 0ustar glaubitzfbedv/* Description of GNU message catalog format: general file layout. Copyright (C) 1995, 1997, 2000-2002, 2004, 2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _GETTEXT_H #define _GETTEXT_H 1 #include /* @@ end of prolog @@ */ /* The magic number of the GNU message catalog format. */ #define _MAGIC 0x950412de #define _MAGIC_SWAPPED 0xde120495 /* Revision number of the currently used .mo (binary) file format. */ #define MO_REVISION_NUMBER 0 #define MO_REVISION_NUMBER_WITH_SYSDEP_I 1 /* The following contortions are an attempt to use the C preprocessor to determine an unsigned integral type that is 32 bits wide. An alternative approach is to use autoconf's AC_CHECK_SIZEOF macro, but as of version autoconf-2.13, the AC_CHECK_SIZEOF macro doesn't work when cross-compiling. */ #if __STDC__ # define UINT_MAX_32_BITS 4294967295U #else # define UINT_MAX_32_BITS 0xFFFFFFFF #endif /* If UINT_MAX isn't defined, assume it's a 32-bit type. This should be valid for all systems GNU cares about because that doesn't include 16-bit systems, and only modern systems (that certainly have ) have 64+-bit integral types. */ #ifndef UINT_MAX # define UINT_MAX UINT_MAX_32_BITS #endif #if UINT_MAX == UINT_MAX_32_BITS typedef unsigned nls_uint32; #else # if USHRT_MAX == UINT_MAX_32_BITS typedef unsigned short nls_uint32; # else # if ULONG_MAX == UINT_MAX_32_BITS typedef unsigned long nls_uint32; # else /* The following line is intended to throw an error. Using #error is not portable enough. */ "Cannot determine unsigned 32-bit data type." # endif # endif #endif /* Header for binary .mo file format. */ struct mo_file_header { /* The magic number. */ nls_uint32 magic; /* The revision number of the file format. */ nls_uint32 revision; /* The following are only used in .mo files with major revision 0 or 1. */ /* The number of strings pairs. */ nls_uint32 nstrings; /* Offset of table with start offsets of original strings. */ nls_uint32 orig_tab_offset; /* Offset of table with start offsets of translated strings. */ nls_uint32 trans_tab_offset; /* Size of hash table. */ nls_uint32 hash_tab_size; /* Offset of first hash table entry. */ nls_uint32 hash_tab_offset; /* The following are only used in .mo files with minor revision >= 1. */ /* The number of system dependent segments. */ nls_uint32 n_sysdep_segments; /* Offset of table describing system dependent segments. */ nls_uint32 sysdep_segments_offset; /* The number of system dependent strings pairs. */ nls_uint32 n_sysdep_strings; /* Offset of table with start offsets of original sysdep strings. */ nls_uint32 orig_sysdep_tab_offset; /* Offset of table with start offsets of translated sysdep strings. */ nls_uint32 trans_sysdep_tab_offset; }; /* Descriptor for static string contained in the binary .mo file. */ struct string_desc { /* Length of addressed string, not including the trailing NUL. */ nls_uint32 length; /* Offset of string in file. */ nls_uint32 offset; }; /* The following are only used in .mo files with minor revision >= 1. */ /* Descriptor for system dependent string segment. */ struct sysdep_segment { /* Length of addressed string, including the trailing NUL. */ nls_uint32 length; /* Offset of string in file. */ nls_uint32 offset; }; /* Pair of a static and a system dependent segment, in struct sysdep_string. */ struct segment_pair { /* Size of static segment. */ nls_uint32 segsize; /* Reference to system dependent string segment, or ~0 at the end. */ nls_uint32 sysdepref; }; /* Descriptor for system dependent string. */ struct sysdep_string { /* Offset of static string segments in file. */ nls_uint32 offset; /* Alternating sequence of static and system dependent segments. The last segment is a static segment, including the trailing NUL. */ struct segment_pair segments[1]; }; /* Marker for the end of the segments[] array. This has the value 0xFFFFFFFF, regardless whether 'int' is 16 bit, 32 bit, or 64 bit. */ #define SEGMENTS_END ((nls_uint32) ~0) /* @@ begin of epilog @@ */ #endif /* gettext.h */ KCemu-0.5.1/intl/localcharset.c0000644001050700006200000003031411340261610015756 0ustar glaubitzfbedv/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible . */ #include /* Specification. */ #include "localcharset.h" #include #include #include #include #if defined _WIN32 || defined __WIN32__ # define WIN32_NATIVE #endif #if defined __EMX__ /* Assume EMX program runs on OS/2, even if compiled under DOS. */ # define OS2 #endif #if !defined WIN32_NATIVE # if HAVE_LANGINFO_CODESET # include # else # if 0 /* see comment below */ # include # endif # endif # ifdef __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include # endif #elif defined WIN32_NATIVE # define WIN32_LEAN_AND_MEAN # include #endif #if defined OS2 # define INCL_DOS # include #endif #if ENABLE_RELOCATABLE # include "relocatable.h" #else # define relocate(pathname) (pathname) #endif /* Get LIBDIR. */ #ifndef LIBDIR # include "configmake.h" #endif #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Win32, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') #endif #ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' #endif #ifndef ISSLASH # define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR) #endif #if HAVE_DECL_GETC_UNLOCKED # undef getc # define getc getc_unlocked #endif /* The following static variable is declared 'volatile' to avoid a possible multithread problem in the function get_charset_aliases. If we are running in a threaded environment, and if two threads initialize 'charset_aliases' simultaneously, both will produce the same value, and everything will be ok if the two assignments to 'charset_aliases' are atomic. But I don't know what will happen if the two assignments mix. */ #if __STDC__ != 1 # define volatile /* empty */ #endif /* Pointer to the contents of the charset.alias file, if it has already been read, else NULL. Its format is: ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0' */ static const char * volatile charset_aliases; /* Return a pointer to the contents of the charset.alias file. */ static const char * get_charset_aliases (void) { const char *cp; cp = charset_aliases; if (cp == NULL) { #if !(defined VMS || defined WIN32_NATIVE || defined __CYGWIN__) FILE *fp; const char *dir; const char *base = "charset.alias"; char *file_name; /* Make it possible to override the charset.alias location. This is necessary for running the testsuite before "make install". */ dir = getenv ("CHARSETALIASDIR"); if (dir == NULL || dir[0] == '\0') dir = relocate (LIBDIR); /* Concatenate dir and base into freshly allocated file_name. */ { size_t dir_len = strlen (dir); size_t base_len = strlen (base); int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1])); file_name = (char *) malloc (dir_len + add_slash + base_len + 1); if (file_name != NULL) { memcpy (file_name, dir, dir_len); if (add_slash) file_name[dir_len] = DIRECTORY_SEPARATOR; memcpy (file_name + dir_len + add_slash, base, base_len + 1); } } if (file_name == NULL || (fp = fopen (file_name, "r")) == NULL) /* Out of memory or file not found, treat it as empty. */ cp = ""; else { /* Parse the file's contents. */ char *res_ptr = NULL; size_t res_size = 0; for (;;) { int c; char buf1[50+1]; char buf2[50+1]; size_t l1, l2; char *old_res_ptr; c = getc (fp); if (c == EOF) break; if (c == '\n' || c == ' ' || c == '\t') continue; if (c == '#') { /* Skip comment, to end of line. */ do c = getc (fp); while (!(c == EOF || c == '\n')); if (c == EOF) break; continue; } ungetc (c, fp); if (fscanf (fp, "%50s %50s", buf1, buf2) < 2) break; l1 = strlen (buf1); l2 = strlen (buf2); old_res_ptr = res_ptr; if (res_size == 0) { res_size = l1 + 1 + l2 + 1; res_ptr = (char *) malloc (res_size + 1); } else { res_size += l1 + 1 + l2 + 1; res_ptr = (char *) realloc (res_ptr, res_size + 1); } if (res_ptr == NULL) { /* Out of memory. */ res_size = 0; if (old_res_ptr != NULL) free (old_res_ptr); break; } strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1); strcpy (res_ptr + res_size - (l2 + 1), buf2); } fclose (fp); if (res_size == 0) cp = ""; else { *(res_ptr + res_size) = '\0'; cp = res_ptr; } } if (file_name != NULL) free (file_name); #else # if defined VMS /* To avoid the troubles of an extra file charset.alias_vms in the sources of many GNU packages, simply inline the aliases here. */ /* The list of encodings is taken from the OpenVMS 7.3-1 documentation "Compaq C Run-Time Library Reference Manual for OpenVMS systems" section 10.7 "Handling Different Character Sets". */ cp = "ISO8859-1" "\0" "ISO-8859-1" "\0" "ISO8859-2" "\0" "ISO-8859-2" "\0" "ISO8859-5" "\0" "ISO-8859-5" "\0" "ISO8859-7" "\0" "ISO-8859-7" "\0" "ISO8859-8" "\0" "ISO-8859-8" "\0" "ISO8859-9" "\0" "ISO-8859-9" "\0" /* Japanese */ "eucJP" "\0" "EUC-JP" "\0" "SJIS" "\0" "SHIFT_JIS" "\0" "DECKANJI" "\0" "DEC-KANJI" "\0" "SDECKANJI" "\0" "EUC-JP" "\0" /* Chinese */ "eucTW" "\0" "EUC-TW" "\0" "DECHANYU" "\0" "DEC-HANYU" "\0" "DECHANZI" "\0" "GB2312" "\0" /* Korean */ "DECKOREAN" "\0" "EUC-KR" "\0"; # endif # if defined WIN32_NATIVE || defined __CYGWIN__ /* To avoid the troubles of installing a separate file in the same directory as the DLL and of retrieving the DLL's directory at runtime, simply inline the aliases here. */ cp = "CP936" "\0" "GBK" "\0" "CP1361" "\0" "JOHAB" "\0" "CP20127" "\0" "ASCII" "\0" "CP20866" "\0" "KOI8-R" "\0" "CP20936" "\0" "GB2312" "\0" "CP21866" "\0" "KOI8-RU" "\0" "CP28591" "\0" "ISO-8859-1" "\0" "CP28592" "\0" "ISO-8859-2" "\0" "CP28593" "\0" "ISO-8859-3" "\0" "CP28594" "\0" "ISO-8859-4" "\0" "CP28595" "\0" "ISO-8859-5" "\0" "CP28596" "\0" "ISO-8859-6" "\0" "CP28597" "\0" "ISO-8859-7" "\0" "CP28598" "\0" "ISO-8859-8" "\0" "CP28599" "\0" "ISO-8859-9" "\0" "CP28605" "\0" "ISO-8859-15" "\0" "CP38598" "\0" "ISO-8859-8" "\0" "CP51932" "\0" "EUC-JP" "\0" "CP51936" "\0" "GB2312" "\0" "CP51949" "\0" "EUC-KR" "\0" "CP51950" "\0" "EUC-TW" "\0" "CP54936" "\0" "GB18030" "\0" "CP65001" "\0" "UTF-8" "\0"; # endif #endif charset_aliases = cp; } return cp; } /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed in config.charset. The result must not be freed; it is statically allocated. If the canonical name cannot be determined, the result is a non-canonical name. */ #ifdef STATIC STATIC #endif const char * locale_charset (void) { const char *codeset; const char *aliases; #if !(defined WIN32_NATIVE || defined OS2) # if HAVE_LANGINFO_CODESET /* Most systems support nl_langinfo (CODESET) nowadays. */ codeset = nl_langinfo (CODESET); # ifdef __CYGWIN__ /* Cygwin 2006 does not have locales. nl_langinfo (CODESET) always returns "US-ASCII". As long as this is not fixed, return the suffix of the locale name from the environment variables (if present) or the codepage as a number. */ if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) { const char *locale; static char buf[2 + 10 + 1]; locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (buf)) { memcpy (buf, dot, modifier - dot); buf [modifier - dot] = '\0'; return buf; } } } /* Woe32 has a function returning the locale's codepage as a number. */ sprintf (buf, "CP%u", GetACP ()); codeset = buf; } # endif # else /* On old systems which lack it, use setlocale or getenv. */ const char *locale = NULL; /* But most old systems don't have a complete set of locales. Some (like SunOS 4 or DJGPP) have only the C locale. Therefore we don't use setlocale here; it would return "C" when it doesn't support the locale name the user has set. */ # if 0 locale = setlocale (LC_CTYPE, NULL); # endif if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } } /* On some old systems, one used to set locale = "iso8859_1". On others, you set it to "language_COUNTRY.charset". In any case, we resolve it through the charset.alias file. */ codeset = locale; # endif #elif defined WIN32_NATIVE static char buf[2 + 10 + 1]; /* Woe32 has a function returning the locale's codepage as a number. */ sprintf (buf, "CP%u", GetACP ()); codeset = buf; #elif defined OS2 const char *locale; static char buf[2 + 10 + 1]; ULONG cp[3]; ULONG cplen; /* Allow user to override the codeset, as set in the operating system, with standard language environment variables. */ locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (buf)) { memcpy (buf, dot, modifier - dot); buf [modifier - dot] = '\0'; return buf; } } /* Resolve through the charset.alias file. */ codeset = locale; } else { /* OS/2 has a function returning the locale's codepage as a number. */ if (DosQueryCp (sizeof (cp), cp, &cplen)) codeset = ""; else { sprintf (buf, "CP%u", cp[0]); codeset = buf; } } #endif if (codeset == NULL) /* The canonical name cannot be determined. */ codeset = ""; /* Resolve alias. */ for (aliases = get_charset_aliases (); *aliases != '\0'; aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1) if (strcmp (codeset, aliases) == 0 || (aliases[0] == '*' && aliases[1] == '\0')) { codeset = aliases + strlen (aliases) + 1; break; } /* Don't return an empty string. GNU libc and GNU libiconv interpret the empty string as denoting "the locale's character encoding", thus GNU libiconv would call this function a second time. */ if (codeset[0] == '\0') codeset = "ASCII"; return codeset; } KCemu-0.5.1/intl/gettext.c0000644001050700006200000000355411321666453015021 0ustar glaubitzfbedv/* Implementation of gettext(3) function. Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #ifdef _LIBC # define __need_NULL # include #else # include /* Just for NULL. */ #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define GETTEXT __gettext # define DCGETTEXT INTUSE(__dcgettext) #else # define GETTEXT libintl_gettext # define DCGETTEXT libintl_dcgettext #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ char * GETTEXT (const char *msgid) { return DCGETTEXT (NULL, msgid, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__gettext, gettext); #endif KCemu-0.5.1/intl/ChangeLog0000644001050700006200000000010711340261610014715 0ustar glaubitzfbedv2007-11-07 GNU * Version 0.17 released. KCemu-0.5.1/intl/VERSION0000644001050700006200000000004611340261610014215 0ustar glaubitzfbedvGNU gettext library from gettext-0.17 KCemu-0.5.1/intl/plural.y0000644001050700006200000001657611340261610014655 0ustar glaubitzfbedv%{ /* Expression parsing for plural form selection. Copyright (C) 2000-2001, 2003, 2005-2006 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* For bison < 2.0, the bison generated parser uses alloca. AIX 3 forces us to put this declaration at the beginning of the file. The declaration in bison's skeleton file comes too late. This must come before because may include arbitrary system headers. This can go away once the AM_INTL_SUBDIR macro requires bison >= 2.0. */ #if defined _AIX && !defined __GNUC__ #pragma alloca #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "plural-exp.h" /* The main function generated by the parser is called __gettextparse, but we want it to be called PLURAL_PARSE. */ #ifndef _LIBC # define __gettextparse PLURAL_PARSE #endif #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg %} %pure_parser %expect 7 %union { unsigned long int num; enum expression_operator op; struct expression *exp; } %{ /* Prototypes for local functions. */ static int yylex (YYSTYPE *lval, const char **pexp); static void yyerror (const char *str); /* Allocation of expressions. */ static struct expression * new_exp (int nargs, enum expression_operator op, struct expression * const *args) { int i; struct expression *newp; /* If any of the argument could not be malloc'ed, just return NULL. */ for (i = nargs - 1; i >= 0; i--) if (args[i] == NULL) goto fail; /* Allocate a new expression. */ newp = (struct expression *) malloc (sizeof (*newp)); if (newp != NULL) { newp->nargs = nargs; newp->operation = op; for (i = nargs - 1; i >= 0; i--) newp->val.args[i] = args[i]; return newp; } fail: for (i = nargs - 1; i >= 0; i--) FREE_EXPRESSION (args[i]); return NULL; } static inline struct expression * new_exp_0 (enum expression_operator op) { return new_exp (0, op, NULL); } static inline struct expression * new_exp_1 (enum expression_operator op, struct expression *right) { struct expression *args[1]; args[0] = right; return new_exp (1, op, args); } static struct expression * new_exp_2 (enum expression_operator op, struct expression *left, struct expression *right) { struct expression *args[2]; args[0] = left; args[1] = right; return new_exp (2, op, args); } static inline struct expression * new_exp_3 (enum expression_operator op, struct expression *bexp, struct expression *tbranch, struct expression *fbranch) { struct expression *args[3]; args[0] = bexp; args[1] = tbranch; args[2] = fbranch; return new_exp (3, op, args); } %} /* This declares that all operators have the same associativity and the precedence order as in C. See [Harbison, Steele: C, A Reference Manual]. There is no unary minus and no bitwise operators. Operators with the same syntactic behaviour have been merged into a single token, to save space in the array generated by bison. */ %right '?' /* ? */ %left '|' /* || */ %left '&' /* && */ %left EQUOP2 /* == != */ %left CMPOP2 /* < > <= >= */ %left ADDOP2 /* + - */ %left MULOP2 /* * / % */ %right '!' /* ! */ %token EQUOP2 CMPOP2 ADDOP2 MULOP2 %token NUMBER %type exp %% start: exp { if ($1 == NULL) YYABORT; ((struct parse_args *) arg)->res = $1; } ; exp: exp '?' exp ':' exp { $$ = new_exp_3 (qmop, $1, $3, $5); } | exp '|' exp { $$ = new_exp_2 (lor, $1, $3); } | exp '&' exp { $$ = new_exp_2 (land, $1, $3); } | exp EQUOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | exp CMPOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | exp ADDOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | exp MULOP2 exp { $$ = new_exp_2 ($2, $1, $3); } | '!' exp { $$ = new_exp_1 (lnot, $2); } | 'n' { $$ = new_exp_0 (var); } | NUMBER { if (($$ = new_exp_0 (num)) != NULL) $$->val.num = $1; } | '(' exp ')' { $$ = $2; } ; %% void internal_function FREE_EXPRESSION (struct expression *exp) { if (exp == NULL) return; /* Handle the recursive case. */ switch (exp->nargs) { case 3: FREE_EXPRESSION (exp->val.args[2]); /* FALLTHROUGH */ case 2: FREE_EXPRESSION (exp->val.args[1]); /* FALLTHROUGH */ case 1: FREE_EXPRESSION (exp->val.args[0]); /* FALLTHROUGH */ default: break; } free (exp); } static int yylex (YYSTYPE *lval, const char **pexp) { const char *exp = *pexp; int result; while (1) { if (exp[0] == '\0') { *pexp = exp; return YYEOF; } if (exp[0] != ' ' && exp[0] != '\t') break; ++exp; } result = *exp++; switch (result) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { unsigned long int n = result - '0'; while (exp[0] >= '0' && exp[0] <= '9') { n *= 10; n += exp[0] - '0'; ++exp; } lval->num = n; result = NUMBER; } break; case '=': if (exp[0] == '=') { ++exp; lval->op = equal; result = EQUOP2; } else result = YYERRCODE; break; case '!': if (exp[0] == '=') { ++exp; lval->op = not_equal; result = EQUOP2; } break; case '&': case '|': if (exp[0] == result) ++exp; else result = YYERRCODE; break; case '<': if (exp[0] == '=') { ++exp; lval->op = less_or_equal; } else lval->op = less_than; result = CMPOP2; break; case '>': if (exp[0] == '=') { ++exp; lval->op = greater_or_equal; } else lval->op = greater_than; result = CMPOP2; break; case '*': lval->op = mult; result = MULOP2; break; case '/': lval->op = divide; result = MULOP2; break; case '%': lval->op = module; result = MULOP2; break; case '+': lval->op = plus; result = ADDOP2; break; case '-': lval->op = minus; result = ADDOP2; break; case 'n': case '?': case ':': case '(': case ')': /* Nothing, just return the character. */ break; case ';': case '\n': case '\0': /* Be safe and let the user call this function again. */ --exp; result = YYEOF; break; default: result = YYERRCODE; #if YYDEBUG != 0 --exp; #endif break; } *pexp = exp; return result; } static void yyerror (const char *str) { /* Do nothing. We don't print error messages here. */ } KCemu-0.5.1/intl/printf-parse.h0000644001050700006200000000421311321666453015745 0ustar glaubitzfbedv/* Parse printf format string. Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _PRINTF_PARSE_H #define _PRINTF_PARSE_H #include "printf-args.h" /* Flags */ #define FLAG_GROUP 1 /* ' flag */ #define FLAG_LEFT 2 /* - flag */ #define FLAG_SHOWSIGN 4 /* + flag */ #define FLAG_SPACE 8 /* space flag */ #define FLAG_ALT 16 /* # flag */ #define FLAG_ZERO 32 /* arg_index value indicating that no argument is consumed. */ #define ARG_NONE (~(size_t)0) /* A parsed directive. */ typedef struct { const char* dir_start; const char* dir_end; int flags; const char* width_start; const char* width_end; size_t width_arg_index; const char* precision_start; const char* precision_end; size_t precision_arg_index; char conversion; /* d i o u x X f e E g G c s p n U % but not C S */ size_t arg_index; } char_directive; /* A parsed format string. */ typedef struct { size_t count; char_directive *dir; size_t max_width_length; size_t max_precision_length; } char_directives; /* Parses the format string. Fills in the number N of directives, and fills in directives[0], ..., directives[N-1], and sets directives[N].dir_start to the end of the format string. Also fills in the arg_type fields of the arguments and the needed count of arguments. */ #ifdef STATIC STATIC #else extern #endif int printf_parse (const char *format, char_directives *d, arguments *a); #endif /* _PRINTF_PARSE_H */ KCemu-0.5.1/intl/gettextP.h0000644001050700006200000002221411340261610015123 0ustar glaubitzfbedv/* Header describing internals of libintl library. Copyright (C) 1995-1999, 2000-2007 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _GETTEXTP_H #define _GETTEXTP_H #include /* Get size_t. */ #ifdef _LIBC # include "../iconv/gconv_int.h" #else # if HAVE_ICONV # include # endif #endif /* Handle multi-threaded applications. */ #ifdef _LIBC # include # define gl_rwlock_define __libc_rwlock_define #else # include "lock.h" #endif #ifdef _LIBC extern char *__gettext (const char *__msgid); extern char *__dgettext (const char *__domainname, const char *__msgid); extern char *__dcgettext (const char *__domainname, const char *__msgid, int __category); extern char *__ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n); extern char *__dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int n); extern char *__dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category); extern char *__dcigettext (const char *__domainname, const char *__msgid1, const char *__msgid2, int __plural, unsigned long int __n, int __category); extern char *__textdomain (const char *__domainname); extern char *__bindtextdomain (const char *__domainname, const char *__dirname); extern char *__bind_textdomain_codeset (const char *__domainname, const char *__codeset); extern void _nl_finddomain_subfreeres (void) attribute_hidden; extern void _nl_unload_domain (struct loaded_domain *__domain) internal_function attribute_hidden; #else /* Declare the exported libintl_* functions, in a way that allows us to call them under their real name. */ # undef _INTL_REDIRECT_INLINE # undef _INTL_REDIRECT_MACROS # define _INTL_REDIRECT_MACROS # include "libgnuintl.h" # ifdef IN_LIBGLOCALE extern char *gl_dcigettext (const char *__domainname, const char *__msgid1, const char *__msgid2, int __plural, unsigned long int __n, int __category, const char *__localename, const char *__encoding); # else extern char *libintl_dcigettext (const char *__domainname, const char *__msgid1, const char *__msgid2, int __plural, unsigned long int __n, int __category); # endif #endif #include "loadinfo.h" #include "gmo.h" /* Get nls_uint32. */ /* @@ end of prolog @@ */ #ifndef internal_function # define internal_function #endif #ifndef attribute_hidden # define attribute_hidden #endif /* Tell the compiler when a conditional or integer expression is almost always true or almost always false. */ #ifndef HAVE_BUILTIN_EXPECT # define __builtin_expect(expr, val) (expr) #endif #ifndef W # define W(flag, data) ((flag) ? SWAP (data) : (data)) #endif #ifdef _LIBC # include # define SWAP(i) bswap_32 (i) #else static inline nls_uint32 # ifdef __cplusplus SWAP (nls_uint32 i) # else SWAP (i) nls_uint32 i; # endif { return (i << 24) | ((i & 0xff00) << 8) | ((i >> 8) & 0xff00) | (i >> 24); } #endif /* In-memory representation of system dependent string. */ struct sysdep_string_desc { /* Length of addressed string, including the trailing NUL. */ size_t length; /* Pointer to addressed string. */ const char *pointer; }; /* Cache of translated strings after charset conversion. Note: The strings are converted to the target encoding only on an as-needed basis. */ struct converted_domain { /* The target encoding name. */ const char *encoding; /* The descriptor for conversion from the message catalog's encoding to this target encoding. */ #ifdef _LIBC __gconv_t conv; #else # if HAVE_ICONV iconv_t conv; # endif #endif /* The table of translated strings after charset conversion. */ char **conv_tab; }; /* The representation of an opened message catalog. */ struct loaded_domain { /* Pointer to memory containing the .mo file. */ const char *data; /* 1 if the memory is mmap()ed, 0 if the memory is malloc()ed. */ int use_mmap; /* Size of mmap()ed memory. */ size_t mmap_size; /* 1 if the .mo file uses a different endianness than this machine. */ int must_swap; /* Pointer to additional malloc()ed memory. */ void *malloced; /* Number of static strings pairs. */ nls_uint32 nstrings; /* Pointer to descriptors of original strings in the file. */ const struct string_desc *orig_tab; /* Pointer to descriptors of translated strings in the file. */ const struct string_desc *trans_tab; /* Number of system dependent strings pairs. */ nls_uint32 n_sysdep_strings; /* Pointer to descriptors of original sysdep strings. */ const struct sysdep_string_desc *orig_sysdep_tab; /* Pointer to descriptors of translated sysdep strings. */ const struct sysdep_string_desc *trans_sysdep_tab; /* Size of hash table. */ nls_uint32 hash_size; /* Pointer to hash table. */ const nls_uint32 *hash_tab; /* 1 if the hash table uses a different endianness than this machine. */ int must_swap_hash_tab; /* Cache of charset conversions of the translated strings. */ struct converted_domain *conversions; size_t nconversions; gl_rwlock_define (, conversions_lock) const struct expression *plural; unsigned long int nplurals; }; /* We want to allocate a string at the end of the struct. But ISO C doesn't allow zero sized arrays. */ #ifdef __GNUC__ # define ZERO 0 #else # define ZERO 1 #endif /* A set of settings bound to a message domain. Used to store settings from bindtextdomain() and bind_textdomain_codeset(). */ struct binding { struct binding *next; char *dirname; char *codeset; char domainname[ZERO]; }; /* A counter which is incremented each time some previous translations become invalid. This variable is part of the external ABI of the GNU libintl. */ #ifdef IN_LIBGLOCALE # include extern LIBGLOCALE_DLL_EXPORTED int _nl_msg_cat_cntr; #else extern LIBINTL_DLL_EXPORTED int _nl_msg_cat_cntr; #endif #ifndef _LIBC extern const char *_nl_language_preferences_default (void); # define gl_locale_name_canonicalize _nl_locale_name_canonicalize extern void _nl_locale_name_canonicalize (char *name); # define gl_locale_name_posix _nl_locale_name_posix extern const char *_nl_locale_name_posix (int category, const char *categoryname); # define gl_locale_name_default _nl_locale_name_default extern const char *_nl_locale_name_default (void); # define gl_locale_name _nl_locale_name extern const char *_nl_locale_name (int category, const char *categoryname); #endif struct loaded_l10nfile *_nl_find_domain (const char *__dirname, char *__locale, const char *__domainname, struct binding *__domainbinding) internal_function; void _nl_load_domain (struct loaded_l10nfile *__domain, struct binding *__domainbinding) internal_function; #ifdef IN_LIBGLOCALE char *_nl_find_msg (struct loaded_l10nfile *domain_file, struct binding *domainbinding, const char *encoding, const char *msgid, size_t *lengthp) internal_function; #else char *_nl_find_msg (struct loaded_l10nfile *domain_file, struct binding *domainbinding, const char *msgid, int convert, size_t *lengthp) internal_function; #endif /* The internal variables in the standalone libintl.a must have different names than the internal variables in GNU libc, otherwise programs using libintl.a cannot be linked statically. */ #if !defined _LIBC # define _nl_default_dirname libintl_nl_default_dirname # define _nl_domain_bindings libintl_nl_domain_bindings #endif /* Contains the default location of the message catalogs. */ extern const char _nl_default_dirname[]; #ifdef _LIBC libc_hidden_proto (_nl_default_dirname) #endif /* List with bindings of specific domains. */ extern struct binding *_nl_domain_bindings; /* The internal variables in the standalone libintl.a must have different names than the internal variables in GNU libc, otherwise programs using libintl.a cannot be linked statically. */ #if !defined _LIBC # define _nl_default_default_domain libintl_nl_default_default_domain # define _nl_current_default_domain libintl_nl_current_default_domain #endif /* Name of the default text domain. */ extern const char _nl_default_default_domain[] attribute_hidden; /* Default text domain in which entries for gettext(3) are to be found. */ extern const char *_nl_current_default_domain attribute_hidden; /* @@ begin of epilog @@ */ #endif /* gettextP.h */ KCemu-0.5.1/intl/config.charset0000755001050700006200000004702611321666453016016 0ustar glaubitzfbedv#! /bin/sh # Output a system dependent table of character encoding aliases. # # Copyright (C) 2000-2004, 2006 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published # by the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. # # The table consists of lines of the form # ALIAS CANONICAL # # ALIAS is the (system dependent) result of "nl_langinfo (CODESET)". # ALIAS is compared in a case sensitive way. # # CANONICAL is the GNU canonical name for this character encoding. # It must be an encoding supported by libiconv. Support by GNU libc is # also desirable. CANONICAL is case insensitive. Usually an upper case # MIME charset name is preferred. # The current list of GNU canonical charset names is as follows. # # name MIME? used by which systems # ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin # ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd darwin # ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd darwin # ISO-8859-3 Y glibc solaris # ISO-8859-4 Y osf solaris freebsd netbsd darwin # ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd darwin # ISO-8859-6 Y glibc aix hpux solaris # ISO-8859-7 Y glibc aix hpux irix osf solaris netbsd darwin # ISO-8859-8 Y glibc aix hpux osf solaris # ISO-8859-9 Y glibc aix hpux irix osf solaris darwin # ISO-8859-13 glibc netbsd darwin # ISO-8859-14 glibc # ISO-8859-15 glibc aix osf solaris freebsd darwin # KOI8-R Y glibc solaris freebsd netbsd darwin # KOI8-U Y glibc freebsd netbsd darwin # KOI8-T glibc # CP437 dos # CP775 dos # CP850 aix osf dos # CP852 dos # CP855 dos # CP856 aix # CP857 dos # CP861 dos # CP862 dos # CP864 dos # CP865 dos # CP866 freebsd netbsd darwin dos # CP869 dos # CP874 woe32 dos # CP922 aix # CP932 aix woe32 dos # CP943 aix # CP949 osf woe32 dos # CP950 woe32 dos # CP1046 aix # CP1124 aix # CP1125 dos # CP1129 aix # CP1250 woe32 # CP1251 glibc solaris netbsd darwin woe32 # CP1252 aix woe32 # CP1253 woe32 # CP1254 woe32 # CP1255 glibc woe32 # CP1256 woe32 # CP1257 woe32 # GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin # EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin # EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin # EUC-TW glibc aix hpux irix osf solaris netbsd # BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin # BIG5-HKSCS glibc solaris # GBK glibc aix osf solaris woe32 dos # GB18030 glibc solaris netbsd # SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin # JOHAB glibc solaris woe32 # TIS-620 glibc aix hpux osf solaris # VISCII Y glibc # TCVN5712-1 glibc # GEORGIAN-PS glibc # HP-ROMAN8 hpux # HP-ARABIC8 hpux # HP-GREEK8 hpux # HP-HEBREW8 hpux # HP-TURKISH8 hpux # HP-KANA8 hpux # DEC-KANJI osf # DEC-HANYU osf # UTF-8 Y glibc aix hpux osf solaris netbsd darwin # # Note: Names which are not marked as being a MIME name should not be used in # Internet protocols for information interchange (mail, news, etc.). # # Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications # must understand both names and treat them as equivalent. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM host="$1" os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'` echo "# This file contains a table of character encoding aliases," echo "# suitable for operating system '${os}'." echo "# It was automatically generated from config.charset." # List of references, updated during installation: echo "# Packages using this file: " case "$os" in linux-gnulibc1*) # Linux libc5 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "C ASCII" echo "POSIX ASCII" for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \ en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \ en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \ es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \ et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \ fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \ it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \ sv_FI sv_SE; do echo "$l ISO-8859-1" echo "$l.iso-8859-1 ISO-8859-1" echo "$l.iso-8859-15 ISO-8859-15" echo "$l.iso-8859-15@euro ISO-8859-15" echo "$l@euro ISO-8859-15" echo "$l.cp-437 CP437" echo "$l.cp-850 CP850" echo "$l.cp-1252 CP1252" echo "$l.cp-1252@euro CP1252" #echo "$l.atari-st ATARI-ST" # not a commonly used encoding echo "$l.utf-8 UTF-8" echo "$l.utf-8@euro UTF-8" done for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \ sl_SI sr sr_CS sr_YU; do echo "$l ISO-8859-2" echo "$l.iso-8859-2 ISO-8859-2" echo "$l.cp-852 CP852" echo "$l.cp-1250 CP1250" echo "$l.utf-8 UTF-8" done for l in mk mk_MK ru ru_RU; do echo "$l ISO-8859-5" echo "$l.iso-8859-5 ISO-8859-5" echo "$l.koi8-r KOI8-R" echo "$l.cp-866 CP866" echo "$l.cp-1251 CP1251" echo "$l.utf-8 UTF-8" done for l in ar ar_SA; do echo "$l ISO-8859-6" echo "$l.iso-8859-6 ISO-8859-6" echo "$l.cp-864 CP864" #echo "$l.cp-868 CP868" # not a commonly used encoding echo "$l.cp-1256 CP1256" echo "$l.utf-8 UTF-8" done for l in el el_GR gr gr_GR; do echo "$l ISO-8859-7" echo "$l.iso-8859-7 ISO-8859-7" echo "$l.cp-869 CP869" echo "$l.cp-1253 CP1253" echo "$l.cp-1253@euro CP1253" echo "$l.utf-8 UTF-8" echo "$l.utf-8@euro UTF-8" done for l in he he_IL iw iw_IL; do echo "$l ISO-8859-8" echo "$l.iso-8859-8 ISO-8859-8" echo "$l.cp-862 CP862" echo "$l.cp-1255 CP1255" echo "$l.utf-8 UTF-8" done for l in tr tr_TR; do echo "$l ISO-8859-9" echo "$l.iso-8859-9 ISO-8859-9" echo "$l.cp-857 CP857" echo "$l.cp-1254 CP1254" echo "$l.utf-8 UTF-8" done for l in lt lt_LT lv lv_LV; do #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name echo "$l ISO-8859-13" done for l in ru_UA uk uk_UA; do echo "$l KOI8-U" done for l in zh zh_CN; do #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name echo "$l GB2312" done for l in ja ja_JP ja_JP.EUC; do echo "$l EUC-JP" done for l in ko ko_KR; do echo "$l EUC-KR" done for l in th th_TH; do echo "$l TIS-620" done for l in fa fa_IR; do #echo "$l ISIRI-3342" # a broken encoding echo "$l.utf-8 UTF-8" done ;; linux* | *-gnu*) # With glibc-2.1 or newer, we don't need any canonicalization, # because glibc has iconv and both glibc and libiconv support all # GNU canonical names directly. Therefore, the Makefile does not # need to install the alias file at all. # The following applies only to glibc-2.0.x and older libcs. echo "ISO_646.IRV:1983 ASCII" ;; aix*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-6 ISO-8859-6" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "IBM-850 CP850" echo "IBM-856 CP856" echo "IBM-921 ISO-8859-13" echo "IBM-922 CP922" echo "IBM-932 CP932" echo "IBM-943 CP943" echo "IBM-1046 CP1046" echo "IBM-1124 CP1124" echo "IBM-1129 CP1129" echo "IBM-1252 CP1252" echo "IBM-eucCN GB2312" echo "IBM-eucJP EUC-JP" echo "IBM-eucKR EUC-KR" echo "IBM-eucTW EUC-TW" echo "big5 BIG5" echo "GBK GBK" echo "TIS-620 TIS-620" echo "UTF-8 UTF-8" ;; hpux*) echo "iso88591 ISO-8859-1" echo "iso88592 ISO-8859-2" echo "iso88595 ISO-8859-5" echo "iso88596 ISO-8859-6" echo "iso88597 ISO-8859-7" echo "iso88598 ISO-8859-8" echo "iso88599 ISO-8859-9" echo "iso885915 ISO-8859-15" echo "roman8 HP-ROMAN8" echo "arabic8 HP-ARABIC8" echo "greek8 HP-GREEK8" echo "hebrew8 HP-HEBREW8" echo "turkish8 HP-TURKISH8" echo "kana8 HP-KANA8" echo "tis620 TIS-620" echo "big5 BIG5" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "hp15CN GB2312" #echo "ccdc ?" # what is this? echo "SJIS SHIFT_JIS" echo "utf8 UTF-8" ;; irix*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-9 ISO-8859-9" echo "eucCN GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" ;; osf*) echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "cp850 CP850" echo "big5 BIG5" echo "dechanyu DEC-HANYU" echo "dechanzi GB2312" echo "deckanji DEC-KANJI" echo "deckorean EUC-KR" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "GBK GBK" echo "KSC5601 CP949" echo "sdeckanji EUC-JP" echo "SJIS SHIFT_JIS" echo "TACTIS TIS-620" echo "UTF-8 UTF-8" ;; solaris*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-3 ISO-8859-3" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-6 ISO-8859-6" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-8 ISO-8859-8" echo "ISO8859-9 ISO-8859-9" echo "ISO8859-15 ISO-8859-15" echo "koi8-r KOI8-R" echo "ansi-1251 CP1251" echo "BIG5 BIG5" echo "Big5-HKSCS BIG5-HKSCS" echo "gb2312 GB2312" echo "GBK GBK" echo "GB18030 GB18030" echo "cns11643 EUC-TW" echo "5601 EUC-KR" echo "ko_KR.johap92 JOHAB" echo "eucJP EUC-JP" echo "PCK SHIFT_JIS" echo "TIS620.2533 TIS-620" #echo "sun_eu_greek ?" # what is this? echo "UTF-8 UTF-8" ;; freebsd* | os2*) # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just # reuse FreeBSD's locale data for OS/2. echo "C ASCII" echo "US-ASCII ASCII" for l in la_LN lt_LN; do echo "$l.ASCII ASCII" done for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \ lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do echo "$l.ISO_8859-1 ISO-8859-1" echo "$l.DIS_8859-15 ISO-8859-15" done for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do echo "$l.ISO_8859-2 ISO-8859-2" done for l in la_LN lt_LT; do echo "$l.ISO_8859-4 ISO-8859-4" done for l in ru_RU ru_SU; do echo "$l.KOI8-R KOI8-R" echo "$l.ISO_8859-5 ISO-8859-5" echo "$l.CP866 CP866" done echo "uk_UA.KOI8-U KOI8-U" echo "zh_TW.BIG5 BIG5" echo "zh_TW.Big5 BIG5" echo "zh_CN.EUC GB2312" echo "ja_JP.EUC EUC-JP" echo "ja_JP.SJIS SHIFT_JIS" echo "ja_JP.Shift_JIS SHIFT_JIS" echo "ko_KR.EUC EUC-KR" ;; netbsd*) echo "646 ASCII" echo "ISO8859-1 ISO-8859-1" echo "ISO8859-2 ISO-8859-2" echo "ISO8859-4 ISO-8859-4" echo "ISO8859-5 ISO-8859-5" echo "ISO8859-7 ISO-8859-7" echo "ISO8859-13 ISO-8859-13" echo "ISO8859-15 ISO-8859-15" echo "eucCN GB2312" echo "eucJP EUC-JP" echo "eucKR EUC-KR" echo "eucTW EUC-TW" echo "BIG5 BIG5" echo "SJIS SHIFT_JIS" ;; darwin[56]*) # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "C ASCII" for l in en_AU en_CA en_GB en_US la_LN; do echo "$l.US-ASCII ASCII" done for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \ fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \ nl_NL no_NO pt_PT sv_SE; do echo "$l ISO-8859-1" echo "$l.ISO8859-1 ISO-8859-1" echo "$l.ISO8859-15 ISO-8859-15" done for l in la_LN; do echo "$l.ISO8859-1 ISO-8859-1" echo "$l.ISO8859-15 ISO-8859-15" done for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do echo "$l.ISO8859-2 ISO-8859-2" done for l in la_LN lt_LT; do echo "$l.ISO8859-4 ISO-8859-4" done for l in ru_RU; do echo "$l.KOI8-R KOI8-R" echo "$l.ISO8859-5 ISO-8859-5" echo "$l.CP866 CP866" done for l in bg_BG; do echo "$l.CP1251 CP1251" done echo "uk_UA.KOI8-U KOI8-U" echo "zh_TW.BIG5 BIG5" echo "zh_TW.Big5 BIG5" echo "zh_CN.EUC GB2312" echo "ja_JP.EUC EUC-JP" echo "ja_JP.SJIS SHIFT_JIS" echo "ko_KR.EUC EUC-KR" ;; darwin*) # Darwin 7.5 has nl_langinfo(CODESET), but it is useless: # - It returns the empty string when LANG is set to a locale of the # form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 # LC_CTYPE file. # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by # the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. # - The documentation says: # "... all code that calls BSD system routines should ensure # that the const *char parameters of these routines are in UTF-8 # encoding. All BSD system functions expect their string # parameters to be in UTF-8 encoding and nothing else." # It also says # "An additional caveat is that string parameters for files, # paths, and other file-system entities must be in canonical # UTF-8. In a canonical UTF-8 Unicode string, all decomposable # characters are decomposed ..." # but this is not true: You can pass non-decomposed UTF-8 strings # to file system functions, and it is the OS which will convert # them to decomposed UTF-8 before accessing the file system. # - The Apple Terminal application displays UTF-8 by default. # - However, other applications are free to use different encodings: # - xterm uses ISO-8859-1 by default. # - TextEdit uses MacRoman by default. # We prefer UTF-8 over decomposed UTF-8-MAC because one should # minimize the use of decomposed Unicode. Unfortunately, through the # Darwin file system, decomposed UTF-8 strings are leaked into user # space nevertheless. echo "* UTF-8" ;; beos*) # BeOS has a single locale, and it has UTF-8 encoding. echo "* UTF-8" ;; msdosdjgpp*) # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore # localcharset.c falls back to using the full locale name # from the environment variables. echo "#" echo "# The encodings given here may not all be correct." echo "# If you find that the encoding given for your language and" echo "# country is not the one your DOS machine actually uses, just" echo "# correct it in this file, and send a mail to" echo "# Juan Manuel Guerrero " echo "# and Bruno Haible ." echo "#" echo "C ASCII" # ISO-8859-1 languages echo "ca CP850" echo "ca_ES CP850" echo "da CP865" # not CP850 ?? echo "da_DK CP865" # not CP850 ?? echo "de CP850" echo "de_AT CP850" echo "de_CH CP850" echo "de_DE CP850" echo "en CP850" echo "en_AU CP850" # not CP437 ?? echo "en_CA CP850" echo "en_GB CP850" echo "en_NZ CP437" echo "en_US CP437" echo "en_ZA CP850" # not CP437 ?? echo "es CP850" echo "es_AR CP850" echo "es_BO CP850" echo "es_CL CP850" echo "es_CO CP850" echo "es_CR CP850" echo "es_CU CP850" echo "es_DO CP850" echo "es_EC CP850" echo "es_ES CP850" echo "es_GT CP850" echo "es_HN CP850" echo "es_MX CP850" echo "es_NI CP850" echo "es_PA CP850" echo "es_PY CP850" echo "es_PE CP850" echo "es_SV CP850" echo "es_UY CP850" echo "es_VE CP850" echo "et CP850" echo "et_EE CP850" echo "eu CP850" echo "eu_ES CP850" echo "fi CP850" echo "fi_FI CP850" echo "fr CP850" echo "fr_BE CP850" echo "fr_CA CP850" echo "fr_CH CP850" echo "fr_FR CP850" echo "ga CP850" echo "ga_IE CP850" echo "gd CP850" echo "gd_GB CP850" echo "gl CP850" echo "gl_ES CP850" echo "id CP850" # not CP437 ?? echo "id_ID CP850" # not CP437 ?? echo "is CP861" # not CP850 ?? echo "is_IS CP861" # not CP850 ?? echo "it CP850" echo "it_CH CP850" echo "it_IT CP850" echo "lt CP775" echo "lt_LT CP775" echo "lv CP775" echo "lv_LV CP775" echo "nb CP865" # not CP850 ?? echo "nb_NO CP865" # not CP850 ?? echo "nl CP850" echo "nl_BE CP850" echo "nl_NL CP850" echo "nn CP865" # not CP850 ?? echo "nn_NO CP865" # not CP850 ?? echo "no CP865" # not CP850 ?? echo "no_NO CP865" # not CP850 ?? echo "pt CP850" echo "pt_BR CP850" echo "pt_PT CP850" echo "sv CP850" echo "sv_SE CP850" # ISO-8859-2 languages echo "cs CP852" echo "cs_CZ CP852" echo "hr CP852" echo "hr_HR CP852" echo "hu CP852" echo "hu_HU CP852" echo "pl CP852" echo "pl_PL CP852" echo "ro CP852" echo "ro_RO CP852" echo "sk CP852" echo "sk_SK CP852" echo "sl CP852" echo "sl_SI CP852" echo "sq CP852" echo "sq_AL CP852" echo "sr CP852" # CP852 or CP866 or CP855 ?? echo "sr_CS CP852" # CP852 or CP866 or CP855 ?? echo "sr_YU CP852" # CP852 or CP866 or CP855 ?? # ISO-8859-3 languages echo "mt CP850" echo "mt_MT CP850" # ISO-8859-5 languages echo "be CP866" echo "be_BE CP866" echo "bg CP866" # not CP855 ?? echo "bg_BG CP866" # not CP855 ?? echo "mk CP866" # not CP855 ?? echo "mk_MK CP866" # not CP855 ?? echo "ru CP866" echo "ru_RU CP866" echo "uk CP1125" echo "uk_UA CP1125" # ISO-8859-6 languages echo "ar CP864" echo "ar_AE CP864" echo "ar_DZ CP864" echo "ar_EG CP864" echo "ar_IQ CP864" echo "ar_IR CP864" echo "ar_JO CP864" echo "ar_KW CP864" echo "ar_MA CP864" echo "ar_OM CP864" echo "ar_QA CP864" echo "ar_SA CP864" echo "ar_SY CP864" # ISO-8859-7 languages echo "el CP869" echo "el_GR CP869" # ISO-8859-8 languages echo "he CP862" echo "he_IL CP862" # ISO-8859-9 languages echo "tr CP857" echo "tr_TR CP857" # Japanese echo "ja CP932" echo "ja_JP CP932" # Chinese echo "zh_CN GBK" echo "zh_TW CP950" # not CP938 ?? # Korean echo "kr CP949" # not CP934 ?? echo "kr_KR CP949" # not CP934 ?? # Thai echo "th CP874" echo "th_TH CP874" # Other echo "eo CP850" echo "eo_EO CP850" ;; esac KCemu-0.5.1/intl/plural-exp.c0000644001050700006200000000773211340261610015413 0ustar glaubitzfbedv/* Expression parsing for plural form selection. Copyright (C) 2000-2001, 2003, 2005-2007 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "plural-exp.h" #if (defined __GNUC__ && !(__APPLE_CC__ > 1) && !defined __cplusplus) \ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L) /* These structs are the constant expression for the germanic plural form determination. It represents the expression "n != 1". */ static const struct expression plvar = { .nargs = 0, .operation = var, }; static const struct expression plone = { .nargs = 0, .operation = num, .val = { .num = 1 } }; struct expression GERMANIC_PLURAL = { .nargs = 2, .operation = not_equal, .val = { .args = { [0] = (struct expression *) &plvar, [1] = (struct expression *) &plone } } }; # define INIT_GERMANIC_PLURAL() #else /* For compilers without support for ISO C 99 struct/union initializers: Initialization at run-time. */ static struct expression plvar; static struct expression plone; struct expression GERMANIC_PLURAL; static void init_germanic_plural () { if (plone.val.num == 0) { plvar.nargs = 0; plvar.operation = var; plone.nargs = 0; plone.operation = num; plone.val.num = 1; GERMANIC_PLURAL.nargs = 2; GERMANIC_PLURAL.operation = not_equal; GERMANIC_PLURAL.val.args[0] = &plvar; GERMANIC_PLURAL.val.args[1] = &plone; } } # define INIT_GERMANIC_PLURAL() init_germanic_plural () #endif void internal_function EXTRACT_PLURAL_EXPRESSION (const char *nullentry, const struct expression **pluralp, unsigned long int *npluralsp) { if (nullentry != NULL) { const char *plural; const char *nplurals; plural = strstr (nullentry, "plural="); nplurals = strstr (nullentry, "nplurals="); if (plural == NULL || nplurals == NULL) goto no_plural; else { char *endp; unsigned long int n; struct parse_args args; /* First get the number. */ nplurals += 9; while (*nplurals != '\0' && isspace ((unsigned char) *nplurals)) ++nplurals; if (!(*nplurals >= '0' && *nplurals <= '9')) goto no_plural; #if defined HAVE_STRTOUL || defined _LIBC n = strtoul (nplurals, &endp, 10); #else for (endp = nplurals, n = 0; *endp >= '0' && *endp <= '9'; endp++) n = n * 10 + (*endp - '0'); #endif if (nplurals == endp) goto no_plural; *npluralsp = n; /* Due to the restrictions bison imposes onto the interface of the scanner function we have to put the input string and the result passed up from the parser into the same structure which address is passed down to the parser. */ plural += 7; args.cp = plural; if (PLURAL_PARSE (&args) != 0) goto no_plural; *pluralp = args.res; } } else { /* By default we are using the Germanic form: singular form only for `one', the plural form otherwise. Yes, this is also what English is using since English is a Germanic language. */ no_plural: INIT_GERMANIC_PLURAL (); *pluralp = &GERMANIC_PLURAL; *npluralsp = 2; } } KCemu-0.5.1/intl/plural-exp.h0000644001050700006200000001013111340261610015403 0ustar glaubitzfbedv/* Expression parsing and evaluation for plural form selection. Copyright (C) 2000-2003, 2005-2007 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _PLURAL_EXP_H #define _PLURAL_EXP_H #ifndef internal_function # define internal_function #endif #ifndef attribute_hidden # define attribute_hidden #endif #ifdef __cplusplus extern "C" { #endif enum expression_operator { /* Without arguments: */ var, /* The variable "n". */ num, /* Decimal number. */ /* Unary operators: */ lnot, /* Logical NOT. */ /* Binary operators: */ mult, /* Multiplication. */ divide, /* Division. */ module, /* Modulo operation. */ plus, /* Addition. */ minus, /* Subtraction. */ less_than, /* Comparison. */ greater_than, /* Comparison. */ less_or_equal, /* Comparison. */ greater_or_equal, /* Comparison. */ equal, /* Comparison for equality. */ not_equal, /* Comparison for inequality. */ land, /* Logical AND. */ lor, /* Logical OR. */ /* Ternary operators: */ qmop /* Question mark operator. */ }; /* This is the representation of the expressions to determine the plural form. */ struct expression { int nargs; /* Number of arguments. */ enum expression_operator operation; union { unsigned long int num; /* Number value for `num'. */ struct expression *args[3]; /* Up to three arguments. */ } val; }; /* This is the data structure to pass information to the parser and get the result in a thread-safe way. */ struct parse_args { const char *cp; struct expression *res; }; /* Names for the libintl functions are a problem. This source code is used 1. in the GNU C Library library, 2. in the GNU libintl library, 3. in the GNU gettext tools. The function names in each situation must be different, to allow for binary incompatible changes in 'struct expression'. Furthermore, 1. in the GNU C Library library, the names have a __ prefix, 2.+3. in the GNU libintl library and in the GNU gettext tools, the names must follow ANSI C and not start with __. So we have to distinguish the three cases. */ #ifdef _LIBC # define FREE_EXPRESSION __gettext_free_exp # define PLURAL_PARSE __gettextparse # define GERMANIC_PLURAL __gettext_germanic_plural # define EXTRACT_PLURAL_EXPRESSION __gettext_extract_plural #elif defined (IN_LIBINTL) # define FREE_EXPRESSION libintl_gettext_free_exp # define PLURAL_PARSE libintl_gettextparse # define GERMANIC_PLURAL libintl_gettext_germanic_plural # define EXTRACT_PLURAL_EXPRESSION libintl_gettext_extract_plural #else # define FREE_EXPRESSION free_plural_expression # define PLURAL_PARSE parse_plural_expression # define GERMANIC_PLURAL germanic_plural # define EXTRACT_PLURAL_EXPRESSION extract_plural_expression #endif extern void FREE_EXPRESSION (struct expression *exp) internal_function; extern int PLURAL_PARSE (void *arg); extern struct expression GERMANIC_PLURAL attribute_hidden; extern void EXTRACT_PLURAL_EXPRESSION (const char *nullentry, const struct expression **pluralp, unsigned long int *npluralsp) internal_function; #if !defined (_LIBC) && !defined (IN_LIBINTL) && !defined (IN_LIBGLOCALE) extern unsigned long int plural_eval (const struct expression *pexp, unsigned long int n); #endif #ifdef __cplusplus } #endif #endif /* _PLURAL_EXP_H */ KCemu-0.5.1/intl/printf-args.h0000644001050700006200000000662111340261610015557 0ustar glaubitzfbedv/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2006-2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _PRINTF_ARGS_H #define _PRINTF_ARGS_H /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. PRINTF_FETCHARGS Name of the function to be declared. STATIC Set to 'static' to declare the function static. */ /* Default parameters. */ #ifndef PRINTF_FETCHARGS # define PRINTF_FETCHARGS printf_fetchargs #endif /* Get size_t. */ #include /* Get wchar_t. */ #if HAVE_WCHAR_T # include #endif /* Get wint_t. */ #if HAVE_WINT_T # include #endif /* Get va_list. */ #include /* Argument types */ typedef enum { TYPE_NONE, TYPE_SCHAR, TYPE_UCHAR, TYPE_SHORT, TYPE_USHORT, TYPE_INT, TYPE_UINT, TYPE_LONGINT, TYPE_ULONGINT, #if HAVE_LONG_LONG_INT TYPE_LONGLONGINT, TYPE_ULONGLONGINT, #endif TYPE_DOUBLE, TYPE_LONGDOUBLE, TYPE_CHAR, #if HAVE_WINT_T TYPE_WIDE_CHAR, #endif TYPE_STRING, #if HAVE_WCHAR_T TYPE_WIDE_STRING, #endif TYPE_POINTER, TYPE_COUNT_SCHAR_POINTER, TYPE_COUNT_SHORT_POINTER, TYPE_COUNT_INT_POINTER, TYPE_COUNT_LONGINT_POINTER #if HAVE_LONG_LONG_INT , TYPE_COUNT_LONGLONGINT_POINTER #endif #if ENABLE_UNISTDIO /* The unistdio extensions. */ , TYPE_U8_STRING , TYPE_U16_STRING , TYPE_U32_STRING #endif } arg_type; /* Polymorphic argument */ typedef struct { arg_type type; union { signed char a_schar; unsigned char a_uchar; short a_short; unsigned short a_ushort; int a_int; unsigned int a_uint; long int a_longint; unsigned long int a_ulongint; #if HAVE_LONG_LONG_INT long long int a_longlongint; unsigned long long int a_ulonglongint; #endif float a_float; double a_double; long double a_longdouble; int a_char; #if HAVE_WINT_T wint_t a_wide_char; #endif const char* a_string; #if HAVE_WCHAR_T const wchar_t* a_wide_string; #endif void* a_pointer; signed char * a_count_schar_pointer; short * a_count_short_pointer; int * a_count_int_pointer; long int * a_count_longint_pointer; #if HAVE_LONG_LONG_INT long long int * a_count_longlongint_pointer; #endif #if ENABLE_UNISTDIO /* The unistdio extensions. */ const uint8_t * a_u8_string; const uint16_t * a_u16_string; const uint32_t * a_u32_string; #endif } a; } argument; typedef struct { size_t count; argument *arg; } arguments; /* Fetch the arguments, putting them into a. */ #ifdef STATIC STATIC #else extern #endif int PRINTF_FETCHARGS (va_list args, arguments *a); #endif /* _PRINTF_ARGS_H */ KCemu-0.5.1/intl/localename.c0000644001050700006200000012457111340261610015423 0ustar glaubitzfbedv/* Determine name of the currently selected locale. Copyright (C) 1995-1999, 2000-2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Ulrich Drepper , 1995. */ /* Win32 code written by Tor Lillqvist . */ /* MacOS X code written by Bruno Haible . */ #include /* Specification. */ #ifdef IN_LIBINTL # include "gettextP.h" #else # include "localename.h" #endif #include #include #if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE # include # include # if HAVE_CFLOCALECOPYCURRENT # include # elif HAVE_CFPREFERENCESCOPYAPPVALUE # include # endif #endif #if defined _WIN32 || defined __WIN32__ # define WIN32_NATIVE #endif #ifdef WIN32_NATIVE # define WIN32_LEAN_AND_MEAN # include /* List of language codes, sorted by value: 0x01 LANG_ARABIC 0x02 LANG_BULGARIAN 0x03 LANG_CATALAN 0x04 LANG_CHINESE 0x05 LANG_CZECH 0x06 LANG_DANISH 0x07 LANG_GERMAN 0x08 LANG_GREEK 0x09 LANG_ENGLISH 0x0a LANG_SPANISH 0x0b LANG_FINNISH 0x0c LANG_FRENCH 0x0d LANG_HEBREW 0x0e LANG_HUNGARIAN 0x0f LANG_ICELANDIC 0x10 LANG_ITALIAN 0x11 LANG_JAPANESE 0x12 LANG_KOREAN 0x13 LANG_DUTCH 0x14 LANG_NORWEGIAN 0x15 LANG_POLISH 0x16 LANG_PORTUGUESE 0x17 LANG_RHAETO_ROMANCE 0x18 LANG_ROMANIAN 0x19 LANG_RUSSIAN 0x1a LANG_CROATIAN == LANG_SERBIAN 0x1b LANG_SLOVAK 0x1c LANG_ALBANIAN 0x1d LANG_SWEDISH 0x1e LANG_THAI 0x1f LANG_TURKISH 0x20 LANG_URDU 0x21 LANG_INDONESIAN 0x22 LANG_UKRAINIAN 0x23 LANG_BELARUSIAN 0x24 LANG_SLOVENIAN 0x25 LANG_ESTONIAN 0x26 LANG_LATVIAN 0x27 LANG_LITHUANIAN 0x28 LANG_TAJIK 0x29 LANG_FARSI 0x2a LANG_VIETNAMESE 0x2b LANG_ARMENIAN 0x2c LANG_AZERI 0x2d LANG_BASQUE 0x2e LANG_SORBIAN 0x2f LANG_MACEDONIAN 0x30 LANG_SUTU 0x31 LANG_TSONGA 0x32 LANG_TSWANA 0x33 LANG_VENDA 0x34 LANG_XHOSA 0x35 LANG_ZULU 0x36 LANG_AFRIKAANS 0x37 LANG_GEORGIAN 0x38 LANG_FAEROESE 0x39 LANG_HINDI 0x3a LANG_MALTESE 0x3b LANG_SAAMI 0x3c LANG_GAELIC 0x3d LANG_YIDDISH 0x3e LANG_MALAY 0x3f LANG_KAZAK 0x40 LANG_KYRGYZ 0x41 LANG_SWAHILI 0x42 LANG_TURKMEN 0x43 LANG_UZBEK 0x44 LANG_TATAR 0x45 LANG_BENGALI 0x46 LANG_PUNJABI 0x47 LANG_GUJARATI 0x48 LANG_ORIYA 0x49 LANG_TAMIL 0x4a LANG_TELUGU 0x4b LANG_KANNADA 0x4c LANG_MALAYALAM 0x4d LANG_ASSAMESE 0x4e LANG_MARATHI 0x4f LANG_SANSKRIT 0x50 LANG_MONGOLIAN 0x51 LANG_TIBETAN 0x52 LANG_WELSH 0x53 LANG_CAMBODIAN 0x54 LANG_LAO 0x55 LANG_BURMESE 0x56 LANG_GALICIAN 0x57 LANG_KONKANI 0x58 LANG_MANIPURI 0x59 LANG_SINDHI 0x5a LANG_SYRIAC 0x5b LANG_SINHALESE 0x5c LANG_CHEROKEE 0x5d LANG_INUKTITUT 0x5e LANG_AMHARIC 0x5f LANG_TAMAZIGHT 0x60 LANG_KASHMIRI 0x61 LANG_NEPALI 0x62 LANG_FRISIAN 0x63 LANG_PASHTO 0x64 LANG_TAGALOG 0x65 LANG_DIVEHI 0x66 LANG_EDO 0x67 LANG_FULFULDE 0x68 LANG_HAUSA 0x69 LANG_IBIBIO 0x6a LANG_YORUBA 0x70 LANG_IGBO 0x71 LANG_KANURI 0x72 LANG_OROMO 0x73 LANG_TIGRINYA 0x74 LANG_GUARANI 0x75 LANG_HAWAIIAN 0x76 LANG_LATIN 0x77 LANG_SOMALI 0x78 LANG_YI 0x79 LANG_PAPIAMENTU */ /* Mingw headers don't have latest language and sublanguage codes. */ # ifndef LANG_AFRIKAANS # define LANG_AFRIKAANS 0x36 # endif # ifndef LANG_ALBANIAN # define LANG_ALBANIAN 0x1c # endif # ifndef LANG_AMHARIC # define LANG_AMHARIC 0x5e # endif # ifndef LANG_ARABIC # define LANG_ARABIC 0x01 # endif # ifndef LANG_ARMENIAN # define LANG_ARMENIAN 0x2b # endif # ifndef LANG_ASSAMESE # define LANG_ASSAMESE 0x4d # endif # ifndef LANG_AZERI # define LANG_AZERI 0x2c # endif # ifndef LANG_BASQUE # define LANG_BASQUE 0x2d # endif # ifndef LANG_BELARUSIAN # define LANG_BELARUSIAN 0x23 # endif # ifndef LANG_BENGALI # define LANG_BENGALI 0x45 # endif # ifndef LANG_BURMESE # define LANG_BURMESE 0x55 # endif # ifndef LANG_CAMBODIAN # define LANG_CAMBODIAN 0x53 # endif # ifndef LANG_CATALAN # define LANG_CATALAN 0x03 # endif # ifndef LANG_CHEROKEE # define LANG_CHEROKEE 0x5c # endif # ifndef LANG_DIVEHI # define LANG_DIVEHI 0x65 # endif # ifndef LANG_EDO # define LANG_EDO 0x66 # endif # ifndef LANG_ESTONIAN # define LANG_ESTONIAN 0x25 # endif # ifndef LANG_FAEROESE # define LANG_FAEROESE 0x38 # endif # ifndef LANG_FARSI # define LANG_FARSI 0x29 # endif # ifndef LANG_FRISIAN # define LANG_FRISIAN 0x62 # endif # ifndef LANG_FULFULDE # define LANG_FULFULDE 0x67 # endif # ifndef LANG_GAELIC # define LANG_GAELIC 0x3c # endif # ifndef LANG_GALICIAN # define LANG_GALICIAN 0x56 # endif # ifndef LANG_GEORGIAN # define LANG_GEORGIAN 0x37 # endif # ifndef LANG_GUARANI # define LANG_GUARANI 0x74 # endif # ifndef LANG_GUJARATI # define LANG_GUJARATI 0x47 # endif # ifndef LANG_HAUSA # define LANG_HAUSA 0x68 # endif # ifndef LANG_HAWAIIAN # define LANG_HAWAIIAN 0x75 # endif # ifndef LANG_HEBREW # define LANG_HEBREW 0x0d # endif # ifndef LANG_HINDI # define LANG_HINDI 0x39 # endif # ifndef LANG_IBIBIO # define LANG_IBIBIO 0x69 # endif # ifndef LANG_IGBO # define LANG_IGBO 0x70 # endif # ifndef LANG_INDONESIAN # define LANG_INDONESIAN 0x21 # endif # ifndef LANG_INUKTITUT # define LANG_INUKTITUT 0x5d # endif # ifndef LANG_KANNADA # define LANG_KANNADA 0x4b # endif # ifndef LANG_KANURI # define LANG_KANURI 0x71 # endif # ifndef LANG_KASHMIRI # define LANG_KASHMIRI 0x60 # endif # ifndef LANG_KAZAK # define LANG_KAZAK 0x3f # endif # ifndef LANG_KONKANI # define LANG_KONKANI 0x57 # endif # ifndef LANG_KYRGYZ # define LANG_KYRGYZ 0x40 # endif # ifndef LANG_LAO # define LANG_LAO 0x54 # endif # ifndef LANG_LATIN # define LANG_LATIN 0x76 # endif # ifndef LANG_LATVIAN # define LANG_LATVIAN 0x26 # endif # ifndef LANG_LITHUANIAN # define LANG_LITHUANIAN 0x27 # endif # ifndef LANG_MACEDONIAN # define LANG_MACEDONIAN 0x2f # endif # ifndef LANG_MALAY # define LANG_MALAY 0x3e # endif # ifndef LANG_MALAYALAM # define LANG_MALAYALAM 0x4c # endif # ifndef LANG_MALTESE # define LANG_MALTESE 0x3a # endif # ifndef LANG_MANIPURI # define LANG_MANIPURI 0x58 # endif # ifndef LANG_MARATHI # define LANG_MARATHI 0x4e # endif # ifndef LANG_MONGOLIAN # define LANG_MONGOLIAN 0x50 # endif # ifndef LANG_NEPALI # define LANG_NEPALI 0x61 # endif # ifndef LANG_ORIYA # define LANG_ORIYA 0x48 # endif # ifndef LANG_OROMO # define LANG_OROMO 0x72 # endif # ifndef LANG_PAPIAMENTU # define LANG_PAPIAMENTU 0x79 # endif # ifndef LANG_PASHTO # define LANG_PASHTO 0x63 # endif # ifndef LANG_PUNJABI # define LANG_PUNJABI 0x46 # endif # ifndef LANG_RHAETO_ROMANCE # define LANG_RHAETO_ROMANCE 0x17 # endif # ifndef LANG_SAAMI # define LANG_SAAMI 0x3b # endif # ifndef LANG_SANSKRIT # define LANG_SANSKRIT 0x4f # endif # ifndef LANG_SERBIAN # define LANG_SERBIAN 0x1a # endif # ifndef LANG_SINDHI # define LANG_SINDHI 0x59 # endif # ifndef LANG_SINHALESE # define LANG_SINHALESE 0x5b # endif # ifndef LANG_SLOVAK # define LANG_SLOVAK 0x1b # endif # ifndef LANG_SOMALI # define LANG_SOMALI 0x77 # endif # ifndef LANG_SORBIAN # define LANG_SORBIAN 0x2e # endif # ifndef LANG_SUTU # define LANG_SUTU 0x30 # endif # ifndef LANG_SWAHILI # define LANG_SWAHILI 0x41 # endif # ifndef LANG_SYRIAC # define LANG_SYRIAC 0x5a # endif # ifndef LANG_TAGALOG # define LANG_TAGALOG 0x64 # endif # ifndef LANG_TAJIK # define LANG_TAJIK 0x28 # endif # ifndef LANG_TAMAZIGHT # define LANG_TAMAZIGHT 0x5f # endif # ifndef LANG_TAMIL # define LANG_TAMIL 0x49 # endif # ifndef LANG_TATAR # define LANG_TATAR 0x44 # endif # ifndef LANG_TELUGU # define LANG_TELUGU 0x4a # endif # ifndef LANG_THAI # define LANG_THAI 0x1e # endif # ifndef LANG_TIBETAN # define LANG_TIBETAN 0x51 # endif # ifndef LANG_TIGRINYA # define LANG_TIGRINYA 0x73 # endif # ifndef LANG_TSONGA # define LANG_TSONGA 0x31 # endif # ifndef LANG_TSWANA # define LANG_TSWANA 0x32 # endif # ifndef LANG_TURKMEN # define LANG_TURKMEN 0x42 # endif # ifndef LANG_UKRAINIAN # define LANG_UKRAINIAN 0x22 # endif # ifndef LANG_URDU # define LANG_URDU 0x20 # endif # ifndef LANG_UZBEK # define LANG_UZBEK 0x43 # endif # ifndef LANG_VENDA # define LANG_VENDA 0x33 # endif # ifndef LANG_VIETNAMESE # define LANG_VIETNAMESE 0x2a # endif # ifndef LANG_WELSH # define LANG_WELSH 0x52 # endif # ifndef LANG_XHOSA # define LANG_XHOSA 0x34 # endif # ifndef LANG_YI # define LANG_YI 0x78 # endif # ifndef LANG_YIDDISH # define LANG_YIDDISH 0x3d # endif # ifndef LANG_YORUBA # define LANG_YORUBA 0x6a # endif # ifndef LANG_ZULU # define LANG_ZULU 0x35 # endif # ifndef SUBLANG_ARABIC_SAUDI_ARABIA # define SUBLANG_ARABIC_SAUDI_ARABIA 0x01 # endif # ifndef SUBLANG_ARABIC_IRAQ # define SUBLANG_ARABIC_IRAQ 0x02 # endif # ifndef SUBLANG_ARABIC_EGYPT # define SUBLANG_ARABIC_EGYPT 0x03 # endif # ifndef SUBLANG_ARABIC_LIBYA # define SUBLANG_ARABIC_LIBYA 0x04 # endif # ifndef SUBLANG_ARABIC_ALGERIA # define SUBLANG_ARABIC_ALGERIA 0x05 # endif # ifndef SUBLANG_ARABIC_MOROCCO # define SUBLANG_ARABIC_MOROCCO 0x06 # endif # ifndef SUBLANG_ARABIC_TUNISIA # define SUBLANG_ARABIC_TUNISIA 0x07 # endif # ifndef SUBLANG_ARABIC_OMAN # define SUBLANG_ARABIC_OMAN 0x08 # endif # ifndef SUBLANG_ARABIC_YEMEN # define SUBLANG_ARABIC_YEMEN 0x09 # endif # ifndef SUBLANG_ARABIC_SYRIA # define SUBLANG_ARABIC_SYRIA 0x0a # endif # ifndef SUBLANG_ARABIC_JORDAN # define SUBLANG_ARABIC_JORDAN 0x0b # endif # ifndef SUBLANG_ARABIC_LEBANON # define SUBLANG_ARABIC_LEBANON 0x0c # endif # ifndef SUBLANG_ARABIC_KUWAIT # define SUBLANG_ARABIC_KUWAIT 0x0d # endif # ifndef SUBLANG_ARABIC_UAE # define SUBLANG_ARABIC_UAE 0x0e # endif # ifndef SUBLANG_ARABIC_BAHRAIN # define SUBLANG_ARABIC_BAHRAIN 0x0f # endif # ifndef SUBLANG_ARABIC_QATAR # define SUBLANG_ARABIC_QATAR 0x10 # endif # ifndef SUBLANG_AZERI_LATIN # define SUBLANG_AZERI_LATIN 0x01 # endif # ifndef SUBLANG_AZERI_CYRILLIC # define SUBLANG_AZERI_CYRILLIC 0x02 # endif # ifndef SUBLANG_BENGALI_INDIA # define SUBLANG_BENGALI_INDIA 0x01 # endif # ifndef SUBLANG_BENGALI_BANGLADESH # define SUBLANG_BENGALI_BANGLADESH 0x02 # endif # ifndef SUBLANG_CHINESE_MACAU # define SUBLANG_CHINESE_MACAU 0x05 # endif # ifndef SUBLANG_ENGLISH_SOUTH_AFRICA # define SUBLANG_ENGLISH_SOUTH_AFRICA 0x07 # endif # ifndef SUBLANG_ENGLISH_JAMAICA # define SUBLANG_ENGLISH_JAMAICA 0x08 # endif # ifndef SUBLANG_ENGLISH_CARIBBEAN # define SUBLANG_ENGLISH_CARIBBEAN 0x09 # endif # ifndef SUBLANG_ENGLISH_BELIZE # define SUBLANG_ENGLISH_BELIZE 0x0a # endif # ifndef SUBLANG_ENGLISH_TRINIDAD # define SUBLANG_ENGLISH_TRINIDAD 0x0b # endif # ifndef SUBLANG_ENGLISH_ZIMBABWE # define SUBLANG_ENGLISH_ZIMBABWE 0x0c # endif # ifndef SUBLANG_ENGLISH_PHILIPPINES # define SUBLANG_ENGLISH_PHILIPPINES 0x0d # endif # ifndef SUBLANG_ENGLISH_INDONESIA # define SUBLANG_ENGLISH_INDONESIA 0x0e # endif # ifndef SUBLANG_ENGLISH_HONGKONG # define SUBLANG_ENGLISH_HONGKONG 0x0f # endif # ifndef SUBLANG_ENGLISH_INDIA # define SUBLANG_ENGLISH_INDIA 0x10 # endif # ifndef SUBLANG_ENGLISH_MALAYSIA # define SUBLANG_ENGLISH_MALAYSIA 0x11 # endif # ifndef SUBLANG_ENGLISH_SINGAPORE # define SUBLANG_ENGLISH_SINGAPORE 0x12 # endif # ifndef SUBLANG_FRENCH_LUXEMBOURG # define SUBLANG_FRENCH_LUXEMBOURG 0x05 # endif # ifndef SUBLANG_FRENCH_MONACO # define SUBLANG_FRENCH_MONACO 0x06 # endif # ifndef SUBLANG_FRENCH_WESTINDIES # define SUBLANG_FRENCH_WESTINDIES 0x07 # endif # ifndef SUBLANG_FRENCH_REUNION # define SUBLANG_FRENCH_REUNION 0x08 # endif # ifndef SUBLANG_FRENCH_CONGO # define SUBLANG_FRENCH_CONGO 0x09 # endif # ifndef SUBLANG_FRENCH_SENEGAL # define SUBLANG_FRENCH_SENEGAL 0x0a # endif # ifndef SUBLANG_FRENCH_CAMEROON # define SUBLANG_FRENCH_CAMEROON 0x0b # endif # ifndef SUBLANG_FRENCH_COTEDIVOIRE # define SUBLANG_FRENCH_COTEDIVOIRE 0x0c # endif # ifndef SUBLANG_FRENCH_MALI # define SUBLANG_FRENCH_MALI 0x0d # endif # ifndef SUBLANG_FRENCH_MOROCCO # define SUBLANG_FRENCH_MOROCCO 0x0e # endif # ifndef SUBLANG_FRENCH_HAITI # define SUBLANG_FRENCH_HAITI 0x0f # endif # ifndef SUBLANG_GERMAN_LUXEMBOURG # define SUBLANG_GERMAN_LUXEMBOURG 0x04 # endif # ifndef SUBLANG_GERMAN_LIECHTENSTEIN # define SUBLANG_GERMAN_LIECHTENSTEIN 0x05 # endif # ifndef SUBLANG_KASHMIRI_INDIA # define SUBLANG_KASHMIRI_INDIA 0x02 # endif # ifndef SUBLANG_MALAY_MALAYSIA # define SUBLANG_MALAY_MALAYSIA 0x01 # endif # ifndef SUBLANG_MALAY_BRUNEI_DARUSSALAM # define SUBLANG_MALAY_BRUNEI_DARUSSALAM 0x02 # endif # ifndef SUBLANG_NEPALI_INDIA # define SUBLANG_NEPALI_INDIA 0x02 # endif # ifndef SUBLANG_PUNJABI_INDIA # define SUBLANG_PUNJABI_INDIA 0x01 # endif # ifndef SUBLANG_PUNJABI_PAKISTAN # define SUBLANG_PUNJABI_PAKISTAN 0x02 # endif # ifndef SUBLANG_ROMANIAN_ROMANIA # define SUBLANG_ROMANIAN_ROMANIA 0x01 # endif # ifndef SUBLANG_ROMANIAN_MOLDOVA # define SUBLANG_ROMANIAN_MOLDOVA 0x02 # endif # ifndef SUBLANG_SERBIAN_LATIN # define SUBLANG_SERBIAN_LATIN 0x02 # endif # ifndef SUBLANG_SERBIAN_CYRILLIC # define SUBLANG_SERBIAN_CYRILLIC 0x03 # endif # ifndef SUBLANG_SINDHI_PAKISTAN # define SUBLANG_SINDHI_PAKISTAN 0x01 # endif # ifndef SUBLANG_SINDHI_AFGHANISTAN # define SUBLANG_SINDHI_AFGHANISTAN 0x02 # endif # ifndef SUBLANG_SPANISH_GUATEMALA # define SUBLANG_SPANISH_GUATEMALA 0x04 # endif # ifndef SUBLANG_SPANISH_COSTA_RICA # define SUBLANG_SPANISH_COSTA_RICA 0x05 # endif # ifndef SUBLANG_SPANISH_PANAMA # define SUBLANG_SPANISH_PANAMA 0x06 # endif # ifndef SUBLANG_SPANISH_DOMINICAN_REPUBLIC # define SUBLANG_SPANISH_DOMINICAN_REPUBLIC 0x07 # endif # ifndef SUBLANG_SPANISH_VENEZUELA # define SUBLANG_SPANISH_VENEZUELA 0x08 # endif # ifndef SUBLANG_SPANISH_COLOMBIA # define SUBLANG_SPANISH_COLOMBIA 0x09 # endif # ifndef SUBLANG_SPANISH_PERU # define SUBLANG_SPANISH_PERU 0x0a # endif # ifndef SUBLANG_SPANISH_ARGENTINA # define SUBLANG_SPANISH_ARGENTINA 0x0b # endif # ifndef SUBLANG_SPANISH_ECUADOR # define SUBLANG_SPANISH_ECUADOR 0x0c # endif # ifndef SUBLANG_SPANISH_CHILE # define SUBLANG_SPANISH_CHILE 0x0d # endif # ifndef SUBLANG_SPANISH_URUGUAY # define SUBLANG_SPANISH_URUGUAY 0x0e # endif # ifndef SUBLANG_SPANISH_PARAGUAY # define SUBLANG_SPANISH_PARAGUAY 0x0f # endif # ifndef SUBLANG_SPANISH_BOLIVIA # define SUBLANG_SPANISH_BOLIVIA 0x10 # endif # ifndef SUBLANG_SPANISH_EL_SALVADOR # define SUBLANG_SPANISH_EL_SALVADOR 0x11 # endif # ifndef SUBLANG_SPANISH_HONDURAS # define SUBLANG_SPANISH_HONDURAS 0x12 # endif # ifndef SUBLANG_SPANISH_NICARAGUA # define SUBLANG_SPANISH_NICARAGUA 0x13 # endif # ifndef SUBLANG_SPANISH_PUERTO_RICO # define SUBLANG_SPANISH_PUERTO_RICO 0x14 # endif # ifndef SUBLANG_SWEDISH_FINLAND # define SUBLANG_SWEDISH_FINLAND 0x02 # endif # ifndef SUBLANG_TAMAZIGHT_ARABIC # define SUBLANG_TAMAZIGHT_ARABIC 0x01 # endif # ifndef SUBLANG_TAMAZIGHT_ALGERIA_LATIN # define SUBLANG_TAMAZIGHT_ALGERIA_LATIN 0x02 # endif # ifndef SUBLANG_TIGRINYA_ETHIOPIA # define SUBLANG_TIGRINYA_ETHIOPIA 0x01 # endif # ifndef SUBLANG_TIGRINYA_ERITREA # define SUBLANG_TIGRINYA_ERITREA 0x02 # endif # ifndef SUBLANG_URDU_PAKISTAN # define SUBLANG_URDU_PAKISTAN 0x01 # endif # ifndef SUBLANG_URDU_INDIA # define SUBLANG_URDU_INDIA 0x02 # endif # ifndef SUBLANG_UZBEK_LATIN # define SUBLANG_UZBEK_LATIN 0x01 # endif # ifndef SUBLANG_UZBEK_CYRILLIC # define SUBLANG_UZBEK_CYRILLIC 0x02 # endif #endif # if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */ /* Canonicalize a MacOS X locale name to a Unix locale name. NAME is a sufficiently large buffer. On input, it contains the MacOS X locale name. On output, it contains the Unix locale name. */ # if !defined IN_LIBINTL static # endif void gl_locale_name_canonicalize (char *name) { /* This conversion is based on a posting by Deborah GoldSmith on 2005-03-08, http://lists.apple.com/archives/carbon-dev/2005/Mar/msg00293.html */ /* Convert legacy (NeXTstep inherited) English names to Unix (ISO 639 and ISO 3166) names. Prior to MacOS X 10.3, there is no API for doing this. Therefore we do it ourselves, using a table based on the results of the MacOS X 10.3.8 function CFLocaleCreateCanonicalLocaleIdentifierFromString(). */ typedef struct { const char legacy[21+1]; const char unixy[5+1]; } legacy_entry; static const legacy_entry legacy_table[] = { { "Afrikaans", "af" }, { "Albanian", "sq" }, { "Amharic", "am" }, { "Arabic", "ar" }, { "Armenian", "hy" }, { "Assamese", "as" }, { "Aymara", "ay" }, { "Azerbaijani", "az" }, { "Basque", "eu" }, { "Belarusian", "be" }, { "Belorussian", "be" }, { "Bengali", "bn" }, { "Brazilian Portugese", "pt_BR" }, { "Brazilian Portuguese", "pt_BR" }, { "Breton", "br" }, { "Bulgarian", "bg" }, { "Burmese", "my" }, { "Byelorussian", "be" }, { "Catalan", "ca" }, { "Chewa", "ny" }, { "Chichewa", "ny" }, { "Chinese", "zh" }, { "Chinese, Simplified", "zh_CN" }, { "Chinese, Traditional", "zh_TW" }, { "Chinese, Tradtional", "zh_TW" }, { "Croatian", "hr" }, { "Czech", "cs" }, { "Danish", "da" }, { "Dutch", "nl" }, { "Dzongkha", "dz" }, { "English", "en" }, { "Esperanto", "eo" }, { "Estonian", "et" }, { "Faroese", "fo" }, { "Farsi", "fa" }, { "Finnish", "fi" }, { "Flemish", "nl_BE" }, { "French", "fr" }, { "Galician", "gl" }, { "Gallegan", "gl" }, { "Georgian", "ka" }, { "German", "de" }, { "Greek", "el" }, { "Greenlandic", "kl" }, { "Guarani", "gn" }, { "Gujarati", "gu" }, { "Hawaiian", "haw" }, /* Yes, "haw", not "cpe". */ { "Hebrew", "he" }, { "Hindi", "hi" }, { "Hungarian", "hu" }, { "Icelandic", "is" }, { "Indonesian", "id" }, { "Inuktitut", "iu" }, { "Irish", "ga" }, { "Italian", "it" }, { "Japanese", "ja" }, { "Javanese", "jv" }, { "Kalaallisut", "kl" }, { "Kannada", "kn" }, { "Kashmiri", "ks" }, { "Kazakh", "kk" }, { "Khmer", "km" }, { "Kinyarwanda", "rw" }, { "Kirghiz", "ky" }, { "Korean", "ko" }, { "Kurdish", "ku" }, { "Latin", "la" }, { "Latvian", "lv" }, { "Lithuanian", "lt" }, { "Macedonian", "mk" }, { "Malagasy", "mg" }, { "Malay", "ms" }, { "Malayalam", "ml" }, { "Maltese", "mt" }, { "Manx", "gv" }, { "Marathi", "mr" }, { "Moldavian", "mo" }, { "Mongolian", "mn" }, { "Nepali", "ne" }, { "Norwegian", "nb" }, /* Yes, "nb", not the obsolete "no". */ { "Nyanja", "ny" }, { "Nynorsk", "nn" }, { "Oriya", "or" }, { "Oromo", "om" }, { "Panjabi", "pa" }, { "Pashto", "ps" }, { "Persian", "fa" }, { "Polish", "pl" }, { "Portuguese", "pt" }, { "Portuguese, Brazilian", "pt_BR" }, { "Punjabi", "pa" }, { "Pushto", "ps" }, { "Quechua", "qu" }, { "Romanian", "ro" }, { "Ruanda", "rw" }, { "Rundi", "rn" }, { "Russian", "ru" }, { "Sami", "se_NO" }, /* Not just "se". */ { "Sanskrit", "sa" }, { "Scottish", "gd" }, { "Serbian", "sr" }, { "Simplified Chinese", "zh_CN" }, { "Sindhi", "sd" }, { "Sinhalese", "si" }, { "Slovak", "sk" }, { "Slovenian", "sl" }, { "Somali", "so" }, { "Spanish", "es" }, { "Sundanese", "su" }, { "Swahili", "sw" }, { "Swedish", "sv" }, { "Tagalog", "tl" }, { "Tajik", "tg" }, { "Tajiki", "tg" }, { "Tamil", "ta" }, { "Tatar", "tt" }, { "Telugu", "te" }, { "Thai", "th" }, { "Tibetan", "bo" }, { "Tigrinya", "ti" }, { "Tongan", "to" }, { "Traditional Chinese", "zh_TW" }, { "Turkish", "tr" }, { "Turkmen", "tk" }, { "Uighur", "ug" }, { "Ukrainian", "uk" }, { "Urdu", "ur" }, { "Uzbek", "uz" }, { "Vietnamese", "vi" }, { "Welsh", "cy" }, { "Yiddish", "yi" } }; /* Convert new-style locale names with language tags (ISO 639 and ISO 15924) to Unix (ISO 639 and ISO 3166) names. */ typedef struct { const char langtag[7+1]; const char unixy[12+1]; } langtag_entry; static const langtag_entry langtag_table[] = { /* MacOS X has "az-Arab", "az-Cyrl", "az-Latn". The default script for az on Unix is Latin. */ { "az-Latn", "az" }, /* MacOS X has "ga-dots". Does not yet exist on Unix. */ { "ga-dots", "ga" }, /* MacOS X has "kk-Cyrl". Does not yet exist on Unix. */ /* MacOS X has "mn-Cyrl", "mn-Mong". The default script for mn on Unix is Cyrillic. */ { "mn-Cyrl", "mn" }, /* MacOS X has "ms-Arab", "ms-Latn". The default script for ms on Unix is Latin. */ { "ms-Latn", "ms" }, /* MacOS X has "tg-Cyrl". The default script for tg on Unix is Cyrillic. */ { "tg-Cyrl", "tg" }, /* MacOS X has "tk-Cyrl". Does not yet exist on Unix. */ /* MacOS X has "tt-Cyrl". The default script for tt on Unix is Cyrillic. */ { "tt-Cyrl", "tt" }, /* MacOS X has "zh-Hans", "zh-Hant". Country codes are used to distinguish these on Unix. */ { "zh-Hans", "zh_CN" }, { "zh-Hant", "zh_TW" } }; /* Convert script names (ISO 15924) to Unix conventions. See http://www.unicode.org/iso15924/iso15924-codes.html */ typedef struct { const char script[4+1]; const char unixy[9+1]; } script_entry; static const script_entry script_table[] = { { "Arab", "arabic" }, { "Cyrl", "cyrillic" }, { "Mong", "mongolian" } }; /* Step 1: Convert using legacy_table. */ if (name[0] >= 'A' && name[0] <= 'Z') { unsigned int i1, i2; i1 = 0; i2 = sizeof (legacy_table) / sizeof (legacy_entry); while (i2 - i1 > 1) { /* At this point we know that if name occurs in legacy_table, its index must be >= i1 and < i2. */ unsigned int i = (i1 + i2) >> 1; const legacy_entry *p = &legacy_table[i]; if (strcmp (name, p->legacy) < 0) i2 = i; else i1 = i; } if (strcmp (name, legacy_table[i1].legacy) == 0) { strcpy (name, legacy_table[i1].unixy); return; } } /* Step 2: Convert using langtag_table and script_table. */ if (strlen (name) == 7 && name[2] == '-') { unsigned int i1, i2; i1 = 0; i2 = sizeof (langtag_table) / sizeof (langtag_entry); while (i2 - i1 > 1) { /* At this point we know that if name occurs in langtag_table, its index must be >= i1 and < i2. */ unsigned int i = (i1 + i2) >> 1; const langtag_entry *p = &langtag_table[i]; if (strcmp (name, p->langtag) < 0) i2 = i; else i1 = i; } if (strcmp (name, langtag_table[i1].langtag) == 0) { strcpy (name, langtag_table[i1].unixy); return; } i1 = 0; i2 = sizeof (script_table) / sizeof (script_entry); while (i2 - i1 > 1) { /* At this point we know that if (name + 3) occurs in script_table, its index must be >= i1 and < i2. */ unsigned int i = (i1 + i2) >> 1; const script_entry *p = &script_table[i]; if (strcmp (name + 3, p->script) < 0) i2 = i; else i1 = i; } if (strcmp (name + 3, script_table[i1].script) == 0) { name[2] = '@'; strcpy (name + 3, script_table[i1].unixy); return; } } /* Step 3: Convert new-style dash to Unix underscore. */ { char *p; for (p = name; *p != '\0'; p++) if (*p == '-') *p = '_'; } } #endif /* XPG3 defines the result of 'setlocale (category, NULL)' as: "Directs 'setlocale()' to query 'category' and return the current setting of 'local'." However it does not specify the exact format. Neither do SUSV2 and ISO C 99. So we can use this feature only on selected systems (e.g. those using GNU C Library). */ #if defined _LIBC || (defined __GLIBC__ && __GLIBC__ >= 2) # define HAVE_LOCALE_NULL #endif /* Determine the current locale's name, and canonicalize it into XPG syntax language[_territory][.codeset][@modifier] The codeset part in the result is not reliable; the locale_charset() should be used for codeset information instead. The result must not be freed; it is statically allocated. */ const char * gl_locale_name_posix (int category, const char *categoryname) { /* Use the POSIX methods of looking to 'LC_ALL', 'LC_xxx', and 'LANG'. On some systems this can be done by the 'setlocale' function itself. */ #if defined HAVE_SETLOCALE && defined HAVE_LC_MESSAGES && defined HAVE_LOCALE_NULL return setlocale (category, NULL); #else const char *retval; /* Setting of LC_ALL overrides all other. */ retval = getenv ("LC_ALL"); if (retval != NULL && retval[0] != '\0') return retval; /* Next comes the name of the desired category. */ retval = getenv (categoryname); if (retval != NULL && retval[0] != '\0') return retval; /* Last possibility is the LANG environment variable. */ retval = getenv ("LANG"); if (retval != NULL && retval[0] != '\0') return retval; return NULL; #endif } const char * gl_locale_name_default (void) { /* POSIX:2001 says: "All implementations shall define a locale as the default locale, to be invoked when no environment variables are set, or set to the empty string. This default locale can be the POSIX locale or any other implementation-defined locale. Some implementations may provide facilities for local installation administrators to set the default locale, customizing it for each location. POSIX:2001 does not require such a facility. */ #if !(HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE || defined(WIN32_NATIVE)) /* The system does not have a way of setting the locale, other than the POSIX specified environment variables. We use C as default locale. */ return "C"; #else /* Return an XPG style locale name language[_territory][@modifier]. Don't even bother determining the codeset; it's not useful in this context, because message catalogs are not specific to a single codeset. */ # if HAVE_CFLOCALECOPYCURRENT || HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */ { /* Cache the locale name, since CoreFoundation calls are expensive. */ static const char *cached_localename; if (cached_localename == NULL) { char namebuf[256]; # if HAVE_CFLOCALECOPYCURRENT /* MacOS X 10.3 or newer */ CFLocaleRef locale = CFLocaleCopyCurrent (); CFStringRef name = CFLocaleGetIdentifier (locale); if (CFStringGetCString (name, namebuf, sizeof(namebuf), kCFStringEncodingASCII)) { gl_locale_name_canonicalize (namebuf); cached_localename = strdup (namebuf); } CFRelease (locale); # elif HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */ CFTypeRef value = CFPreferencesCopyAppValue (CFSTR ("AppleLocale"), kCFPreferencesCurrentApplication); if (value != NULL && CFGetTypeID (value) == CFStringGetTypeID () && CFStringGetCString ((CFStringRef)value, namebuf, sizeof(namebuf), kCFStringEncodingASCII)) { gl_locale_name_canonicalize (namebuf); cached_localename = strdup (namebuf); } # endif if (cached_localename == NULL) cached_localename = "C"; } return cached_localename; } # endif # if defined(WIN32_NATIVE) /* WIN32, not Cygwin */ { LCID lcid; LANGID langid; int primary, sub; /* Use native Win32 API locale ID. */ lcid = GetThreadLocale (); /* Strip off the sorting rules, keep only the language part. */ langid = LANGIDFROMLCID (lcid); /* Split into language and territory part. */ primary = PRIMARYLANGID (langid); sub = SUBLANGID (langid); /* Dispatch on language. See also http://www.unicode.org/unicode/onlinedat/languages.html . For details about languages, see http://www.ethnologue.com/ . */ switch (primary) { case LANG_AFRIKAANS: return "af_ZA"; case LANG_ALBANIAN: return "sq_AL"; case LANG_AMHARIC: return "am_ET"; case LANG_ARABIC: switch (sub) { case SUBLANG_ARABIC_SAUDI_ARABIA: return "ar_SA"; case SUBLANG_ARABIC_IRAQ: return "ar_IQ"; case SUBLANG_ARABIC_EGYPT: return "ar_EG"; case SUBLANG_ARABIC_LIBYA: return "ar_LY"; case SUBLANG_ARABIC_ALGERIA: return "ar_DZ"; case SUBLANG_ARABIC_MOROCCO: return "ar_MA"; case SUBLANG_ARABIC_TUNISIA: return "ar_TN"; case SUBLANG_ARABIC_OMAN: return "ar_OM"; case SUBLANG_ARABIC_YEMEN: return "ar_YE"; case SUBLANG_ARABIC_SYRIA: return "ar_SY"; case SUBLANG_ARABIC_JORDAN: return "ar_JO"; case SUBLANG_ARABIC_LEBANON: return "ar_LB"; case SUBLANG_ARABIC_KUWAIT: return "ar_KW"; case SUBLANG_ARABIC_UAE: return "ar_AE"; case SUBLANG_ARABIC_BAHRAIN: return "ar_BH"; case SUBLANG_ARABIC_QATAR: return "ar_QA"; } return "ar"; case LANG_ARMENIAN: return "hy_AM"; case LANG_ASSAMESE: return "as_IN"; case LANG_AZERI: switch (sub) { /* FIXME: Adjust this when Azerbaijani locales appear on Unix. */ case SUBLANG_AZERI_LATIN: return "az_AZ@latin"; case SUBLANG_AZERI_CYRILLIC: return "az_AZ@cyrillic"; } return "az"; case LANG_BASQUE: switch (sub) { case SUBLANG_DEFAULT: return "eu_ES"; } return "eu"; /* Ambiguous: could be "eu_ES" or "eu_FR". */ case LANG_BELARUSIAN: return "be_BY"; case LANG_BENGALI: switch (sub) { case SUBLANG_BENGALI_INDIA: return "bn_IN"; case SUBLANG_BENGALI_BANGLADESH: return "bn_BD"; } return "bn"; case LANG_BULGARIAN: return "bg_BG"; case LANG_BURMESE: return "my_MM"; case LANG_CAMBODIAN: return "km_KH"; case LANG_CATALAN: return "ca_ES"; case LANG_CHEROKEE: return "chr_US"; case LANG_CHINESE: switch (sub) { case SUBLANG_CHINESE_TRADITIONAL: return "zh_TW"; case SUBLANG_CHINESE_SIMPLIFIED: return "zh_CN"; case SUBLANG_CHINESE_HONGKONG: return "zh_HK"; case SUBLANG_CHINESE_SINGAPORE: return "zh_SG"; case SUBLANG_CHINESE_MACAU: return "zh_MO"; } return "zh"; case LANG_CROATIAN: /* LANG_CROATIAN == LANG_SERBIAN * What used to be called Serbo-Croatian * should really now be two separate * languages because of political reasons. * (Says tml, who knows nothing about Serbian * or Croatian.) * (I can feel those flames coming already.) */ switch (sub) { case SUBLANG_DEFAULT: return "hr_HR"; case SUBLANG_SERBIAN_LATIN: return "sr_CS"; case SUBLANG_SERBIAN_CYRILLIC: return "sr_CS@cyrillic"; } return "hr"; case LANG_CZECH: return "cs_CZ"; case LANG_DANISH: return "da_DK"; case LANG_DIVEHI: return "dv_MV"; case LANG_DUTCH: switch (sub) { case SUBLANG_DUTCH: return "nl_NL"; case SUBLANG_DUTCH_BELGIAN: /* FLEMISH, VLAAMS */ return "nl_BE"; } return "nl"; case LANG_EDO: return "bin_NG"; case LANG_ENGLISH: switch (sub) { /* SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. Heh. I thought * English was the language spoken in England. * Oh well. */ case SUBLANG_ENGLISH_US: return "en_US"; case SUBLANG_ENGLISH_UK: return "en_GB"; case SUBLANG_ENGLISH_AUS: return "en_AU"; case SUBLANG_ENGLISH_CAN: return "en_CA"; case SUBLANG_ENGLISH_NZ: return "en_NZ"; case SUBLANG_ENGLISH_EIRE: return "en_IE"; case SUBLANG_ENGLISH_SOUTH_AFRICA: return "en_ZA"; case SUBLANG_ENGLISH_JAMAICA: return "en_JM"; case SUBLANG_ENGLISH_CARIBBEAN: return "en_GD"; /* Grenada? */ case SUBLANG_ENGLISH_BELIZE: return "en_BZ"; case SUBLANG_ENGLISH_TRINIDAD: return "en_TT"; case SUBLANG_ENGLISH_ZIMBABWE: return "en_ZW"; case SUBLANG_ENGLISH_PHILIPPINES: return "en_PH"; case SUBLANG_ENGLISH_INDONESIA: return "en_ID"; case SUBLANG_ENGLISH_HONGKONG: return "en_HK"; case SUBLANG_ENGLISH_INDIA: return "en_IN"; case SUBLANG_ENGLISH_MALAYSIA: return "en_MY"; case SUBLANG_ENGLISH_SINGAPORE: return "en_SG"; } return "en"; case LANG_ESTONIAN: return "et_EE"; case LANG_FAEROESE: return "fo_FO"; case LANG_FARSI: return "fa_IR"; case LANG_FINNISH: return "fi_FI"; case LANG_FRENCH: switch (sub) { case SUBLANG_FRENCH: return "fr_FR"; case SUBLANG_FRENCH_BELGIAN: /* WALLOON */ return "fr_BE"; case SUBLANG_FRENCH_CANADIAN: return "fr_CA"; case SUBLANG_FRENCH_SWISS: return "fr_CH"; case SUBLANG_FRENCH_LUXEMBOURG: return "fr_LU"; case SUBLANG_FRENCH_MONACO: return "fr_MC"; case SUBLANG_FRENCH_WESTINDIES: return "fr"; /* Caribbean? */ case SUBLANG_FRENCH_REUNION: return "fr_RE"; case SUBLANG_FRENCH_CONGO: return "fr_CG"; case SUBLANG_FRENCH_SENEGAL: return "fr_SN"; case SUBLANG_FRENCH_CAMEROON: return "fr_CM"; case SUBLANG_FRENCH_COTEDIVOIRE: return "fr_CI"; case SUBLANG_FRENCH_MALI: return "fr_ML"; case SUBLANG_FRENCH_MOROCCO: return "fr_MA"; case SUBLANG_FRENCH_HAITI: return "fr_HT"; } return "fr"; case LANG_FRISIAN: return "fy_NL"; case LANG_FULFULDE: /* Spoken in Nigeria, Guinea, Senegal, Mali, Niger, Cameroon, Benin. */ return "ff_NG"; case LANG_GAELIC: switch (sub) { case 0x01: /* SCOTTISH */ return "gd_GB"; case 0x02: /* IRISH */ return "ga_IE"; } return "C"; case LANG_GALICIAN: return "gl_ES"; case LANG_GEORGIAN: return "ka_GE"; case LANG_GERMAN: switch (sub) { case SUBLANG_GERMAN: return "de_DE"; case SUBLANG_GERMAN_SWISS: return "de_CH"; case SUBLANG_GERMAN_AUSTRIAN: return "de_AT"; case SUBLANG_GERMAN_LUXEMBOURG: return "de_LU"; case SUBLANG_GERMAN_LIECHTENSTEIN: return "de_LI"; } return "de"; case LANG_GREEK: return "el_GR"; case LANG_GUARANI: return "gn_PY"; case LANG_GUJARATI: return "gu_IN"; case LANG_HAUSA: return "ha_NG"; case LANG_HAWAIIAN: /* FIXME: Do they mean Hawaiian ("haw_US", 1000 speakers) or Hawaii Creole English ("cpe_US", 600000 speakers)? */ return "cpe_US"; case LANG_HEBREW: return "he_IL"; case LANG_HINDI: return "hi_IN"; case LANG_HUNGARIAN: return "hu_HU"; case LANG_IBIBIO: return "nic_NG"; case LANG_ICELANDIC: return "is_IS"; case LANG_IGBO: return "ig_NG"; case LANG_INDONESIAN: return "id_ID"; case LANG_INUKTITUT: return "iu_CA"; case LANG_ITALIAN: switch (sub) { case SUBLANG_ITALIAN: return "it_IT"; case SUBLANG_ITALIAN_SWISS: return "it_CH"; } return "it"; case LANG_JAPANESE: return "ja_JP"; case LANG_KANNADA: return "kn_IN"; case LANG_KANURI: return "kr_NG"; case LANG_KASHMIRI: switch (sub) { case SUBLANG_DEFAULT: return "ks_PK"; case SUBLANG_KASHMIRI_INDIA: return "ks_IN"; } return "ks"; case LANG_KAZAK: return "kk_KZ"; case LANG_KONKANI: /* FIXME: Adjust this when such locales appear on Unix. */ return "kok_IN"; case LANG_KOREAN: return "ko_KR"; case LANG_KYRGYZ: return "ky_KG"; case LANG_LAO: return "lo_LA"; case LANG_LATIN: return "la_VA"; case LANG_LATVIAN: return "lv_LV"; case LANG_LITHUANIAN: return "lt_LT"; case LANG_MACEDONIAN: return "mk_MK"; case LANG_MALAY: switch (sub) { case SUBLANG_MALAY_MALAYSIA: return "ms_MY"; case SUBLANG_MALAY_BRUNEI_DARUSSALAM: return "ms_BN"; } return "ms"; case LANG_MALAYALAM: return "ml_IN"; case LANG_MALTESE: return "mt_MT"; case LANG_MANIPURI: /* FIXME: Adjust this when such locales appear on Unix. */ return "mni_IN"; case LANG_MARATHI: return "mr_IN"; case LANG_MONGOLIAN: switch (sub) { case SUBLANG_DEFAULT: return "mn_MN"; } return "mn"; /* Ambiguous: could be "mn_CN" or "mn_MN". */ case LANG_NEPALI: switch (sub) { case SUBLANG_DEFAULT: return "ne_NP"; case SUBLANG_NEPALI_INDIA: return "ne_IN"; } return "ne"; case LANG_NORWEGIAN: switch (sub) { case SUBLANG_NORWEGIAN_BOKMAL: return "nb_NO"; case SUBLANG_NORWEGIAN_NYNORSK: return "nn_NO"; } return "no"; case LANG_ORIYA: return "or_IN"; case LANG_OROMO: return "om_ET"; case LANG_PAPIAMENTU: return "pap_AN"; case LANG_PASHTO: return "ps"; /* Ambiguous: could be "ps_PK" or "ps_AF". */ case LANG_POLISH: return "pl_PL"; case LANG_PORTUGUESE: switch (sub) { case SUBLANG_PORTUGUESE: return "pt_PT"; /* Hmm. SUBLANG_PORTUGUESE_BRAZILIAN == SUBLANG_DEFAULT. Same phenomenon as SUBLANG_ENGLISH_US == SUBLANG_DEFAULT. */ case SUBLANG_PORTUGUESE_BRAZILIAN: return "pt_BR"; } return "pt"; case LANG_PUNJABI: switch (sub) { case SUBLANG_PUNJABI_INDIA: return "pa_IN"; /* Gurmukhi script */ case SUBLANG_PUNJABI_PAKISTAN: return "pa_PK"; /* Arabic script */ } return "pa"; case LANG_RHAETO_ROMANCE: return "rm_CH"; case LANG_ROMANIAN: switch (sub) { case SUBLANG_ROMANIAN_ROMANIA: return "ro_RO"; case SUBLANG_ROMANIAN_MOLDOVA: return "ro_MD"; } return "ro"; case LANG_RUSSIAN: switch (sub) { case SUBLANG_DEFAULT: return "ru_RU"; } return "ru"; /* Ambiguous: could be "ru_RU" or "ru_UA" or "ru_MD". */ case LANG_SAAMI: /* actually Northern Sami */ return "se_NO"; case LANG_SANSKRIT: return "sa_IN"; case LANG_SINDHI: switch (sub) { case SUBLANG_SINDHI_PAKISTAN: return "sd_PK"; case SUBLANG_SINDHI_AFGHANISTAN: return "sd_AF"; } return "sd"; case LANG_SINHALESE: return "si_LK"; case LANG_SLOVAK: return "sk_SK"; case LANG_SLOVENIAN: return "sl_SI"; case LANG_SOMALI: return "so_SO"; case LANG_SORBIAN: /* FIXME: Adjust this when such locales appear on Unix. */ return "wen_DE"; case LANG_SPANISH: switch (sub) { case SUBLANG_SPANISH: return "es_ES"; case SUBLANG_SPANISH_MEXICAN: return "es_MX"; case SUBLANG_SPANISH_MODERN: return "es_ES@modern"; /* not seen on Unix */ case SUBLANG_SPANISH_GUATEMALA: return "es_GT"; case SUBLANG_SPANISH_COSTA_RICA: return "es_CR"; case SUBLANG_SPANISH_PANAMA: return "es_PA"; case SUBLANG_SPANISH_DOMINICAN_REPUBLIC: return "es_DO"; case SUBLANG_SPANISH_VENEZUELA: return "es_VE"; case SUBLANG_SPANISH_COLOMBIA: return "es_CO"; case SUBLANG_SPANISH_PERU: return "es_PE"; case SUBLANG_SPANISH_ARGENTINA: return "es_AR"; case SUBLANG_SPANISH_ECUADOR: return "es_EC"; case SUBLANG_SPANISH_CHILE: return "es_CL"; case SUBLANG_SPANISH_URUGUAY: return "es_UY"; case SUBLANG_SPANISH_PARAGUAY: return "es_PY"; case SUBLANG_SPANISH_BOLIVIA: return "es_BO"; case SUBLANG_SPANISH_EL_SALVADOR: return "es_SV"; case SUBLANG_SPANISH_HONDURAS: return "es_HN"; case SUBLANG_SPANISH_NICARAGUA: return "es_NI"; case SUBLANG_SPANISH_PUERTO_RICO: return "es_PR"; } return "es"; case LANG_SUTU: return "bnt_TZ"; /* or "st_LS" or "nso_ZA"? */ case LANG_SWAHILI: return "sw_KE"; case LANG_SWEDISH: switch (sub) { case SUBLANG_DEFAULT: return "sv_SE"; case SUBLANG_SWEDISH_FINLAND: return "sv_FI"; } return "sv"; case LANG_SYRIAC: return "syr_TR"; /* An extinct language. */ case LANG_TAGALOG: return "tl_PH"; case LANG_TAJIK: return "tg_TJ"; case LANG_TAMAZIGHT: switch (sub) { /* FIXME: Adjust this when Tamazight locales appear on Unix. */ case SUBLANG_TAMAZIGHT_ARABIC: return "ber_MA@arabic"; case SUBLANG_TAMAZIGHT_ALGERIA_LATIN: return "ber_DZ@latin"; } return "ber_MA"; case LANG_TAMIL: switch (sub) { case SUBLANG_DEFAULT: return "ta_IN"; } return "ta"; /* Ambiguous: could be "ta_IN" or "ta_LK" or "ta_SG". */ case LANG_TATAR: return "tt_RU"; case LANG_TELUGU: return "te_IN"; case LANG_THAI: return "th_TH"; case LANG_TIBETAN: return "bo_CN"; case LANG_TIGRINYA: switch (sub) { case SUBLANG_TIGRINYA_ETHIOPIA: return "ti_ET"; case SUBLANG_TIGRINYA_ERITREA: return "ti_ER"; } return "ti"; case LANG_TSONGA: return "ts_ZA"; case LANG_TSWANA: return "tn_BW"; case LANG_TURKISH: return "tr_TR"; case LANG_TURKMEN: return "tk_TM"; case LANG_UKRAINIAN: return "uk_UA"; case LANG_URDU: switch (sub) { case SUBLANG_URDU_PAKISTAN: return "ur_PK"; case SUBLANG_URDU_INDIA: return "ur_IN"; } return "ur"; case LANG_UZBEK: switch (sub) { case SUBLANG_UZBEK_LATIN: return "uz_UZ"; case SUBLANG_UZBEK_CYRILLIC: return "uz_UZ@cyrillic"; } return "uz"; case LANG_VENDA: return "ve_ZA"; case LANG_VIETNAMESE: return "vi_VN"; case LANG_WELSH: return "cy_GB"; case LANG_XHOSA: return "xh_ZA"; case LANG_YI: return "sit_CN"; case LANG_YIDDISH: return "yi_IL"; case LANG_YORUBA: return "yo_NG"; case LANG_ZULU: return "zu_ZA"; default: return "C"; } } # endif #endif } const char * gl_locale_name (int category, const char *categoryname) { const char *retval; retval = gl_locale_name_posix (category, categoryname); if (retval != NULL) return retval; return gl_locale_name_default (); } KCemu-0.5.1/intl/tsearch.h0000644001050700006200000000536611340261610014761 0ustar glaubitzfbedv/* Binary tree data structure. Copyright (C) 2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _TSEARCH_H #define _TSEARCH_H #if HAVE_TSEARCH /* Get tseach(), tfind(), tdelete(), twalk() declarations. */ #include #else #ifdef __cplusplus extern "C" { #endif /* See , for details. */ typedef enum { preorder, postorder, endorder, leaf } VISIT; /* Searches an element in the tree *VROOTP that compares equal to KEY. If one is found, it is returned. Otherwise, a new element equal to KEY is inserted in the tree and is returned. */ extern void * tsearch (const void *key, void **vrootp, int (*compar) (const void *, const void *)); /* Searches an element in the tree *VROOTP that compares equal to KEY. If one is found, it is returned. Otherwise, NULL is returned. */ extern void * tfind (const void *key, void *const *vrootp, int (*compar) (const void *, const void *)); /* Searches an element in the tree *VROOTP that compares equal to KEY. If one is found, it is removed from the tree, and its parent node is returned. Otherwise, NULL is returned. */ extern void * tdelete (const void *key, void **vrootp, int (*compar) (const void *, const void *)); /* Perform a depth-first, left-to-right traversal of the tree VROOT. The ACTION function is called: - for non-leaf nodes: 3 times, before the left subtree traversal, after the left subtree traversal but before the right subtree traversal, and after the right subtree traversal, - for leaf nodes: once. The arguments passed to ACTION are: 1. the node; it can be casted to a 'const void * const *', i.e. into a pointer to the key, 2. an indicator which visit of the node this is, 3. the level of the node in the tree (0 for the root). */ extern void twalk (const void *vroot, void (*action) (const void *, VISIT, int)); #ifdef __cplusplus } #endif #endif #endif /* _TSEARCH_H */ KCemu-0.5.1/intl/ref-add.sin0000644001050700006200000000210511321666453015175 0ustar glaubitzfbedv# Add this package to a list of references stored in a text file. # # Copyright (C) 2000 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published # by the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. # # Written by Bruno Haible . # /^# Packages using this file: / { s/# Packages using this file:// ta :a s/ @PACKAGE@ / @PACKAGE@ / tb s/ $/ @PACKAGE@ / :b s/^/# Packages using this file:/ } KCemu-0.5.1/intl/intl-exports.c0000644001050700006200000000273311321666453016003 0ustar glaubitzfbedv/* List of exported symbols of libintl on Cygwin. Copyright (C) 2006 Free Software Foundation, Inc. Written by Bruno Haible , 2006. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* IMP(x) is a symbol that contains the address of x. */ #define IMP(x) _imp__##x /* Ensure that the variable x is exported from the library, and that a pseudo-variable IMP(x) is available. */ #define VARIABLE(x) \ /* Export x without redefining x. This code was found by compiling a \ snippet: \ extern __declspec(dllexport) int x; int x = 42; */ \ asm (".section .drectve\n"); \ asm (".ascii \" -export:" #x ",data\"\n"); \ asm (".data\n"); \ /* Allocate a pseudo-variable IMP(x). */ \ extern int x; \ void * IMP(x) = &x; VARIABLE(libintl_version) KCemu-0.5.1/intl/vasnprintf.c0000644001050700006200000035070311340261610015513 0ustar glaubitzfbedv/* vsprintf with automatic memory allocation. Copyright (C) 1999, 2002-2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* This file can be parametrized with the following macros: VASNPRINTF The name of the function being defined. FCHAR_T The element type of the format string. DCHAR_T The element type of the destination (result) string. FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters in the format string are ASCII. MUST be set if FCHAR_T and DCHAR_T are not the same type. DIRECTIVE Structure denoting a format directive. Depends on FCHAR_T. DIRECTIVES Structure denoting the set of format directives of a format string. Depends on FCHAR_T. PRINTF_PARSE Function that parses a format string. Depends on FCHAR_T. DCHAR_CPY memcpy like function for DCHAR_T[] arrays. DCHAR_SET memset like function for DCHAR_T[] arrays. DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. SNPRINTF The system's snprintf (or similar) function. This may be either snprintf or swprintf. TCHAR_T The element type of the argument and result string of the said SNPRINTF function. This may be either char or wchar_t. The code exploits that sizeof (TCHAR_T) | sizeof (DCHAR_T) and alignof (TCHAR_T) <= alignof (DCHAR_T). DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. */ /* Tell glibc's to provide a prototype for snprintf(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifndef VASNPRINTF # include #endif #ifndef IN_LIBINTL # include #endif /* Specification. */ #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # include "vasnwprintf.h" # else # include "vasnprintf.h" # endif #endif #include /* localeconv() */ #include /* snprintf(), sprintf() */ #include /* abort(), malloc(), realloc(), free() */ #include /* memcpy(), strlen() */ #include /* errno */ #include /* CHAR_BIT */ #include /* DBL_MAX_EXP, LDBL_MAX_EXP */ #if HAVE_NL_LANGINFO # include #endif #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # include "wprintf-parse.h" # else # include "printf-parse.h" # endif #endif /* Checked size_t computations. */ #include "xsize.h" #if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL # include # include "float+.h" #endif #if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL # include # include "isnan.h" #endif #if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL # include # include "isnanl-nolibm.h" # include "fpucw.h" #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL # include # include "isnan.h" # include "printf-frexp.h" #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL # include # include "isnanl-nolibm.h" # include "printf-frexpl.h" # include "fpucw.h" #endif /* Some systems, like OSF/1 4.0 and Woe32, don't have EOVERFLOW. */ #ifndef EOVERFLOW # define EOVERFLOW E2BIG #endif #if HAVE_WCHAR_T # if HAVE_WCSLEN # define local_wcslen wcslen # else /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid a dependency towards this library, here is a local substitute. Define this substitute only once, even if this file is included twice in the same compilation unit. */ # ifndef local_wcslen_defined # define local_wcslen_defined 1 static size_t local_wcslen (const wchar_t *s) { const wchar_t *ptr; for (ptr = s; *ptr != (wchar_t) 0; ptr++) ; return ptr - s; } # endif # endif #endif /* Default parameters. */ #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # define VASNPRINTF vasnwprintf # define FCHAR_T wchar_t # define DCHAR_T wchar_t # define TCHAR_T wchar_t # define DCHAR_IS_TCHAR 1 # define DIRECTIVE wchar_t_directive # define DIRECTIVES wchar_t_directives # define PRINTF_PARSE wprintf_parse # define DCHAR_CPY wmemcpy # else # define VASNPRINTF vasnprintf # define FCHAR_T char # define DCHAR_T char # define TCHAR_T char # define DCHAR_IS_TCHAR 1 # define DIRECTIVE char_directive # define DIRECTIVES char_directives # define PRINTF_PARSE printf_parse # define DCHAR_CPY memcpy # endif #endif #if WIDE_CHAR_VERSION /* TCHAR_T is wchar_t. */ # define USE_SNPRINTF 1 # if HAVE_DECL__SNWPRINTF /* On Windows, the function swprintf() has a different signature than on Unix; we use the _snwprintf() function instead. */ # define SNPRINTF _snwprintf # else /* Unix. */ # define SNPRINTF swprintf # endif #else /* TCHAR_T is char. */ # /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. But don't use it on BeOS, since BeOS snprintf produces no output if the size argument is >= 0x3000000. */ # if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ # define USE_SNPRINTF 1 # else # define USE_SNPRINTF 0 # endif # if HAVE_DECL__SNPRINTF /* Windows. */ # define SNPRINTF _snprintf # else /* Unix. */ # define SNPRINTF snprintf /* Here we need to call the native snprintf, not rpl_snprintf. */ # undef snprintf # endif #endif /* Here we need to call the native sprintf, not rpl_sprintf. */ #undef sprintf #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL /* Determine the decimal-point character according to the current locale. */ # ifndef decimal_point_char_defined # define decimal_point_char_defined 1 static char decimal_point_char () { const char *point; /* Determine it in a multithread-safe way. We know nl_langinfo is multithread-safe on glibc systems, but is not required to be multithread- safe by POSIX. sprintf(), however, is multithread-safe. localeconv() is rarely multithread-safe. */ # if HAVE_NL_LANGINFO && __GLIBC__ point = nl_langinfo (RADIXCHAR); # elif 1 char pointbuf[5]; sprintf (pointbuf, "%#.0f", 1.0); point = &pointbuf[1]; # else point = localeconv () -> decimal_point; # endif /* The decimal point is always a single byte: either '.' or ','. */ return (point[0] != '\0' ? point[0] : '.'); } # endif #endif #if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL /* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ static int is_infinite_or_zero (double x) { return isnan (x) || x + x == x; } #endif #if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL /* Equivalent to !isfinite(x), but does not require libm. */ static int is_infinitel (long double x) { return isnanl (x) || (x + x == x && x != 0.0L); } #endif #if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL /* Converting 'long double' to decimal without rare rounding bugs requires real bignums. We use the naming conventions of GNU gmp, but vastly simpler (and slower) algorithms. */ typedef unsigned int mp_limb_t; # define GMP_LIMB_BITS 32 typedef int mp_limb_verify[2 * (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS) - 1]; typedef unsigned long long mp_twolimb_t; # define GMP_TWOLIMB_BITS 64 typedef int mp_twolimb_verify[2 * (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS) - 1]; /* Representation of a bignum >= 0. */ typedef struct { size_t nlimbs; mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ } mpn_t; /* Compute the product of two bignums >= 0. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * multiply (mpn_t src1, mpn_t src2, mpn_t *dest) { const mp_limb_t *p1; const mp_limb_t *p2; size_t len1; size_t len2; if (src1.nlimbs <= src2.nlimbs) { len1 = src1.nlimbs; p1 = src1.limbs; len2 = src2.nlimbs; p2 = src2.limbs; } else { len1 = src2.nlimbs; p1 = src2.limbs; len2 = src1.nlimbs; p2 = src1.limbs; } /* Now 0 <= len1 <= len2. */ if (len1 == 0) { /* src1 or src2 is zero. */ dest->nlimbs = 0; dest->limbs = (mp_limb_t *) malloc (1); } else { /* Here 1 <= len1 <= len2. */ size_t dlen; mp_limb_t *dp; size_t k, i, j; dlen = len1 + len2; dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); if (dp == NULL) return NULL; for (k = len2; k > 0; ) dp[--k] = 0; for (i = 0; i < len1; i++) { mp_limb_t digit1 = p1[i]; mp_twolimb_t carry = 0; for (j = 0; j < len2; j++) { mp_limb_t digit2 = p2[j]; carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; carry += dp[i + j]; dp[i + j] = (mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; } dp[i + len2] = (mp_limb_t) carry; } /* Normalise. */ while (dlen > 0 && dp[dlen - 1] == 0) dlen--; dest->nlimbs = dlen; dest->limbs = dp; } return dest->limbs; } /* Compute the quotient of a bignum a >= 0 and a bignum b > 0. a is written as a = q * b + r with 0 <= r < b. q is the quotient, r the remainder. Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, q is incremented. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * divide (mpn_t a, mpn_t b, mpn_t *q) { /* Algorithm: First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). If m=n=1, perform a single-precision division: r:=0, j:=m, while j>0 do {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r=n>1, perform a multiple-precision division: We have a/b < beta^(m-n+1). s:=intDsize-1-(hightest bit in b[n-1]), 0<=s=beta/2. For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} Compute q* : q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). In case of overflow (q* >= beta) set q* := beta-1. Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] and c3 := b[n-2] * q*. {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow occurred. Furthermore 0 <= c3 < beta^2. If there was overflow and r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, the next test can be skipped.} While c3 > c2, {Here 0 <= c2 < c3 < beta^2} Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. If q* > 0: Put r := r - b * q* * beta^j. In detail: [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. hence: u:=0, for i:=0 to n-1 do u := u + q* * b[i], r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), u:=u div beta (+ 1, if carry in subtraction) r[n+j]:=r[n+j]-u. {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 < q* + 1 <= beta, the carry u does not overflow.} If a negative carry occurs, put q* := q* - 1 and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. Set q[j] := q*. Normalise [q[m-n],..,q[0]]; this yields the quotient q. Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the rest r. The room for q[j] can be allocated at the memory location of r[n+j]. Finally, round-to-even: Shift r left by 1 bit. If r > b or if r = b and q[0] is odd, q := q+1. */ const mp_limb_t *a_ptr = a.limbs; size_t a_len = a.nlimbs; const mp_limb_t *b_ptr = b.limbs; size_t b_len = b.nlimbs; mp_limb_t *roomptr; mp_limb_t *tmp_roomptr = NULL; mp_limb_t *q_ptr; size_t q_len; mp_limb_t *r_ptr; size_t r_len; /* Allocate room for a_len+2 digits. (Need a_len+1 digits for the real division and 1 more digit for the final rounding of q.) */ roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); if (roomptr == NULL) return NULL; /* Normalise a. */ while (a_len > 0 && a_ptr[a_len - 1] == 0) a_len--; /* Normalise b. */ for (;;) { if (b_len == 0) /* Division by zero. */ abort (); if (b_ptr[b_len - 1] == 0) b_len--; else break; } /* Here m = a_len >= 0 and n = b_len > 0. */ if (a_len < b_len) { /* m beta^(m-2) <= a/b < beta^m */ r_ptr = roomptr; q_ptr = roomptr + 1; { mp_limb_t den = b_ptr[0]; mp_limb_t remainder = 0; const mp_limb_t *sourceptr = a_ptr + a_len; mp_limb_t *destptr = q_ptr + a_len; size_t count; for (count = a_len; count > 0; count--) { mp_twolimb_t num = ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; *--destptr = num / den; remainder = num % den; } /* Normalise and store r. */ if (remainder > 0) { r_ptr[0] = remainder; r_len = 1; } else r_len = 0; /* Normalise q. */ q_len = a_len; if (q_ptr[q_len - 1] == 0) q_len--; } } else { /* n>1: multiple precision division. beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> beta^(m-n-1) <= a/b < beta^(m-n+1). */ /* Determine s. */ size_t s; { mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ s = 31; if (msd >= 0x10000) { msd = msd >> 16; s -= 16; } if (msd >= 0x100) { msd = msd >> 8; s -= 8; } if (msd >= 0x10) { msd = msd >> 4; s -= 4; } if (msd >= 0x4) { msd = msd >> 2; s -= 2; } if (msd >= 0x2) { msd = msd >> 1; s -= 1; } } /* 0 <= s < GMP_LIMB_BITS. Copy b, shifting it left by s bits. */ if (s > 0) { tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); if (tmp_roomptr == NULL) { free (roomptr); return NULL; } { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = tmp_roomptr; mp_twolimb_t accu = 0; size_t count; for (count = b_len; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } /* accu must be zero, since that was how s was determined. */ if (accu != 0) abort (); } b_ptr = tmp_roomptr; } /* Copy a, shifting it left by s bits, yields r. Memory layout: At the beginning: r = roomptr[0..a_len], at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ r_ptr = roomptr; if (s == 0) { memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); r_ptr[a_len] = 0; } else { const mp_limb_t *sourceptr = a_ptr; mp_limb_t *destptr = r_ptr; mp_twolimb_t accu = 0; size_t count; for (count = a_len; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } *destptr++ = (mp_limb_t) accu; } q_ptr = roomptr + b_len; q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ { size_t j = a_len - b_len; /* m-n */ mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; /* Division loop, traversed m-n+1 times. j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ for (;;) { mp_limb_t q_star; mp_limb_t c1; if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ { /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ mp_twolimb_t num = ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) | r_ptr[j + b_len - 1]; q_star = num / b_msd; c1 = num % b_msd; } else { /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) {<= beta !}. If yes, jump directly to the subtraction loop. (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ if (r_ptr[j + b_len] > b_msd || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) /* r[j+n] >= b[n-1]+1 or r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a carry. */ goto subtract; } /* q_star = q*, c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, 0, decrease it by b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 this can happen only twice. */ if (c3 > c2) { q_star = q_star - 1; /* q* := q* - 1 */ if (c3 - c2 > b_msdd) q_star = q_star - 1; /* q* := q* - 1 */ } } if (q_star > 0) subtract: { /* Subtract r := r - b * q* * beta^j. */ mp_limb_t cr; { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = r_ptr + j; mp_twolimb_t carry = 0; size_t count; for (count = b_len; count > 0; count--) { /* Here 0 <= carry <= q*. */ carry = carry + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ + (mp_limb_t) ~(*destptr); /* Here 0 <= carry <= beta*q* + beta-1. */ *destptr++ = ~(mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; /* <= q* */ } cr = (mp_limb_t) carry; } /* Subtract cr from r_ptr[j + b_len], then forget about r_ptr[j + b_len]. */ if (cr > r_ptr[j + b_len]) { /* Subtraction gave a carry. */ q_star = q_star - 1; /* q* := q* - 1 */ /* Add b back. */ { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = r_ptr + j; mp_limb_t carry = 0; size_t count; for (count = b_len; count > 0; count--) { mp_limb_t source1 = *sourceptr++; mp_limb_t source2 = *destptr; *destptr++ = source1 + source2 + carry; carry = (carry ? source1 >= (mp_limb_t) ~source2 : source1 > (mp_limb_t) ~source2); } } /* Forget about the carry and about r[j+n]. */ } } /* q* is determined. Store it as q[j]. */ q_ptr[j] = q_star; if (j == 0) break; j--; } } r_len = b_len; /* Normalise q. */ if (q_ptr[q_len - 1] == 0) q_len--; # if 0 /* Not needed here, since we need r only to compare it with b/2, and b is shifted left by s bits. */ /* Shift r right by s bits. */ if (s > 0) { mp_limb_t ptr = r_ptr + r_len; mp_twolimb_t accu = 0; size_t count; for (count = r_len; count > 0; count--) { accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); } } # endif /* Normalise r. */ while (r_len > 0 && r_ptr[r_len - 1] == 0) r_len--; } /* Compare r << 1 with b. */ if (r_len > b_len) goto increment_q; { size_t i; for (i = b_len;;) { mp_limb_t r_i = (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) | (i < r_len ? r_ptr[i] << 1 : 0); mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); if (r_i > b_i) goto increment_q; if (r_i < b_i) goto keep_q; if (i == 0) break; i--; } } if (q_len > 0 && ((q_ptr[0] & 1) != 0)) /* q is odd. */ increment_q: { size_t i; for (i = 0; i < q_len; i++) if (++(q_ptr[i]) != 0) goto keep_q; q_ptr[q_len++] = 1; } keep_q: if (tmp_roomptr != NULL) free (tmp_roomptr); q->limbs = q_ptr; q->nlimbs = q_len; return roomptr; } /* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal representation. Destroys the contents of a. Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * convert_to_decimal (mpn_t a, size_t extra_zeroes) { mp_limb_t *a_ptr = a.limbs; size_t a_len = a.nlimbs; /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); char *c_ptr = (char *) malloc (xsum (c_len, extra_zeroes)); if (c_ptr != NULL) { char *d_ptr = c_ptr; for (; extra_zeroes > 0; extra_zeroes--) *d_ptr++ = '0'; while (a_len > 0) { /* Divide a by 10^9, in-place. */ mp_limb_t remainder = 0; mp_limb_t *ptr = a_ptr + a_len; size_t count; for (count = a_len; count > 0; count--) { mp_twolimb_t num = ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; *ptr = num / 1000000000; remainder = num % 1000000000; } /* Store the remainder as 9 decimal digits. */ for (count = 9; count > 0; count--) { *d_ptr++ = '0' + (remainder % 10); remainder = remainder / 10; } /* Normalize a. */ if (a_ptr[a_len - 1] == 0) a_len--; } /* Remove leading zeroes. */ while (d_ptr > c_ptr && d_ptr[-1] == '0') d_ptr--; /* But keep at least one zero. */ if (d_ptr == c_ptr) *d_ptr++ = '0'; /* Terminate the string. */ *d_ptr = '\0'; } return c_ptr; } # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and >= 0: write x as x = 2^e * m, where m is a bignum. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * decode_long_double (long double x, int *ep, mpn_t *mp) { mpn_t m; int exp; long double y; size_t i; /* Allocate memory for result. */ m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); if (m.limbs == NULL) return NULL; /* Split into exponential part and mantissa. */ y = frexpl (x, &exp); if (!(y >= 0.0L && y < 1.0L)) abort (); /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * LDBL_MANT_BIT), and the latter is an integer. */ /* Convert the mantissa (y * LDBL_MANT_BIT) to a sequence of limbs. I'm not sure whether it's safe to cast a 'long double' value between 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', doesn't matter). */ # if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 # if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); hi = (int) y; y -= hi; if (!(y >= 0.0L && y < 1.0L)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # else { mp_limb_t d; y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); d = (int) y; y -= d; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; } # endif # endif for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); hi = (int) y; y -= hi; if (!(y >= 0.0L && y < 1.0L)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; } if (!(y == 0.0L)) abort (); /* Normalise. */ while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) m.nlimbs--; *mp = m; *ep = exp - LDBL_MANT_BIT; return m.limbs; } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and >= 0: write x as x = 2^e * m, where m is a bignum. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * decode_double (double x, int *ep, mpn_t *mp) { mpn_t m; int exp; double y; size_t i; /* Allocate memory for result. */ m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); if (m.limbs == NULL) return NULL; /* Split into exponential part and mantissa. */ y = frexp (x, &exp); if (!(y >= 0.0 && y < 1.0)) abort (); /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * DBL_MANT_BIT), and the latter is an integer. */ /* Convert the mantissa (y * DBL_MANT_BIT) to a sequence of limbs. I'm not sure whether it's safe to cast a 'double' value between 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', doesn't matter). */ # if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 # if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); hi = (int) y; y -= hi; if (!(y >= 0.0 && y < 1.0)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # else { mp_limb_t d; y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); d = (int) y; y -= d; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; } # endif # endif for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); hi = (int) y; y -= hi; if (!(y >= 0.0 && y < 1.0)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; } if (!(y == 0.0)) abort (); /* Normalise. */ while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) m.nlimbs--; *mp = m; *ep = exp - DBL_MANT_BIT; return m.limbs; } # endif /* Assuming x = 2^e * m is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) { int s; size_t extra_zeroes; unsigned int abs_n; unsigned int abs_s; mp_limb_t *pow5_ptr; size_t pow5_len; unsigned int s_limbs; unsigned int s_bits; mpn_t pow5; mpn_t z; void *z_memory; char *digits; if (memory == NULL) return NULL; /* x = 2^e * m, hence y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) = round (2^s * 5^n * m). */ s = e + n; extra_zeroes = 0; /* Factor out a common power of 10 if possible. */ if (s > 0 && n > 0) { extra_zeroes = (s < n ? s : n); s -= extra_zeroes; n -= extra_zeroes; } /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. Before converting to decimal, we need to compute z = round (2^s * 5^n * m). */ /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same sign. 2.322 is slightly larger than log(5)/log(2). */ abs_n = (n >= 0 ? n : -n); abs_s = (s >= 0 ? s : -s); pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 + abs_s / GMP_LIMB_BITS + 1) * sizeof (mp_limb_t)); if (pow5_ptr == NULL) { free (memory); return NULL; } /* Initialize with 1. */ pow5_ptr[0] = 1; pow5_len = 1; /* Multiply with 5^|n|. */ if (abs_n > 0) { static mp_limb_t const small_pow5[13 + 1] = { 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, 48828125, 244140625, 1220703125 }; unsigned int n13; for (n13 = 0; n13 <= abs_n; n13 += 13) { mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; size_t j; mp_twolimb_t carry = 0; for (j = 0; j < pow5_len; j++) { mp_limb_t digit2 = pow5_ptr[j]; carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; pow5_ptr[j] = (mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; } if (carry > 0) pow5_ptr[pow5_len++] = (mp_limb_t) carry; } } s_limbs = abs_s / GMP_LIMB_BITS; s_bits = abs_s % GMP_LIMB_BITS; if (n >= 0 ? s >= 0 : s <= 0) { /* Multiply with 2^|s|. */ if (s_bits > 0) { mp_limb_t *ptr = pow5_ptr; mp_twolimb_t accu = 0; size_t count; for (count = pow5_len; count > 0; count--) { accu += (mp_twolimb_t) *ptr << s_bits; *ptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } if (accu > 0) { *ptr = (mp_limb_t) accu; pow5_len++; } } if (s_limbs > 0) { size_t count; for (count = pow5_len; count > 0;) { count--; pow5_ptr[s_limbs + count] = pow5_ptr[count]; } for (count = s_limbs; count > 0;) { count--; pow5_ptr[count] = 0; } pow5_len += s_limbs; } pow5.limbs = pow5_ptr; pow5.nlimbs = pow5_len; if (n >= 0) { /* Multiply m with pow5. No division needed. */ z_memory = multiply (m, pow5, &z); } else { /* Divide m by pow5 and round. */ z_memory = divide (m, pow5, &z); } } else { pow5.limbs = pow5_ptr; pow5.nlimbs = pow5_len; if (n >= 0) { /* n >= 0, s < 0. Multiply m with pow5, then divide by 2^|s|. */ mpn_t numerator; mpn_t denominator; void *tmp_memory; tmp_memory = multiply (m, pow5, &numerator); if (tmp_memory == NULL) { free (pow5_ptr); free (memory); return NULL; } /* Construct 2^|s|. */ { mp_limb_t *ptr = pow5_ptr + pow5_len; size_t i; for (i = 0; i < s_limbs; i++) ptr[i] = 0; ptr[s_limbs] = (mp_limb_t) 1 << s_bits; denominator.limbs = ptr; denominator.nlimbs = s_limbs + 1; } z_memory = divide (numerator, denominator, &z); free (tmp_memory); } else { /* n < 0, s > 0. Multiply m with 2^s, then divide by pow5. */ mpn_t numerator; mp_limb_t *num_ptr; num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) * sizeof (mp_limb_t)); if (num_ptr == NULL) { free (pow5_ptr); free (memory); return NULL; } { mp_limb_t *destptr = num_ptr; { size_t i; for (i = 0; i < s_limbs; i++) *destptr++ = 0; } if (s_bits > 0) { const mp_limb_t *sourceptr = m.limbs; mp_twolimb_t accu = 0; size_t count; for (count = m.nlimbs; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s_bits; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } if (accu > 0) *destptr++ = (mp_limb_t) accu; } else { const mp_limb_t *sourceptr = m.limbs; size_t count; for (count = m.nlimbs; count > 0; count--) *destptr++ = *sourceptr++; } numerator.limbs = num_ptr; numerator.nlimbs = destptr - num_ptr; } z_memory = divide (numerator, pow5, &z); free (num_ptr); } } free (pow5_ptr); free (memory); /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ if (z_memory == NULL) return NULL; digits = convert_to_decimal (z, extra_zeroes); free (z_memory); return digits; } # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_long_double (long double x, int n) { int e; mpn_t m; void *memory = decode_long_double (x, &e, &m); return scale10_round_decimal_decoded (e, m, memory, n); } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_double (double x, int n) { int e; mpn_t m; void *memory = decode_double (x, &e, &m); return scale10_round_decimal_decoded (e, m, memory, n); } # endif # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and > 0: Return an approximation for n with 10^n <= x < 10^(n+1). The approximation is usually the right n, but may be off by 1 sometimes. */ static int floorlog10l (long double x) { int exp; long double y; double z; double l; /* Split into exponential part and mantissa. */ y = frexpl (x, &exp); if (!(y >= 0.0L && y < 1.0L)) abort (); if (y == 0.0L) return INT_MIN; if (y < 0.5L) { while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) { y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); exp -= GMP_LIMB_BITS; } if (y < (1.0L / (1 << 16))) { y *= 1.0L * (1 << 16); exp -= 16; } if (y < (1.0L / (1 << 8))) { y *= 1.0L * (1 << 8); exp -= 8; } if (y < (1.0L / (1 << 4))) { y *= 1.0L * (1 << 4); exp -= 4; } if (y < (1.0L / (1 << 2))) { y *= 1.0L * (1 << 2); exp -= 2; } if (y < (1.0L / (1 << 1))) { y *= 1.0L * (1 << 1); exp -= 1; } } if (!(y >= 0.5L && y < 1.0L)) abort (); /* Compute an approximation for l = log2(x) = exp + log2(y). */ l = exp; z = y; if (z < 0.70710678118654752444) { z *= 1.4142135623730950488; l -= 0.5; } if (z < 0.8408964152537145431) { z *= 1.1892071150027210667; l -= 0.25; } if (z < 0.91700404320467123175) { z *= 1.0905077326652576592; l -= 0.125; } if (z < 0.9576032806985736469) { z *= 1.0442737824274138403; l -= 0.0625; } /* Now 0.95 <= z <= 1.01. */ z = 1 - z; /* log(1-z) = - z - z^2/2 - z^3/3 - z^4/4 - ... Four terms are enough to get an approximation with error < 10^-7. */ l -= z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); /* Finally multiply with log(2)/log(10), yields an approximation for log10(x). */ l *= 0.30102999566398119523; /* Round down to the next integer. */ return (int) l + (l < 0 ? -1 : 0); } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and > 0: Return an approximation for n with 10^n <= x < 10^(n+1). The approximation is usually the right n, but may be off by 1 sometimes. */ static int floorlog10 (double x) { int exp; double y; double z; double l; /* Split into exponential part and mantissa. */ y = frexp (x, &exp); if (!(y >= 0.0 && y < 1.0)) abort (); if (y == 0.0) return INT_MIN; if (y < 0.5) { while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) { y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); exp -= GMP_LIMB_BITS; } if (y < (1.0 / (1 << 16))) { y *= 1.0 * (1 << 16); exp -= 16; } if (y < (1.0 / (1 << 8))) { y *= 1.0 * (1 << 8); exp -= 8; } if (y < (1.0 / (1 << 4))) { y *= 1.0 * (1 << 4); exp -= 4; } if (y < (1.0 / (1 << 2))) { y *= 1.0 * (1 << 2); exp -= 2; } if (y < (1.0 / (1 << 1))) { y *= 1.0 * (1 << 1); exp -= 1; } } if (!(y >= 0.5 && y < 1.0)) abort (); /* Compute an approximation for l = log2(x) = exp + log2(y). */ l = exp; z = y; if (z < 0.70710678118654752444) { z *= 1.4142135623730950488; l -= 0.5; } if (z < 0.8408964152537145431) { z *= 1.1892071150027210667; l -= 0.25; } if (z < 0.91700404320467123175) { z *= 1.0905077326652576592; l -= 0.125; } if (z < 0.9576032806985736469) { z *= 1.0442737824274138403; l -= 0.0625; } /* Now 0.95 <= z <= 1.01. */ z = 1 - z; /* log(1-z) = - z - z^2/2 - z^3/3 - z^4/4 - ... Four terms are enough to get an approximation with error < 10^-7. */ l -= z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); /* Finally multiply with log(2)/log(10), yields an approximation for log10(x). */ l *= 0.30102999566398119523; /* Round down to the next integer. */ return (int) l + (l < 0 ? -1 : 0); } # endif #endif DCHAR_T * VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, const FCHAR_T *format, va_list args) { DIRECTIVES d; arguments a; if (PRINTF_PARSE (format, &d, &a) < 0) /* errno is already set. */ return NULL; #define CLEANUP() \ free (d.dir); \ if (a.arg) \ free (a.arg); if (PRINTF_FETCHARGS (args, &a) < 0) { CLEANUP (); errno = EINVAL; return NULL; } { size_t buf_neededlength; TCHAR_T *buf; TCHAR_T *buf_malloced; const FCHAR_T *cp; size_t i; DIRECTIVE *dp; /* Output string accumulator. */ DCHAR_T *result; size_t allocated; size_t length; /* Allocate a small buffer that will hold a directive passed to sprintf or snprintf. */ buf_neededlength = xsum4 (7, d.max_width_length, d.max_precision_length, 6); #if HAVE_ALLOCA if (buf_neededlength < 4000 / sizeof (TCHAR_T)) { buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); buf_malloced = NULL; } else #endif { size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); if (size_overflow_p (buf_memsize)) goto out_of_memory_1; buf = (TCHAR_T *) malloc (buf_memsize); if (buf == NULL) goto out_of_memory_1; buf_malloced = buf; } if (resultbuf != NULL) { result = resultbuf; allocated = *lengthp; } else { result = NULL; allocated = 0; } length = 0; /* Invariants: result is either == resultbuf or == NULL or malloc-allocated. If length > 0, then result != NULL. */ /* Ensures that allocated >= needed. Aborts through a jump to out_of_memory if needed is SIZE_MAX or otherwise too big. */ #define ENSURE_ALLOCATION(needed) \ if ((needed) > allocated) \ { \ size_t memory_size; \ DCHAR_T *memory; \ \ allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ if ((needed) > allocated) \ allocated = (needed); \ memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ if (size_overflow_p (memory_size)) \ goto out_of_memory; \ if (result == resultbuf || result == NULL) \ memory = (DCHAR_T *) malloc (memory_size); \ else \ memory = (DCHAR_T *) realloc (result, memory_size); \ if (memory == NULL) \ goto out_of_memory; \ if (result == resultbuf && length > 0) \ DCHAR_CPY (memory, result, length); \ result = memory; \ } for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) { if (cp != dp->dir_start) { size_t n = dp->dir_start - cp; size_t augmented_length = xsum (length, n); ENSURE_ALLOCATION (augmented_length); /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we need that the format string contains only ASCII characters if FCHAR_T and DCHAR_T are not the same type. */ if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) { DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); length = augmented_length; } else { do result[length++] = (unsigned char) *cp++; while (--n > 0); } } if (i == d.count) break; /* Execute a single directive. */ if (dp->conversion == '%') { size_t augmented_length; if (!(dp->arg_index == ARG_NONE)) abort (); augmented_length = xsum (length, 1); ENSURE_ALLOCATION (augmented_length); result[length] = '%'; length = augmented_length; } else { if (!(dp->arg_index != ARG_NONE)) abort (); if (dp->conversion == 'n') { switch (a.arg[dp->arg_index].type) { case TYPE_COUNT_SCHAR_POINTER: *a.arg[dp->arg_index].a.a_count_schar_pointer = length; break; case TYPE_COUNT_SHORT_POINTER: *a.arg[dp->arg_index].a.a_count_short_pointer = length; break; case TYPE_COUNT_INT_POINTER: *a.arg[dp->arg_index].a.a_count_int_pointer = length; break; case TYPE_COUNT_LONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longint_pointer = length; break; #if HAVE_LONG_LONG_INT case TYPE_COUNT_LONGLONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; break; #endif default: abort (); } } #if ENABLE_UNISTDIO /* The unistdio extensions. */ else if (dp->conversion == 'U') { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = (unsigned int) (-arg); } else width = arg; } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } switch (type) { case TYPE_U8_STRING: { const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; const uint8_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u8_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u8_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u8_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (has_width && width > characters && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT8_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-8 to locale encoding. */ if (u8_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, &converted, &converted_len) < 0) # else /* Convert from UTF-8 to UTF-16/UTF-32. */ converted = U8_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); if (converted == NULL) # endif { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } if (converted != result + length) { ENSURE_ALLOCATION (xsum (length, converted_len)); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (has_width && width > characters && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; case TYPE_U16_STRING: { const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; const uint16_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u16_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u16_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u16_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (has_width && width > characters && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT16_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-16 to locale encoding. */ if (u16_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, &converted, &converted_len) < 0) # else /* Convert from UTF-16 to UTF-8/UTF-32. */ converted = U16_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); if (converted == NULL) # endif { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } if (converted != result + length) { ENSURE_ALLOCATION (xsum (length, converted_len)); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (has_width && width > characters && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; case TYPE_U32_STRING: { const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; const uint32_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u32_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u32_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u32_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (has_width && width > characters && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT32_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-32 to locale encoding. */ if (u32_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, &converted, &converted_len) < 0) # else /* Convert from UTF-32 to UTF-8/UTF-16. */ converted = U32_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); if (converted == NULL) # endif { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } if (converted != result + length) { ENSURE_ALLOCATION (xsum (length, converted_len)); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (has_width && width > characters && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; default: abort (); } } #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL else if ((dp->conversion == 'a' || dp->conversion == 'A') # if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) && (0 # if NEED_PRINTF_DOUBLE || a.arg[dp->arg_index].type == TYPE_DOUBLE # endif # if NEED_PRINTF_LONG_DOUBLE || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE # endif ) # endif ) { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; size_t tmp_length; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = (unsigned int) (-arg); } else width = arg; } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } /* Allocate a temporary buffer of sufficient size. */ if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) ((LDBL_DIG + 1) * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) ((DBL_DIG + 1) * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); if (tmp_length < width) tmp_length = width; tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (DCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } pad_ptr = NULL; p = tmp; if (type == TYPE_LONGDOUBLE) { # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE long double arg = a.arg[dp->arg_index].a.a_longdouble; if (isnanl (arg)) { if (dp->conversion == 'A') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); if (signbit (arg)) /* arg < 0.0L or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0L && arg + arg == arg) { if (dp->conversion == 'A') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { int exponent; long double mantissa; if (arg > 0.0L) mantissa = printf_frexpl (arg, &exponent); else { exponent = 0; mantissa = 0.0L; } if (has_precision && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) { /* Round the mantissa. */ long double tail = mantissa; size_t q; for (q = precision; ; q--) { int digit = (int) tail; tail -= digit; if (q == 0) { if (digit & 1 ? tail >= 0.5L : tail > 0.5L) tail = 1 - tail; else tail = - tail; break; } tail *= 16.0L; } if (tail != 0.0L) for (q = precision; q > 0; q--) tail *= 0.0625L; mantissa += tail; } *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; { int digit; digit = (int) mantissa; mantissa -= digit; *p++ = '0' + digit; if ((flags & FLAG_ALT) || mantissa > 0.0L || precision > 0) { *p++ = decimal_point_char (); /* This loop terminates because we assume that FLT_RADIX is a power of 2. */ while (mantissa > 0.0L) { mantissa *= 16.0L; digit = (int) mantissa; mantissa -= digit; *p++ = digit + (digit < 10 ? '0' : dp->conversion - 10); if (precision > 0) precision--; } while (precision > 0) { *p++ = '0'; precision--; } } } *p++ = dp->conversion - 'A' + 'P'; # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } END_LONG_DOUBLE_ROUNDING (); } # else abort (); # endif } else { # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE double arg = a.arg[dp->arg_index].a.a_double; if (isnan (arg)) { if (dp->conversion == 'A') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; if (signbit (arg)) /* arg < 0.0 or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0 && arg + arg == arg) { if (dp->conversion == 'A') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { int exponent; double mantissa; if (arg > 0.0) mantissa = printf_frexp (arg, &exponent); else { exponent = 0; mantissa = 0.0; } if (has_precision && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) { /* Round the mantissa. */ double tail = mantissa; size_t q; for (q = precision; ; q--) { int digit = (int) tail; tail -= digit; if (q == 0) { if (digit & 1 ? tail >= 0.5 : tail > 0.5) tail = 1 - tail; else tail = - tail; break; } tail *= 16.0; } if (tail != 0.0) for (q = precision; q > 0; q--) tail *= 0.0625; mantissa += tail; } *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; { int digit; digit = (int) mantissa; mantissa -= digit; *p++ = '0' + digit; if ((flags & FLAG_ALT) || mantissa > 0.0 || precision > 0) { *p++ = decimal_point_char (); /* This loop terminates because we assume that FLT_RADIX is a power of 2. */ while (mantissa > 0.0) { mantissa *= 16.0; digit = (int) mantissa; mantissa -= digit; *p++ = digit + (digit < 10 ? '0' : dp->conversion - 10); if (precision > 0) precision--; } while (precision > 0) { *p++ = '0'; precision--; } } } *p++ = dp->conversion - 'A' + 'P'; # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } } # else abort (); # endif } /* The generated string now extends from tmp to p, with the zero padding insertion point being at pad_ptr. */ if (has_width && p - tmp < width) { size_t pad = width - (p - tmp); DCHAR_T *end = p + pad; if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > tmp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } p = end; } { size_t count = p - tmp; if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); /* Make room for the result. */ if (count >= allocated - length) { size_t n = xsum (length, count); ENSURE_ALLOCATION (n); } /* Append the result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); if (tmp != tmpbuf) free (tmp); length += count; } } #endif #if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL else if ((dp->conversion == 'f' || dp->conversion == 'F' || dp->conversion == 'e' || dp->conversion == 'E' || dp->conversion == 'g' || dp->conversion == 'G' || dp->conversion == 'a' || dp->conversion == 'A') && (0 # if NEED_PRINTF_DOUBLE || a.arg[dp->arg_index].type == TYPE_DOUBLE # elif NEED_PRINTF_INFINITE_DOUBLE || (a.arg[dp->arg_index].type == TYPE_DOUBLE /* The systems (mingw) which produce wrong output for Inf, -Inf, and NaN also do so for -0.0. Therefore we treat this case here as well. */ && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) # endif # if NEED_PRINTF_LONG_DOUBLE || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE # elif NEED_PRINTF_INFINITE_LONG_DOUBLE || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE /* Some systems produce wrong output for Inf, -Inf, and NaN. */ && is_infinitel (a.arg[dp->arg_index].a.a_longdouble)) # endif )) { # if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) arg_type type = a.arg[dp->arg_index].type; # endif int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; size_t tmp_length; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = (unsigned int) (-arg); } else width = arg; } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } /* POSIX specifies the default precision to be 6 for %f, %F, %e, %E, but not for %g, %G. Implementations appear to use the same default precision also for %g, %G. */ if (!has_precision) precision = 6; /* Allocate a temporary buffer of sufficient size. */ # if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); # elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); # elif NEED_PRINTF_LONG_DOUBLE tmp_length = LDBL_DIG + 1; # elif NEED_PRINTF_DOUBLE tmp_length = DBL_DIG + 1; # else tmp_length = 0; # endif if (tmp_length < precision) tmp_length = precision; # if NEED_PRINTF_LONG_DOUBLE # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE if (type == TYPE_LONGDOUBLE) # endif if (dp->conversion == 'f' || dp->conversion == 'F') { long double arg = a.arg[dp->arg_index].a.a_longdouble; if (!(isnanl (arg) || arg + arg == arg)) { /* arg is finite and nonzero. */ int exponent = floorlog10l (arg < 0 ? -arg : arg); if (exponent >= 0 && tmp_length < exponent + precision) tmp_length = exponent + precision; } } # endif # if NEED_PRINTF_DOUBLE # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE if (type == TYPE_DOUBLE) # endif if (dp->conversion == 'f' || dp->conversion == 'F') { double arg = a.arg[dp->arg_index].a.a_double; if (!(isnan (arg) || arg + arg == arg)) { /* arg is finite and nonzero. */ int exponent = floorlog10 (arg < 0 ? -arg : arg); if (exponent >= 0 && tmp_length < exponent + precision) tmp_length = exponent + precision; } } # endif /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); if (tmp_length < width) tmp_length = width; tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (DCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } pad_ptr = NULL; p = tmp; # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE if (type == TYPE_LONGDOUBLE) # endif { long double arg = a.arg[dp->arg_index].a.a_longdouble; if (isnanl (arg)) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); if (signbit (arg)) /* arg < 0.0L or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0L && arg + arg == arg) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { # if NEED_PRINTF_LONG_DOUBLE pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { char *digits; size_t ndigits; digits = scale10_round_decimal_long_double (arg, precision); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits > precision) do { --ndigits; *p++ = digits[ndigits]; } while (ndigits > precision); else *p++ = '0'; /* Here ndigits <= precision. */ if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > ndigits; precision--) *p++ = '0'; while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } else if (dp->conversion == 'e' || dp->conversion == 'E') { int exponent; if (arg == 0.0L) { exponent = 0; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else { /* arg > 0.0L. */ int adjusted; char *digits; size_t ndigits; exponent = floorlog10l (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_long_double (arg, (int)precision - exponent); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits == precision + 1) break; if (ndigits < precision || ndigits > precision + 2) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits == precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision+1. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } *p++ = dp->conversion; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', '.', '2', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+.2d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+.2d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } else if (dp->conversion == 'g' || dp->conversion == 'G') { if (precision == 0) precision = 1; /* precision >= 1. */ if (arg == 0.0L) /* The exponent is 0, >= -4, < precision. Use fixed-point notation. */ { size_t ndigits = precision; /* Number of trailing zeroes that have to be dropped. */ size_t nzeroes = (flags & FLAG_ALT ? 0 : precision - 1); --ndigits; *p++ = '0'; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = '0'; } } } else { /* arg > 0.0L. */ int exponent; int adjusted; char *digits; size_t ndigits; size_t nzeroes; exponent = floorlog10l (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_long_double (arg, (int)(precision - 1) - exponent); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits == precision) break; if (ndigits < precision - 1 || ndigits > precision + 1) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits < precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision. */ /* Determine the number of trailing zeroes that have to be dropped. */ nzeroes = 0; if ((flags & FLAG_ALT) == 0) while (nzeroes < ndigits && digits[nzeroes] == '0') nzeroes++; /* The exponent is now determined. */ if (exponent >= -4 && exponent < (long)precision) { /* Fixed-point notation: max(exponent,0)+1 digits, then the decimal point, then the remaining digits without trailing zeroes. */ if (exponent >= 0) { size_t count = exponent + 1; /* Note: count <= precision = ndigits. */ for (; count > 0; count--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t count = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; count > 0; count--) *p++ = '0'; while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { /* Exponential notation. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', '.', '2', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+.2d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+.2d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } free (digits); } } else abort (); # else /* arg is finite. */ abort (); # endif } END_LONG_DOUBLE_ROUNDING (); } } # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE else # endif # endif # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE { double arg = a.arg[dp->arg_index].a.a_double; if (isnan (arg)) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; if (signbit (arg)) /* arg < 0.0 or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0 && arg + arg == arg) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { # if NEED_PRINTF_DOUBLE pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { char *digits; size_t ndigits; digits = scale10_round_decimal_double (arg, precision); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits > precision) do { --ndigits; *p++ = digits[ndigits]; } while (ndigits > precision); else *p++ = '0'; /* Here ndigits <= precision. */ if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > ndigits; precision--) *p++ = '0'; while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } else if (dp->conversion == 'e' || dp->conversion == 'E') { int exponent; if (arg == 0.0) { exponent = 0; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else { /* arg > 0.0. */ int adjusted; char *digits; size_t ndigits; exponent = floorlog10 (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_double (arg, (int)precision - exponent); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits == precision + 1) break; if (ndigits < precision || ndigits > precision + 2) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits == precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision+1. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } *p++ = dp->conversion; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ { '%', '+', '.', '3', 'd', '\0' }; # else { '%', '+', '.', '2', 'd', '\0' }; # endif SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else { static const char decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ "%+.3d"; # else "%+.2d"; # endif if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, decimal_format, exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, decimal_format, exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } } # endif } else if (dp->conversion == 'g' || dp->conversion == 'G') { if (precision == 0) precision = 1; /* precision >= 1. */ if (arg == 0.0) /* The exponent is 0, >= -4, < precision. Use fixed-point notation. */ { size_t ndigits = precision; /* Number of trailing zeroes that have to be dropped. */ size_t nzeroes = (flags & FLAG_ALT ? 0 : precision - 1); --ndigits; *p++ = '0'; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = '0'; } } } else { /* arg > 0.0. */ int exponent; int adjusted; char *digits; size_t ndigits; size_t nzeroes; exponent = floorlog10 (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_double (arg, (int)(precision - 1) - exponent); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits == precision) break; if (ndigits < precision - 1 || ndigits > precision + 1) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits < precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision. */ /* Determine the number of trailing zeroes that have to be dropped. */ nzeroes = 0; if ((flags & FLAG_ALT) == 0) while (nzeroes < ndigits && digits[nzeroes] == '0') nzeroes++; /* The exponent is now determined. */ if (exponent >= -4 && exponent < (long)precision) { /* Fixed-point notation: max(exponent,0)+1 digits, then the decimal point, then the remaining digits without trailing zeroes. */ if (exponent >= 0) { size_t count = exponent + 1; /* Note: count <= precision = ndigits. */ for (; count > 0; count--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t count = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; count > 0; count--) *p++ = '0'; while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { /* Exponential notation. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ { '%', '+', '.', '3', 'd', '\0' }; # else { '%', '+', '.', '2', 'd', '\0' }; # endif SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else { static const char decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ "%+.3d"; # else "%+.2d"; # endif if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, decimal_format, exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, decimal_format, exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } } # endif } free (digits); } } else abort (); # else /* arg is finite. */ if (!(arg == 0.0)) abort (); pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else if (dp->conversion == 'e' || dp->conversion == 'E') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion; /* 'e' or 'E' */ *p++ = '+'; /* Produce the same number of exponent digits as the native printf implementation. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ *p++ = '0'; # endif *p++ = '0'; *p++ = '0'; } else if (dp->conversion == 'g' || dp->conversion == 'G') { *p++ = '0'; if (flags & FLAG_ALT) { size_t ndigits = (precision > 0 ? precision - 1 : 0); *p++ = decimal_point_char (); for (; ndigits > 0; --ndigits) *p++ = '0'; } } else abort (); # endif } } } # endif /* The generated string now extends from tmp to p, with the zero padding insertion point being at pad_ptr. */ if (has_width && p - tmp < width) { size_t pad = width - (p - tmp); DCHAR_T *end = p + pad; if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > tmp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } p = end; } { size_t count = p - tmp; if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); /* Make room for the result. */ if (count >= allocated - length) { size_t n = xsum (length, count); ENSURE_ALLOCATION (n); } /* Append the result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); if (tmp != tmpbuf) free (tmp); length += count; } } #endif else { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; #if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int has_width; size_t width; #endif #if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION int has_precision; size_t precision; #endif #if NEED_PRINTF_UNBOUNDED_PRECISION int prec_ourselves; #else # define prec_ourselves 0 #endif #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int pad_ourselves; #else # define pad_ourselves 0 #endif TCHAR_T *fbp; unsigned int prefix_count; int prefixes[2]; #if !USE_SNPRINTF size_t tmp_length; TCHAR_T tmpbuf[700]; TCHAR_T *tmp; #endif #if !USE_SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = (unsigned int) (-arg); } else width = arg; } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } #endif #if !USE_SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION has_precision = 0; precision = 6; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } #endif #if !USE_SNPRINTF /* Allocate a temporary buffer of sufficient size for calling sprintf. */ { switch (dp->conversion) { case 'd': case 'i': case 'u': # if HAVE_LONG_LONG_INT if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ else # endif if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Multiply by 2, as an estimate for FLAG_GROUP. */ tmp_length = xsum (tmp_length, tmp_length); /* Add 1, to account for a leading sign. */ tmp_length = xsum (tmp_length, 1); break; case 'o': # if HAVE_LONG_LONG_INT if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ else # endif if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Add 1, to account for a leading sign. */ tmp_length = xsum (tmp_length, 1); break; case 'x': case 'X': # if HAVE_LONG_LONG_INT if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ else # endif if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Add 2, to account for a leading sign or alternate form. */ tmp_length = xsum (tmp_length, 2); break; case 'f': case 'F': if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) (LDBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ else tmp_length = (unsigned int) (DBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ tmp_length = xsum (tmp_length, precision); break; case 'e': case 'E': case 'g': case 'G': tmp_length = 12; /* sign, decimal point, exponent etc. */ tmp_length = xsum (tmp_length, precision); break; case 'a': case 'A': if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) (LDBL_DIG * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (DBL_DIG * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); break; case 'c': # if HAVE_WINT_T && !WIDE_CHAR_VERSION if (type == TYPE_WIDE_CHAR) tmp_length = MB_CUR_MAX; else # endif tmp_length = 1; break; case 's': # if HAVE_WCHAR_T if (type == TYPE_WIDE_STRING) { tmp_length = local_wcslen (a.arg[dp->arg_index].a.a_wide_string); # if !WIDE_CHAR_VERSION tmp_length = xtimes (tmp_length, MB_CUR_MAX); # endif } else # endif tmp_length = strlen (a.arg[dp->arg_index].a.a_string); break; case 'p': tmp_length = (unsigned int) (sizeof (void *) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1 /* turn floor into ceil */ + 2; /* account for leading 0x */ break; default: abort (); } # if ENABLE_UNISTDIO /* Padding considers the number of characters, therefore the number of elements after padding may be > max (tmp_length, width) but is certainly <= tmp_length + width. */ tmp_length = xsum (tmp_length, width); # else /* Padding considers the number of elements, says POSIX. */ if (tmp_length < width) tmp_length = width; # endif tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ } if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (TCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } #endif /* Decide whether to handle the precision ourselves. */ #if NEED_PRINTF_UNBOUNDED_PRECISION switch (dp->conversion) { case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': prec_ourselves = has_precision && (precision > 0); break; default: prec_ourselves = 0; break; } #endif /* Decide whether to perform the padding ourselves. */ #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION switch (dp->conversion) { # if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need to perform the padding after this conversion. Functions with unistdio extensions perform the padding based on character count rather than element count. */ case 'c': case 's': # endif # if NEED_PRINTF_FLAG_ZERO case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': # endif pad_ourselves = 1; break; default: pad_ourselves = prec_ourselves; break; } #endif /* Construct the format string for calling snprintf or sprintf. */ fbp = buf; *fbp++ = '%'; #if NEED_PRINTF_FLAG_GROUPING /* The underlying implementation doesn't support the ' flag. Produce no grouping characters in this case; this is acceptable because the grouping is locale dependent. */ #else if (flags & FLAG_GROUP) *fbp++ = '\''; #endif if (flags & FLAG_LEFT) *fbp++ = '-'; if (flags & FLAG_SHOWSIGN) *fbp++ = '+'; if (flags & FLAG_SPACE) *fbp++ = ' '; if (flags & FLAG_ALT) *fbp++ = '#'; if (!pad_ourselves) { if (flags & FLAG_ZERO) *fbp++ = '0'; if (dp->width_start != dp->width_end) { size_t n = dp->width_end - dp->width_start; /* The width specification is known to consist only of standard ASCII characters. */ if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) { memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); fbp += n; } else { const FCHAR_T *mp = dp->width_start; do *fbp++ = (unsigned char) *mp++; while (--n > 0); } } } if (!prec_ourselves) { if (dp->precision_start != dp->precision_end) { size_t n = dp->precision_end - dp->precision_start; /* The precision specification is known to consist only of standard ASCII characters. */ if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) { memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); fbp += n; } else { const FCHAR_T *mp = dp->precision_start; do *fbp++ = (unsigned char) *mp++; while (--n > 0); } } } switch (type) { #if HAVE_LONG_LONG_INT case TYPE_LONGLONGINT: case TYPE_ULONGLONGINT: # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ *fbp++ = 'I'; *fbp++ = '6'; *fbp++ = '4'; break; # else *fbp++ = 'l'; /*FALLTHROUGH*/ # endif #endif case TYPE_LONGINT: case TYPE_ULONGINT: #if HAVE_WINT_T case TYPE_WIDE_CHAR: #endif #if HAVE_WCHAR_T case TYPE_WIDE_STRING: #endif *fbp++ = 'l'; break; case TYPE_LONGDOUBLE: *fbp++ = 'L'; break; default: break; } #if NEED_PRINTF_DIRECTIVE_F if (dp->conversion == 'F') *fbp = 'f'; else #endif *fbp = dp->conversion; #if USE_SNPRINTF # if !(__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) fbp[1] = '%'; fbp[2] = 'n'; fbp[3] = '\0'; # else /* On glibc2 systems from glibc >= 2.3 - probably also older ones - we know that snprintf's returns value conforms to ISO C 99: the gl_SNPRINTF_DIRECTIVE_N test passes. Therefore we can avoid using %n in this situation. On glibc2 systems from 2004-10-18 or newer, the use of %n in format strings in writable memory may crash the program (if compiled with _FORTIFY_SOURCE=2), so we should avoid it in this situation. */ fbp[1] = '\0'; # endif #else fbp[1] = '\0'; #endif /* Construct the arguments for calling snprintf or sprintf. */ prefix_count = 0; if (!pad_ourselves && dp->width_arg_index != ARG_NONE) { if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; } if (dp->precision_arg_index != ARG_NONE) { if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; } #if USE_SNPRINTF /* The SNPRINTF result is appended after result[0..length]. The latter is an array of DCHAR_T; SNPRINTF appends an array of TCHAR_T to it. This is possible because sizeof (TCHAR_T) divides sizeof (DCHAR_T) and alignof (TCHAR_T) <= alignof (DCHAR_T). */ # define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) /* Prepare checking whether snprintf returns the count via %n. */ ENSURE_ALLOCATION (xsum (length, 1)); *(TCHAR_T *) (result + length) = '\0'; #endif for (;;) { int count = -1; #if USE_SNPRINTF int retcount = 0; size_t maxlen = allocated - length; /* SNPRINTF can fail if its second argument is > INT_MAX. */ if (maxlen > INT_MAX / TCHARS_PER_DCHAR) maxlen = INT_MAX / TCHARS_PER_DCHAR; maxlen = maxlen * TCHARS_PER_DCHAR; # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ arg, &count); \ break; \ case 1: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ prefixes[0], arg, &count); \ break; \ case 2: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ prefixes[0], prefixes[1], arg, \ &count); \ break; \ default: \ abort (); \ } #else # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ count = sprintf (tmp, buf, arg); \ break; \ case 1: \ count = sprintf (tmp, buf, prefixes[0], arg); \ break; \ case 2: \ count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ arg); \ break; \ default: \ abort (); \ } #endif switch (type) { case TYPE_SCHAR: { int arg = a.arg[dp->arg_index].a.a_schar; SNPRINTF_BUF (arg); } break; case TYPE_UCHAR: { unsigned int arg = a.arg[dp->arg_index].a.a_uchar; SNPRINTF_BUF (arg); } break; case TYPE_SHORT: { int arg = a.arg[dp->arg_index].a.a_short; SNPRINTF_BUF (arg); } break; case TYPE_USHORT: { unsigned int arg = a.arg[dp->arg_index].a.a_ushort; SNPRINTF_BUF (arg); } break; case TYPE_INT: { int arg = a.arg[dp->arg_index].a.a_int; SNPRINTF_BUF (arg); } break; case TYPE_UINT: { unsigned int arg = a.arg[dp->arg_index].a.a_uint; SNPRINTF_BUF (arg); } break; case TYPE_LONGINT: { long int arg = a.arg[dp->arg_index].a.a_longint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGINT: { unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; SNPRINTF_BUF (arg); } break; #if HAVE_LONG_LONG_INT case TYPE_LONGLONGINT: { long long int arg = a.arg[dp->arg_index].a.a_longlongint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGLONGINT: { unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; SNPRINTF_BUF (arg); } break; #endif case TYPE_DOUBLE: { double arg = a.arg[dp->arg_index].a.a_double; SNPRINTF_BUF (arg); } break; case TYPE_LONGDOUBLE: { long double arg = a.arg[dp->arg_index].a.a_longdouble; SNPRINTF_BUF (arg); } break; case TYPE_CHAR: { int arg = a.arg[dp->arg_index].a.a_char; SNPRINTF_BUF (arg); } break; #if HAVE_WINT_T case TYPE_WIDE_CHAR: { wint_t arg = a.arg[dp->arg_index].a.a_wide_char; SNPRINTF_BUF (arg); } break; #endif case TYPE_STRING: { const char *arg = a.arg[dp->arg_index].a.a_string; SNPRINTF_BUF (arg); } break; #if HAVE_WCHAR_T case TYPE_WIDE_STRING: { const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; SNPRINTF_BUF (arg); } break; #endif case TYPE_POINTER: { void *arg = a.arg[dp->arg_index].a.a_pointer; SNPRINTF_BUF (arg); } break; default: abort (); } #if USE_SNPRINTF /* Portability: Not all implementations of snprintf() are ISO C 99 compliant. Determine the number of bytes that snprintf() has produced or would have produced. */ if (count >= 0) { /* Verify that snprintf() has NUL-terminated its result. */ if (count < maxlen && ((TCHAR_T *) (result + length)) [count] != '\0') abort (); /* Portability hack. */ if (retcount > count) count = retcount; } else { /* snprintf() doesn't understand the '%n' directive. */ if (fbp[1] != '\0') { /* Don't use the '%n' directive; instead, look at the snprintf() return value. */ fbp[1] = '\0'; continue; } else { /* Look at the snprintf() return value. */ if (retcount < 0) { /* HP-UX 10.20 snprintf() is doubly deficient: It doesn't understand the '%n' directive, *and* it returns -1 (rather than the length that would have been required) when the buffer is too small. */ size_t bigger_need = xsum (xtimes (allocated, 2), 12); ENSURE_ALLOCATION (bigger_need); continue; } else count = retcount; } } #endif /* Attempt to handle failure. */ if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EINVAL; return NULL; } #if USE_SNPRINTF /* Handle overflow of the allocated buffer. If such an overflow occurs, a C99 compliant snprintf() returns a count >= maxlen. However, a non-compliant snprintf() function returns only count = maxlen - 1. To cover both cases, test whether count >= maxlen - 1. */ if ((unsigned int) count + 1 >= maxlen) { /* If maxlen already has attained its allowed maximum, allocating more memory will not increase maxlen. Instead of looping, bail out. */ if (maxlen == INT_MAX / TCHARS_PER_DCHAR) goto overflow; else { /* Need at least count * sizeof (TCHAR_T) bytes. But allocate proportionally, to avoid looping eternally if snprintf() reports a too small count. */ size_t n = xmax (xsum (length, (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR), xtimes (allocated, 2)); ENSURE_ALLOCATION (n); continue; } } #endif #if NEED_PRINTF_UNBOUNDED_PRECISION if (prec_ourselves) { /* Handle the precision. */ TCHAR_T *prec_ptr = # if USE_SNPRINTF (TCHAR_T *) (result + length); # else tmp; # endif size_t prefix_count; size_t move; prefix_count = 0; /* Put the additional zeroes after the sign. */ if (count >= 1 && (*prec_ptr == '-' || *prec_ptr == '+' || *prec_ptr == ' ')) prefix_count = 1; /* Put the additional zeroes after the 0x prefix if (flags & FLAG_ALT) || (dp->conversion == 'p'). */ else if (count >= 2 && prec_ptr[0] == '0' && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) prefix_count = 2; move = count - prefix_count; if (precision > move) { /* Insert zeroes. */ size_t insert = precision - move; TCHAR_T *prec_end; # if USE_SNPRINTF size_t n = xsum (length, (count + insert + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR); length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; ENSURE_ALLOCATION (n); length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; prec_ptr = (TCHAR_T *) (result + length); # endif prec_end = prec_ptr + count; prec_ptr += prefix_count; while (prec_end > prec_ptr) { prec_end--; prec_end[insert] = prec_end[0]; } prec_end += insert; do *--prec_end = '0'; while (prec_end > prec_ptr); count += insert; } } #endif #if !DCHAR_IS_TCHAR # if !USE_SNPRINTF if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); # endif /* Convert from TCHAR_T[] to DCHAR_T[]. */ if (dp->conversion == 'c' || dp->conversion == 's') { /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING TYPE_WIDE_STRING. The result string is not certainly ASCII. */ const TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t tmpdst_len; /* This code assumes that TCHAR_T is 'char'. */ typedef int TCHAR_T_verify [2 * (sizeof (TCHAR_T) == 1) - 1]; # if USE_SNPRINTF tmpsrc = (TCHAR_T *) (result + length); # else tmpsrc = tmp; # endif tmpdst = NULL; tmpdst_len = 0; if (DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, count, NULL, &tmpdst, &tmpdst_len) < 0) { int saved_errno = errno; if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = saved_errno; return NULL; } ENSURE_ALLOCATION (xsum (length, tmpdst_len)); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); count = tmpdst_len; } else { /* The result string is ASCII. Simple 1:1 conversion. */ # if USE_SNPRINTF /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a no-op conversion, in-place on the array starting at (result + length). */ if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) # endif { const TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t n; # if USE_SNPRINTF if (result == resultbuf) { tmpsrc = (TCHAR_T *) (result + length); /* ENSURE_ALLOCATION will not move tmpsrc (because it's part of resultbuf). */ ENSURE_ALLOCATION (xsum (length, count)); } else { /* ENSURE_ALLOCATION will move the array (because it uses realloc(). */ ENSURE_ALLOCATION (xsum (length, count)); tmpsrc = (TCHAR_T *) (result + length); } # else tmpsrc = tmp; ENSURE_ALLOCATION (xsum (length, count)); # endif tmpdst = result + length; /* Copy backwards, because of overlapping. */ tmpsrc += count; tmpdst += count; for (n = count; n > 0; n--) *--tmpdst = (unsigned char) *--tmpsrc; } } #endif #if DCHAR_IS_TCHAR && !USE_SNPRINTF /* Make room for the result. */ if (count > allocated - length) { /* Need at least count elements. But allocate proportionally. */ size_t n = xmax (xsum (length, count), xtimes (allocated, 2)); ENSURE_ALLOCATION (n); } #endif /* Here count <= allocated - length. */ /* Perform padding. */ #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION if (pad_ourselves && has_width) { size_t w; # if ENABLE_UNISTDIO /* Outside POSIX, it's preferrable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, count); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = count; # endif if (w < width) { size_t pad = width - w; # if USE_SNPRINTF /* Make room for the result. */ if (xsum (count, pad) > allocated - length) { /* Need at least count + pad elements. But allocate proportionally. */ size_t n = xmax (xsum3 (length, count, pad), xtimes (allocated, 2)); length += count; ENSURE_ALLOCATION (n); length -= count; } /* Here count + pad <= allocated - length. */ # endif { # if !DCHAR_IS_TCHAR || USE_SNPRINTF DCHAR_T * const rp = result + length; # else DCHAR_T * const rp = tmp; # endif DCHAR_T *p = rp + count; DCHAR_T *end = p + pad; # if NEED_PRINTF_FLAG_ZERO DCHAR_T *pad_ptr; # if !DCHAR_IS_TCHAR if (dp->conversion == 'c' || dp->conversion == 's') /* No zero-padding for string directives. */ pad_ptr = NULL; else # endif { pad_ptr = (*rp == '-' ? rp + 1 : rp); /* No zero-padding of "inf" and "nan". */ if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) pad_ptr = NULL; } # endif /* The generated string now extends from rp to p, with the zero padding insertion point being at pad_ptr. */ count = count + pad; /* = end - rp */ if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } # if NEED_PRINTF_FLAG_ZERO else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } # endif else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > rp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } } } } #endif #if DCHAR_IS_TCHAR && !USE_SNPRINTF if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); #endif /* Here still count <= allocated - length. */ #if !DCHAR_IS_TCHAR || USE_SNPRINTF /* The snprintf() result did fit. */ #else /* Append the sprintf() result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); #endif #if !USE_SNPRINTF if (tmp != tmpbuf) free (tmp); #endif #if NEED_PRINTF_DIRECTIVE_F if (dp->conversion == 'F') { /* Convert the %f result to upper case for %F. */ DCHAR_T *rp = result + length; size_t rc; for (rc = count; rc > 0; rc--, rp++) if (*rp >= 'a' && *rp <= 'z') *rp = *rp - 'a' + 'A'; } #endif length += count; break; } } } } /* Add the final NUL. */ ENSURE_ALLOCATION (xsum (length, 1)); result[length] = '\0'; if (result != resultbuf && length + 1 < allocated) { /* Shrink the allocated memory if possible. */ DCHAR_T *memory; memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); if (memory != NULL) result = memory; } if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); *lengthp = length; /* Note that we can produce a big string of a length > INT_MAX. POSIX says that snprintf() fails with errno = EOVERFLOW in this case, but that's only because snprintf() returns an 'int'. This function does not have this limitation. */ return result; overflow: if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EOVERFLOW; return NULL; out_of_memory: if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); out_of_memory_1: CLEANUP (); errno = ENOMEM; return NULL; } } #undef TCHARS_PER_DCHAR #undef SNPRINTF #undef USE_SNPRINTF #undef DCHAR_CPY #undef PRINTF_PARSE #undef DIRECTIVES #undef DIRECTIVE #undef DCHAR_IS_TCHAR #undef TCHAR_T #undef DCHAR_T #undef FCHAR_T #undef VASNPRINTF KCemu-0.5.1/intl/plural.c0000644001050700006200000014212011340261610014610 0ustar glaubitzfbedv/* A Bison parser, made by GNU Bison 2.3a. */ /* Skeleton implementation for Bison's Yacc-like parsers in C Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "2.3a" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Using locations. */ #define YYLSP_NEEDED 0 /* Substitute the variable and function names. */ #define yyparse __gettextparse #define yylex __gettextlex #define yyerror __gettexterror #define yylval __gettextlval #define yychar __gettextchar #define yydebug __gettextdebug #define yynerrs __gettextnerrs /* Copy the first part of user declarations. */ /* Line 164 of yacc.c. */ #line 1 "plural.y" /* Expression parsing for plural form selection. Copyright (C) 2000-2001, 2003, 2005-2006 Free Software Foundation, Inc. Written by Ulrich Drepper , 2000. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* For bison < 2.0, the bison generated parser uses alloca. AIX 3 forces us to put this declaration at the beginning of the file. The declaration in bison's skeleton file comes too late. This must come before because may include arbitrary system headers. This can go away once the AM_INTL_SUBDIR macro requires bison >= 2.0. */ #if defined _AIX && !defined __GNUC__ #pragma alloca #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "plural-exp.h" /* The main function generated by the parser is called __gettextparse, but we want it to be called PLURAL_PARSE. */ #ifndef _LIBC # define __gettextparse PLURAL_PARSE #endif #define YYLEX_PARAM &((struct parse_args *) arg)->cp #define YYPARSE_PARAM arg /* Enabling traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif /* Enabling verbose error messages. */ #ifdef YYERROR_VERBOSE # undef YYERROR_VERBOSE # define YYERROR_VERBOSE 1 #else # define YYERROR_VERBOSE 0 #endif /* Enabling the token table. */ #ifndef YYTOKEN_TABLE # define YYTOKEN_TABLE 0 #endif /* Tokens. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE /* Put the tokens into the symbol table, so that GDB and other debuggers know about them. */ enum yytokentype { EQUOP2 = 258, CMPOP2 = 259, ADDOP2 = 260, MULOP2 = 261, NUMBER = 262 }; #endif /* Tokens. */ #define EQUOP2 258 #define CMPOP2 259 #define ADDOP2 260 #define MULOP2 261 #define NUMBER 262 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED typedef union YYSTYPE {/* Line 191 of yacc.c. */ #line 51 "plural.y" unsigned long int num; enum expression_operator op; struct expression *exp; } /* Line 191 of yacc.c. */ #line 175 "plural.c" YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ # define YYSTYPE_IS_DECLARED 1 #endif /* Copy the second part of user declarations. */ /* Line 221 of yacc.c. */ #line 57 "plural.y" /* Prototypes for local functions. */ static int yylex (YYSTYPE *lval, const char **pexp); static void yyerror (const char *str); /* Allocation of expressions. */ static struct expression * new_exp (int nargs, enum expression_operator op, struct expression * const *args) { int i; struct expression *newp; /* If any of the argument could not be malloc'ed, just return NULL. */ for (i = nargs - 1; i >= 0; i--) if (args[i] == NULL) goto fail; /* Allocate a new expression. */ newp = (struct expression *) malloc (sizeof (*newp)); if (newp != NULL) { newp->nargs = nargs; newp->operation = op; for (i = nargs - 1; i >= 0; i--) newp->val.args[i] = args[i]; return newp; } fail: for (i = nargs - 1; i >= 0; i--) FREE_EXPRESSION (args[i]); return NULL; } static inline struct expression * new_exp_0 (enum expression_operator op) { return new_exp (0, op, NULL); } static inline struct expression * new_exp_1 (enum expression_operator op, struct expression *right) { struct expression *args[1]; args[0] = right; return new_exp (1, op, args); } static struct expression * new_exp_2 (enum expression_operator op, struct expression *left, struct expression *right) { struct expression *args[2]; args[0] = left; args[1] = right; return new_exp (2, op, args); } static inline struct expression * new_exp_3 (enum expression_operator op, struct expression *bexp, struct expression *tbranch, struct expression *fbranch) { struct expression *args[3]; args[0] = bexp; args[1] = tbranch; args[2] = fbranch; return new_exp (3, op, args); } /* Line 221 of yacc.c. */ #line 265 "plural.c" #ifdef short # undef short #endif #ifdef YYTYPE_UINT8 typedef YYTYPE_UINT8 yytype_uint8; #else typedef unsigned char yytype_uint8; #endif #ifdef YYTYPE_INT8 typedef YYTYPE_INT8 yytype_int8; #elif (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) typedef signed char yytype_int8; #else typedef short int yytype_int8; #endif #ifdef YYTYPE_UINT16 typedef YYTYPE_UINT16 yytype_uint16; #else typedef unsigned short int yytype_uint16; #endif #ifdef YYTYPE_INT16 typedef YYTYPE_INT16 yytype_int16; #else typedef short int yytype_int16; #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned int # endif #endif #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) #ifndef YY_ # if YYENABLE_NLS # if ENABLE_NLS # include /* INFRINGES ON USER NAME SPACE */ # define YY_(msgid) dgettext ("bison-runtime", msgid) # endif # endif # ifndef YY_ # define YY_(msgid) msgid # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(e) ((void) (e)) #else # define YYUSE(e) /* empty */ #endif /* Identity function, used to suppress warnings about constant conditions. */ #ifndef lint # define YYID(n) (n) #else #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static int YYID (int yyi) #else static int YYID (yyi) int yyi; #endif { return yyi; } #endif #if ! defined yyoverflow || YYERROR_VERBOSE /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's `empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined _STDLIB_H \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include /* INFRINGES ON USER NAME SPACE */ # ifndef _STDLIB_H # define _STDLIB_H 1 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yytype_int16 yyss; YYSTYPE yyvs; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) /* Copy COUNT objects from FROM to TO. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(To, From, Count) \ __builtin_memcpy (To, From, (Count) * sizeof (*(From))) # else # define YYCOPY(To, From, Count) \ do \ { \ YYSIZE_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (To)[yyi] = (From)[yyi]; \ } \ while (YYID (0)) # endif # endif /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack) \ do \ { \ YYSIZE_T yynewbytes; \ YYCOPY (&yyptr->Stack, Stack, yysize); \ Stack = &yyptr->Stack; \ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / sizeof (*yyptr); \ } \ while (YYID (0)) #endif /* YYFINAL -- State number of the termination state. */ #define YYFINAL 9 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 54 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 16 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 3 /* YYNRULES -- Number of rules. */ #define YYNRULES 13 /* YYNRULES -- Number of states. */ #define YYNSTATES 27 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ #define YYUNDEFTOK 2 #define YYMAXUTOK 262 #define YYTRANSLATE(YYX) \ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ static const yytype_uint8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10, 2, 2, 2, 2, 5, 2, 14, 15, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 12, 2, 2, 2, 2, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 13, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 4, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 6, 7, 8, 9, 11 }; #if YYDEBUG /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in YYRHS. */ static const yytype_uint8 yyprhs[] = { 0, 0, 3, 5, 11, 15, 19, 23, 27, 31, 35, 38, 40, 42 }; /* YYRHS -- A `-1'-separated list of the rules' RHS. */ static const yytype_int8 yyrhs[] = { 17, 0, -1, 18, -1, 18, 3, 18, 12, 18, -1, 18, 4, 18, -1, 18, 5, 18, -1, 18, 6, 18, -1, 18, 7, 18, -1, 18, 8, 18, -1, 18, 9, 18, -1, 10, 18, -1, 13, -1, 11, -1, 14, 18, 15, -1 }; /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 154, 154, 162, 166, 170, 174, 178, 182, 186, 190, 194, 198, 203 }; #endif #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "$end", "error", "$undefined", "'?'", "'|'", "'&'", "EQUOP2", "CMPOP2", "ADDOP2", "MULOP2", "'!'", "NUMBER", "':'", "'n'", "'('", "')'", "$accept", "start", "exp", 0 }; #endif # ifdef YYPRINT /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to token YYLEX-NUM. */ static const yytype_uint16 yytoknum[] = { 0, 256, 257, 63, 124, 38, 258, 259, 260, 261, 33, 262, 58, 110, 40, 41 }; # endif /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ static const yytype_uint8 yyr1[] = { 0, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18, 18 }; /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ static const yytype_uint8 yyr2[] = { 0, 2, 1, 5, 3, 3, 3, 3, 3, 3, 2, 1, 1, 3 }; /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state STATE-NUM when YYTABLE doesn't specify something else to do. Zero means the default is an error. */ static const yytype_uint8 yydefact[] = { 0, 0, 12, 11, 0, 0, 2, 10, 0, 1, 0, 0, 0, 0, 0, 0, 0, 13, 0, 4, 5, 6, 7, 8, 9, 0, 3 }; /* YYDEFGOTO[NTERM-NUM]. */ static const yytype_int8 yydefgoto[] = { -1, 5, 6 }; /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing STATE-NUM. */ #define YYPACT_NINF -10 static const yytype_int8 yypact[] = { -9, -9, -10, -10, -9, 8, 36, -10, 13, -10, -9, -9, -9, -9, -9, -9, -9, -10, 26, 41, 45, 18, -2, 14, -10, -9, 36 }; /* YYPGOTO[NTERM-NUM]. */ static const yytype_int8 yypgoto[] = { -10, -10, -1 }; /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule which number is the opposite. If zero, do what YYDEFACT says. If YYTABLE_NINF, syntax error. */ #define YYTABLE_NINF -1 static const yytype_uint8 yytable[] = { 7, 1, 2, 8, 3, 4, 15, 16, 9, 18, 19, 20, 21, 22, 23, 24, 10, 11, 12, 13, 14, 15, 16, 16, 26, 14, 15, 16, 17, 10, 11, 12, 13, 14, 15, 16, 0, 0, 25, 10, 11, 12, 13, 14, 15, 16, 12, 13, 14, 15, 16, 13, 14, 15, 16 }; static const yytype_int8 yycheck[] = { 1, 10, 11, 4, 13, 14, 8, 9, 0, 10, 11, 12, 13, 14, 15, 16, 3, 4, 5, 6, 7, 8, 9, 9, 25, 7, 8, 9, 15, 3, 4, 5, 6, 7, 8, 9, -1, -1, 12, 3, 4, 5, 6, 7, 8, 9, 5, 6, 7, 8, 9, 6, 7, 8, 9 }; /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_uint8 yystos[] = { 0, 10, 11, 13, 14, 17, 18, 18, 18, 0, 3, 4, 5, 6, 7, 8, 9, 15, 18, 18, 18, 18, 18, 18, 18, 12, 18 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYEMPTY (-2) #define YYEOF 0 #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab /* Like YYERROR except do call yyerror. This remains here temporarily to ease the transition to the new meaning of YYERROR, for GCC. Once GCC version 2 has supplanted version 1, this can go. */ #define YYFAIL goto yyerrlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY && yylen == 1) \ { \ yychar = (Token); \ yylval = (Value); \ yytoken = YYTRANSLATE (yychar); \ YYPOPSTACK (1); \ goto yybackup; \ } \ else \ { \ yyerror (YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (YYID (0)) #define YYTERROR 1 #define YYERRCODE 256 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. If N is 0, then set CURRENT to the empty location which ends the previous symbol: RHS[0] (always defined). */ #define YYRHSLOC(Rhs, K) ((Rhs)[K]) #ifndef YYLLOC_DEFAULT # define YYLLOC_DEFAULT(Current, Rhs, N) \ do \ if (YYID (N)) \ { \ (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ } \ else \ { \ (Current).first_line = (Current).last_line = \ YYRHSLOC (Rhs, 0).last_line; \ (Current).first_column = (Current).last_column = \ YYRHSLOC (Rhs, 0).last_column; \ } \ while (YYID (0)) #endif /* YY_LOCATION_PRINT -- Print the location on the stream. This macro was not mandated originally: define only if we know we won't break user code: when these are the locations we know. */ #ifndef YY_LOCATION_PRINT # if YYLTYPE_IS_TRIVIAL # define YY_LOCATION_PRINT(File, Loc) \ fprintf (File, "%d.%d-%d.%d", \ (Loc).first_line, (Loc).first_column, \ (Loc).last_line, (Loc).last_column) # else # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif #endif /* YYLEX -- calling `yylex' with the right arguments. */ #ifdef YYLEX_PARAM # define YYLEX yylex (&yylval, YYLEX_PARAM) #else # define YYLEX yylex (&yylval) #endif /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (YYID (0)) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Type, Value); \ YYFPRINTF (stderr, "\n"); \ } \ } while (YYID (0)) /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_value_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (!yyvaluep) return; # ifdef YYPRINT if (yytype < YYNTOKENS) YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); # else YYUSE (yyoutput); # endif switch (yytype) { default: break; } } /*--------------------------------. | Print this symbol on YYOUTPUT. | `--------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep) #else static void yy_symbol_print (yyoutput, yytype, yyvaluep) FILE *yyoutput; int yytype; YYSTYPE const * const yyvaluep; #endif { if (yytype < YYNTOKENS) YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); else YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); yy_symbol_value_print (yyoutput, yytype, yyvaluep); YYFPRINTF (yyoutput, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) #else static void yy_stack_print (yybottom, yytop) yytype_int16 *yybottom; yytype_int16 *yytop; #endif { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (YYID (0)) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yy_reduce_print (YYSTYPE *yyvsp, int yyrule) #else static void yy_reduce_print (yyvsp, yyrule) YYSTYPE *yyvsp; int yyrule; #endif { int yynrhs = yyr2[yyrule]; int yyi; unsigned long int yylno = yyrline[yyrule]; YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { fprintf (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], &(yyvsp[(yyi + 1) - (yynrhs)]) ); fprintf (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyvsp, Rule); \ } while (YYID (0)) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) # define YY_SYMBOL_PRINT(Title, Type, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif #if YYERROR_VERBOSE # ifndef yystrlen # if defined __GLIBC__ && defined _STRING_H # define yystrlen strlen # else /* Return the length of YYSTR. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static YYSIZE_T yystrlen (const char *yystr) #else static YYSIZE_T yystrlen (yystr) const char *yystr; #endif { YYSIZE_T yylen; for (yylen = 0; yystr[yylen]; yylen++) continue; return yylen; } # endif # endif # ifndef yystpcpy # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE # define yystpcpy stpcpy # else /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in YYDEST. */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static char * yystpcpy (char *yydest, const char *yysrc) #else static char * yystpcpy (yydest, yysrc) char *yydest; const char *yysrc; #endif { char *yyd = yydest; const char *yys = yysrc; while ((*yyd++ = *yys++) != '\0') continue; return yyd - 1; } # endif # endif # ifndef yytnamerr /* Copy to YYRES the contents of YYSTR after stripping away unnecessary quotes and backslashes, so that it's suitable for yyerror. The heuristic is that double-quoting is unnecessary unless the string contains an apostrophe, a comma, or backslash (other than backslash-backslash). YYSTR is taken from yytname. If YYRES is null, do not copy; instead, return the length of what the result would have been. */ static YYSIZE_T yytnamerr (char *yyres, const char *yystr) { if (*yystr == '"') { YYSIZE_T yyn = 0; char const *yyp = yystr; for (;;) switch (*++yyp) { case '\'': case ',': goto do_not_strip_quotes; case '\\': if (*++yyp != '\\') goto do_not_strip_quotes; /* Fall through. */ default: if (yyres) yyres[yyn] = *yyp; yyn++; break; case '"': if (yyres) yyres[yyn] = '\0'; return yyn; } do_not_strip_quotes: ; } if (! yyres) return yystrlen (yystr); return yystpcpy (yyres, yystr) - yyres; } # endif /* Copy into YYRESULT an error message about the unexpected token YYCHAR while in state YYSTATE. Return the number of bytes copied, including the terminating null byte. If YYRESULT is null, do not copy anything; just return the number of bytes that would be copied. As a special case, return 0 if an ordinary "syntax error" message will do. Return YYSIZE_MAXIMUM if overflow occurs during size calculation. */ static YYSIZE_T yysyntax_error (char *yyresult, int yystate, int yychar) { int yyn = yypact[yystate]; if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) return 0; else { int yytype = YYTRANSLATE (yychar); YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); YYSIZE_T yysize = yysize0; YYSIZE_T yysize1; int yysize_overflow = 0; enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; int yyx; # if 0 /* This is so xgettext sees the translatable formats that are constructed on the fly. */ YY_("syntax error, unexpected %s"); YY_("syntax error, unexpected %s, expecting %s"); YY_("syntax error, unexpected %s, expecting %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s"); YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); # endif char *yyfmt; char const *yyf; static char const yyunexpected[] = "syntax error, unexpected %s"; static char const yyexpecting[] = ", expecting %s"; static char const yyor[] = " or %s"; char yyformat[sizeof yyunexpected + sizeof yyexpecting - 1 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) * (sizeof yyor - 1))]; char const *yyprefix = yyexpecting; /* Start YYX at -YYN if negative to avoid negative indexes in YYCHECK. */ int yyxbegin = yyn < 0 ? -yyn : 0; /* Stay within bounds of both yycheck and yytname. */ int yychecklim = YYLAST - yyn + 1; int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; int yycount = 1; yyarg[0] = yytname[yytype]; yyfmt = yystpcpy (yyformat, yyunexpected); for (yyx = yyxbegin; yyx < yyxend; ++yyx) if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) { if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) { yycount = 1; yysize = yysize0; yyformat[sizeof yyunexpected - 1] = '\0'; break; } yyarg[yycount++] = yytname[yyx]; yysize1 = yysize + yytnamerr (0, yytname[yyx]); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; yyfmt = yystpcpy (yyfmt, yyprefix); yyprefix = yyor; } yyf = YY_(yyformat); yysize1 = yysize + yystrlen (yyf); yysize_overflow |= (yysize1 < yysize); yysize = yysize1; if (yysize_overflow) return YYSIZE_MAXIMUM; if (yyresult) { /* Avoid sprintf, as that infringes on the user's name space. Don't have undefined behavior even if the translation produced a string with the wrong number of "%s"s. */ char *yyp = yyresult; int yyi = 0; while ((*yyp = *yyf) != '\0') { if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) { yyp += yytnamerr (yyp, yyarg[yyi++]); yyf += 2; } else { yyp++; yyf++; } } } return yysize; } } #endif /* YYERROR_VERBOSE */ /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ /*ARGSUSED*/ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) static void yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep) #else static void yydestruct (yymsg, yytype, yyvaluep) const char *yymsg; int yytype; YYSTYPE *yyvaluep; #endif { YYUSE (yyvaluep); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); switch (yytype) { default: break; } } /* Prevent warnings from -Wmissing-prototypes. */ #ifdef YYPARSE_PARAM #if defined __STDC__ || defined __cplusplus int yyparse (void *YYPARSE_PARAM); #else int yyparse (); #endif #else /* ! YYPARSE_PARAM */ #if defined __STDC__ || defined __cplusplus int yyparse (void); #else int yyparse (); #endif #endif /* ! YYPARSE_PARAM */ /*----------. | yyparse. | `----------*/ #ifdef YYPARSE_PARAM #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void *YYPARSE_PARAM) #else int yyparse (YYPARSE_PARAM) void *YYPARSE_PARAM; #endif #else /* ! YYPARSE_PARAM */ #if (defined __STDC__ || defined __C99__FUNC__ \ || defined __cplusplus || defined _MSC_VER) int yyparse (void) #else int yyparse () #endif #endif { /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ YYSTYPE yylval; /* Number of syntax errors so far. */ int yynerrs; int yystate; int yyn; int yyresult; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* Lookahead token as an internal (translated) token number. */ int yytoken = 0; #if YYERROR_VERBOSE /* Buffer for error messages, and its allocated size. */ char yymsgbuf[128]; char *yymsg = yymsgbuf; YYSIZE_T yymsg_alloc = sizeof yymsgbuf; #endif /* Three stacks and their tools: `yyss': related to states, `yyvs': related to semantic values, `yyls': related to locations. Refer to the stacks thru separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* The state stack. */ yytype_int16 yyssa[YYINITDEPTH]; yytype_int16 *yyss = yyssa; yytype_int16 *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs = yyvsa; YYSTYPE *yyvsp; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) YYSIZE_T yystacksize = YYINITDEPTH; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; YYDPRINTF ((stderr, "Starting parse\n")); yystate = 0; yyerrstatus = 0; yynerrs = 0; yychar = YYEMPTY; /* Cause a token to be read. */ /* Initialize stack pointers. Waste one element of value and location stack so that they stay on the same level as the state stack. The wasted elements are never initialized. */ yyssp = yyss; yyvsp = yyvs; goto yysetstate; /*------------------------------------------------------------. | yynewstate -- Push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; yysetstate: *yyssp = yystate; if (yyss + yystacksize - 1 <= yyssp) { /* Get the current used size of the three stacks, in elements. */ YYSIZE_T yysize = yyssp - yyss + 1; #ifdef yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ YYSTYPE *yyvs1 = yyvs; yytype_int16 *yyss1 = yyss; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * sizeof (*yyssp), &yyvs1, yysize * sizeof (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } #else /* no yyoverflow */ # ifndef YYSTACK_RELOCATE goto yyexhaustedlab; # else /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yytype_int16 *yyss1 = yyss; union yyalloc *yyptr = (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss); YYSTACK_RELOCATE (yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif #endif /* no yyoverflow */ yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YYDPRINTF ((stderr, "Stack size increased to %lu\n", (unsigned long int) yystacksize)); if (yyss + yystacksize - 1 <= yyssp) YYABORT; } YYDPRINTF ((stderr, "Entering state %d\n", yystate)); if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yyn == YYPACT_NINF) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token: ")); yychar = YYLEX; } if (yychar <= YYEOF) { yychar = yytoken = YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yyn == 0 || yyn == YYTABLE_NINF) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); /* Discard the shifted token. */ yychar = YYEMPTY; yystate = yyn; *++yyvsp = yylval; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- Do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: `$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: /* Line 1269 of yacc.c. */ #line 155 "plural.y" { if ((yyvsp[(1) - (1)].exp) == NULL) YYABORT; ((struct parse_args *) arg)->res = (yyvsp[(1) - (1)].exp); } break; case 3: /* Line 1269 of yacc.c. */ #line 163 "plural.y" { (yyval.exp) = new_exp_3 (qmop, (yyvsp[(1) - (5)].exp), (yyvsp[(3) - (5)].exp), (yyvsp[(5) - (5)].exp)); } break; case 4: /* Line 1269 of yacc.c. */ #line 167 "plural.y" { (yyval.exp) = new_exp_2 (lor, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 5: /* Line 1269 of yacc.c. */ #line 171 "plural.y" { (yyval.exp) = new_exp_2 (land, (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 6: /* Line 1269 of yacc.c. */ #line 175 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 7: /* Line 1269 of yacc.c. */ #line 179 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 8: /* Line 1269 of yacc.c. */ #line 183 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 9: /* Line 1269 of yacc.c. */ #line 187 "plural.y" { (yyval.exp) = new_exp_2 ((yyvsp[(2) - (3)].op), (yyvsp[(1) - (3)].exp), (yyvsp[(3) - (3)].exp)); } break; case 10: /* Line 1269 of yacc.c. */ #line 191 "plural.y" { (yyval.exp) = new_exp_1 (lnot, (yyvsp[(2) - (2)].exp)); } break; case 11: /* Line 1269 of yacc.c. */ #line 195 "plural.y" { (yyval.exp) = new_exp_0 (var); } break; case 12: /* Line 1269 of yacc.c. */ #line 199 "plural.y" { if (((yyval.exp) = new_exp_0 (num)) != NULL) (yyval.exp)->val.num = (yyvsp[(1) - (1)].num); } break; case 13: /* Line 1269 of yacc.c. */ #line 204 "plural.y" { (yyval.exp) = (yyvsp[(2) - (3)].exp); } break; /* Line 1269 of yacc.c. */ #line 1572 "plural.c" default: break; } YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); *++yyvsp = yyval; /* Now `shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ yyn = yyr1[yyn]; yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) yystate = yytable[yystate]; else yystate = yydefgoto[yyn - YYNTOKENS]; goto yynewstate; /*------------------------------------. | yyerrlab -- here on detecting error | `------------------------------------*/ yyerrlab: /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; #if ! YYERROR_VERBOSE yyerror (YY_("syntax error")); #else { YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) { YYSIZE_T yyalloc = 2 * yysize; if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) yyalloc = YYSTACK_ALLOC_MAXIMUM; if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); yymsg = (char *) YYSTACK_ALLOC (yyalloc); if (yymsg) yymsg_alloc = yyalloc; else { yymsg = yymsgbuf; yymsg_alloc = sizeof yymsgbuf; } } if (0 < yysize && yysize <= yymsg_alloc) { (void) yysyntax_error (yymsg, yystate, yychar); yyerror (yymsg); } else { yyerror (YY_("syntax error")); if (yysize != 0) goto yyexhaustedlab; } } #endif } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers like GCC when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (/*CONSTCOND*/ 0) goto yyerrorlab; /* Do not reclaim the symbols of the rule which action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ for (;;) { yyn = yypact[yystate]; if (yyn != YYPACT_NINF) { yyn += YYTERROR; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", yystos[yystate], yyvsp); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } *++yyvsp = yylval; /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #ifndef yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif yyreturn: if (yychar != YYEMPTY) yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval); /* Do not reclaim the symbols of the rule which action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", yystos[*yyssp], yyvsp); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif #if YYERROR_VERBOSE if (yymsg != yymsgbuf) YYSTACK_FREE (yymsg); #endif /* Make sure YYID is used. */ return YYID (yyresult); } /* Line 1486 of yacc.c. */ #line 209 "plural.y" void internal_function FREE_EXPRESSION (struct expression *exp) { if (exp == NULL) return; /* Handle the recursive case. */ switch (exp->nargs) { case 3: FREE_EXPRESSION (exp->val.args[2]); /* FALLTHROUGH */ case 2: FREE_EXPRESSION (exp->val.args[1]); /* FALLTHROUGH */ case 1: FREE_EXPRESSION (exp->val.args[0]); /* FALLTHROUGH */ default: break; } free (exp); } static int yylex (YYSTYPE *lval, const char **pexp) { const char *exp = *pexp; int result; while (1) { if (exp[0] == '\0') { *pexp = exp; return YYEOF; } if (exp[0] != ' ' && exp[0] != '\t') break; ++exp; } result = *exp++; switch (result) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': { unsigned long int n = result - '0'; while (exp[0] >= '0' && exp[0] <= '9') { n *= 10; n += exp[0] - '0'; ++exp; } lval->num = n; result = NUMBER; } break; case '=': if (exp[0] == '=') { ++exp; lval->op = equal; result = EQUOP2; } else result = YYERRCODE; break; case '!': if (exp[0] == '=') { ++exp; lval->op = not_equal; result = EQUOP2; } break; case '&': case '|': if (exp[0] == result) ++exp; else result = YYERRCODE; break; case '<': if (exp[0] == '=') { ++exp; lval->op = less_or_equal; } else lval->op = less_than; result = CMPOP2; break; case '>': if (exp[0] == '=') { ++exp; lval->op = greater_or_equal; } else lval->op = greater_than; result = CMPOP2; break; case '*': lval->op = mult; result = MULOP2; break; case '/': lval->op = divide; result = MULOP2; break; case '%': lval->op = module; result = MULOP2; break; case '+': lval->op = plus; result = ADDOP2; break; case '-': lval->op = minus; result = ADDOP2; break; case 'n': case '?': case ':': case '(': case ')': /* Nothing, just return the character. */ break; case ';': case '\n': case '\0': /* Be safe and let the user call this function again. */ --exp; result = YYEOF; break; default: result = YYERRCODE; #if YYDEBUG != 0 --exp; #endif break; } *pexp = exp; return result; } static void yyerror (const char *str) { /* Do nothing. We don't print error messages here. */ } KCemu-0.5.1/intl/tsearch.c0000644001050700006200000004462011340261610014750 0ustar glaubitzfbedv/* Copyright (C) 1995, 1996, 1997, 2000, 2006 Free Software Foundation, Inc. Contributed by Bernd Schmidt , 1997. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@gnu.org. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Tree search for red/black trees. The algorithm for adding nodes is taken from one of the many "Algorithms" books by Robert Sedgewick, although the implementation differs. The algorithm for deleting nodes can probably be found in a book named "Introduction to Algorithms" by Cormen/Leiserson/Rivest. At least that's the book that my professor took most algorithms from during the "Data Structures" course... Totally public domain. */ /* Red/black trees are binary trees in which the edges are colored either red or black. They have the following properties: 1. The number of black edges on every path from the root to a leaf is constant. 2. No two red edges are adjacent. Therefore there is an upper bound on the length of every path, it's O(log n) where n is the number of nodes in the tree. No path can be longer than 1+2*P where P is the length of the shortest path in the tree. Useful for the implementation: 3. If one of the children of a node is NULL, then the other one is red (if it exists). In the implementation, not the edges are colored, but the nodes. The color interpreted as the color of the edge leading to this node. The color is meaningless for the root node, but we color the root node black for convenience. All added nodes are red initially. Adding to a red/black tree is rather easy. The right place is searched with a usual binary tree search. Additionally, whenever a node N is reached that has two red successors, the successors are colored black and the node itself colored red. This moves red edges up the tree where they pose less of a problem once we get to really insert the new node. Changing N's color to red may violate rule 2, however, so rotations may become necessary to restore the invariants. Adding a new red leaf may violate the same rule, so afterwards an additional check is run and the tree possibly rotated. Deleting is hairy. There are mainly two nodes involved: the node to be deleted (n1), and another node that is to be unchained from the tree (n2). If n1 has a successor (the node with a smallest key that is larger than n1), then the successor becomes n2 and its contents are copied into n1, otherwise n1 becomes n2. Unchaining a node may violate rule 1: if n2 is black, one subtree is missing one black edge afterwards. The algorithm must try to move this error upwards towards the root, so that the subtree that does not have enough black edges becomes the whole tree. Once that happens, the error has disappeared. It may not be necessary to go all the way up, since it is possible that rotations and recoloring can fix the error before that. Although the deletion algorithm must walk upwards through the tree, we do not store parent pointers in the nodes. Instead, delete allocates a small array of parent pointers and fills it while descending the tree. Since we know that the length of a path is O(log n), where n is the number of nodes, this is likely to use less memory. */ /* Tree rotations look like this: A C / \ / \ B C A G / \ / \ --> / \ D E F G B F / \ D E In this case, A has been rotated left. This preserves the ordering of the binary tree. */ #include /* Specification. */ #ifdef IN_LIBINTL # include "tsearch.h" #else # include #endif #include typedef int (*__compar_fn_t) (const void *, const void *); typedef void (*__action_fn_t) (const void *, VISIT, int); #ifndef weak_alias # define __tsearch tsearch # define __tfind tfind # define __tdelete tdelete # define __twalk twalk #endif #ifndef internal_function /* Inside GNU libc we mark some function in a special way. In other environments simply ignore the marking. */ # define internal_function #endif typedef struct node_t { /* Callers expect this to be the first element in the structure - do not move! */ const void *key; struct node_t *left; struct node_t *right; unsigned int red:1; } *node; typedef const struct node_t *const_node; #undef DEBUGGING #ifdef DEBUGGING /* Routines to check tree invariants. */ #include #define CHECK_TREE(a) check_tree(a) static void check_tree_recurse (node p, int d_sofar, int d_total) { if (p == NULL) { assert (d_sofar == d_total); return; } check_tree_recurse (p->left, d_sofar + (p->left && !p->left->red), d_total); check_tree_recurse (p->right, d_sofar + (p->right && !p->right->red), d_total); if (p->left) assert (!(p->left->red && p->red)); if (p->right) assert (!(p->right->red && p->red)); } static void check_tree (node root) { int cnt = 0; node p; if (root == NULL) return; root->red = 0; for(p = root->left; p; p = p->left) cnt += !p->red; check_tree_recurse (root, 0, cnt); } #else #define CHECK_TREE(a) #endif /* Possibly "split" a node with two red successors, and/or fix up two red edges in a row. ROOTP is a pointer to the lowest node we visited, PARENTP and GPARENTP pointers to its parent/grandparent. P_R and GP_R contain the comparison values that determined which way was taken in the tree to reach ROOTP. MODE is 1 if we need not do the split, but must check for two red edges between GPARENTP and ROOTP. */ static void maybe_split_for_insert (node *rootp, node *parentp, node *gparentp, int p_r, int gp_r, int mode) { node root = *rootp; node *rp, *lp; rp = &(*rootp)->right; lp = &(*rootp)->left; /* See if we have to split this node (both successors red). */ if (mode == 1 || ((*rp) != NULL && (*lp) != NULL && (*rp)->red && (*lp)->red)) { /* This node becomes red, its successors black. */ root->red = 1; if (*rp) (*rp)->red = 0; if (*lp) (*lp)->red = 0; /* If the parent of this node is also red, we have to do rotations. */ if (parentp != NULL && (*parentp)->red) { node gp = *gparentp; node p = *parentp; /* There are two main cases: 1. The edge types (left or right) of the two red edges differ. 2. Both red edges are of the same type. There exist two symmetries of each case, so there is a total of 4 cases. */ if ((p_r > 0) != (gp_r > 0)) { /* Put the child at the top of the tree, with its parent and grandparent as successors. */ p->red = 1; gp->red = 1; root->red = 0; if (p_r < 0) { /* Child is left of parent. */ p->left = *rp; *rp = p; gp->right = *lp; *lp = gp; } else { /* Child is right of parent. */ p->right = *lp; *lp = p; gp->left = *rp; *rp = gp; } *gparentp = root; } else { *gparentp = *parentp; /* Parent becomes the top of the tree, grandparent and child are its successors. */ p->red = 0; gp->red = 1; if (p_r < 0) { /* Left edges. */ gp->left = p->right; p->right = gp; } else { /* Right edges. */ gp->right = p->left; p->left = gp; } } } } } /* Find or insert datum into search tree. KEY is the key to be located, ROOTP is the address of tree root, COMPAR the ordering function. */ void * __tsearch (const void *key, void **vrootp, __compar_fn_t compar) { node q; node *parentp = NULL, *gparentp = NULL; node *rootp = (node *) vrootp; node *nextp; int r = 0, p_r = 0, gp_r = 0; /* No they might not, Mr Compiler. */ if (rootp == NULL) return NULL; /* This saves some additional tests below. */ if (*rootp != NULL) (*rootp)->red = 0; CHECK_TREE (*rootp); nextp = rootp; while (*nextp != NULL) { node root = *rootp; r = (*compar) (key, root->key); if (r == 0) return root; maybe_split_for_insert (rootp, parentp, gparentp, p_r, gp_r, 0); /* If that did any rotations, parentp and gparentp are now garbage. That doesn't matter, because the values they contain are never used again in that case. */ nextp = r < 0 ? &root->left : &root->right; if (*nextp == NULL) break; gparentp = parentp; parentp = rootp; rootp = nextp; gp_r = p_r; p_r = r; } q = (struct node_t *) malloc (sizeof (struct node_t)); if (q != NULL) { *nextp = q; /* link new node to old */ q->key = key; /* initialize new node */ q->red = 1; q->left = q->right = NULL; if (nextp != rootp) /* There may be two red edges in a row now, which we must avoid by rotating the tree. */ maybe_split_for_insert (nextp, rootp, parentp, r, p_r, 1); } return q; } #ifdef weak_alias weak_alias (__tsearch, tsearch) #endif /* Find datum in search tree. KEY is the key to be located, ROOTP is the address of tree root, COMPAR the ordering function. */ void * __tfind (key, vrootp, compar) const void *key; void *const *vrootp; __compar_fn_t compar; { node *rootp = (node *) vrootp; if (rootp == NULL) return NULL; CHECK_TREE (*rootp); while (*rootp != NULL) { node root = *rootp; int r; r = (*compar) (key, root->key); if (r == 0) return root; rootp = r < 0 ? &root->left : &root->right; } return NULL; } #ifdef weak_alias weak_alias (__tfind, tfind) #endif /* Delete node with given key. KEY is the key to be deleted, ROOTP is the address of the root of tree, COMPAR the comparison function. */ void * __tdelete (const void *key, void **vrootp, __compar_fn_t compar) { node p, q, r, retval; int cmp; node *rootp = (node *) vrootp; node root, unchained; /* Stack of nodes so we remember the parents without recursion. It's _very_ unlikely that there are paths longer than 40 nodes. The tree would need to have around 250.000 nodes. */ int stacksize = 100; int sp = 0; node *nodestack[100]; if (rootp == NULL) return NULL; p = *rootp; if (p == NULL) return NULL; CHECK_TREE (p); while ((cmp = (*compar) (key, (*rootp)->key)) != 0) { if (sp == stacksize) abort (); nodestack[sp++] = rootp; p = *rootp; rootp = ((cmp < 0) ? &(*rootp)->left : &(*rootp)->right); if (*rootp == NULL) return NULL; } /* This is bogus if the node to be deleted is the root... this routine really should return an integer with 0 for success, -1 for failure and errno = ESRCH or something. */ retval = p; /* We don't unchain the node we want to delete. Instead, we overwrite it with its successor and unchain the successor. If there is no successor, we really unchain the node to be deleted. */ root = *rootp; r = root->right; q = root->left; if (q == NULL || r == NULL) unchained = root; else { node *parent = rootp, *up = &root->right; for (;;) { if (sp == stacksize) abort (); nodestack[sp++] = parent; parent = up; if ((*up)->left == NULL) break; up = &(*up)->left; } unchained = *up; } /* We know that either the left or right successor of UNCHAINED is NULL. R becomes the other one, it is chained into the parent of UNCHAINED. */ r = unchained->left; if (r == NULL) r = unchained->right; if (sp == 0) *rootp = r; else { q = *nodestack[sp-1]; if (unchained == q->right) q->right = r; else q->left = r; } if (unchained != root) root->key = unchained->key; if (!unchained->red) { /* Now we lost a black edge, which means that the number of black edges on every path is no longer constant. We must balance the tree. */ /* NODESTACK now contains all parents of R. R is likely to be NULL in the first iteration. */ /* NULL nodes are considered black throughout - this is necessary for correctness. */ while (sp > 0 && (r == NULL || !r->red)) { node *pp = nodestack[sp - 1]; p = *pp; /* Two symmetric cases. */ if (r == p->left) { /* Q is R's brother, P is R's parent. The subtree with root R has one black edge less than the subtree with root Q. */ q = p->right; if (q->red) { /* If Q is red, we know that P is black. We rotate P left so that Q becomes the top node in the tree, with P below it. P is colored red, Q is colored black. This action does not change the black edge count for any leaf in the tree, but we will be able to recognize one of the following situations, which all require that Q is black. */ q->red = 0; p->red = 1; /* Left rotate p. */ p->right = q->left; q->left = p; *pp = q; /* Make sure pp is right if the case below tries to use it. */ nodestack[sp++] = pp = &q->left; q = p->right; } /* We know that Q can't be NULL here. We also know that Q is black. */ if ((q->left == NULL || !q->left->red) && (q->right == NULL || !q->right->red)) { /* Q has two black successors. We can simply color Q red. The whole subtree with root P is now missing one black edge. Note that this action can temporarily make the tree invalid (if P is red). But we will exit the loop in that case and set P black, which both makes the tree valid and also makes the black edge count come out right. If P is black, we are at least one step closer to the root and we'll try again the next iteration. */ q->red = 1; r = p; } else { /* Q is black, one of Q's successors is red. We can repair the tree with one operation and will exit the loop afterwards. */ if (q->right == NULL || !q->right->red) { /* The left one is red. We perform the same action as in maybe_split_for_insert where two red edges are adjacent but point in different directions: Q's left successor (let's call it Q2) becomes the top of the subtree we are looking at, its parent (Q) and grandparent (P) become its successors. The former successors of Q2 are placed below P and Q. P becomes black, and Q2 gets the color that P had. This changes the black edge count only for node R and its successors. */ node q2 = q->left; q2->red = p->red; p->right = q2->left; q->left = q2->right; q2->right = q; q2->left = p; *pp = q2; p->red = 0; } else { /* It's the right one. Rotate P left. P becomes black, and Q gets the color that P had. Q's right successor also becomes black. This changes the black edge count only for node R and its successors. */ q->red = p->red; p->red = 0; q->right->red = 0; /* left rotate p */ p->right = q->left; q->left = p; *pp = q; } /* We're done. */ sp = 1; r = NULL; } } else { /* Comments: see above. */ q = p->left; if (q->red) { q->red = 0; p->red = 1; p->left = q->right; q->right = p; *pp = q; nodestack[sp++] = pp = &q->right; q = p->left; } if ((q->right == NULL || !q->right->red) && (q->left == NULL || !q->left->red)) { q->red = 1; r = p; } else { if (q->left == NULL || !q->left->red) { node q2 = q->right; q2->red = p->red; p->left = q2->right; q->right = q2->left; q2->left = q; q2->right = p; *pp = q2; p->red = 0; } else { q->red = p->red; p->red = 0; q->left->red = 0; p->left = q->right; q->right = p; *pp = q; } sp = 1; r = NULL; } } --sp; } if (r != NULL) r->red = 0; } free (unchained); return retval; } #ifdef weak_alias weak_alias (__tdelete, tdelete) #endif /* Walk the nodes of a tree. ROOT is the root of the tree to be walked, ACTION the function to be called at each node. LEVEL is the level of ROOT in the whole tree. */ static void internal_function trecurse (const void *vroot, __action_fn_t action, int level) { const_node root = (const_node) vroot; if (root->left == NULL && root->right == NULL) (*action) (root, leaf, level); else { (*action) (root, preorder, level); if (root->left != NULL) trecurse (root->left, action, level + 1); (*action) (root, postorder, level); if (root->right != NULL) trecurse (root->right, action, level + 1); (*action) (root, endorder, level); } } /* Walk the nodes of a tree. ROOT is the root of the tree to be walked, ACTION the function to be called at each node. */ void __twalk (const void *vroot, __action_fn_t action) { const_node root = (const_node) vroot; CHECK_TREE (root); if (root != NULL && action != NULL) trecurse (root, action, 0); } #ifdef weak_alias weak_alias (__twalk, twalk) #endif #ifdef _LIBC /* The standardized functions miss an important functionality: the tree cannot be removed easily. We provide a function to do this. */ static void internal_function tdestroy_recurse (node root, __free_fn_t freefct) { if (root->left != NULL) tdestroy_recurse (root->left, freefct); if (root->right != NULL) tdestroy_recurse (root->right, freefct); (*freefct) ((void *) root->key); /* Free the node itself. */ free (root); } void __tdestroy (void *vroot, __free_fn_t freefct) { node root = (node) vroot; CHECK_TREE (root); if (root != NULL) tdestroy_recurse (root, freefct); } weak_alias (__tdestroy, tdestroy) #endif /* _LIBC */ KCemu-0.5.1/intl/ref-del.sin0000644001050700006200000000203011321666453015206 0ustar glaubitzfbedv# Remove this package from a list of references stored in a text file. # # Copyright (C) 2000 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published # by the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. # # Written by Bruno Haible . # /^# Packages using this file: / { s/# Packages using this file:// s/ @PACKAGE@ / / s/^/# Packages using this file:/ } KCemu-0.5.1/intl/loadmsgcat.c0000644001050700006200000010270011340261610015427 0ustar glaubitzfbedv/* Load needed message catalogs. Copyright (C) 1995-1999, 2000-2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Tell glibc's to provide a prototype for mempcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #include #ifdef __GNUC__ # undef alloca # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # ifdef _MSC_VER # include # define alloca _alloca # else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif # endif #endif #include #include #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #ifdef _LIBC # include # include #endif #if (defined HAVE_MMAP && defined HAVE_MUNMAP && !defined DISALLOW_MMAP) \ || (defined _LIBC && defined _POSIX_MAPPED_FILES) # include # undef HAVE_MMAP # define HAVE_MMAP 1 #else # undef HAVE_MMAP #endif #if defined HAVE_STDINT_H_WITH_UINTMAX || defined _LIBC # include #endif #if defined HAVE_INTTYPES_H || defined _LIBC # include #endif #include "gmo.h" #include "gettextP.h" #include "hash-string.h" #include "plural-exp.h" #ifdef _LIBC # include "../locale/localeinfo.h" # include #endif /* Handle multi-threaded applications. */ #ifdef _LIBC # include #else # include "lock.h" #endif /* Provide fallback values for macros that ought to be defined in . Note that our fallback values need not be literal strings, because we don't use them with preprocessor string concatenation. */ #if !defined PRId8 || PRI_MACROS_BROKEN # undef PRId8 # define PRId8 "d" #endif #if !defined PRIi8 || PRI_MACROS_BROKEN # undef PRIi8 # define PRIi8 "i" #endif #if !defined PRIo8 || PRI_MACROS_BROKEN # undef PRIo8 # define PRIo8 "o" #endif #if !defined PRIu8 || PRI_MACROS_BROKEN # undef PRIu8 # define PRIu8 "u" #endif #if !defined PRIx8 || PRI_MACROS_BROKEN # undef PRIx8 # define PRIx8 "x" #endif #if !defined PRIX8 || PRI_MACROS_BROKEN # undef PRIX8 # define PRIX8 "X" #endif #if !defined PRId16 || PRI_MACROS_BROKEN # undef PRId16 # define PRId16 "d" #endif #if !defined PRIi16 || PRI_MACROS_BROKEN # undef PRIi16 # define PRIi16 "i" #endif #if !defined PRIo16 || PRI_MACROS_BROKEN # undef PRIo16 # define PRIo16 "o" #endif #if !defined PRIu16 || PRI_MACROS_BROKEN # undef PRIu16 # define PRIu16 "u" #endif #if !defined PRIx16 || PRI_MACROS_BROKEN # undef PRIx16 # define PRIx16 "x" #endif #if !defined PRIX16 || PRI_MACROS_BROKEN # undef PRIX16 # define PRIX16 "X" #endif #if !defined PRId32 || PRI_MACROS_BROKEN # undef PRId32 # define PRId32 "d" #endif #if !defined PRIi32 || PRI_MACROS_BROKEN # undef PRIi32 # define PRIi32 "i" #endif #if !defined PRIo32 || PRI_MACROS_BROKEN # undef PRIo32 # define PRIo32 "o" #endif #if !defined PRIu32 || PRI_MACROS_BROKEN # undef PRIu32 # define PRIu32 "u" #endif #if !defined PRIx32 || PRI_MACROS_BROKEN # undef PRIx32 # define PRIx32 "x" #endif #if !defined PRIX32 || PRI_MACROS_BROKEN # undef PRIX32 # define PRIX32 "X" #endif #if !defined PRId64 || PRI_MACROS_BROKEN # undef PRId64 # define PRId64 (sizeof (long) == 8 ? "ld" : "lld") #endif #if !defined PRIi64 || PRI_MACROS_BROKEN # undef PRIi64 # define PRIi64 (sizeof (long) == 8 ? "li" : "lli") #endif #if !defined PRIo64 || PRI_MACROS_BROKEN # undef PRIo64 # define PRIo64 (sizeof (long) == 8 ? "lo" : "llo") #endif #if !defined PRIu64 || PRI_MACROS_BROKEN # undef PRIu64 # define PRIu64 (sizeof (long) == 8 ? "lu" : "llu") #endif #if !defined PRIx64 || PRI_MACROS_BROKEN # undef PRIx64 # define PRIx64 (sizeof (long) == 8 ? "lx" : "llx") #endif #if !defined PRIX64 || PRI_MACROS_BROKEN # undef PRIX64 # define PRIX64 (sizeof (long) == 8 ? "lX" : "llX") #endif #if !defined PRIdLEAST8 || PRI_MACROS_BROKEN # undef PRIdLEAST8 # define PRIdLEAST8 "d" #endif #if !defined PRIiLEAST8 || PRI_MACROS_BROKEN # undef PRIiLEAST8 # define PRIiLEAST8 "i" #endif #if !defined PRIoLEAST8 || PRI_MACROS_BROKEN # undef PRIoLEAST8 # define PRIoLEAST8 "o" #endif #if !defined PRIuLEAST8 || PRI_MACROS_BROKEN # undef PRIuLEAST8 # define PRIuLEAST8 "u" #endif #if !defined PRIxLEAST8 || PRI_MACROS_BROKEN # undef PRIxLEAST8 # define PRIxLEAST8 "x" #endif #if !defined PRIXLEAST8 || PRI_MACROS_BROKEN # undef PRIXLEAST8 # define PRIXLEAST8 "X" #endif #if !defined PRIdLEAST16 || PRI_MACROS_BROKEN # undef PRIdLEAST16 # define PRIdLEAST16 "d" #endif #if !defined PRIiLEAST16 || PRI_MACROS_BROKEN # undef PRIiLEAST16 # define PRIiLEAST16 "i" #endif #if !defined PRIoLEAST16 || PRI_MACROS_BROKEN # undef PRIoLEAST16 # define PRIoLEAST16 "o" #endif #if !defined PRIuLEAST16 || PRI_MACROS_BROKEN # undef PRIuLEAST16 # define PRIuLEAST16 "u" #endif #if !defined PRIxLEAST16 || PRI_MACROS_BROKEN # undef PRIxLEAST16 # define PRIxLEAST16 "x" #endif #if !defined PRIXLEAST16 || PRI_MACROS_BROKEN # undef PRIXLEAST16 # define PRIXLEAST16 "X" #endif #if !defined PRIdLEAST32 || PRI_MACROS_BROKEN # undef PRIdLEAST32 # define PRIdLEAST32 "d" #endif #if !defined PRIiLEAST32 || PRI_MACROS_BROKEN # undef PRIiLEAST32 # define PRIiLEAST32 "i" #endif #if !defined PRIoLEAST32 || PRI_MACROS_BROKEN # undef PRIoLEAST32 # define PRIoLEAST32 "o" #endif #if !defined PRIuLEAST32 || PRI_MACROS_BROKEN # undef PRIuLEAST32 # define PRIuLEAST32 "u" #endif #if !defined PRIxLEAST32 || PRI_MACROS_BROKEN # undef PRIxLEAST32 # define PRIxLEAST32 "x" #endif #if !defined PRIXLEAST32 || PRI_MACROS_BROKEN # undef PRIXLEAST32 # define PRIXLEAST32 "X" #endif #if !defined PRIdLEAST64 || PRI_MACROS_BROKEN # undef PRIdLEAST64 # define PRIdLEAST64 PRId64 #endif #if !defined PRIiLEAST64 || PRI_MACROS_BROKEN # undef PRIiLEAST64 # define PRIiLEAST64 PRIi64 #endif #if !defined PRIoLEAST64 || PRI_MACROS_BROKEN # undef PRIoLEAST64 # define PRIoLEAST64 PRIo64 #endif #if !defined PRIuLEAST64 || PRI_MACROS_BROKEN # undef PRIuLEAST64 # define PRIuLEAST64 PRIu64 #endif #if !defined PRIxLEAST64 || PRI_MACROS_BROKEN # undef PRIxLEAST64 # define PRIxLEAST64 PRIx64 #endif #if !defined PRIXLEAST64 || PRI_MACROS_BROKEN # undef PRIXLEAST64 # define PRIXLEAST64 PRIX64 #endif #if !defined PRIdFAST8 || PRI_MACROS_BROKEN # undef PRIdFAST8 # define PRIdFAST8 "d" #endif #if !defined PRIiFAST8 || PRI_MACROS_BROKEN # undef PRIiFAST8 # define PRIiFAST8 "i" #endif #if !defined PRIoFAST8 || PRI_MACROS_BROKEN # undef PRIoFAST8 # define PRIoFAST8 "o" #endif #if !defined PRIuFAST8 || PRI_MACROS_BROKEN # undef PRIuFAST8 # define PRIuFAST8 "u" #endif #if !defined PRIxFAST8 || PRI_MACROS_BROKEN # undef PRIxFAST8 # define PRIxFAST8 "x" #endif #if !defined PRIXFAST8 || PRI_MACROS_BROKEN # undef PRIXFAST8 # define PRIXFAST8 "X" #endif #if !defined PRIdFAST16 || PRI_MACROS_BROKEN # undef PRIdFAST16 # define PRIdFAST16 "d" #endif #if !defined PRIiFAST16 || PRI_MACROS_BROKEN # undef PRIiFAST16 # define PRIiFAST16 "i" #endif #if !defined PRIoFAST16 || PRI_MACROS_BROKEN # undef PRIoFAST16 # define PRIoFAST16 "o" #endif #if !defined PRIuFAST16 || PRI_MACROS_BROKEN # undef PRIuFAST16 # define PRIuFAST16 "u" #endif #if !defined PRIxFAST16 || PRI_MACROS_BROKEN # undef PRIxFAST16 # define PRIxFAST16 "x" #endif #if !defined PRIXFAST16 || PRI_MACROS_BROKEN # undef PRIXFAST16 # define PRIXFAST16 "X" #endif #if !defined PRIdFAST32 || PRI_MACROS_BROKEN # undef PRIdFAST32 # define PRIdFAST32 "d" #endif #if !defined PRIiFAST32 || PRI_MACROS_BROKEN # undef PRIiFAST32 # define PRIiFAST32 "i" #endif #if !defined PRIoFAST32 || PRI_MACROS_BROKEN # undef PRIoFAST32 # define PRIoFAST32 "o" #endif #if !defined PRIuFAST32 || PRI_MACROS_BROKEN # undef PRIuFAST32 # define PRIuFAST32 "u" #endif #if !defined PRIxFAST32 || PRI_MACROS_BROKEN # undef PRIxFAST32 # define PRIxFAST32 "x" #endif #if !defined PRIXFAST32 || PRI_MACROS_BROKEN # undef PRIXFAST32 # define PRIXFAST32 "X" #endif #if !defined PRIdFAST64 || PRI_MACROS_BROKEN # undef PRIdFAST64 # define PRIdFAST64 PRId64 #endif #if !defined PRIiFAST64 || PRI_MACROS_BROKEN # undef PRIiFAST64 # define PRIiFAST64 PRIi64 #endif #if !defined PRIoFAST64 || PRI_MACROS_BROKEN # undef PRIoFAST64 # define PRIoFAST64 PRIo64 #endif #if !defined PRIuFAST64 || PRI_MACROS_BROKEN # undef PRIuFAST64 # define PRIuFAST64 PRIu64 #endif #if !defined PRIxFAST64 || PRI_MACROS_BROKEN # undef PRIxFAST64 # define PRIxFAST64 PRIx64 #endif #if !defined PRIXFAST64 || PRI_MACROS_BROKEN # undef PRIXFAST64 # define PRIXFAST64 PRIX64 #endif #if !defined PRIdMAX || PRI_MACROS_BROKEN # undef PRIdMAX # define PRIdMAX (sizeof (uintmax_t) == sizeof (long) ? "ld" : "lld") #endif #if !defined PRIiMAX || PRI_MACROS_BROKEN # undef PRIiMAX # define PRIiMAX (sizeof (uintmax_t) == sizeof (long) ? "li" : "lli") #endif #if !defined PRIoMAX || PRI_MACROS_BROKEN # undef PRIoMAX # define PRIoMAX (sizeof (uintmax_t) == sizeof (long) ? "lo" : "llo") #endif #if !defined PRIuMAX || PRI_MACROS_BROKEN # undef PRIuMAX # define PRIuMAX (sizeof (uintmax_t) == sizeof (long) ? "lu" : "llu") #endif #if !defined PRIxMAX || PRI_MACROS_BROKEN # undef PRIxMAX # define PRIxMAX (sizeof (uintmax_t) == sizeof (long) ? "lx" : "llx") #endif #if !defined PRIXMAX || PRI_MACROS_BROKEN # undef PRIXMAX # define PRIXMAX (sizeof (uintmax_t) == sizeof (long) ? "lX" : "llX") #endif #if !defined PRIdPTR || PRI_MACROS_BROKEN # undef PRIdPTR # define PRIdPTR \ (sizeof (void *) == sizeof (long) ? "ld" : \ sizeof (void *) == sizeof (int) ? "d" : \ "lld") #endif #if !defined PRIiPTR || PRI_MACROS_BROKEN # undef PRIiPTR # define PRIiPTR \ (sizeof (void *) == sizeof (long) ? "li" : \ sizeof (void *) == sizeof (int) ? "i" : \ "lli") #endif #if !defined PRIoPTR || PRI_MACROS_BROKEN # undef PRIoPTR # define PRIoPTR \ (sizeof (void *) == sizeof (long) ? "lo" : \ sizeof (void *) == sizeof (int) ? "o" : \ "llo") #endif #if !defined PRIuPTR || PRI_MACROS_BROKEN # undef PRIuPTR # define PRIuPTR \ (sizeof (void *) == sizeof (long) ? "lu" : \ sizeof (void *) == sizeof (int) ? "u" : \ "llu") #endif #if !defined PRIxPTR || PRI_MACROS_BROKEN # undef PRIxPTR # define PRIxPTR \ (sizeof (void *) == sizeof (long) ? "lx" : \ sizeof (void *) == sizeof (int) ? "x" : \ "llx") #endif #if !defined PRIXPTR || PRI_MACROS_BROKEN # undef PRIXPTR # define PRIXPTR \ (sizeof (void *) == sizeof (long) ? "lX" : \ sizeof (void *) == sizeof (int) ? "X" : \ "llX") #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ISO C functions. This is required by the standard because some ISO C functions will require linking with this object file and the name space must not be polluted. */ # define open(name, flags) open_not_cancel_2 (name, flags) # define close(fd) close_not_cancel_no_status (fd) # define read(fd, buf, n) read_not_cancel (fd, buf, n) # define mmap(addr, len, prot, flags, fd, offset) \ __mmap (addr, len, prot, flags, fd, offset) # define munmap(addr, len) __munmap (addr, len) #endif /* For those losing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA # define freea(p) /* nothing */ #else # define alloca(n) malloc (n) # define freea(p) free (p) #endif /* For systems that distinguish between text and binary I/O. O_BINARY is usually declared in . */ #if !defined O_BINARY && defined _O_BINARY /* For MSC-compatible compilers. */ # define O_BINARY _O_BINARY # define O_TEXT _O_TEXT #endif #ifdef __BEOS__ /* BeOS 5 has O_BINARY and O_TEXT, but they have no effect. */ # undef O_BINARY # undef O_TEXT #endif /* On reasonable systems, binary I/O is the default. */ #ifndef O_BINARY # define O_BINARY 0 #endif /* We need a sign, whether a new catalog was loaded, which can be associated with all translations. This is important if the translations are cached by one of GCC's features. */ int _nl_msg_cat_cntr; /* Expand a system dependent string segment. Return NULL if unsupported. */ static const char * get_sysdep_segment_value (const char *name) { /* Test for an ISO C 99 section 7.8.1 format string directive. Syntax: P R I { d | i | o | u | x | X } { { | LEAST | FAST } { 8 | 16 | 32 | 64 } | MAX | PTR } */ /* We don't use a table of 14 times 6 'const char *' strings here, because data relocations cost startup time. */ if (name[0] == 'P' && name[1] == 'R' && name[2] == 'I') { if (name[3] == 'd' || name[3] == 'i' || name[3] == 'o' || name[3] == 'u' || name[3] == 'x' || name[3] == 'X') { if (name[4] == '8' && name[5] == '\0') { if (name[3] == 'd') return PRId8; if (name[3] == 'i') return PRIi8; if (name[3] == 'o') return PRIo8; if (name[3] == 'u') return PRIu8; if (name[3] == 'x') return PRIx8; if (name[3] == 'X') return PRIX8; abort (); } if (name[4] == '1' && name[5] == '6' && name[6] == '\0') { if (name[3] == 'd') return PRId16; if (name[3] == 'i') return PRIi16; if (name[3] == 'o') return PRIo16; if (name[3] == 'u') return PRIu16; if (name[3] == 'x') return PRIx16; if (name[3] == 'X') return PRIX16; abort (); } if (name[4] == '3' && name[5] == '2' && name[6] == '\0') { if (name[3] == 'd') return PRId32; if (name[3] == 'i') return PRIi32; if (name[3] == 'o') return PRIo32; if (name[3] == 'u') return PRIu32; if (name[3] == 'x') return PRIx32; if (name[3] == 'X') return PRIX32; abort (); } if (name[4] == '6' && name[5] == '4' && name[6] == '\0') { if (name[3] == 'd') return PRId64; if (name[3] == 'i') return PRIi64; if (name[3] == 'o') return PRIo64; if (name[3] == 'u') return PRIu64; if (name[3] == 'x') return PRIx64; if (name[3] == 'X') return PRIX64; abort (); } if (name[4] == 'L' && name[5] == 'E' && name[6] == 'A' && name[7] == 'S' && name[8] == 'T') { if (name[9] == '8' && name[10] == '\0') { if (name[3] == 'd') return PRIdLEAST8; if (name[3] == 'i') return PRIiLEAST8; if (name[3] == 'o') return PRIoLEAST8; if (name[3] == 'u') return PRIuLEAST8; if (name[3] == 'x') return PRIxLEAST8; if (name[3] == 'X') return PRIXLEAST8; abort (); } if (name[9] == '1' && name[10] == '6' && name[11] == '\0') { if (name[3] == 'd') return PRIdLEAST16; if (name[3] == 'i') return PRIiLEAST16; if (name[3] == 'o') return PRIoLEAST16; if (name[3] == 'u') return PRIuLEAST16; if (name[3] == 'x') return PRIxLEAST16; if (name[3] == 'X') return PRIXLEAST16; abort (); } if (name[9] == '3' && name[10] == '2' && name[11] == '\0') { if (name[3] == 'd') return PRIdLEAST32; if (name[3] == 'i') return PRIiLEAST32; if (name[3] == 'o') return PRIoLEAST32; if (name[3] == 'u') return PRIuLEAST32; if (name[3] == 'x') return PRIxLEAST32; if (name[3] == 'X') return PRIXLEAST32; abort (); } if (name[9] == '6' && name[10] == '4' && name[11] == '\0') { if (name[3] == 'd') return PRIdLEAST64; if (name[3] == 'i') return PRIiLEAST64; if (name[3] == 'o') return PRIoLEAST64; if (name[3] == 'u') return PRIuLEAST64; if (name[3] == 'x') return PRIxLEAST64; if (name[3] == 'X') return PRIXLEAST64; abort (); } } if (name[4] == 'F' && name[5] == 'A' && name[6] == 'S' && name[7] == 'T') { if (name[8] == '8' && name[9] == '\0') { if (name[3] == 'd') return PRIdFAST8; if (name[3] == 'i') return PRIiFAST8; if (name[3] == 'o') return PRIoFAST8; if (name[3] == 'u') return PRIuFAST8; if (name[3] == 'x') return PRIxFAST8; if (name[3] == 'X') return PRIXFAST8; abort (); } if (name[8] == '1' && name[9] == '6' && name[10] == '\0') { if (name[3] == 'd') return PRIdFAST16; if (name[3] == 'i') return PRIiFAST16; if (name[3] == 'o') return PRIoFAST16; if (name[3] == 'u') return PRIuFAST16; if (name[3] == 'x') return PRIxFAST16; if (name[3] == 'X') return PRIXFAST16; abort (); } if (name[8] == '3' && name[9] == '2' && name[10] == '\0') { if (name[3] == 'd') return PRIdFAST32; if (name[3] == 'i') return PRIiFAST32; if (name[3] == 'o') return PRIoFAST32; if (name[3] == 'u') return PRIuFAST32; if (name[3] == 'x') return PRIxFAST32; if (name[3] == 'X') return PRIXFAST32; abort (); } if (name[8] == '6' && name[9] == '4' && name[10] == '\0') { if (name[3] == 'd') return PRIdFAST64; if (name[3] == 'i') return PRIiFAST64; if (name[3] == 'o') return PRIoFAST64; if (name[3] == 'u') return PRIuFAST64; if (name[3] == 'x') return PRIxFAST64; if (name[3] == 'X') return PRIXFAST64; abort (); } } if (name[4] == 'M' && name[5] == 'A' && name[6] == 'X' && name[7] == '\0') { if (name[3] == 'd') return PRIdMAX; if (name[3] == 'i') return PRIiMAX; if (name[3] == 'o') return PRIoMAX; if (name[3] == 'u') return PRIuMAX; if (name[3] == 'x') return PRIxMAX; if (name[3] == 'X') return PRIXMAX; abort (); } if (name[4] == 'P' && name[5] == 'T' && name[6] == 'R' && name[7] == '\0') { if (name[3] == 'd') return PRIdPTR; if (name[3] == 'i') return PRIiPTR; if (name[3] == 'o') return PRIoPTR; if (name[3] == 'u') return PRIuPTR; if (name[3] == 'x') return PRIxPTR; if (name[3] == 'X') return PRIXPTR; abort (); } } } /* Test for a glibc specific printf() format directive flag. */ if (name[0] == 'I' && name[1] == '\0') { #if defined _LIBC || __GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) /* The 'I' flag, in numeric format directives, replaces ASCII digits with the 'outdigits' defined in the LC_CTYPE locale facet. This is used for Farsi (Persian) and maybe Arabic. */ return "I"; #else return ""; #endif } /* Other system dependent strings are not valid. */ return NULL; } /* Load the message catalogs specified by FILENAME. If it is no valid message catalog do nothing. */ void internal_function _nl_load_domain (struct loaded_l10nfile *domain_file, struct binding *domainbinding) { __libc_lock_define_initialized_recursive (static, lock) int fd = -1; size_t size; #ifdef _LIBC struct stat64 st; #else struct stat st; #endif struct mo_file_header *data = (struct mo_file_header *) -1; int use_mmap = 0; struct loaded_domain *domain; int revision; const char *nullentry; size_t nullentrylen; __libc_lock_lock_recursive (lock); if (domain_file->decided != 0) { /* There are two possibilities: + this is the same thread calling again during this initialization via _nl_find_msg. We have initialized everything this call needs. + this is another thread which tried to initialize this object. Not necessary anymore since if the lock is available this is finished. */ goto done; } domain_file->decided = -1; domain_file->data = NULL; /* Note that it would be useless to store domainbinding in domain_file because domainbinding might be == NULL now but != NULL later (after a call to bind_textdomain_codeset). */ /* If the record does not represent a valid locale the FILENAME might be NULL. This can happen when according to the given specification the locale file name is different for XPG and CEN syntax. */ if (domain_file->filename == NULL) goto out; /* Try to open the addressed file. */ fd = open (domain_file->filename, O_RDONLY | O_BINARY); if (fd == -1) goto out; /* We must know about the size of the file. */ if ( #ifdef _LIBC __builtin_expect (fstat64 (fd, &st) != 0, 0) #else __builtin_expect (fstat (fd, &st) != 0, 0) #endif || __builtin_expect ((size = (size_t) st.st_size) != st.st_size, 0) || __builtin_expect (size < sizeof (struct mo_file_header), 0)) /* Something went wrong. */ goto out; #ifdef HAVE_MMAP /* Now we are ready to load the file. If mmap() is available we try this first. If not available or it failed we try to load it. */ data = (struct mo_file_header *) mmap (NULL, size, PROT_READ, MAP_PRIVATE, fd, 0); if (__builtin_expect (data != (struct mo_file_header *) -1, 1)) { /* mmap() call was successful. */ close (fd); fd = -1; use_mmap = 1; } #endif /* If the data is not yet available (i.e. mmap'ed) we try to load it manually. */ if (data == (struct mo_file_header *) -1) { size_t to_read; char *read_ptr; data = (struct mo_file_header *) malloc (size); if (data == NULL) goto out; to_read = size; read_ptr = (char *) data; do { long int nb = (long int) read (fd, read_ptr, to_read); if (nb <= 0) { #ifdef EINTR if (nb == -1 && errno == EINTR) continue; #endif goto out; } read_ptr += nb; to_read -= nb; } while (to_read > 0); close (fd); fd = -1; } /* Using the magic number we can test whether it really is a message catalog file. */ if (__builtin_expect (data->magic != _MAGIC && data->magic != _MAGIC_SWAPPED, 0)) { /* The magic number is wrong: not a message catalog file. */ #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, size); else #endif free (data); goto out; } domain = (struct loaded_domain *) malloc (sizeof (struct loaded_domain)); if (domain == NULL) goto out; domain_file->data = domain; domain->data = (char *) data; domain->use_mmap = use_mmap; domain->mmap_size = size; domain->must_swap = data->magic != _MAGIC; domain->malloced = NULL; /* Fill in the information about the available tables. */ revision = W (domain->must_swap, data->revision); /* We support only the major revisions 0 and 1. */ switch (revision >> 16) { case 0: case 1: domain->nstrings = W (domain->must_swap, data->nstrings); domain->orig_tab = (const struct string_desc *) ((char *) data + W (domain->must_swap, data->orig_tab_offset)); domain->trans_tab = (const struct string_desc *) ((char *) data + W (domain->must_swap, data->trans_tab_offset)); domain->hash_size = W (domain->must_swap, data->hash_tab_size); domain->hash_tab = (domain->hash_size > 2 ? (const nls_uint32 *) ((char *) data + W (domain->must_swap, data->hash_tab_offset)) : NULL); domain->must_swap_hash_tab = domain->must_swap; /* Now dispatch on the minor revision. */ switch (revision & 0xffff) { case 0: domain->n_sysdep_strings = 0; domain->orig_sysdep_tab = NULL; domain->trans_sysdep_tab = NULL; break; case 1: default: { nls_uint32 n_sysdep_strings; if (domain->hash_tab == NULL) /* This is invalid. These minor revisions need a hash table. */ goto invalid; n_sysdep_strings = W (domain->must_swap, data->n_sysdep_strings); if (n_sysdep_strings > 0) { nls_uint32 n_sysdep_segments; const struct sysdep_segment *sysdep_segments; const char **sysdep_segment_values; const nls_uint32 *orig_sysdep_tab; const nls_uint32 *trans_sysdep_tab; nls_uint32 n_inmem_sysdep_strings; size_t memneed; char *mem; struct sysdep_string_desc *inmem_orig_sysdep_tab; struct sysdep_string_desc *inmem_trans_sysdep_tab; nls_uint32 *inmem_hash_tab; unsigned int i, j; /* Get the values of the system dependent segments. */ n_sysdep_segments = W (domain->must_swap, data->n_sysdep_segments); sysdep_segments = (const struct sysdep_segment *) ((char *) data + W (domain->must_swap, data->sysdep_segments_offset)); sysdep_segment_values = (const char **) alloca (n_sysdep_segments * sizeof (const char *)); for (i = 0; i < n_sysdep_segments; i++) { const char *name = (char *) data + W (domain->must_swap, sysdep_segments[i].offset); nls_uint32 namelen = W (domain->must_swap, sysdep_segments[i].length); if (!(namelen > 0 && name[namelen - 1] == '\0')) { freea (sysdep_segment_values); goto invalid; } sysdep_segment_values[i] = get_sysdep_segment_value (name); } orig_sysdep_tab = (const nls_uint32 *) ((char *) data + W (domain->must_swap, data->orig_sysdep_tab_offset)); trans_sysdep_tab = (const nls_uint32 *) ((char *) data + W (domain->must_swap, data->trans_sysdep_tab_offset)); /* Compute the amount of additional memory needed for the system dependent strings and the augmented hash table. At the same time, also drop string pairs which refer to an undefined system dependent segment. */ n_inmem_sysdep_strings = 0; memneed = domain->hash_size * sizeof (nls_uint32); for (i = 0; i < n_sysdep_strings; i++) { int valid = 1; size_t needs[2]; for (j = 0; j < 2; j++) { const struct sysdep_string *sysdep_string = (const struct sysdep_string *) ((char *) data + W (domain->must_swap, j == 0 ? orig_sysdep_tab[i] : trans_sysdep_tab[i])); size_t need = 0; const struct segment_pair *p = sysdep_string->segments; if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END) for (p = sysdep_string->segments;; p++) { nls_uint32 sysdepref; need += W (domain->must_swap, p->segsize); sysdepref = W (domain->must_swap, p->sysdepref); if (sysdepref == SEGMENTS_END) break; if (sysdepref >= n_sysdep_segments) { /* Invalid. */ freea (sysdep_segment_values); goto invalid; } if (sysdep_segment_values[sysdepref] == NULL) { /* This particular string pair is invalid. */ valid = 0; break; } need += strlen (sysdep_segment_values[sysdepref]); } needs[j] = need; if (!valid) break; } if (valid) { n_inmem_sysdep_strings++; memneed += needs[0] + needs[1]; } } memneed += 2 * n_inmem_sysdep_strings * sizeof (struct sysdep_string_desc); if (n_inmem_sysdep_strings > 0) { unsigned int k; /* Allocate additional memory. */ mem = (char *) malloc (memneed); if (mem == NULL) goto invalid; domain->malloced = mem; inmem_orig_sysdep_tab = (struct sysdep_string_desc *) mem; mem += n_inmem_sysdep_strings * sizeof (struct sysdep_string_desc); inmem_trans_sysdep_tab = (struct sysdep_string_desc *) mem; mem += n_inmem_sysdep_strings * sizeof (struct sysdep_string_desc); inmem_hash_tab = (nls_uint32 *) mem; mem += domain->hash_size * sizeof (nls_uint32); /* Compute the system dependent strings. */ k = 0; for (i = 0; i < n_sysdep_strings; i++) { int valid = 1; for (j = 0; j < 2; j++) { const struct sysdep_string *sysdep_string = (const struct sysdep_string *) ((char *) data + W (domain->must_swap, j == 0 ? orig_sysdep_tab[i] : trans_sysdep_tab[i])); const struct segment_pair *p = sysdep_string->segments; if (W (domain->must_swap, p->sysdepref) != SEGMENTS_END) for (p = sysdep_string->segments;; p++) { nls_uint32 sysdepref; sysdepref = W (domain->must_swap, p->sysdepref); if (sysdepref == SEGMENTS_END) break; if (sysdep_segment_values[sysdepref] == NULL) { /* This particular string pair is invalid. */ valid = 0; break; } } if (!valid) break; } if (valid) { for (j = 0; j < 2; j++) { const struct sysdep_string *sysdep_string = (const struct sysdep_string *) ((char *) data + W (domain->must_swap, j == 0 ? orig_sysdep_tab[i] : trans_sysdep_tab[i])); const char *static_segments = (char *) data + W (domain->must_swap, sysdep_string->offset); const struct segment_pair *p = sysdep_string->segments; /* Concatenate the segments, and fill inmem_orig_sysdep_tab[k] (for j == 0) and inmem_trans_sysdep_tab[k] (for j == 1). */ struct sysdep_string_desc *inmem_tab_entry = (j == 0 ? inmem_orig_sysdep_tab : inmem_trans_sysdep_tab) + k; if (W (domain->must_swap, p->sysdepref) == SEGMENTS_END) { /* Only one static segment. */ inmem_tab_entry->length = W (domain->must_swap, p->segsize); inmem_tab_entry->pointer = static_segments; } else { inmem_tab_entry->pointer = mem; for (p = sysdep_string->segments;; p++) { nls_uint32 segsize = W (domain->must_swap, p->segsize); nls_uint32 sysdepref = W (domain->must_swap, p->sysdepref); size_t n; if (segsize > 0) { memcpy (mem, static_segments, segsize); mem += segsize; static_segments += segsize; } if (sysdepref == SEGMENTS_END) break; n = strlen (sysdep_segment_values[sysdepref]); memcpy (mem, sysdep_segment_values[sysdepref], n); mem += n; } inmem_tab_entry->length = mem - inmem_tab_entry->pointer; } } k++; } } if (k != n_inmem_sysdep_strings) abort (); /* Compute the augmented hash table. */ for (i = 0; i < domain->hash_size; i++) inmem_hash_tab[i] = W (domain->must_swap_hash_tab, domain->hash_tab[i]); for (i = 0; i < n_inmem_sysdep_strings; i++) { const char *msgid = inmem_orig_sysdep_tab[i].pointer; nls_uint32 hash_val = __hash_string (msgid); nls_uint32 idx = hash_val % domain->hash_size; nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); for (;;) { if (inmem_hash_tab[idx] == 0) { /* Hash table entry is empty. Use it. */ inmem_hash_tab[idx] = 1 + domain->nstrings + i; break; } if (idx >= domain->hash_size - incr) idx -= domain->hash_size - incr; else idx += incr; } } domain->n_sysdep_strings = n_inmem_sysdep_strings; domain->orig_sysdep_tab = inmem_orig_sysdep_tab; domain->trans_sysdep_tab = inmem_trans_sysdep_tab; domain->hash_tab = inmem_hash_tab; domain->must_swap_hash_tab = 0; } else { domain->n_sysdep_strings = 0; domain->orig_sysdep_tab = NULL; domain->trans_sysdep_tab = NULL; } freea (sysdep_segment_values); } else { domain->n_sysdep_strings = 0; domain->orig_sysdep_tab = NULL; domain->trans_sysdep_tab = NULL; } } break; } break; default: /* This is an invalid revision. */ invalid: /* This is an invalid .mo file. */ if (domain->malloced) free (domain->malloced); #ifdef HAVE_MMAP if (use_mmap) munmap ((caddr_t) data, size); else #endif free (data); free (domain); domain_file->data = NULL; goto out; } /* No caches of converted translations so far. */ domain->conversions = NULL; domain->nconversions = 0; gl_rwlock_init (domain->conversions_lock); /* Get the header entry and look for a plural specification. */ #ifdef IN_LIBGLOCALE nullentry = _nl_find_msg (domain_file, domainbinding, NULL, "", &nullentrylen); #else nullentry = _nl_find_msg (domain_file, domainbinding, "", 0, &nullentrylen); #endif EXTRACT_PLURAL_EXPRESSION (nullentry, &domain->plural, &domain->nplurals); out: if (fd != -1) close (fd); domain_file->decided = 1; done: __libc_lock_unlock_recursive (lock); } #ifdef _LIBC void internal_function __libc_freeres_fn_section _nl_unload_domain (struct loaded_domain *domain) { size_t i; if (domain->plural != &__gettext_germanic_plural) __gettext_free_exp ((struct expression *) domain->plural); for (i = 0; i < domain->nconversions; i++) { struct converted_domain *convd = &domain->conversions[i]; free (convd->encoding); if (convd->conv_tab != NULL && convd->conv_tab != (char **) -1) free (convd->conv_tab); if (convd->conv != (__gconv_t) -1) __gconv_close (convd->conv); } if (domain->conversions != NULL) free (domain->conversions); __libc_rwlock_fini (domain->conversions_lock); if (domain->malloced) free (domain->malloced); # ifdef _POSIX_MAPPED_FILES if (domain->use_mmap) munmap ((caddr_t) domain->data, domain->mmap_size); else # endif /* _POSIX_MAPPED_FILES */ free ((void *) domain->data); free (domain); } #endif KCemu-0.5.1/intl/printf-parse.c0000644001050700006200000003306011340261610015725 0ustar glaubitzfbedv/* Formatted output to strings. Copyright (C) 1999-2000, 2002-2003, 2006-2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* This file can be parametrized with the following macros: CHAR_T The element type of the format string. CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters in the format string are ASCII. DIRECTIVE Structure denoting a format directive. Depends on CHAR_T. DIRECTIVES Structure denoting the set of format directives of a format string. Depends on CHAR_T. PRINTF_PARSE Function that parses a format string. Depends on CHAR_T. STATIC Set to 'static' to declare the function static. ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ #ifndef PRINTF_PARSE # include #endif /* Specification. */ #ifndef PRINTF_PARSE # include "printf-parse.h" #endif /* Default parameters. */ #ifndef PRINTF_PARSE # define PRINTF_PARSE printf_parse # define CHAR_T char # define DIRECTIVE char_directive # define DIRECTIVES char_directives #endif /* Get size_t, NULL. */ #include /* Get intmax_t. */ #if defined IN_LIBINTL || defined IN_LIBASPRINTF # if HAVE_STDINT_H_WITH_UINTMAX # include # endif # if HAVE_INTTYPES_H_WITH_UINTMAX # include # endif #else # include #endif /* malloc(), realloc(), free(). */ #include /* errno. */ #include /* Checked size_t computations. */ #include "xsize.h" #if CHAR_T_ONLY_ASCII /* c_isascii(). */ # include "c-ctype.h" #endif #ifdef STATIC STATIC #endif int PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) { const CHAR_T *cp = format; /* pointer into format */ size_t arg_posn = 0; /* number of regular arguments consumed */ size_t d_allocated; /* allocated elements of d->dir */ size_t a_allocated; /* allocated elements of a->arg */ size_t max_width_length = 0; size_t max_precision_length = 0; d->count = 0; d_allocated = 1; d->dir = (DIRECTIVE *) malloc (d_allocated * sizeof (DIRECTIVE)); if (d->dir == NULL) /* Out of memory. */ goto out_of_memory_1; a->count = 0; a_allocated = 0; a->arg = NULL; #define REGISTER_ARG(_index_,_type_) \ { \ size_t n = (_index_); \ if (n >= a_allocated) \ { \ size_t memory_size; \ argument *memory; \ \ a_allocated = xtimes (a_allocated, 2); \ if (a_allocated <= n) \ a_allocated = xsum (n, 1); \ memory_size = xtimes (a_allocated, sizeof (argument)); \ if (size_overflow_p (memory_size)) \ /* Overflow, would lead to out of memory. */ \ goto out_of_memory; \ memory = (argument *) (a->arg \ ? realloc (a->arg, memory_size) \ : malloc (memory_size)); \ if (memory == NULL) \ /* Out of memory. */ \ goto out_of_memory; \ a->arg = memory; \ } \ while (a->count <= n) \ a->arg[a->count++].type = TYPE_NONE; \ if (a->arg[n].type == TYPE_NONE) \ a->arg[n].type = (_type_); \ else if (a->arg[n].type != (_type_)) \ /* Ambiguous type for positional argument. */ \ goto error; \ } while (*cp != '\0') { CHAR_T c = *cp++; if (c == '%') { size_t arg_index = ARG_NONE; DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ /* Initialize the next directive. */ dp->dir_start = cp - 1; dp->flags = 0; dp->width_start = NULL; dp->width_end = NULL; dp->width_arg_index = ARG_NONE; dp->precision_start = NULL; dp->precision_end = NULL; dp->precision_arg_index = ARG_NONE; dp->arg_index = ARG_NONE; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; arg_index = n - 1; cp = np + 1; } } /* Read the flags. */ for (;;) { if (*cp == '\'') { dp->flags |= FLAG_GROUP; cp++; } else if (*cp == '-') { dp->flags |= FLAG_LEFT; cp++; } else if (*cp == '+') { dp->flags |= FLAG_SHOWSIGN; cp++; } else if (*cp == ' ') { dp->flags |= FLAG_SPACE; cp++; } else if (*cp == '#') { dp->flags |= FLAG_ALT; cp++; } else if (*cp == '0') { dp->flags |= FLAG_ZERO; cp++; } else break; } /* Parse the field width. */ if (*cp == '*') { dp->width_start = cp; cp++; dp->width_end = cp; if (max_width_length < 1) max_width_length = 1; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->width_arg_index = n - 1; cp = np + 1; } } if (dp->width_arg_index == ARG_NONE) { dp->width_arg_index = arg_posn++; if (dp->width_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->width_arg_index, TYPE_INT); } else if (*cp >= '0' && *cp <= '9') { size_t width_length; dp->width_start = cp; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->width_end = cp; width_length = dp->width_end - dp->width_start; if (max_width_length < width_length) max_width_length = width_length; } /* Parse the precision. */ if (*cp == '.') { cp++; if (*cp == '*') { dp->precision_start = cp - 1; cp++; dp->precision_end = cp; if (max_precision_length < 2) max_precision_length = 2; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->precision_arg_index = n - 1; cp = np + 1; } } if (dp->precision_arg_index == ARG_NONE) { dp->precision_arg_index = arg_posn++; if (dp->precision_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->precision_arg_index, TYPE_INT); } else { size_t precision_length; dp->precision_start = cp - 1; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->precision_end = cp; precision_length = dp->precision_end - dp->precision_start; if (max_precision_length < precision_length) max_precision_length = precision_length; } } { arg_type type; /* Parse argument type/size specifiers. */ { int flags = 0; for (;;) { if (*cp == 'h') { flags |= (1 << (flags & 1)); cp++; } else if (*cp == 'L') { flags |= 4; cp++; } else if (*cp == 'l') { flags += 8; cp++; } else if (*cp == 'j') { if (sizeof (intmax_t) > sizeof (long)) { /* intmax_t = long long */ flags += 16; } else if (sizeof (intmax_t) > sizeof (int)) { /* intmax_t = long */ flags += 8; } cp++; } else if (*cp == 'z' || *cp == 'Z') { /* 'z' is standardized in ISO C 99, but glibc uses 'Z' because the warning facility in gcc-2.95.2 understands only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ if (sizeof (size_t) > sizeof (long)) { /* size_t = long long */ flags += 16; } else if (sizeof (size_t) > sizeof (int)) { /* size_t = long */ flags += 8; } cp++; } else if (*cp == 't') { if (sizeof (ptrdiff_t) > sizeof (long)) { /* ptrdiff_t = long long */ flags += 16; } else if (sizeof (ptrdiff_t) > sizeof (int)) { /* ptrdiff_t = long */ flags += 8; } cp++; } else break; } /* Read the conversion character. */ c = *cp++; switch (c) { case 'd': case 'i': #if HAVE_LONG_LONG_INT /* If 'long long' exists and is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_LONGLONGINT; else #endif /* If 'long long' exists and is the same as 'long', we parse "lld" into TYPE_LONGINT. */ if (flags >= 8) type = TYPE_LONGINT; else if (flags & 2) type = TYPE_SCHAR; else if (flags & 1) type = TYPE_SHORT; else type = TYPE_INT; break; case 'o': case 'u': case 'x': case 'X': #if HAVE_LONG_LONG_INT /* If 'long long' exists and is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_ULONGLONGINT; else #endif /* If 'unsigned long long' exists and is the same as 'unsigned long', we parse "llu" into TYPE_ULONGINT. */ if (flags >= 8) type = TYPE_ULONGINT; else if (flags & 2) type = TYPE_UCHAR; else if (flags & 1) type = TYPE_USHORT; else type = TYPE_UINT; break; case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': if (flags >= 16 || (flags & 4)) type = TYPE_LONGDOUBLE; else type = TYPE_DOUBLE; break; case 'c': if (flags >= 8) #if HAVE_WINT_T type = TYPE_WIDE_CHAR; #else goto error; #endif else type = TYPE_CHAR; break; #if HAVE_WINT_T case 'C': type = TYPE_WIDE_CHAR; c = 'c'; break; #endif case 's': if (flags >= 8) #if HAVE_WCHAR_T type = TYPE_WIDE_STRING; #else goto error; #endif else type = TYPE_STRING; break; #if HAVE_WCHAR_T case 'S': type = TYPE_WIDE_STRING; c = 's'; break; #endif case 'p': type = TYPE_POINTER; break; case 'n': #if HAVE_LONG_LONG_INT /* If 'long long' exists and is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_COUNT_LONGLONGINT_POINTER; else #endif /* If 'long long' exists and is the same as 'long', we parse "lln" into TYPE_COUNT_LONGINT_POINTER. */ if (flags >= 8) type = TYPE_COUNT_LONGINT_POINTER; else if (flags & 2) type = TYPE_COUNT_SCHAR_POINTER; else if (flags & 1) type = TYPE_COUNT_SHORT_POINTER; else type = TYPE_COUNT_INT_POINTER; break; #if ENABLE_UNISTDIO /* The unistdio extensions. */ case 'U': if (flags >= 16) type = TYPE_U32_STRING; else if (flags >= 8) type = TYPE_U16_STRING; else type = TYPE_U8_STRING; break; #endif case '%': type = TYPE_NONE; break; default: /* Unknown conversion character. */ goto error; } } if (type != TYPE_NONE) { dp->arg_index = arg_index; if (dp->arg_index == ARG_NONE) { dp->arg_index = arg_posn++; if (dp->arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->arg_index, type); } dp->conversion = c; dp->dir_end = cp; } d->count++; if (d->count >= d_allocated) { size_t memory_size; DIRECTIVE *memory; d_allocated = xtimes (d_allocated, 2); memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); if (size_overflow_p (memory_size)) /* Overflow, would lead to out of memory. */ goto out_of_memory; memory = (DIRECTIVE *) realloc (d->dir, memory_size); if (memory == NULL) /* Out of memory. */ goto out_of_memory; d->dir = memory; } } #if CHAR_T_ONLY_ASCII else if (!c_isascii (c)) { /* Non-ASCII character. Not supported. */ goto error; } #endif } d->dir[d->count].dir_start = cp; d->max_width_length = max_width_length; d->max_precision_length = max_precision_length; return 0; error: if (a->arg) free (a->arg); if (d->dir) free (d->dir); errno = EINVAL; return -1; out_of_memory: if (a->arg) free (a->arg); if (d->dir) free (d->dir); out_of_memory_1: errno = ENOMEM; return -1; } #undef PRINTF_PARSE #undef DIRECTIVES #undef DIRECTIVE #undef CHAR_T_ONLY_ASCII #undef CHAR_T KCemu-0.5.1/intl/libgnuintl.h.in0000644001050700006200000003415311340261610016100 0ustar glaubitzfbedv/* Message catalogs for internationalization. Copyright (C) 1995-1997, 2000-2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _LIBINTL_H #define _LIBINTL_H 1 #include /* The LC_MESSAGES locale category is the category used by the functions gettext() and dgettext(). It is specified in POSIX, but not in ANSI C. On systems that don't define it, use an arbitrary value instead. On Solaris, defines __LOCALE_H (or _LOCALE_H in Solaris 2.5) then includes (i.e. this file!) and then only defines LC_MESSAGES. To avoid a redefinition warning, don't define LC_MESSAGES in this case. */ #if !defined LC_MESSAGES && !(defined __LOCALE_H || (defined _LOCALE_H && defined __sun)) # define LC_MESSAGES 1729 #endif /* We define an additional symbol to signal that we use the GNU implementation of gettext. */ #define __USE_GNU_GETTEXT 1 /* Provide information about the supported file formats. Returns the maximum minor revision number supported for a given major revision. */ #define __GNU_GETTEXT_SUPPORTED_REVISION(major) \ ((major) == 0 || (major) == 1 ? 1 : -1) /* Resolve a platform specific conflict on DJGPP. GNU gettext takes precedence over _conio_gettext. */ #ifdef __DJGPP__ # undef gettext #endif #ifdef __cplusplus extern "C" { #endif /* Version number: (major<<16) + (minor<<8) + subminor */ #define LIBINTL_VERSION 0x001100 extern int libintl_version; /* We redirect the functions to those prefixed with "libintl_". This is necessary, because some systems define gettext/textdomain/... in the C library (namely, Solaris 2.4 and newer, and GNU libc 2.0 and newer). If we used the unprefixed names, there would be cases where the definition in the C library would override the one in the libintl.so shared library. Recall that on ELF systems, the symbols are looked up in the following order: 1. in the executable, 2. in the shared libraries specified on the link command line, in order, 3. in the dependencies of the shared libraries specified on the link command line, 4. in the dlopen()ed shared libraries, in the order in which they were dlopen()ed. The definition in the C library would override the one in libintl.so if either * -lc is given on the link command line and -lintl isn't, or * -lc is given on the link command line before -lintl, or * libintl.so is a dependency of a dlopen()ed shared library but not linked to the executable at link time. Since Solaris gettext() behaves differently than GNU gettext(), this would be unacceptable. The redirection happens by default through macros in C, so that &gettext is independent of the compilation unit, but through inline functions in C++, in order not to interfere with the name mangling of class fields or class methods called 'gettext'. */ /* The user can define _INTL_REDIRECT_INLINE or _INTL_REDIRECT_MACROS. If he doesn't, we choose the method. A third possible method is _INTL_REDIRECT_ASM, supported only by GCC. */ #if !(defined _INTL_REDIRECT_INLINE || defined _INTL_REDIRECT_MACROS) # if __GNUC__ >= 2 && !(__APPLE_CC__ > 1) && !defined __MINGW32__ && !(__GNUC__ == 2 && defined _AIX) && (defined __STDC__ || defined __cplusplus) # define _INTL_REDIRECT_ASM # else # ifdef __cplusplus # define _INTL_REDIRECT_INLINE # else # define _INTL_REDIRECT_MACROS # endif # endif #endif /* Auxiliary macros. */ #ifdef _INTL_REDIRECT_ASM # define _INTL_ASM(cname) __asm__ (_INTL_ASMNAME (__USER_LABEL_PREFIX__, #cname)) # define _INTL_ASMNAME(prefix,cnamestring) _INTL_STRINGIFY (prefix) cnamestring # define _INTL_STRINGIFY(prefix) #prefix #else # define _INTL_ASM(cname) #endif /* _INTL_MAY_RETURN_STRING_ARG(n) declares that the given function may return its n-th argument literally. This enables GCC to warn for example about printf (gettext ("foo %y")). */ #if __GNUC__ >= 3 && !(__APPLE_CC__ > 1 && defined __cplusplus) # define _INTL_MAY_RETURN_STRING_ARG(n) __attribute__ ((__format_arg__ (n))) #else # define _INTL_MAY_RETURN_STRING_ARG(n) #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_gettext (const char *__msgid) _INTL_MAY_RETURN_STRING_ARG (1); static inline char *gettext (const char *__msgid) { return libintl_gettext (__msgid); } #else #ifdef _INTL_REDIRECT_MACROS # define gettext libintl_gettext #endif extern char *gettext (const char *__msgid) _INTL_ASM (libintl_gettext) _INTL_MAY_RETURN_STRING_ARG (1); #endif /* Look up MSGID in the DOMAINNAME message catalog for the current LC_MESSAGES locale. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dgettext (const char *__domainname, const char *__msgid) _INTL_MAY_RETURN_STRING_ARG (2); static inline char *dgettext (const char *__domainname, const char *__msgid) { return libintl_dgettext (__domainname, __msgid); } #else #ifdef _INTL_REDIRECT_MACROS # define dgettext libintl_dgettext #endif extern char *dgettext (const char *__domainname, const char *__msgid) _INTL_ASM (libintl_dgettext) _INTL_MAY_RETURN_STRING_ARG (2); #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dcgettext (const char *__domainname, const char *__msgid, int __category) _INTL_MAY_RETURN_STRING_ARG (2); static inline char *dcgettext (const char *__domainname, const char *__msgid, int __category) { return libintl_dcgettext (__domainname, __msgid, __category); } #else #ifdef _INTL_REDIRECT_MACROS # define dcgettext libintl_dcgettext #endif extern char *dcgettext (const char *__domainname, const char *__msgid, int __category) _INTL_ASM (libintl_dcgettext) _INTL_MAY_RETURN_STRING_ARG (2); #endif /* Similar to `gettext' but select the plural form corresponding to the number N. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n) _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2); static inline char *ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n) { return libintl_ngettext (__msgid1, __msgid2, __n); } #else #ifdef _INTL_REDIRECT_MACROS # define ngettext libintl_ngettext #endif extern char *ngettext (const char *__msgid1, const char *__msgid2, unsigned long int __n) _INTL_ASM (libintl_ngettext) _INTL_MAY_RETURN_STRING_ARG (1) _INTL_MAY_RETURN_STRING_ARG (2); #endif /* Similar to `dgettext' but select the plural form corresponding to the number N. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n) _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3); static inline char *dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n) { return libintl_dngettext (__domainname, __msgid1, __msgid2, __n); } #else #ifdef _INTL_REDIRECT_MACROS # define dngettext libintl_dngettext #endif extern char *dngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n) _INTL_ASM (libintl_dngettext) _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3); #endif /* Similar to `dcgettext' but select the plural form corresponding to the number N. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category) _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3); static inline char *dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category) { return libintl_dcngettext (__domainname, __msgid1, __msgid2, __n, __category); } #else #ifdef _INTL_REDIRECT_MACROS # define dcngettext libintl_dcngettext #endif extern char *dcngettext (const char *__domainname, const char *__msgid1, const char *__msgid2, unsigned long int __n, int __category) _INTL_ASM (libintl_dcngettext) _INTL_MAY_RETURN_STRING_ARG (2) _INTL_MAY_RETURN_STRING_ARG (3); #endif #ifndef IN_LIBGLOCALE /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_textdomain (const char *__domainname); static inline char *textdomain (const char *__domainname) { return libintl_textdomain (__domainname); } #else #ifdef _INTL_REDIRECT_MACROS # define textdomain libintl_textdomain #endif extern char *textdomain (const char *__domainname) _INTL_ASM (libintl_textdomain); #endif /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_bindtextdomain (const char *__domainname, const char *__dirname); static inline char *bindtextdomain (const char *__domainname, const char *__dirname) { return libintl_bindtextdomain (__domainname, __dirname); } #else #ifdef _INTL_REDIRECT_MACROS # define bindtextdomain libintl_bindtextdomain #endif extern char *bindtextdomain (const char *__domainname, const char *__dirname) _INTL_ASM (libintl_bindtextdomain); #endif /* Specify the character encoding in which the messages from the DOMAINNAME message catalog will be returned. */ #ifdef _INTL_REDIRECT_INLINE extern char *libintl_bind_textdomain_codeset (const char *__domainname, const char *__codeset); static inline char *bind_textdomain_codeset (const char *__domainname, const char *__codeset) { return libintl_bind_textdomain_codeset (__domainname, __codeset); } #else #ifdef _INTL_REDIRECT_MACROS # define bind_textdomain_codeset libintl_bind_textdomain_codeset #endif extern char *bind_textdomain_codeset (const char *__domainname, const char *__codeset) _INTL_ASM (libintl_bind_textdomain_codeset); #endif #endif /* IN_LIBGLOCALE */ /* Support for format strings with positions in *printf(), following the POSIX/XSI specification. Note: These replacements for the *printf() functions are visible only in source files that #include or #include "gettext.h". Packages that use *printf() in source files that don't refer to _() or gettext() but for which the format string could be the return value of _() or gettext() need to add this #include. Oh well. */ #if !@HAVE_POSIX_PRINTF@ #include #include /* Get va_list. */ #if __STDC__ || defined __cplusplus || defined _MSC_VER # include #else # include #endif #undef fprintf #define fprintf libintl_fprintf extern int fprintf (FILE *, const char *, ...); #undef vfprintf #define vfprintf libintl_vfprintf extern int vfprintf (FILE *, const char *, va_list); #undef printf #if defined __NetBSD__ || defined __BEOS__ || defined __CYGWIN__ || defined __MINGW32__ /* Don't break __attribute__((format(printf,M,N))). This redefinition is only possible because the libc in NetBSD, Cygwin, mingw does not have a function __printf__. */ # define libintl_printf __printf__ #endif #define printf libintl_printf extern int printf (const char *, ...); #undef vprintf #define vprintf libintl_vprintf extern int vprintf (const char *, va_list); #undef sprintf #define sprintf libintl_sprintf extern int sprintf (char *, const char *, ...); #undef vsprintf #define vsprintf libintl_vsprintf extern int vsprintf (char *, const char *, va_list); #if @HAVE_SNPRINTF@ #undef snprintf #define snprintf libintl_snprintf extern int snprintf (char *, size_t, const char *, ...); #undef vsnprintf #define vsnprintf libintl_vsnprintf extern int vsnprintf (char *, size_t, const char *, va_list); #endif #if @HAVE_ASPRINTF@ #undef asprintf #define asprintf libintl_asprintf extern int asprintf (char **, const char *, ...); #undef vasprintf #define vasprintf libintl_vasprintf extern int vasprintf (char **, const char *, va_list); #endif #if @HAVE_WPRINTF@ #undef fwprintf #define fwprintf libintl_fwprintf extern int fwprintf (FILE *, const wchar_t *, ...); #undef vfwprintf #define vfwprintf libintl_vfwprintf extern int vfwprintf (FILE *, const wchar_t *, va_list); #undef wprintf #define wprintf libintl_wprintf extern int wprintf (const wchar_t *, ...); #undef vwprintf #define vwprintf libintl_vwprintf extern int vwprintf (const wchar_t *, va_list); #undef swprintf #define swprintf libintl_swprintf extern int swprintf (wchar_t *, size_t, const wchar_t *, ...); #undef vswprintf #define vswprintf libintl_vswprintf extern int vswprintf (wchar_t *, size_t, const wchar_t *, va_list); #endif #endif /* Support for relocatable packages. */ /* Sets the original and the current installation prefix of the package. Relocation simply replaces a pathname starting with the original prefix by the corresponding pathname with the current prefix instead. Both prefixes should be directory names without trailing slash (i.e. use "" instead of "/"). */ #define libintl_set_relocation_prefix libintl_set_relocation_prefix extern void libintl_set_relocation_prefix (const char *orig_prefix, const char *curr_prefix); #ifdef __cplusplus } #endif #endif /* libintl.h */ KCemu-0.5.1/intl/dcgettext.c0000644001050700006200000000342111321666453015321 0ustar glaubitzfbedv/* Implementation of the dcgettext(3) function. Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCGETTEXT __dcgettext # define DCIGETTEXT __dcigettext #else # define DCGETTEXT libintl_dcgettext # define DCIGETTEXT libintl_dcigettext #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ char * DCGETTEXT (const char *domainname, const char *msgid, int category) { return DCIGETTEXT (domainname, msgid, NULL, 0, 0, category); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ INTDEF(__dcgettext) weak_alias (__dcgettext, dcgettext); #endif KCemu-0.5.1/intl/vasnwprintf.h0000644001050700006200000000330611321666453015716 0ustar glaubitzfbedv/* vswprintf with automatic memory allocation. Copyright (C) 2002-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _VASNWPRINTF_H #define _VASNWPRINTF_H /* Get va_list. */ #include /* Get wchar_t, size_t. */ #include #ifdef __cplusplus extern "C" { #endif /* Write formatted output to a string dynamically allocated with malloc(). You can pass a preallocated buffer for the result in RESULTBUF and its size in *LENGTHP; otherwise you pass RESULTBUF = NULL. If successful, return the address of the string (this may be = RESULTBUF if no dynamic memory allocation was necessary) and set *LENGTHP to the number of resulting bytes, excluding the trailing NUL. Upon error, set errno and return NULL. */ extern wchar_t * asnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, ...); extern wchar_t * vasnwprintf (wchar_t *resultbuf, size_t *lengthp, const wchar_t *format, va_list args); #ifdef __cplusplus } #endif #endif /* _VASNWPRINTF_H */ KCemu-0.5.1/intl/hash-string.c0000644001050700006200000000315111321666453015555 0ustar glaubitzfbedv/* Implements a string hashing function. Copyright (C) 1995, 1997, 1998, 2000, 2003 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif /* Specification. */ #include "hash-string.h" /* Defines the so called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] */ unsigned long int __hash_string (const char *str_param) { unsigned long int hval, g; const char *str = str_param; /* Compute the hash value for the given string. */ hval = 0; while (*str != '\0') { hval <<= 4; hval += (unsigned char) *str++; g = hval & ((unsigned long int) 0xf << (HASHWORDBITS - 4)); if (g != 0) { hval ^= g >> (HASHWORDBITS - 8); hval ^= g; } } return hval; } KCemu-0.5.1/intl/bindtextdom.c0000644001050700006200000002137211340261610015637 0ustar glaubitzfbedv/* Implementation of the bindtextdomain(3) function Copyright (C) 1995-1998, 2000-2003, 2005-2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* Handle multi-threaded applications. */ #ifdef _LIBC # include # define gl_rwlock_define __libc_rwlock_define # define gl_rwlock_wrlock __libc_rwlock_wrlock # define gl_rwlock_unlock __libc_rwlock_unlock #else # include "lock.h" #endif /* Some compilers, like SunOS4 cc, don't have offsetof in . */ #ifndef offsetof # define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) #endif /* @@ end of prolog @@ */ /* Lock variable to protect the global data in the gettext implementation. */ gl_rwlock_define (extern, _nl_state_lock attribute_hidden) /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define BINDTEXTDOMAIN __bindtextdomain # define BIND_TEXTDOMAIN_CODESET __bind_textdomain_codeset # ifndef strdup # define strdup(str) __strdup (str) # endif #else # define BINDTEXTDOMAIN libintl_bindtextdomain # define BIND_TEXTDOMAIN_CODESET libintl_bind_textdomain_codeset #endif /* Specifies the directory name *DIRNAMEP and the output codeset *CODESETP to be used for the DOMAINNAME message catalog. If *DIRNAMEP or *CODESETP is NULL, the corresponding attribute is not modified, only the current value is returned. If DIRNAMEP or CODESETP is NULL, the corresponding attribute is neither modified nor returned. */ static void set_binding_values (const char *domainname, const char **dirnamep, const char **codesetp) { struct binding *binding; int modified; /* Some sanity checks. */ if (domainname == NULL || domainname[0] == '\0') { if (dirnamep) *dirnamep = NULL; if (codesetp) *codesetp = NULL; return; } gl_rwlock_wrlock (_nl_state_lock); modified = 0; for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { int compare = strcmp (domainname, binding->domainname); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It is not in the list. */ binding = NULL; break; } } if (binding != NULL) { if (dirnamep) { const char *dirname = *dirnamep; if (dirname == NULL) /* The current binding has be to returned. */ *dirnamep = binding->dirname; else { /* The domain is already bound. If the new value and the old one are equal we simply do nothing. Otherwise replace the old binding. */ char *result = binding->dirname; if (strcmp (dirname, result) != 0) { if (strcmp (dirname, _nl_default_dirname) == 0) result = (char *) _nl_default_dirname; else { #if defined _LIBC || defined HAVE_STRDUP result = strdup (dirname); #else size_t len = strlen (dirname) + 1; result = (char *) malloc (len); if (__builtin_expect (result != NULL, 1)) memcpy (result, dirname, len); #endif } if (__builtin_expect (result != NULL, 1)) { if (binding->dirname != _nl_default_dirname) free (binding->dirname); binding->dirname = result; modified = 1; } } *dirnamep = result; } } if (codesetp) { const char *codeset = *codesetp; if (codeset == NULL) /* The current binding has be to returned. */ *codesetp = binding->codeset; else { /* The domain is already bound. If the new value and the old one are equal we simply do nothing. Otherwise replace the old binding. */ char *result = binding->codeset; if (result == NULL || strcmp (codeset, result) != 0) { #if defined _LIBC || defined HAVE_STRDUP result = strdup (codeset); #else size_t len = strlen (codeset) + 1; result = (char *) malloc (len); if (__builtin_expect (result != NULL, 1)) memcpy (result, codeset, len); #endif if (__builtin_expect (result != NULL, 1)) { if (binding->codeset != NULL) free (binding->codeset); binding->codeset = result; modified = 1; } } *codesetp = result; } } } else if ((dirnamep == NULL || *dirnamep == NULL) && (codesetp == NULL || *codesetp == NULL)) { /* Simply return the default values. */ if (dirnamep) *dirnamep = _nl_default_dirname; if (codesetp) *codesetp = NULL; } else { /* We have to create a new binding. */ size_t len = strlen (domainname) + 1; struct binding *new_binding = (struct binding *) malloc (offsetof (struct binding, domainname) + len); if (__builtin_expect (new_binding == NULL, 0)) goto failed; memcpy (new_binding->domainname, domainname, len); if (dirnamep) { const char *dirname = *dirnamep; if (dirname == NULL) /* The default value. */ dirname = _nl_default_dirname; else { if (strcmp (dirname, _nl_default_dirname) == 0) dirname = _nl_default_dirname; else { char *result; #if defined _LIBC || defined HAVE_STRDUP result = strdup (dirname); if (__builtin_expect (result == NULL, 0)) goto failed_dirname; #else size_t len = strlen (dirname) + 1; result = (char *) malloc (len); if (__builtin_expect (result == NULL, 0)) goto failed_dirname; memcpy (result, dirname, len); #endif dirname = result; } } *dirnamep = dirname; new_binding->dirname = (char *) dirname; } else /* The default value. */ new_binding->dirname = (char *) _nl_default_dirname; if (codesetp) { const char *codeset = *codesetp; if (codeset != NULL) { char *result; #if defined _LIBC || defined HAVE_STRDUP result = strdup (codeset); if (__builtin_expect (result == NULL, 0)) goto failed_codeset; #else size_t len = strlen (codeset) + 1; result = (char *) malloc (len); if (__builtin_expect (result == NULL, 0)) goto failed_codeset; memcpy (result, codeset, len); #endif codeset = result; } *codesetp = codeset; new_binding->codeset = (char *) codeset; } else new_binding->codeset = NULL; /* Now enqueue it. */ if (_nl_domain_bindings == NULL || strcmp (domainname, _nl_domain_bindings->domainname) < 0) { new_binding->next = _nl_domain_bindings; _nl_domain_bindings = new_binding; } else { binding = _nl_domain_bindings; while (binding->next != NULL && strcmp (domainname, binding->next->domainname) > 0) binding = binding->next; new_binding->next = binding->next; binding->next = new_binding; } modified = 1; /* Here we deal with memory allocation failures. */ if (0) { failed_codeset: if (new_binding->dirname != _nl_default_dirname) free (new_binding->dirname); failed_dirname: free (new_binding); failed: if (dirnamep) *dirnamep = NULL; if (codesetp) *codesetp = NULL; } } /* If we modified any binding, we flush the caches. */ if (modified) ++_nl_msg_cat_cntr; gl_rwlock_unlock (_nl_state_lock); } /* Specify that the DOMAINNAME message catalog will be found in DIRNAME rather than in the system locale data base. */ char * BINDTEXTDOMAIN (const char *domainname, const char *dirname) { set_binding_values (domainname, &dirname, NULL); return (char *) dirname; } /* Specify the character encoding in which the messages from the DOMAINNAME message catalog will be returned. */ char * BIND_TEXTDOMAIN_CODESET (const char *domainname, const char *codeset) { set_binding_values (domainname, NULL, &codeset); return (char *) codeset; } #ifdef _LIBC /* Aliases for function names in GNU C Library. */ weak_alias (__bindtextdomain, bindtextdomain); weak_alias (__bind_textdomain_codeset, bind_textdomain_codeset); #endif KCemu-0.5.1/intl/printf.c0000644001050700006200000002217311340261610014620 0ustar glaubitzfbedv/* Formatted output to strings, using POSIX/XSI format strings with positions. Copyright (C) 2003, 2006-2007 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # ifdef _MSC_VER # include # define alloca _alloca # else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif # endif #endif #include #if !HAVE_POSIX_PRINTF #include #include #include #include /* Some systems, like OSF/1 4.0 and Woe32, don't have EOVERFLOW. */ #ifndef EOVERFLOW # define EOVERFLOW E2BIG #endif /* When building a DLL, we must export some functions. Note that because the functions are only defined for binary backward compatibility, we don't need to use __declspec(dllimport) in any case. */ #if defined _MSC_VER && BUILDING_DLL # define DLL_EXPORTED __declspec(dllexport) #else # define DLL_EXPORTED #endif #define STATIC static /* This needs to be consistent with libgnuintl.h.in. */ #if defined __NetBSD__ || defined __BEOS__ || defined __CYGWIN__ || defined __MINGW32__ /* Don't break __attribute__((format(printf,M,N))). This redefinition is only possible because the libc in NetBSD, Cygwin, mingw does not have a function __printf__. */ # define libintl_printf __printf__ #endif /* Define auxiliary functions declared in "printf-args.h". */ #include "printf-args.c" /* Define auxiliary functions declared in "printf-parse.h". */ #include "printf-parse.c" /* Define functions declared in "vasnprintf.h". */ #define vasnprintf libintl_vasnprintf #include "vasnprintf.c" #if 0 /* not needed */ #define asnprintf libintl_asnprintf #include "asnprintf.c" #endif DLL_EXPORTED int libintl_vfprintf (FILE *stream, const char *format, va_list args) { if (strchr (format, '$') == NULL) return vfprintf (stream, format, args); else { size_t length; char *result = libintl_vasnprintf (NULL, &length, format, args); int retval = -1; if (result != NULL) { size_t written = fwrite (result, 1, length, stream); free (result); if (written == length) { if (length > INT_MAX) errno = EOVERFLOW; else retval = length; } } return retval; } } DLL_EXPORTED int libintl_fprintf (FILE *stream, const char *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vfprintf (stream, format, args); va_end (args); return retval; } DLL_EXPORTED int libintl_vprintf (const char *format, va_list args) { return libintl_vfprintf (stdout, format, args); } DLL_EXPORTED int libintl_printf (const char *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vprintf (format, args); va_end (args); return retval; } DLL_EXPORTED int libintl_vsprintf (char *resultbuf, const char *format, va_list args) { if (strchr (format, '$') == NULL) return vsprintf (resultbuf, format, args); else { size_t length = (size_t) ~0 / (4 * sizeof (char)); char *result = libintl_vasnprintf (resultbuf, &length, format, args); if (result != resultbuf) { free (result); return -1; } if (length > INT_MAX) { errno = EOVERFLOW; return -1; } else return length; } } DLL_EXPORTED int libintl_sprintf (char *resultbuf, const char *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vsprintf (resultbuf, format, args); va_end (args); return retval; } #if HAVE_SNPRINTF # if HAVE_DECL__SNPRINTF /* Windows. */ # define system_vsnprintf _vsnprintf # else /* Unix. */ # define system_vsnprintf vsnprintf # endif DLL_EXPORTED int libintl_vsnprintf (char *resultbuf, size_t length, const char *format, va_list args) { if (strchr (format, '$') == NULL) return system_vsnprintf (resultbuf, length, format, args); else { size_t maxlength = length; char *result = libintl_vasnprintf (resultbuf, &length, format, args); if (result != resultbuf) { if (maxlength > 0) { size_t pruned_length = (length < maxlength ? length : maxlength - 1); memcpy (resultbuf, result, pruned_length); resultbuf[pruned_length] = '\0'; } free (result); } if (length > INT_MAX) { errno = EOVERFLOW; return -1; } else return length; } } DLL_EXPORTED int libintl_snprintf (char *resultbuf, size_t length, const char *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vsnprintf (resultbuf, length, format, args); va_end (args); return retval; } #endif #if HAVE_ASPRINTF DLL_EXPORTED int libintl_vasprintf (char **resultp, const char *format, va_list args) { size_t length; char *result = libintl_vasnprintf (NULL, &length, format, args); if (result == NULL) return -1; if (length > INT_MAX) { free (result); errno = EOVERFLOW; return -1; } *resultp = result; return length; } DLL_EXPORTED int libintl_asprintf (char **resultp, const char *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vasprintf (resultp, format, args); va_end (args); return retval; } #endif #if HAVE_FWPRINTF #include #define WIDE_CHAR_VERSION 1 #include "wprintf-parse.h" /* Define auxiliary functions declared in "wprintf-parse.h". */ #define CHAR_T wchar_t #define DIRECTIVE wchar_t_directive #define DIRECTIVES wchar_t_directives #define PRINTF_PARSE wprintf_parse #include "printf-parse.c" /* Define functions declared in "vasnprintf.h". */ #define vasnwprintf libintl_vasnwprintf #include "vasnprintf.c" #if 0 /* not needed */ #define asnwprintf libintl_asnwprintf #include "asnprintf.c" #endif # if HAVE_DECL__SNWPRINTF /* Windows. */ # define system_vswprintf _vsnwprintf # else /* Unix. */ # define system_vswprintf vswprintf # endif DLL_EXPORTED int libintl_vfwprintf (FILE *stream, const wchar_t *format, va_list args) { if (wcschr (format, '$') == NULL) return vfwprintf (stream, format, args); else { size_t length; wchar_t *result = libintl_vasnwprintf (NULL, &length, format, args); int retval = -1; if (result != NULL) { size_t i; for (i = 0; i < length; i++) if (fputwc (result[i], stream) == WEOF) break; free (result); if (i == length) { if (length > INT_MAX) errno = EOVERFLOW; else retval = length; } } return retval; } } DLL_EXPORTED int libintl_fwprintf (FILE *stream, const wchar_t *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vfwprintf (stream, format, args); va_end (args); return retval; } DLL_EXPORTED int libintl_vwprintf (const wchar_t *format, va_list args) { return libintl_vfwprintf (stdout, format, args); } DLL_EXPORTED int libintl_wprintf (const wchar_t *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vwprintf (format, args); va_end (args); return retval; } DLL_EXPORTED int libintl_vswprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, va_list args) { if (wcschr (format, '$') == NULL) return system_vswprintf (resultbuf, length, format, args); else { size_t maxlength = length; wchar_t *result = libintl_vasnwprintf (resultbuf, &length, format, args); if (result != resultbuf) { if (maxlength > 0) { size_t pruned_length = (length < maxlength ? length : maxlength - 1); memcpy (resultbuf, result, pruned_length * sizeof (wchar_t)); resultbuf[pruned_length] = 0; } free (result); /* Unlike vsnprintf, which has to return the number of character that would have been produced if the resultbuf had been sufficiently large, the vswprintf function has to return a negative value if the resultbuf was not sufficiently large. */ if (length >= maxlength) return -1; } if (length > INT_MAX) { errno = EOVERFLOW; return -1; } else return length; } } DLL_EXPORTED int libintl_swprintf (wchar_t *resultbuf, size_t length, const wchar_t *format, ...) { va_list args; int retval; va_start (args, format); retval = libintl_vswprintf (resultbuf, length, format, args); va_end (args); return retval; } #endif #endif KCemu-0.5.1/intl/eval-plural.h0000644001050700006200000000534211340261610015546 0ustar glaubitzfbedv/* Plural expression evaluation. Copyright (C) 2000-2003, 2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef STATIC #define STATIC static #endif /* Evaluate the plural expression and return an index value. */ STATIC unsigned long int internal_function plural_eval (const struct expression *pexp, unsigned long int n) { switch (pexp->nargs) { case 0: switch (pexp->operation) { case var: return n; case num: return pexp->val.num; default: break; } /* NOTREACHED */ break; case 1: { /* pexp->operation must be lnot. */ unsigned long int arg = plural_eval (pexp->val.args[0], n); return ! arg; } case 2: { unsigned long int leftarg = plural_eval (pexp->val.args[0], n); if (pexp->operation == lor) return leftarg || plural_eval (pexp->val.args[1], n); else if (pexp->operation == land) return leftarg && plural_eval (pexp->val.args[1], n); else { unsigned long int rightarg = plural_eval (pexp->val.args[1], n); switch (pexp->operation) { case mult: return leftarg * rightarg; case divide: #if !INTDIV0_RAISES_SIGFPE if (rightarg == 0) raise (SIGFPE); #endif return leftarg / rightarg; case module: #if !INTDIV0_RAISES_SIGFPE if (rightarg == 0) raise (SIGFPE); #endif return leftarg % rightarg; case plus: return leftarg + rightarg; case minus: return leftarg - rightarg; case less_than: return leftarg < rightarg; case greater_than: return leftarg > rightarg; case less_or_equal: return leftarg <= rightarg; case greater_or_equal: return leftarg >= rightarg; case equal: return leftarg == rightarg; case not_equal: return leftarg != rightarg; default: break; } } /* NOTREACHED */ break; } case 3: { /* pexp->operation must be qmop. */ unsigned long int boolarg = plural_eval (pexp->val.args[0], n); return plural_eval (pexp->val.args[boolarg ? 1 : 2], n); } } /* NOTREACHED */ return 0; } KCemu-0.5.1/intl/relocatable.h0000644001050700006200000000543211321666453015614 0ustar glaubitzfbedv/* Provide relocatable packages. Copyright (C) 2003, 2005 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _RELOCATABLE_H #define _RELOCATABLE_H #ifdef __cplusplus extern "C" { #endif /* This can be enabled through the configure --enable-relocatable option. */ #if ENABLE_RELOCATABLE /* When building a DLL, we must export some functions. Note that because this is a private .h file, we don't need to use __declspec(dllimport) in any case. */ #if HAVE_VISIBILITY && BUILDING_DLL # define RELOCATABLE_DLL_EXPORTED __attribute__((__visibility__("default"))) #elif defined _MSC_VER && BUILDING_DLL # define RELOCATABLE_DLL_EXPORTED __declspec(dllexport) #else # define RELOCATABLE_DLL_EXPORTED #endif /* Sets the original and the current installation prefix of the package. Relocation simply replaces a pathname starting with the original prefix by the corresponding pathname with the current prefix instead. Both prefixes should be directory names without trailing slash (i.e. use "" instead of "/"). */ extern RELOCATABLE_DLL_EXPORTED void set_relocation_prefix (const char *orig_prefix, const char *curr_prefix); /* Returns the pathname, relocated according to the current installation directory. */ extern const char * relocate (const char *pathname); /* Memory management: relocate() leaks memory, because it has to construct a fresh pathname. If this is a problem because your program calls relocate() frequently, think about caching the result. */ /* Convenience function: Computes the current installation prefix, based on the original installation prefix, the original installation directory of a particular file, and the current pathname of this file. Returns NULL upon failure. */ extern const char * compute_curr_prefix (const char *orig_installprefix, const char *orig_installdir, const char *curr_pathname); #else /* By default, we use the hardwired pathnames. */ #define relocate(pathname) (pathname) #endif #ifdef __cplusplus } #endif #endif /* _RELOCATABLE_H */ KCemu-0.5.1/intl/printf-args.c0000644001050700006200000001336311340261610015553 0ustar glaubitzfbedv/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2005-2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. PRINTF_FETCHARGS Name of the function to be defined. STATIC Set to 'static' to declare the function static. */ #ifndef PRINTF_FETCHARGS # include #endif /* Specification. */ #ifndef PRINTF_FETCHARGS # include "printf-args.h" #endif #ifdef STATIC STATIC #endif int PRINTF_FETCHARGS (va_list args, arguments *a) { size_t i; argument *ap; for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) switch (ap->type) { case TYPE_SCHAR: ap->a.a_schar = va_arg (args, /*signed char*/ int); break; case TYPE_UCHAR: ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); break; case TYPE_SHORT: ap->a.a_short = va_arg (args, /*short*/ int); break; case TYPE_USHORT: ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); break; case TYPE_INT: ap->a.a_int = va_arg (args, int); break; case TYPE_UINT: ap->a.a_uint = va_arg (args, unsigned int); break; case TYPE_LONGINT: ap->a.a_longint = va_arg (args, long int); break; case TYPE_ULONGINT: ap->a.a_ulongint = va_arg (args, unsigned long int); break; #if HAVE_LONG_LONG_INT case TYPE_LONGLONGINT: ap->a.a_longlongint = va_arg (args, long long int); break; case TYPE_ULONGLONGINT: ap->a.a_ulonglongint = va_arg (args, unsigned long long int); break; #endif case TYPE_DOUBLE: ap->a.a_double = va_arg (args, double); break; case TYPE_LONGDOUBLE: ap->a.a_longdouble = va_arg (args, long double); break; case TYPE_CHAR: ap->a.a_char = va_arg (args, int); break; #if HAVE_WINT_T case TYPE_WIDE_CHAR: /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by default argument promotions", this is not the case in mingw32, where wint_t is 'unsigned short'. */ ap->a.a_wide_char = (sizeof (wint_t) < sizeof (int) ? va_arg (args, int) : va_arg (args, wint_t)); break; #endif case TYPE_STRING: ap->a.a_string = va_arg (args, const char *); /* A null pointer is an invalid argument for "%s", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_string == NULL) ap->a.a_string = "(NULL)"; break; #if HAVE_WCHAR_T case TYPE_WIDE_STRING: ap->a.a_wide_string = va_arg (args, const wchar_t *); /* A null pointer is an invalid argument for "%ls", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_wide_string == NULL) { static const wchar_t wide_null_string[] = { (wchar_t)'(', (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', (wchar_t)')', (wchar_t)0 }; ap->a.a_wide_string = wide_null_string; } break; #endif case TYPE_POINTER: ap->a.a_pointer = va_arg (args, void *); break; case TYPE_COUNT_SCHAR_POINTER: ap->a.a_count_schar_pointer = va_arg (args, signed char *); break; case TYPE_COUNT_SHORT_POINTER: ap->a.a_count_short_pointer = va_arg (args, short *); break; case TYPE_COUNT_INT_POINTER: ap->a.a_count_int_pointer = va_arg (args, int *); break; case TYPE_COUNT_LONGINT_POINTER: ap->a.a_count_longint_pointer = va_arg (args, long int *); break; #if HAVE_LONG_LONG_INT case TYPE_COUNT_LONGLONGINT_POINTER: ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); break; #endif #if ENABLE_UNISTDIO /* The unistdio extensions. */ case TYPE_U8_STRING: ap->a.a_u8_string = va_arg (args, const uint8_t *); /* A null pointer is an invalid argument for "%U", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u8_string == NULL) { static const uint8_t u8_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u8_string = u8_null_string; } break; case TYPE_U16_STRING: ap->a.a_u16_string = va_arg (args, const uint16_t *); /* A null pointer is an invalid argument for "%lU", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u16_string == NULL) { static const uint16_t u16_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u16_string = u16_null_string; } break; case TYPE_U32_STRING: ap->a.a_u32_string = va_arg (args, const uint32_t *); /* A null pointer is an invalid argument for "%llU", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u32_string == NULL) { static const uint32_t u32_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u32_string = u32_null_string; } break; #endif default: /* Unknown type. */ return -1; } return 0; } KCemu-0.5.1/intl/dgettext.c0000644001050700006200000000337111321666453015162 0ustar glaubitzfbedv/* Implementation of the dgettext(3) function. Copyright (C) 1995-1997, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #include #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DGETTEXT __dgettext # define DCGETTEXT INTUSE(__dcgettext) #else # define DGETTEXT libintl_dgettext # define DCGETTEXT libintl_dcgettext #endif /* Look up MSGID in the DOMAINNAME message catalog of the current LC_MESSAGES locale. */ char * DGETTEXT (const char *domainname, const char *msgid) { return DCGETTEXT (domainname, msgid, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dgettext, dgettext); #endif KCemu-0.5.1/intl/langprefs.c0000644001050700006200000000737511340261610015306 0ustar glaubitzfbedv/* Determine the user's language preferences. Copyright (C) 2004-2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible . */ #ifdef HAVE_CONFIG_H # include #endif #include #if HAVE_CFPREFERENCESCOPYAPPVALUE # include # include # include # include # include extern void _nl_locale_name_canonicalize (char *name); #endif /* Determine the user's language preferences, as a colon separated list of locale names in XPG syntax language[_territory][.codeset][@modifier] The result must not be freed; it is statically allocated. The LANGUAGE environment variable does not need to be considered; it is already taken into account by the caller. */ const char * _nl_language_preferences_default (void) { #if HAVE_CFPREFERENCESCOPYAPPVALUE /* MacOS X 10.2 or newer */ { /* Cache the preferences list, since CoreFoundation calls are expensive. */ static const char *cached_languages; static int cache_initialized; if (!cache_initialized) { CFTypeRef preferences = CFPreferencesCopyAppValue (CFSTR ("AppleLanguages"), kCFPreferencesCurrentApplication); if (preferences != NULL && CFGetTypeID (preferences) == CFArrayGetTypeID ()) { CFArrayRef prefArray = (CFArrayRef)preferences; int n = CFArrayGetCount (prefArray); char buf[256]; size_t size = 0; int i; for (i = 0; i < n; i++) { CFTypeRef element = CFArrayGetValueAtIndex (prefArray, i); if (element != NULL && CFGetTypeID (element) == CFStringGetTypeID () && CFStringGetCString ((CFStringRef)element, buf, sizeof (buf), kCFStringEncodingASCII)) { _nl_locale_name_canonicalize (buf); size += strlen (buf) + 1; /* Most GNU programs use msgids in English and don't ship an en.mo message catalog. Therefore when we see "en" in the preferences list, arrange for gettext() to return the msgid, and ignore all further elements of the preferences list. */ if (strcmp (buf, "en") == 0) break; } else break; } if (size > 0) { char *languages = (char *) malloc (size); if (languages != NULL) { char *p = languages; for (i = 0; i < n; i++) { CFTypeRef element = CFArrayGetValueAtIndex (prefArray, i); if (element != NULL && CFGetTypeID (element) == CFStringGetTypeID () && CFStringGetCString ((CFStringRef)element, buf, sizeof (buf), kCFStringEncodingASCII)) { _nl_locale_name_canonicalize (buf); strcpy (p, buf); p += strlen (buf); *p++ = ':'; if (strcmp (buf, "en") == 0) break; } else break; } *--p = '\0'; cached_languages = languages; } } } cache_initialized = 1; } if (cached_languages != NULL) return cached_languages; } #endif return NULL; } KCemu-0.5.1/intl/osdep.c0000644001050700006200000000174111321666453014443 0ustar glaubitzfbedv/* OS dependent parts of libintl. Copyright (C) 2001-2002, 2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #if defined __CYGWIN__ # include "intl-exports.c" #elif defined __EMX__ # include "os2compat.c" #else /* Avoid AIX compiler warning. */ typedef int dummy; #endif KCemu-0.5.1/intl/dcigettext.c0000644001050700006200000013334511340261610015466 0ustar glaubitzfbedv/* Implementation of the internal dcigettext function. Copyright (C) 1995-1999, 2000-2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Tell glibc's to provide a prototype for mempcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif /* NL_LOCALE_NAME does not work in glibc-2.4. Ignore it. */ #undef HAVE_NL_LOCALE_NAME #include #ifdef __GNUC__ # define alloca __builtin_alloca # define HAVE_ALLOCA 1 #else # ifdef _MSC_VER # include # define alloca _alloca # else # if defined HAVE_ALLOCA_H || defined _LIBC # include # else # ifdef _AIX #pragma alloca # else # ifndef alloca char *alloca (); # endif # endif # endif # endif #endif #include #ifndef errno extern int errno; #endif #ifndef __set_errno # define __set_errno(val) errno = (val) #endif #include #include #include #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #include #ifdef _LIBC /* Guess whether integer division by zero raises signal SIGFPE. Set to 1 only if you know for sure. In case of doubt, set to 0. */ # if defined __alpha__ || defined __arm__ || defined __i386__ \ || defined __m68k__ || defined __s390__ # define INTDIV0_RAISES_SIGFPE 1 # else # define INTDIV0_RAISES_SIGFPE 0 # endif #endif #if !INTDIV0_RAISES_SIGFPE # include #endif #if defined HAVE_SYS_PARAM_H || defined _LIBC # include #endif #if !defined _LIBC # if HAVE_NL_LOCALE_NAME # include # endif # include "localcharset.h" #endif #include "gettextP.h" #include "plural-exp.h" #ifdef _LIBC # include #else # ifdef IN_LIBGLOCALE # include # endif # include "libgnuintl.h" #endif #include "hash-string.h" /* Handle multi-threaded applications. */ #ifdef _LIBC # include # define gl_rwlock_define_initialized __libc_rwlock_define_initialized # define gl_rwlock_rdlock __libc_rwlock_rdlock # define gl_rwlock_wrlock __libc_rwlock_wrlock # define gl_rwlock_unlock __libc_rwlock_unlock #else # include "lock.h" #endif /* Alignment of types. */ #if defined __GNUC__ && __GNUC__ >= 2 # define alignof(TYPE) __alignof__ (TYPE) #else # define alignof(TYPE) \ ((int) &((struct { char dummy1; TYPE dummy2; } *) 0)->dummy2) #endif /* Some compilers, like SunOS4 cc, don't have offsetof in . */ #ifndef offsetof # define offsetof(type,ident) ((size_t)&(((type*)0)->ident)) #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # define getcwd __getcwd # ifndef stpcpy # define stpcpy __stpcpy # endif # define tfind __tfind #else # if !defined HAVE_GETCWD char *getwd (); # define getcwd(buf, max) getwd (buf) # else # if VMS # define getcwd(buf, max) (getcwd) (buf, max, 0) # else char *getcwd (); # endif # endif # ifndef HAVE_STPCPY static char *stpcpy (char *dest, const char *src); # endif # ifndef HAVE_MEMPCPY static void *mempcpy (void *dest, const void *src, size_t n); # endif #endif /* Use a replacement if the system does not provide the `tsearch' function family. */ #if HAVE_TSEARCH || defined _LIBC # include #else # define tsearch libintl_tsearch # define tfind libintl_tfind # define tdelete libintl_tdelete # define twalk libintl_twalk # include "tsearch.h" #endif #ifdef _LIBC # define tsearch __tsearch #endif /* Amount to increase buffer size by in each try. */ #define PATH_INCR 32 /* The following is from pathmax.h. */ /* Non-POSIX BSD systems might have gcc's limits.h, which doesn't define PATH_MAX but might cause redefinition warnings when sys/param.h is later included (as on MORE/BSD 4.3). */ #if defined _POSIX_VERSION || (defined HAVE_LIMITS_H && !defined __GNUC__) # include #endif #ifndef _POSIX_PATH_MAX # define _POSIX_PATH_MAX 255 #endif #if !defined PATH_MAX && defined _PC_PATH_MAX # define PATH_MAX (pathconf ("/", _PC_PATH_MAX) < 1 ? 1024 : pathconf ("/", _PC_PATH_MAX)) #endif /* Don't include sys/param.h if it already has been. */ #if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include #endif #if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN #endif #ifndef PATH_MAX # define PATH_MAX _POSIX_PATH_MAX #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, it may be concatenated to a directory pathname. IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. */ #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Win32, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) # define IS_PATH_WITH_DIR(P) \ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) # define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) #endif /* Whether to support different locales in different threads. */ #if defined _LIBC || HAVE_NL_LOCALE_NAME || (HAVE_STRUCT___LOCALE_STRUCT___NAMES && defined USE_IN_GETTEXT_TESTS) || defined IN_LIBGLOCALE # define HAVE_PER_THREAD_LOCALE #endif /* This is the type used for the search tree where known translations are stored. */ struct known_translation_t { /* Domain in which to search. */ const char *domainname; /* The category. */ int category; #ifdef HAVE_PER_THREAD_LOCALE /* Name of the relevant locale category, or "" for the global locale. */ const char *localename; #endif #ifdef IN_LIBGLOCALE /* The character encoding. */ const char *encoding; #endif /* State of the catalog counter at the point the string was found. */ int counter; /* Catalog where the string was found. */ struct loaded_l10nfile *domain; /* And finally the translation. */ const char *translation; size_t translation_length; /* Pointer to the string in question. */ char msgid[ZERO]; }; gl_rwlock_define_initialized (static, tree_lock) /* Root of the search tree with known translations. */ static void *root; /* Function to compare two entries in the table of known translations. */ static int transcmp (const void *p1, const void *p2) { const struct known_translation_t *s1; const struct known_translation_t *s2; int result; s1 = (const struct known_translation_t *) p1; s2 = (const struct known_translation_t *) p2; result = strcmp (s1->msgid, s2->msgid); if (result == 0) { result = strcmp (s1->domainname, s2->domainname); if (result == 0) { #ifdef HAVE_PER_THREAD_LOCALE result = strcmp (s1->localename, s2->localename); if (result == 0) #endif { #ifdef IN_LIBGLOCALE result = strcmp (s1->encoding, s2->encoding); if (result == 0) #endif /* We compare the category last (though this is the cheapest operation) since it is hopefully always the same (namely LC_MESSAGES). */ result = s1->category - s2->category; } } } return result; } /* Name of the default domain used for gettext(3) prior any call to textdomain(3). The default value for this is "messages". */ const char _nl_default_default_domain[] attribute_hidden = "messages"; #ifndef IN_LIBGLOCALE /* Value used as the default domain for gettext(3). */ const char *_nl_current_default_domain attribute_hidden = _nl_default_default_domain; #endif /* Contains the default location of the message catalogs. */ #if defined __EMX__ extern const char _nl_default_dirname[]; #else # ifdef _LIBC extern const char _nl_default_dirname[]; libc_hidden_proto (_nl_default_dirname) # endif const char _nl_default_dirname[] = LOCALEDIR; # ifdef _LIBC libc_hidden_data_def (_nl_default_dirname) # endif #endif #ifndef IN_LIBGLOCALE /* List with bindings of specific domains created by bindtextdomain() calls. */ struct binding *_nl_domain_bindings; #endif /* Prototypes for local functions. */ static char *plural_lookup (struct loaded_l10nfile *domain, unsigned long int n, const char *translation, size_t translation_len) internal_function; #ifdef IN_LIBGLOCALE static const char *guess_category_value (int category, const char *categoryname, const char *localename) internal_function; #else static const char *guess_category_value (int category, const char *categoryname) internal_function; #endif #ifdef _LIBC # include "../locale/localeinfo.h" # define category_to_name(category) \ _nl_category_names.str + _nl_category_name_idxs[category] #else static const char *category_to_name (int category) internal_function; #endif #if (defined _LIBC || HAVE_ICONV) && !defined IN_LIBGLOCALE static const char *get_output_charset (struct binding *domainbinding) internal_function; #endif /* For those loosing systems which don't have `alloca' we have to add some additional code emulating it. */ #ifdef HAVE_ALLOCA /* Nothing has to be done. */ # define freea(p) /* nothing */ # define ADD_BLOCK(list, address) /* nothing */ # define FREE_BLOCKS(list) /* nothing */ #else struct block_list { void *address; struct block_list *next; }; # define ADD_BLOCK(list, addr) \ do { \ struct block_list *newp = (struct block_list *) malloc (sizeof (*newp)); \ /* If we cannot get a free block we cannot add the new element to \ the list. */ \ if (newp != NULL) { \ newp->address = (addr); \ newp->next = (list); \ (list) = newp; \ } \ } while (0) # define FREE_BLOCKS(list) \ do { \ while (list != NULL) { \ struct block_list *old = list; \ list = list->next; \ free (old->address); \ free (old); \ } \ } while (0) # undef alloca # define alloca(size) (malloc (size)) # define freea(p) free (p) #endif /* have alloca */ #ifdef _LIBC /* List of blocks allocated for translations. */ typedef struct transmem_list { struct transmem_list *next; char data[ZERO]; } transmem_block_t; static struct transmem_list *transmem_list; #else typedef unsigned char transmem_block_t; #endif /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCIGETTEXT __dcigettext #else # define DCIGETTEXT libintl_dcigettext #endif /* Lock variable to protect the global data in the gettext implementation. */ gl_rwlock_define_initialized (, _nl_state_lock attribute_hidden) /* Checking whether the binaries runs SUID must be done and glibc provides easier methods therefore we make a difference here. */ #ifdef _LIBC # define ENABLE_SECURE __libc_enable_secure # define DETERMINE_SECURE #else # ifndef HAVE_GETUID # define getuid() 0 # endif # ifndef HAVE_GETGID # define getgid() 0 # endif # ifndef HAVE_GETEUID # define geteuid() getuid() # endif # ifndef HAVE_GETEGID # define getegid() getgid() # endif static int enable_secure; # define ENABLE_SECURE (enable_secure == 1) # define DETERMINE_SECURE \ if (enable_secure == 0) \ { \ if (getuid () != geteuid () || getgid () != getegid ()) \ enable_secure = 1; \ else \ enable_secure = -1; \ } #endif /* Get the function to evaluate the plural expression. */ #include "eval-plural.h" /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale and, if PLURAL is nonzero, search over string depending on the plural form determined by N. */ #ifdef IN_LIBGLOCALE char * gl_dcigettext (const char *domainname, const char *msgid1, const char *msgid2, int plural, unsigned long int n, int category, const char *localename, const char *encoding) #else char * DCIGETTEXT (const char *domainname, const char *msgid1, const char *msgid2, int plural, unsigned long int n, int category) #endif { #ifndef HAVE_ALLOCA struct block_list *block_list = NULL; #endif struct loaded_l10nfile *domain; struct binding *binding; const char *categoryname; const char *categoryvalue; const char *dirname; char *xdomainname; char *single_locale; char *retval; size_t retlen; int saved_errno; struct known_translation_t *search; struct known_translation_t **foundp = NULL; size_t msgid_len; #if defined HAVE_PER_THREAD_LOCALE && !defined IN_LIBGLOCALE const char *localename; #endif size_t domainname_len; /* If no real MSGID is given return NULL. */ if (msgid1 == NULL) return NULL; #ifdef _LIBC if (category < 0 || category >= __LC_LAST || category == LC_ALL) /* Bogus. */ return (plural == 0 ? (char *) msgid1 /* Use the Germanic plural rule. */ : n == 1 ? (char *) msgid1 : (char *) msgid2); #endif /* Preserve the `errno' value. */ saved_errno = errno; gl_rwlock_rdlock (_nl_state_lock); /* If DOMAINNAME is NULL, we are interested in the default domain. If CATEGORY is not LC_MESSAGES this might not make much sense but the definition left this undefined. */ if (domainname == NULL) domainname = _nl_current_default_domain; /* OS/2 specific: backward compatibility with older libintl versions */ #ifdef LC_MESSAGES_COMPAT if (category == LC_MESSAGES_COMPAT) category = LC_MESSAGES; #endif msgid_len = strlen (msgid1) + 1; /* Try to find the translation among those which we found at some time. */ search = (struct known_translation_t *) alloca (offsetof (struct known_translation_t, msgid) + msgid_len); memcpy (search->msgid, msgid1, msgid_len); search->domainname = domainname; search->category = category; #ifdef HAVE_PER_THREAD_LOCALE # ifndef IN_LIBGLOCALE # ifdef _LIBC localename = __current_locale_name (category); # else # if HAVE_NL_LOCALE_NAME /* NL_LOCALE_NAME is public glibc API introduced in glibc-2.4. */ localename = nl_langinfo (NL_LOCALE_NAME (category)); # else # if HAVE_STRUCT___LOCALE_STRUCT___NAMES && defined USE_IN_GETTEXT_TESTS /* The __names field is not public glibc API and must therefore not be used in code that is installed in public locations. */ { locale_t thread_locale = uselocale (NULL); if (thread_locale != LC_GLOBAL_LOCALE) localename = thread_locale->__names[category]; else localename = ""; } # endif # endif # endif # endif search->localename = localename; # ifdef IN_LIBGLOCALE search->encoding = encoding; # endif /* Since tfind/tsearch manage a balanced tree, concurrent tfind and tsearch calls can be fatal. */ gl_rwlock_rdlock (tree_lock); foundp = (struct known_translation_t **) tfind (search, &root, transcmp); gl_rwlock_unlock (tree_lock); freea (search); if (foundp != NULL && (*foundp)->counter == _nl_msg_cat_cntr) { /* Now deal with plural. */ if (plural) retval = plural_lookup ((*foundp)->domain, n, (*foundp)->translation, (*foundp)->translation_length); else retval = (char *) (*foundp)->translation; gl_rwlock_unlock (_nl_state_lock); __set_errno (saved_errno); return retval; } #endif /* See whether this is a SUID binary or not. */ DETERMINE_SECURE; /* First find matching binding. */ #ifdef IN_LIBGLOCALE /* We can use a trivial binding, since _nl_find_msg will ignore it anyway, and _nl_load_domain and _nl_find_domain just pass it through. */ binding = NULL; dirname = bindtextdomain (domainname, NULL); #else for (binding = _nl_domain_bindings; binding != NULL; binding = binding->next) { int compare = strcmp (domainname, binding->domainname); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It is not in the list. */ binding = NULL; break; } } if (binding == NULL) dirname = _nl_default_dirname; else { dirname = binding->dirname; #endif if (!IS_ABSOLUTE_PATH (dirname)) { /* We have a relative path. Make it absolute now. */ size_t dirname_len = strlen (dirname) + 1; size_t path_max; char *resolved_dirname; char *ret; path_max = (unsigned int) PATH_MAX; path_max += 2; /* The getcwd docs say to do this. */ for (;;) { resolved_dirname = (char *) alloca (path_max + dirname_len); ADD_BLOCK (block_list, tmp_dirname); __set_errno (0); ret = getcwd (resolved_dirname, path_max); if (ret != NULL || errno != ERANGE) break; path_max += path_max / 2; path_max += PATH_INCR; } if (ret == NULL) /* We cannot get the current working directory. Don't signal an error but simply return the default string. */ goto return_untranslated; stpcpy (stpcpy (strchr (resolved_dirname, '\0'), "/"), dirname); dirname = resolved_dirname; } #ifndef IN_LIBGLOCALE } #endif /* Now determine the symbolic name of CATEGORY and its value. */ categoryname = category_to_name (category); #ifdef IN_LIBGLOCALE categoryvalue = guess_category_value (category, categoryname, localename); #else categoryvalue = guess_category_value (category, categoryname); #endif domainname_len = strlen (domainname); xdomainname = (char *) alloca (strlen (categoryname) + domainname_len + 5); ADD_BLOCK (block_list, xdomainname); stpcpy ((char *) mempcpy (stpcpy (stpcpy (xdomainname, categoryname), "/"), domainname, domainname_len), ".mo"); /* Creating working area. */ single_locale = (char *) alloca (strlen (categoryvalue) + 1); ADD_BLOCK (block_list, single_locale); /* Search for the given string. This is a loop because we perhaps got an ordered list of languages to consider for the translation. */ while (1) { /* Make CATEGORYVALUE point to the next element of the list. */ while (categoryvalue[0] != '\0' && categoryvalue[0] == ':') ++categoryvalue; if (categoryvalue[0] == '\0') { /* The whole contents of CATEGORYVALUE has been searched but no valid entry has been found. We solve this situation by implicitly appending a "C" entry, i.e. no translation will take place. */ single_locale[0] = 'C'; single_locale[1] = '\0'; } else { char *cp = single_locale; while (categoryvalue[0] != '\0' && categoryvalue[0] != ':') *cp++ = *categoryvalue++; *cp = '\0'; /* When this is a SUID binary we must not allow accessing files outside the dedicated directories. */ if (ENABLE_SECURE && IS_PATH_WITH_DIR (single_locale)) /* Ingore this entry. */ continue; } /* If the current locale value is C (or POSIX) we don't load a domain. Return the MSGID. */ if (strcmp (single_locale, "C") == 0 || strcmp (single_locale, "POSIX") == 0) break; /* Find structure describing the message catalog matching the DOMAINNAME and CATEGORY. */ domain = _nl_find_domain (dirname, single_locale, xdomainname, binding); if (domain != NULL) { #if defined IN_LIBGLOCALE retval = _nl_find_msg (domain, binding, encoding, msgid1, &retlen); #else retval = _nl_find_msg (domain, binding, msgid1, 1, &retlen); #endif if (retval == NULL) { int cnt; for (cnt = 0; domain->successor[cnt] != NULL; ++cnt) { #if defined IN_LIBGLOCALE retval = _nl_find_msg (domain->successor[cnt], binding, encoding, msgid1, &retlen); #else retval = _nl_find_msg (domain->successor[cnt], binding, msgid1, 1, &retlen); #endif if (retval != NULL) { domain = domain->successor[cnt]; break; } } } /* Returning -1 means that some resource problem exists (likely memory) and that the strings could not be converted. Return the original strings. */ if (__builtin_expect (retval == (char *) -1, 0)) break; if (retval != NULL) { /* Found the translation of MSGID1 in domain DOMAIN: starting at RETVAL, RETLEN bytes. */ FREE_BLOCKS (block_list); if (foundp == NULL) { /* Create a new entry and add it to the search tree. */ size_t size; struct known_translation_t *newp; size = offsetof (struct known_translation_t, msgid) + msgid_len + domainname_len + 1; #ifdef HAVE_PER_THREAD_LOCALE size += strlen (localename) + 1; #endif newp = (struct known_translation_t *) malloc (size); if (newp != NULL) { char *new_domainname; #ifdef HAVE_PER_THREAD_LOCALE char *new_localename; #endif new_domainname = (char *) mempcpy (newp->msgid, msgid1, msgid_len); memcpy (new_domainname, domainname, domainname_len + 1); #ifdef HAVE_PER_THREAD_LOCALE new_localename = new_domainname + domainname_len + 1; strcpy (new_localename, localename); #endif newp->domainname = new_domainname; newp->category = category; #ifdef HAVE_PER_THREAD_LOCALE newp->localename = new_localename; #endif #ifdef IN_LIBGLOCALE newp->encoding = encoding; #endif newp->counter = _nl_msg_cat_cntr; newp->domain = domain; newp->translation = retval; newp->translation_length = retlen; gl_rwlock_wrlock (tree_lock); /* Insert the entry in the search tree. */ foundp = (struct known_translation_t **) tsearch (newp, &root, transcmp); gl_rwlock_unlock (tree_lock); if (foundp == NULL || __builtin_expect (*foundp != newp, 0)) /* The insert failed. */ free (newp); } } else { /* We can update the existing entry. */ (*foundp)->counter = _nl_msg_cat_cntr; (*foundp)->domain = domain; (*foundp)->translation = retval; (*foundp)->translation_length = retlen; } __set_errno (saved_errno); /* Now deal with plural. */ if (plural) retval = plural_lookup (domain, n, retval, retlen); gl_rwlock_unlock (_nl_state_lock); return retval; } } } return_untranslated: /* Return the untranslated MSGID. */ FREE_BLOCKS (block_list); gl_rwlock_unlock (_nl_state_lock); #ifndef _LIBC if (!ENABLE_SECURE) { extern void _nl_log_untranslated (const char *logfilename, const char *domainname, const char *msgid1, const char *msgid2, int plural); const char *logfilename = getenv ("GETTEXT_LOG_UNTRANSLATED"); if (logfilename != NULL && logfilename[0] != '\0') _nl_log_untranslated (logfilename, domainname, msgid1, msgid2, plural); } #endif __set_errno (saved_errno); return (plural == 0 ? (char *) msgid1 /* Use the Germanic plural rule. */ : n == 1 ? (char *) msgid1 : (char *) msgid2); } /* Look up the translation of msgid within DOMAIN_FILE and DOMAINBINDING. Return it if found. Return NULL if not found or in case of a conversion failure (problem in the particular message catalog). Return (char *) -1 in case of a memory allocation failure during conversion (only if ENCODING != NULL resp. CONVERT == true). */ char * internal_function #ifdef IN_LIBGLOCALE _nl_find_msg (struct loaded_l10nfile *domain_file, struct binding *domainbinding, const char *encoding, const char *msgid, size_t *lengthp) #else _nl_find_msg (struct loaded_l10nfile *domain_file, struct binding *domainbinding, const char *msgid, int convert, size_t *lengthp) #endif { struct loaded_domain *domain; nls_uint32 nstrings; size_t act; char *result; size_t resultlen; if (domain_file->decided <= 0) _nl_load_domain (domain_file, domainbinding); if (domain_file->data == NULL) return NULL; domain = (struct loaded_domain *) domain_file->data; nstrings = domain->nstrings; /* Locate the MSGID and its translation. */ if (domain->hash_tab != NULL) { /* Use the hashing table. */ nls_uint32 len = strlen (msgid); nls_uint32 hash_val = __hash_string (msgid); nls_uint32 idx = hash_val % domain->hash_size; nls_uint32 incr = 1 + (hash_val % (domain->hash_size - 2)); while (1) { nls_uint32 nstr = W (domain->must_swap_hash_tab, domain->hash_tab[idx]); if (nstr == 0) /* Hash table entry is empty. */ return NULL; nstr--; /* Compare msgid with the original string at index nstr. We compare the lengths with >=, not ==, because plural entries are represented by strings with an embedded NUL. */ if (nstr < nstrings ? W (domain->must_swap, domain->orig_tab[nstr].length) >= len && (strcmp (msgid, domain->data + W (domain->must_swap, domain->orig_tab[nstr].offset)) == 0) : domain->orig_sysdep_tab[nstr - nstrings].length > len && (strcmp (msgid, domain->orig_sysdep_tab[nstr - nstrings].pointer) == 0)) { act = nstr; goto found; } if (idx >= domain->hash_size - incr) idx -= domain->hash_size - incr; else idx += incr; } /* NOTREACHED */ } else { /* Try the default method: binary search in the sorted array of messages. */ size_t top, bottom; bottom = 0; top = nstrings; while (bottom < top) { int cmp_val; act = (bottom + top) / 2; cmp_val = strcmp (msgid, (domain->data + W (domain->must_swap, domain->orig_tab[act].offset))); if (cmp_val < 0) top = act; else if (cmp_val > 0) bottom = act + 1; else goto found; } /* No translation was found. */ return NULL; } found: /* The translation was found at index ACT. If we have to convert the string to use a different character set, this is the time. */ if (act < nstrings) { result = (char *) (domain->data + W (domain->must_swap, domain->trans_tab[act].offset)); resultlen = W (domain->must_swap, domain->trans_tab[act].length) + 1; } else { result = (char *) domain->trans_sysdep_tab[act - nstrings].pointer; resultlen = domain->trans_sysdep_tab[act - nstrings].length; } #if defined _LIBC || HAVE_ICONV # ifdef IN_LIBGLOCALE if (encoding != NULL) # else if (convert) # endif { /* We are supposed to do a conversion. */ # ifndef IN_LIBGLOCALE const char *encoding = get_output_charset (domainbinding); # endif size_t nconversions; struct converted_domain *convd; size_t i; /* Protect against reallocation of the table. */ gl_rwlock_rdlock (domain->conversions_lock); /* Search whether a table with converted translations for this encoding has already been allocated. */ nconversions = domain->nconversions; convd = NULL; for (i = nconversions; i > 0; ) { i--; if (strcmp (domain->conversions[i].encoding, encoding) == 0) { convd = &domain->conversions[i]; break; } } gl_rwlock_unlock (domain->conversions_lock); if (convd == NULL) { /* We have to allocate a new conversions table. */ gl_rwlock_wrlock (domain->conversions_lock); /* Maybe in the meantime somebody added the translation. Recheck. */ for (i = nconversions; i > 0; ) { i--; if (strcmp (domain->conversions[i].encoding, encoding) == 0) { convd = &domain->conversions[i]; goto found_convd; } } { /* Allocate a table for the converted translations for this encoding. */ struct converted_domain *new_conversions = (struct converted_domain *) (domain->conversions != NULL ? realloc (domain->conversions, (nconversions + 1) * sizeof (struct converted_domain)) : malloc ((nconversions + 1) * sizeof (struct converted_domain))); if (__builtin_expect (new_conversions == NULL, 0)) { /* Nothing we can do, no more memory. We cannot use the translation because it might be encoded incorrectly. */ unlock_fail: gl_rwlock_unlock (domain->conversions_lock); return (char *) -1; } domain->conversions = new_conversions; /* Copy the 'encoding' string to permanent storage. */ encoding = strdup (encoding); if (__builtin_expect (encoding == NULL, 0)) /* Nothing we can do, no more memory. We cannot use the translation because it might be encoded incorrectly. */ goto unlock_fail; convd = &new_conversions[nconversions]; convd->encoding = encoding; /* Find out about the character set the file is encoded with. This can be found (in textual form) in the entry "". If this entry does not exist or if this does not contain the 'charset=' information, we will assume the charset matches the one the current locale and we don't have to perform any conversion. */ # ifdef _LIBC convd->conv = (__gconv_t) -1; # else # if HAVE_ICONV convd->conv = (iconv_t) -1; # endif # endif { char *nullentry; size_t nullentrylen; /* Get the header entry. This is a recursion, but it doesn't reallocate domain->conversions because we pass encoding = NULL or convert = 0, respectively. */ nullentry = # ifdef IN_LIBGLOCALE _nl_find_msg (domain_file, domainbinding, NULL, "", &nullentrylen); # else _nl_find_msg (domain_file, domainbinding, "", 0, &nullentrylen); # endif if (nullentry != NULL) { const char *charsetstr; charsetstr = strstr (nullentry, "charset="); if (charsetstr != NULL) { size_t len; char *charset; const char *outcharset; charsetstr += strlen ("charset="); len = strcspn (charsetstr, " \t\n"); charset = (char *) alloca (len + 1); # if defined _LIBC || HAVE_MEMPCPY *((char *) mempcpy (charset, charsetstr, len)) = '\0'; # else memcpy (charset, charsetstr, len); charset[len] = '\0'; # endif outcharset = encoding; # ifdef _LIBC /* We always want to use transliteration. */ outcharset = norm_add_slashes (outcharset, "TRANSLIT"); charset = norm_add_slashes (charset, ""); int r = __gconv_open (outcharset, charset, &convd->conv, GCONV_AVOID_NOCONV); if (__builtin_expect (r != __GCONV_OK, 0)) { /* If the output encoding is the same there is nothing to do. Otherwise do not use the translation at all. */ if (__builtin_expect (r != __GCONV_NULCONV, 1)) { gl_rwlock_unlock (domain->conversions_lock); free ((char *) encoding); return NULL; } convd->conv = (__gconv_t) -1; } # else # if HAVE_ICONV /* When using GNU libc >= 2.2 or GNU libiconv >= 1.5, we want to use transliteration. */ # if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 2) || __GLIBC__ > 2 \ || _LIBICONV_VERSION >= 0x0105 if (strchr (outcharset, '/') == NULL) { char *tmp; len = strlen (outcharset); tmp = (char *) alloca (len + 10 + 1); memcpy (tmp, outcharset, len); memcpy (tmp + len, "//TRANSLIT", 10 + 1); outcharset = tmp; convd->conv = iconv_open (outcharset, charset); freea (outcharset); } else # endif convd->conv = iconv_open (outcharset, charset); # endif # endif freea (charset); } } } convd->conv_tab = NULL; /* Here domain->conversions is still == new_conversions. */ domain->nconversions++; } found_convd: gl_rwlock_unlock (domain->conversions_lock); } if ( # ifdef _LIBC convd->conv != (__gconv_t) -1 # else # if HAVE_ICONV convd->conv != (iconv_t) -1 # endif # endif ) { /* We are supposed to do a conversion. First allocate an appropriate table with the same structure as the table of translations in the file, where we can put the pointers to the converted strings in. There is a slight complication with plural entries. They are represented by consecutive NUL terminated strings. We handle this case by converting RESULTLEN bytes, including NULs. */ if (convd->conv_tab == NULL && ((convd->conv_tab = (char **) calloc (nstrings + domain->n_sysdep_strings, sizeof (char *))) == NULL)) /* Mark that we didn't succeed allocating a table. */ convd->conv_tab = (char **) -1; if (__builtin_expect (convd->conv_tab == (char **) -1, 0)) /* Nothing we can do, no more memory. We cannot use the translation because it might be encoded incorrectly. */ return (char *) -1; if (convd->conv_tab[act] == NULL) { /* We haven't used this string so far, so it is not translated yet. Do this now. */ /* We use a bit more efficient memory handling. We allocate always larger blocks which get used over time. This is faster than many small allocations. */ __libc_lock_define_initialized (static, lock) # define INITIAL_BLOCK_SIZE 4080 static unsigned char *freemem; static size_t freemem_size; const unsigned char *inbuf; unsigned char *outbuf; int malloc_count; # ifndef _LIBC transmem_block_t *transmem_list = NULL; # endif __libc_lock_lock (lock); inbuf = (const unsigned char *) result; outbuf = freemem + sizeof (size_t); malloc_count = 0; while (1) { transmem_block_t *newmem; # ifdef _LIBC size_t non_reversible; int res; if (freemem_size < sizeof (size_t)) goto resize_freemem; res = __gconv (convd->conv, &inbuf, inbuf + resultlen, &outbuf, outbuf + freemem_size - sizeof (size_t), &non_reversible); if (res == __GCONV_OK || res == __GCONV_EMPTY_INPUT) break; if (res != __GCONV_FULL_OUTPUT) { /* We should not use the translation at all, it is incorrectly encoded. */ __libc_lock_unlock (lock); return NULL; } inbuf = (const unsigned char *) result; # else # if HAVE_ICONV const char *inptr = (const char *) inbuf; size_t inleft = resultlen; char *outptr = (char *) outbuf; size_t outleft; if (freemem_size < sizeof (size_t)) goto resize_freemem; outleft = freemem_size - sizeof (size_t); if (iconv (convd->conv, (ICONV_CONST char **) &inptr, &inleft, &outptr, &outleft) != (size_t) (-1)) { outbuf = (unsigned char *) outptr; break; } if (errno != E2BIG) { __libc_lock_unlock (lock); return NULL; } # endif # endif resize_freemem: /* We must allocate a new buffer or resize the old one. */ if (malloc_count > 0) { ++malloc_count; freemem_size = malloc_count * INITIAL_BLOCK_SIZE; newmem = (transmem_block_t *) realloc (transmem_list, freemem_size); # ifdef _LIBC if (newmem != NULL) transmem_list = transmem_list->next; else { struct transmem_list *old = transmem_list; transmem_list = transmem_list->next; free (old); } # endif } else { malloc_count = 1; freemem_size = INITIAL_BLOCK_SIZE; newmem = (transmem_block_t *) malloc (freemem_size); } if (__builtin_expect (newmem == NULL, 0)) { freemem = NULL; freemem_size = 0; __libc_lock_unlock (lock); return (char *) -1; } # ifdef _LIBC /* Add the block to the list of blocks we have to free at some point. */ newmem->next = transmem_list; transmem_list = newmem; freemem = (unsigned char *) newmem->data; freemem_size -= offsetof (struct transmem_list, data); # else transmem_list = newmem; freemem = newmem; # endif outbuf = freemem + sizeof (size_t); } /* We have now in our buffer a converted string. Put this into the table of conversions. */ *(size_t *) freemem = outbuf - freemem - sizeof (size_t); convd->conv_tab[act] = (char *) freemem; /* Shrink freemem, but keep it aligned. */ freemem_size -= outbuf - freemem; freemem = outbuf; freemem += freemem_size & (alignof (size_t) - 1); freemem_size = freemem_size & ~ (alignof (size_t) - 1); __libc_lock_unlock (lock); } /* Now convd->conv_tab[act] contains the translation of all the plural variants. */ result = convd->conv_tab[act] + sizeof (size_t); resultlen = *(size_t *) convd->conv_tab[act]; } } /* The result string is converted. */ #endif /* _LIBC || HAVE_ICONV */ *lengthp = resultlen; return result; } /* Look up a plural variant. */ static char * internal_function plural_lookup (struct loaded_l10nfile *domain, unsigned long int n, const char *translation, size_t translation_len) { struct loaded_domain *domaindata = (struct loaded_domain *) domain->data; unsigned long int index; const char *p; index = plural_eval (domaindata->plural, n); if (index >= domaindata->nplurals) /* This should never happen. It means the plural expression and the given maximum value do not match. */ index = 0; /* Skip INDEX strings at TRANSLATION. */ p = translation; while (index-- > 0) { #ifdef _LIBC p = __rawmemchr (p, '\0'); #else p = strchr (p, '\0'); #endif /* And skip over the NUL byte. */ p++; if (p >= translation + translation_len) /* This should never happen. It means the plural expression evaluated to a value larger than the number of variants available for MSGID1. */ return (char *) translation; } return (char *) p; } #ifndef _LIBC /* Return string representation of locale CATEGORY. */ static const char * internal_function category_to_name (int category) { const char *retval; switch (category) { #ifdef LC_COLLATE case LC_COLLATE: retval = "LC_COLLATE"; break; #endif #ifdef LC_CTYPE case LC_CTYPE: retval = "LC_CTYPE"; break; #endif #ifdef LC_MONETARY case LC_MONETARY: retval = "LC_MONETARY"; break; #endif #ifdef LC_NUMERIC case LC_NUMERIC: retval = "LC_NUMERIC"; break; #endif #ifdef LC_TIME case LC_TIME: retval = "LC_TIME"; break; #endif #ifdef LC_MESSAGES case LC_MESSAGES: retval = "LC_MESSAGES"; break; #endif #ifdef LC_RESPONSE case LC_RESPONSE: retval = "LC_RESPONSE"; break; #endif #ifdef LC_ALL case LC_ALL: /* This might not make sense but is perhaps better than any other value. */ retval = "LC_ALL"; break; #endif default: /* If you have a better idea for a default value let me know. */ retval = "LC_XXX"; } return retval; } #endif /* Guess value of current locale from value of the environment variables or system-dependent defaults. */ static const char * internal_function #ifdef IN_LIBGLOCALE guess_category_value (int category, const char *categoryname, const char *locale) #else guess_category_value (int category, const char *categoryname) #endif { const char *language; #ifndef IN_LIBGLOCALE const char *locale; # ifndef _LIBC const char *language_default; int locale_defaulted; # endif #endif /* We use the settings in the following order: 1. The value of the environment variable 'LANGUAGE'. This is a GNU extension. Its value can be a colon-separated list of locale names. 2. The value of the environment variable 'LC_ALL', 'LC_xxx', or 'LANG'. More precisely, the first among these that is set to a non-empty value. This is how POSIX specifies it. The value is a single locale name. 3. A system-dependent preference list of languages. Its value can be a colon-separated list of locale names. 4. A system-dependent default locale name. This way: - System-dependent settings can be overridden by environment variables. - If the system provides both a list of languages and a default locale, the former is used. */ #ifndef IN_LIBGLOCALE /* Fetch the locale name, through the POSIX method of looking to `LC_ALL', `LC_xxx', and `LANG'. On some systems this can be done by the `setlocale' function itself. */ # ifdef _LIBC locale = __current_locale_name (category); # else # if HAVE_STRUCT___LOCALE_STRUCT___NAMES && defined USE_IN_GETTEXT_TESTS /* The __names field is not public glibc API and must therefore not be used in code that is installed in public locations. */ locale_t thread_locale = uselocale (NULL); if (thread_locale != LC_GLOBAL_LOCALE) { locale = thread_locale->__names[category]; locale_defaulted = 0; } else # endif { locale = _nl_locale_name_posix (category, categoryname); locale_defaulted = 0; if (locale == NULL) { locale = _nl_locale_name_default (); locale_defaulted = 1; } } # endif #endif /* Ignore LANGUAGE and its system-dependent analogon if the locale is set to "C" because 1. "C" locale usually uses the ASCII encoding, and most international messages use non-ASCII characters. These characters get displayed as question marks (if using glibc's iconv()) or as invalid 8-bit characters (because other iconv()s refuse to convert most non-ASCII characters to ASCII). In any case, the output is ugly. 2. The precise output of some programs in the "C" locale is specified by POSIX and should not depend on environment variables like "LANGUAGE" or system-dependent information. We allow such programs to use gettext(). */ if (strcmp (locale, "C") == 0) return locale; /* The highest priority value is the value of the 'LANGUAGE' environment variable. */ language = getenv ("LANGUAGE"); if (language != NULL && language[0] != '\0') return language; #if !defined IN_LIBGLOCALE && !defined _LIBC /* The next priority value is the locale name, if not defaulted. */ if (locale_defaulted) { /* The next priority value is the default language preferences list. */ language_default = _nl_language_preferences_default (); if (language_default != NULL) return language_default; } /* The least priority value is the locale name, if defaulted. */ #endif return locale; } #if (defined _LIBC || HAVE_ICONV) && !defined IN_LIBGLOCALE /* Returns the output charset. */ static const char * internal_function get_output_charset (struct binding *domainbinding) { /* The output charset should normally be determined by the locale. But sometimes the locale is not used or not correctly set up, so we provide a possibility for the user to override this: the OUTPUT_CHARSET environment variable. Moreover, the value specified through bind_textdomain_codeset overrides both. */ if (domainbinding != NULL && domainbinding->codeset != NULL) return domainbinding->codeset; else { /* For speed reasons, we look at the value of OUTPUT_CHARSET only once. This is a user variable that is not supposed to change during a program run. */ static char *output_charset_cache; static int output_charset_cached; if (!output_charset_cached) { const char *value = getenv ("OUTPUT_CHARSET"); if (value != NULL && value[0] != '\0') { size_t len = strlen (value) + 1; char *value_copy = (char *) malloc (len); if (value_copy != NULL) memcpy (value_copy, value, len); output_charset_cache = value_copy; } output_charset_cached = 1; } if (output_charset_cache != NULL) return output_charset_cache; else { # ifdef _LIBC return _NL_CURRENT (LC_CTYPE, CODESET); # else # if HAVE_ICONV return locale_charset (); # endif # endif } } } #endif /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (char *dest, const char *src) { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif #if !_LIBC && !HAVE_MEMPCPY static void * mempcpy (void *dest, const void *src, size_t n) { return (void *) ((char *) memcpy (dest, src, n) + n); } #endif #if !_LIBC && !HAVE_TSEARCH # include "tsearch.c" #endif #ifdef _LIBC /* If we want to free all resources we have to do some work at program's end. */ libc_freeres_fn (free_mem) { void *old; while (_nl_domain_bindings != NULL) { struct binding *oldp = _nl_domain_bindings; _nl_domain_bindings = _nl_domain_bindings->next; if (oldp->dirname != _nl_default_dirname) /* Yes, this is a pointer comparison. */ free (oldp->dirname); free (oldp->codeset); free (oldp); } if (_nl_current_default_domain != _nl_default_default_domain) /* Yes, again a pointer comparison. */ free ((char *) _nl_current_default_domain); /* Remove the search tree with the known translations. */ __tdestroy (root, free); root = NULL; while (transmem_list != NULL) { old = transmem_list; transmem_list = transmem_list->next; free (old); } } #endif KCemu-0.5.1/intl/ngettext.c0000644001050700006200000000367411321666453015202 0ustar glaubitzfbedv/* Implementation of ngettext(3) function. Copyright (C) 1995, 1997, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #ifdef _LIBC # define __need_NULL # include #else # include /* Just for NULL. */ #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif #include /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define NGETTEXT __ngettext # define DCNGETTEXT __dcngettext #else # define NGETTEXT libintl_ngettext # define DCNGETTEXT libintl_dcngettext #endif /* Look up MSGID in the current default message catalog for the current LC_MESSAGES locale. If not found, returns MSGID itself (the default text). */ char * NGETTEXT (const char *msgid1, const char *msgid2, unsigned long int n) { return DCNGETTEXT (NULL, msgid1, msgid2, n, LC_MESSAGES); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__ngettext, ngettext); #endif KCemu-0.5.1/intl/wprintf-parse.h0000644001050700006200000000426311321666453016141 0ustar glaubitzfbedv/* Parse printf format string. Copyright (C) 1999, 2002-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _WPRINTF_PARSE_H #define _WPRINTF_PARSE_H #include "printf-args.h" /* Flags */ #define FLAG_GROUP 1 /* ' flag */ #define FLAG_LEFT 2 /* - flag */ #define FLAG_SHOWSIGN 4 /* + flag */ #define FLAG_SPACE 8 /* space flag */ #define FLAG_ALT 16 /* # flag */ #define FLAG_ZERO 32 /* arg_index value indicating that no argument is consumed. */ #define ARG_NONE (~(size_t)0) /* A parsed directive. */ typedef struct { const wchar_t* dir_start; const wchar_t* dir_end; int flags; const wchar_t* width_start; const wchar_t* width_end; size_t width_arg_index; const wchar_t* precision_start; const wchar_t* precision_end; size_t precision_arg_index; wchar_t conversion; /* d i o u x X f e E g G c s p n U % but not C S */ size_t arg_index; } wchar_t_directive; /* A parsed format string. */ typedef struct { size_t count; wchar_t_directive *dir; size_t max_width_length; size_t max_precision_length; } wchar_t_directives; /* Parses the format string. Fills in the number N of directives, and fills in directives[0], ..., directives[N-1], and sets directives[N].dir_start to the end of the format string. Also fills in the arg_type fields of the arguments and the needed count of arguments. */ #ifdef STATIC STATIC #else extern #endif int wprintf_parse (const wchar_t *format, wchar_t_directives *d, arguments *a); #endif /* _WPRINTF_PARSE_H */ KCemu-0.5.1/intl/xsize.h0000644001050700006200000000672611321666453014510 0ustar glaubitzfbedv/* xsize.h -- Checked size_t computations. Copyright (C) 2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _XSIZE_H #define _XSIZE_H /* Get size_t. */ #include /* Get SIZE_MAX. */ #include #if HAVE_STDINT_H # include #endif /* The size of memory objects is often computed through expressions of type size_t. Example: void* p = malloc (header_size + n * element_size). These computations can lead to overflow. When this happens, malloc() returns a piece of memory that is way too small, and the program then crashes while attempting to fill the memory. To avoid this, the functions and macros in this file check for overflow. The convention is that SIZE_MAX represents overflow. malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc implementation that uses mmap --, it's recommended to use size_overflow_p() or size_in_bounds_p() before invoking malloc(). The example thus becomes: size_t size = xsum (header_size, xtimes (n, element_size)); void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); */ /* Convert an arbitrary value >= 0 to type size_t. */ #define xcast_size_t(N) \ ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) /* Sum of two sizes, with overflow check. */ static inline size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum (size_t size1, size_t size2) { size_t sum = size1 + size2; return (sum >= size1 ? sum : SIZE_MAX); } /* Sum of three sizes, with overflow check. */ static inline size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum3 (size_t size1, size_t size2, size_t size3) { return xsum (xsum (size1, size2), size3); } /* Sum of four sizes, with overflow check. */ static inline size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) { return xsum (xsum (xsum (size1, size2), size3), size4); } /* Maximum of two sizes, with overflow check. */ static inline size_t #if __GNUC__ >= 3 __attribute__ ((__pure__)) #endif xmax (size_t size1, size_t size2) { /* No explicit check is needed here, because for any n: max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ return (size1 >= size2 ? size1 : size2); } /* Multiplication of a count with an element size, with overflow check. The count must be >= 0 and the element size must be > 0. This is a macro, not an inline function, so that it works correctly even when N is of a wider tupe and N > SIZE_MAX. */ #define xtimes(N, ELSIZE) \ ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) /* Check for overflow. */ #define size_overflow_p(SIZE) \ ((SIZE) == SIZE_MAX) /* Check against overflow. */ #define size_in_bounds_p(SIZE) \ ((SIZE) != SIZE_MAX) #endif /* _XSIZE_H */ KCemu-0.5.1/intl/l10nflist.c0000644001050700006200000002557211321666453015155 0ustar glaubitzfbedv/* Copyright (C) 1995-1999, 2000-2006 Free Software Foundation, Inc. Contributed by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Tell glibc's to provide a prototype for stpcpy(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifdef HAVE_CONFIG_H # include #endif #include #if defined _LIBC || defined HAVE_ARGZ_H # include #endif #include #include #include #include "loadinfo.h" /* On some strange systems still no definition of NULL is found. Sigh! */ #ifndef NULL # if defined __STDC__ && __STDC__ # define NULL ((void *) 0) # else # define NULL 0 # endif #endif /* @@ end of prolog @@ */ #ifdef _LIBC /* Rename the non ANSI C functions. This is required by the standard because some ANSI C functions will require linking with this object file and the name space must not be polluted. */ # ifndef stpcpy # define stpcpy(dest, src) __stpcpy(dest, src) # endif #else # ifndef HAVE_STPCPY static char *stpcpy (char *dest, const char *src); # endif #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_ABSOLUTE_PATH(P) tests whether P is an absolute path. If it is not, it may be concatenated to a directory pathname. */ #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Win32, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_ABSOLUTE_PATH(P) (ISSLASH ((P)[0]) || HAS_DEVICE (P)) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_ABSOLUTE_PATH(P) ISSLASH ((P)[0]) #endif /* Define function which are usually not available. */ #ifdef _LIBC # define __argz_count(argz, len) INTUSE(__argz_count) (argz, len) #elif defined HAVE_ARGZ_COUNT # undef __argz_count # define __argz_count argz_count #else /* Returns the number of strings in ARGZ. */ static size_t argz_count__ (const char *argz, size_t len) { size_t count = 0; while (len > 0) { size_t part_len = strlen (argz); argz += part_len + 1; len -= part_len + 1; count++; } return count; } # undef __argz_count # define __argz_count(argz, len) argz_count__ (argz, len) #endif /* !_LIBC && !HAVE_ARGZ_COUNT */ #ifdef _LIBC # define __argz_stringify(argz, len, sep) \ INTUSE(__argz_stringify) (argz, len, sep) #elif defined HAVE_ARGZ_STRINGIFY # undef __argz_stringify # define __argz_stringify argz_stringify #else /* Make '\0' separated arg vector ARGZ printable by converting all the '\0's except the last into the character SEP. */ static void argz_stringify__ (char *argz, size_t len, int sep) { while (len > 0) { size_t part_len = strlen (argz); argz += part_len; len -= part_len + 1; if (len > 0) *argz++ = sep; } } # undef __argz_stringify # define __argz_stringify(argz, len, sep) argz_stringify__ (argz, len, sep) #endif /* !_LIBC && !HAVE_ARGZ_STRINGIFY */ #ifdef _LIBC #elif defined HAVE_ARGZ_NEXT # undef __argz_next # define __argz_next argz_next #else static char * argz_next__ (char *argz, size_t argz_len, const char *entry) { if (entry) { if (entry < argz + argz_len) entry = strchr (entry, '\0') + 1; return entry >= argz + argz_len ? NULL : (char *) entry; } else if (argz_len > 0) return argz; else return 0; } # undef __argz_next # define __argz_next(argz, len, entry) argz_next__ (argz, len, entry) #endif /* !_LIBC && !HAVE_ARGZ_NEXT */ /* Return number of bits set in X. */ static inline int pop (int x) { /* We assume that no more than 16 bits are used. */ x = ((x & ~0x5555) >> 1) + (x & 0x5555); x = ((x & ~0x3333) >> 2) + (x & 0x3333); x = ((x >> 4) + x) & 0x0f0f; x = ((x >> 8) + x) & 0xff; return x; } struct loaded_l10nfile * _nl_make_l10nflist (struct loaded_l10nfile **l10nfile_list, const char *dirlist, size_t dirlist_len, int mask, const char *language, const char *territory, const char *codeset, const char *normalized_codeset, const char *modifier, const char *filename, int do_allocate) { char *abs_filename; struct loaded_l10nfile **lastp; struct loaded_l10nfile *retval; char *cp; size_t dirlist_count; size_t entries; int cnt; /* If LANGUAGE contains an absolute directory specification, we ignore DIRLIST. */ if (IS_ABSOLUTE_PATH (language)) dirlist_len = 0; /* Allocate room for the full file name. */ abs_filename = (char *) malloc (dirlist_len + strlen (language) + ((mask & XPG_TERRITORY) != 0 ? strlen (territory) + 1 : 0) + ((mask & XPG_CODESET) != 0 ? strlen (codeset) + 1 : 0) + ((mask & XPG_NORM_CODESET) != 0 ? strlen (normalized_codeset) + 1 : 0) + ((mask & XPG_MODIFIER) != 0 ? strlen (modifier) + 1 : 0) + 1 + strlen (filename) + 1); if (abs_filename == NULL) return NULL; /* Construct file name. */ cp = abs_filename; if (dirlist_len > 0) { memcpy (cp, dirlist, dirlist_len); __argz_stringify (cp, dirlist_len, PATH_SEPARATOR); cp += dirlist_len; cp[-1] = '/'; } cp = stpcpy (cp, language); if ((mask & XPG_TERRITORY) != 0) { *cp++ = '_'; cp = stpcpy (cp, territory); } if ((mask & XPG_CODESET) != 0) { *cp++ = '.'; cp = stpcpy (cp, codeset); } if ((mask & XPG_NORM_CODESET) != 0) { *cp++ = '.'; cp = stpcpy (cp, normalized_codeset); } if ((mask & XPG_MODIFIER) != 0) { *cp++ = '@'; cp = stpcpy (cp, modifier); } *cp++ = '/'; stpcpy (cp, filename); /* Look in list of already loaded domains whether it is already available. */ lastp = l10nfile_list; for (retval = *l10nfile_list; retval != NULL; retval = retval->next) if (retval->filename != NULL) { int compare = strcmp (retval->filename, abs_filename); if (compare == 0) /* We found it! */ break; if (compare < 0) { /* It's not in the list. */ retval = NULL; break; } lastp = &retval->next; } if (retval != NULL || do_allocate == 0) { free (abs_filename); return retval; } dirlist_count = (dirlist_len > 0 ? __argz_count (dirlist, dirlist_len) : 1); /* Allocate a new loaded_l10nfile. */ retval = (struct loaded_l10nfile *) malloc (sizeof (*retval) + (((dirlist_count << pop (mask)) + (dirlist_count > 1 ? 1 : 0)) * sizeof (struct loaded_l10nfile *))); if (retval == NULL) { free (abs_filename); return NULL; } retval->filename = abs_filename; /* We set retval->data to NULL here; it is filled in later. Setting retval->decided to 1 here means that retval does not correspond to a real file (dirlist_count > 1) or is not worth looking up (if an unnormalized codeset was specified). */ retval->decided = (dirlist_count > 1 || ((mask & XPG_CODESET) != 0 && (mask & XPG_NORM_CODESET) != 0)); retval->data = NULL; retval->next = *lastp; *lastp = retval; entries = 0; /* Recurse to fill the inheritance list of RETVAL. If the DIRLIST is a real list (i.e. DIRLIST_COUNT > 1), the RETVAL entry does not correspond to a real file; retval->filename contains colons. In this case we loop across all elements of DIRLIST and across all bit patterns dominated by MASK. If the DIRLIST is a single directory or entirely redundant (i.e. DIRLIST_COUNT == 1), we loop across all bit patterns dominated by MASK, excluding MASK itself. In either case, we loop down from MASK to 0. This has the effect that the extra bits in the locale name are dropped in this order: first the modifier, then the territory, then the codeset, then the normalized_codeset. */ for (cnt = dirlist_count > 1 ? mask : mask - 1; cnt >= 0; --cnt) if ((cnt & ~mask) == 0 && !((cnt & XPG_CODESET) != 0 && (cnt & XPG_NORM_CODESET) != 0)) { if (dirlist_count > 1) { /* Iterate over all elements of the DIRLIST. */ char *dir = NULL; while ((dir = __argz_next ((char *) dirlist, dirlist_len, dir)) != NULL) retval->successor[entries++] = _nl_make_l10nflist (l10nfile_list, dir, strlen (dir) + 1, cnt, language, territory, codeset, normalized_codeset, modifier, filename, 1); } else retval->successor[entries++] = _nl_make_l10nflist (l10nfile_list, dirlist, dirlist_len, cnt, language, territory, codeset, normalized_codeset, modifier, filename, 1); } retval->successor[entries] = NULL; return retval; } /* Normalize codeset name. There is no standard for the codeset names. Normalization allows the user to use any of the common names. The return value is dynamically allocated and has to be freed by the caller. */ const char * _nl_normalize_codeset (const char *codeset, size_t name_len) { int len = 0; int only_digit = 1; char *retval; char *wp; size_t cnt; for (cnt = 0; cnt < name_len; ++cnt) if (isalnum ((unsigned char) codeset[cnt])) { ++len; if (isalpha ((unsigned char) codeset[cnt])) only_digit = 0; } retval = (char *) malloc ((only_digit ? 3 : 0) + len + 1); if (retval != NULL) { if (only_digit) wp = stpcpy (retval, "iso"); else wp = retval; for (cnt = 0; cnt < name_len; ++cnt) if (isalpha ((unsigned char) codeset[cnt])) *wp++ = tolower ((unsigned char) codeset[cnt]); else if (isdigit ((unsigned char) codeset[cnt])) *wp++ = codeset[cnt]; *wp = '\0'; } return (const char *) retval; } /* @@ begin of epilog @@ */ /* We don't want libintl.a to depend on any other library. So we avoid the non-standard function stpcpy. In GNU C Library this function is available, though. Also allow the symbol HAVE_STPCPY to be defined. */ #if !_LIBC && !HAVE_STPCPY static char * stpcpy (char *dest, const char *src) { while ((*dest++ = *src++) != '\0') /* Do nothing. */ ; return dest - 1; } #endif KCemu-0.5.1/intl/Makefile.in0000644001050700006200000005044611340261610015223 0ustar glaubitzfbedv# Makefile for directory with message catalog handling library of GNU gettext # Copyright (C) 1995-1998, 2000-2007 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published # by the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. PACKAGE = @PACKAGE@ VERSION = @VERSION@ SHELL = /bin/sh srcdir = @srcdir@ top_srcdir = @top_srcdir@ top_builddir = .. # The VPATH variables allows builds with $builddir != $srcdir, assuming a # 'make' program that supports VPATH (such as GNU make). This line is removed # by autoconf automatically when "$(srcdir)" = ".". # In this directory, the VPATH handling is particular: # 1. If INTL_LIBTOOL_SUFFIX_PREFIX is 'l' (indicating a build with libtool), # the .c -> .lo rules carefully use $(srcdir), so that VPATH can be omitted. # 2. If PACKAGE = gettext-tools, VPATH _must_ be omitted, because otherwise # 'make' does the wrong thing if GNU gettext was configured with # "./configure --srcdir=`pwd`", namely it gets confused by the .lo and .la # files it finds in srcdir = ../../gettext-runtime/intl. VPATH = $(srcdir) prefix = @prefix@ exec_prefix = @exec_prefix@ transform = @program_transform_name@ libdir = @libdir@ includedir = @includedir@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = $(datadir)/locale gettextsrcdir = $(datadir)/gettext/intl aliaspath = $(localedir) subdir = intl INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ l = @INTL_LIBTOOL_SUFFIX_PREFIX@ AR = ar CC = @CC@ LIBTOOL = @LIBTOOL@ RANLIB = @RANLIB@ YACC = @INTLBISON@ -y -d YFLAGS = --name-prefix=__gettext WINDRES = @WINDRES@ # -DBUILDING_LIBINTL: Change expansion of LIBINTL_DLL_EXPORTED macro. # -DBUILDING_DLL: Change expansion of RELOCATABLE_DLL_EXPORTED macro. DEFS = -DLOCALEDIR=\"$(localedir)\" -DLOCALE_ALIAS_PATH=\"$(aliaspath)\" \ -DLIBDIR=\"$(libdir)\" -DBUILDING_LIBINTL -DBUILDING_DLL -DIN_LIBINTL \ -DENABLE_RELOCATABLE=1 -DIN_LIBRARY -DINSTALLDIR=\"$(libdir)\" -DNO_XMALLOC \ -Dset_relocation_prefix=libintl_set_relocation_prefix \ -Drelocate=libintl_relocate \ -DDEPENDS_ON_LIBICONV=1 @DEFS@ CPPFLAGS = @CPPFLAGS@ CFLAGS = @CFLAGS@ @CFLAG_VISIBILITY@ LDFLAGS = @LDFLAGS@ $(LDFLAGS_@WOE32DLL@) LDFLAGS_yes = -Wl,--export-all-symbols LDFLAGS_no = LIBS = @LIBS@ COMPILE = $(CC) -c $(DEFS) $(INCLUDES) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) HEADERS = \ gmo.h \ gettextP.h \ hash-string.h \ loadinfo.h \ plural-exp.h \ eval-plural.h \ localcharset.h \ lock.h \ relocatable.h \ tsearch.h tsearch.c \ xsize.h \ printf-args.h printf-args.c \ printf-parse.h wprintf-parse.h printf-parse.c \ vasnprintf.h vasnwprintf.h vasnprintf.c \ os2compat.h \ libgnuintl.h.in SOURCES = \ bindtextdom.c \ dcgettext.c \ dgettext.c \ gettext.c \ finddomain.c \ hash-string.c \ loadmsgcat.c \ localealias.c \ textdomain.c \ l10nflist.c \ explodename.c \ dcigettext.c \ dcngettext.c \ dngettext.c \ ngettext.c \ plural.y \ plural-exp.c \ localcharset.c \ lock.c \ relocatable.c \ langprefs.c \ localename.c \ log.c \ printf.c \ version.c \ osdep.c \ os2compat.c \ intl-exports.c \ intl-compat.c OBJECTS = \ bindtextdom.$lo \ dcgettext.$lo \ dgettext.$lo \ gettext.$lo \ finddomain.$lo \ hash-string.$lo \ loadmsgcat.$lo \ localealias.$lo \ textdomain.$lo \ l10nflist.$lo \ explodename.$lo \ dcigettext.$lo \ dcngettext.$lo \ dngettext.$lo \ ngettext.$lo \ plural.$lo \ plural-exp.$lo \ localcharset.$lo \ lock.$lo \ relocatable.$lo \ langprefs.$lo \ localename.$lo \ log.$lo \ printf.$lo \ version.$lo \ osdep.$lo \ intl-compat.$lo OBJECTS_RES_yes = libintl.res OBJECTS_RES_no = DISTFILES.common = Makefile.in \ config.charset locale.alias ref-add.sin ref-del.sin export.h libintl.rc \ $(HEADERS) $(SOURCES) DISTFILES.generated = plural.c DISTFILES.normal = VERSION DISTFILES.gettext = COPYING.LIB-2.0 COPYING.LIB-2.1 libintl.glibc README.woe32 DISTFILES.obsolete = xopen-msg.sed linux-msg.sed po2tbl.sed.in cat-compat.c \ COPYING.LIB-2 gettext.h libgettext.h plural-eval.c libgnuintl.h \ libgnuintl.h_vms Makefile.vms libgnuintl.h.msvc-static \ libgnuintl.h.msvc-shared Makefile.msvc all: all-@USE_INCLUDED_LIBINTL@ all-yes: libintl.$la libintl.h charset.alias ref-add.sed ref-del.sed all-no: all-no-@BUILD_INCLUDED_LIBINTL@ all-no-yes: libgnuintl.$la all-no-no: libintl.a libgnuintl.a: $(OBJECTS) rm -f $@ $(AR) cru $@ $(OBJECTS) $(RANLIB) $@ libintl.la libgnuintl.la: $(OBJECTS) $(OBJECTS_RES_@WOE32@) $(LIBTOOL) --mode=link \ $(CC) $(CPPFLAGS) $(CFLAGS) $(XCFLAGS) $(LDFLAGS) -o $@ \ $(OBJECTS) @LTLIBICONV@ @INTL_MACOSX_LIBS@ $(LIBS) @LTLIBTHREAD@ @LTLIBC@ \ $(OBJECTS_RES_@WOE32@) \ -version-info $(LTV_CURRENT):$(LTV_REVISION):$(LTV_AGE) \ -rpath $(libdir) \ -no-undefined # Libtool's library version information for libintl. # Before making a gettext release, the gettext maintainer must change this # according to the libtool documentation, section "Library interface versions". # Maintainers of other packages that include the intl directory must *not* # change these values. LTV_CURRENT=8 LTV_REVISION=2 LTV_AGE=0 .SUFFIXES: .SUFFIXES: .c .y .o .lo .sin .sed .c.o: $(COMPILE) $< .y.c: $(YACC) $(YFLAGS) --output $@ $< rm -f $*.h bindtextdom.lo: $(srcdir)/bindtextdom.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/bindtextdom.c dcgettext.lo: $(srcdir)/dcgettext.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcgettext.c dgettext.lo: $(srcdir)/dgettext.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dgettext.c gettext.lo: $(srcdir)/gettext.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/gettext.c finddomain.lo: $(srcdir)/finddomain.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/finddomain.c hash-string.lo: $(srcdir)/hash-string.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/hash-string.c loadmsgcat.lo: $(srcdir)/loadmsgcat.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/loadmsgcat.c localealias.lo: $(srcdir)/localealias.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localealias.c textdomain.lo: $(srcdir)/textdomain.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/textdomain.c l10nflist.lo: $(srcdir)/l10nflist.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/l10nflist.c explodename.lo: $(srcdir)/explodename.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/explodename.c dcigettext.lo: $(srcdir)/dcigettext.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcigettext.c dcngettext.lo: $(srcdir)/dcngettext.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dcngettext.c dngettext.lo: $(srcdir)/dngettext.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/dngettext.c ngettext.lo: $(srcdir)/ngettext.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/ngettext.c plural.lo: $(srcdir)/plural.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural.c plural-exp.lo: $(srcdir)/plural-exp.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/plural-exp.c localcharset.lo: $(srcdir)/localcharset.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localcharset.c lock.lo: $(srcdir)/lock.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/lock.c relocatable.lo: $(srcdir)/relocatable.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/relocatable.c langprefs.lo: $(srcdir)/langprefs.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/langprefs.c localename.lo: $(srcdir)/localename.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/localename.c log.lo: $(srcdir)/log.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/log.c printf.lo: $(srcdir)/printf.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/printf.c version.lo: $(srcdir)/version.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/version.c osdep.lo: $(srcdir)/osdep.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/osdep.c intl-compat.lo: $(srcdir)/intl-compat.c $(LIBTOOL) --mode=compile $(COMPILE) $(srcdir)/intl-compat.c # This rule is executed only on Woe32 systems. # The following sed expressions come from the windres-options script. They are # inlined here, so that they can be written in a Makefile without requiring a # temporary file. They must contain literal newlines rather than semicolons, # so that they work with the sed-3.02 that is shipped with MSYS. We can use # GNU bash's $'\n' syntax to obtain such a newline. libintl.res: $(srcdir)/libintl.rc nl=$$'\n'; \ sed_extract_major='/^[0-9]/{'$${nl}'s/^\([0-9]*\).*/\1/p'$${nl}q$${nl}'}'$${nl}'c\'$${nl}0$${nl}q; \ sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{'$${nl}'s/^[0-9]*[.]\([0-9]*\).*/\1/p'$${nl}q$${nl}'}'$${nl}'c\'$${nl}0$${nl}q; \ sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{'$${nl}'s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p'$${nl}q$${nl}'}'$${nl}'c\'$${nl}0$${nl}q; \ $(WINDRES) \ "-DPACKAGE_VERSION_STRING=\\\"$(VERSION)\\\"" \ "-DPACKAGE_VERSION_MAJOR="`echo '$(VERSION)' | sed -n -e "$$sed_extract_major"` \ "-DPACKAGE_VERSION_MINOR="`echo '$(VERSION)' | sed -n -e "$$sed_extract_minor"` \ "-DPACKAGE_VERSION_SUBMINOR="`echo '$(VERSION)' | sed -n -e "$$sed_extract_subminor"` \ -i $(srcdir)/libintl.rc -o libintl.res --output-format=coff ref-add.sed: $(srcdir)/ref-add.sin sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-add.sin > t-ref-add.sed mv t-ref-add.sed ref-add.sed ref-del.sed: $(srcdir)/ref-del.sin sed -e '/^#/d' -e 's/@''PACKAGE''@/@PACKAGE@/g' $(srcdir)/ref-del.sin > t-ref-del.sed mv t-ref-del.sed ref-del.sed INCLUDES = -I. -I$(srcdir) -I.. -I../include/kc libgnuintl.h: $(srcdir)/libgnuintl.h.in sed -e '/IN_LIBGLOCALE/d' \ -e 's,@''HAVE_POSIX_PRINTF''@,@HAVE_POSIX_PRINTF@,g' \ -e 's,@''HAVE_ASPRINTF''@,@HAVE_ASPRINTF@,g' \ -e 's,@''HAVE_SNPRINTF''@,@HAVE_SNPRINTF@,g' \ -e 's,@''HAVE_WPRINTF''@,@HAVE_WPRINTF@,g' \ < $(srcdir)/libgnuintl.h.in \ | if test '@WOE32DLL@' = yes; then \ sed -e 's/extern \([^()]*\);/extern __declspec (dllimport) \1;/'; \ else \ cat; \ fi \ | sed -e 's/extern \([^"]\)/extern LIBINTL_DLL_EXPORTED \1/' \ -e "/#define _LIBINTL_H/r $(srcdir)/export.h" \ | sed -e 's,@''HAVE_VISIBILITY''@,@HAVE_VISIBILITY@,g' \ > libgnuintl.h libintl.h: $(srcdir)/libgnuintl.h.in sed -e '/IN_LIBGLOCALE/d' \ -e 's,@''HAVE_POSIX_PRINTF''@,@HAVE_POSIX_PRINTF@,g' \ -e 's,@''HAVE_ASPRINTF''@,@HAVE_ASPRINTF@,g' \ -e 's,@''HAVE_SNPRINTF''@,@HAVE_SNPRINTF@,g' \ -e 's,@''HAVE_WPRINTF''@,@HAVE_WPRINTF@,g' \ < $(srcdir)/libgnuintl.h.in > libintl.h charset.alias: $(srcdir)/config.charset $(SHELL) $(srcdir)/config.charset '@host@' > t-$@ mv t-$@ $@ check: all # We must not install the libintl.h/libintl.a files if we are on a # system which has the GNU gettext() function in its C library or in a # separate library. # If you want to use the one which comes with this version of the # package, you have to use `configure --with-included-gettext'. install: install-exec install-data install-exec: all if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \ && test '@USE_INCLUDED_LIBINTL@' = yes; then \ $(mkdir_p) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ $(INSTALL_DATA) libintl.h $(DESTDIR)$(includedir)/libintl.h; \ $(LIBTOOL) --mode=install \ $(INSTALL_DATA) libintl.$la $(DESTDIR)$(libdir)/libintl.$la; \ if test "@RELOCATABLE@" = yes; then \ dependencies=`sed -n -e 's,^dependency_libs=\(.*\),\1,p' < $(DESTDIR)$(libdir)/libintl.la | sed -e "s,^',," -e "s,'\$$,,"`; \ if test -n "$$dependencies"; then \ rm -f $(DESTDIR)$(libdir)/libintl.la; \ fi; \ fi; \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext-tools" \ && test '@USE_INCLUDED_LIBINTL@' = no \ && test @GLIBC2@ != no; then \ $(mkdir_p) $(DESTDIR)$(libdir); \ $(LIBTOOL) --mode=install \ $(INSTALL_DATA) libgnuintl.$la $(DESTDIR)$(libdir)/libgnuintl.$la; \ rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \ $(INSTALL_DATA) $(DESTDIR)$(libdir)/libgnuintl.so $(DESTDIR)$(libdir)/preloadable_libintl.so; \ $(LIBTOOL) --mode=uninstall \ rm -f $(DESTDIR)$(libdir)/libgnuintl.$la; \ else \ : ; \ fi if test '@USE_INCLUDED_LIBINTL@' = yes; then \ test @GLIBC21@ != no || $(mkdir_p) $(DESTDIR)$(libdir); \ temp=$(DESTDIR)$(libdir)/t-charset.alias; \ dest=$(DESTDIR)$(libdir)/charset.alias; \ if test -f $(DESTDIR)$(libdir)/charset.alias; then \ orig=$(DESTDIR)$(libdir)/charset.alias; \ sed -f ref-add.sed $$orig > $$temp; \ $(INSTALL_DATA) $$temp $$dest; \ rm -f $$temp; \ else \ if test @GLIBC21@ = no; then \ orig=charset.alias; \ sed -f ref-add.sed $$orig > $$temp; \ $(INSTALL_DATA) $$temp $$dest; \ rm -f $$temp; \ fi; \ fi; \ $(mkdir_p) $(DESTDIR)$(localedir); \ test -f $(DESTDIR)$(localedir)/locale.alias \ && orig=$(DESTDIR)$(localedir)/locale.alias \ || orig=$(srcdir)/locale.alias; \ temp=$(DESTDIR)$(localedir)/t-locale.alias; \ dest=$(DESTDIR)$(localedir)/locale.alias; \ sed -f ref-add.sed $$orig > $$temp; \ $(INSTALL_DATA) $$temp $$dest; \ rm -f $$temp; \ else \ : ; \ fi install-data: all if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ $(INSTALL_DATA) VERSION $(DESTDIR)$(gettextsrcdir)/VERSION; \ $(INSTALL_DATA) ChangeLog.inst $(DESTDIR)$(gettextsrcdir)/ChangeLog; \ dists="COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common)"; \ for file in $$dists; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ chmod a+x $(DESTDIR)$(gettextsrcdir)/config.charset; \ dists="$(DISTFILES.generated)"; \ for file in $$dists; do \ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ $(INSTALL_DATA) $$dir/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ dists="$(DISTFILES.obsolete)"; \ for file in $$dists; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-strip: install install-dvi install-html install-info install-ps install-pdf: installdirs: if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \ && test '@USE_INCLUDED_LIBINTL@' = yes; then \ $(mkdir_p) $(DESTDIR)$(libdir) $(DESTDIR)$(includedir); \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext-tools" \ && test '@USE_INCLUDED_LIBINTL@' = no \ && test @GLIBC2@ != no; then \ $(mkdir_p) $(DESTDIR)$(libdir); \ else \ : ; \ fi if test '@USE_INCLUDED_LIBINTL@' = yes; then \ test @GLIBC21@ != no || $(mkdir_p) $(DESTDIR)$(libdir); \ $(mkdir_p) $(DESTDIR)$(localedir); \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi # Define this as empty until I found a useful application. installcheck: uninstall: if { test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; } \ && test '@USE_INCLUDED_LIBINTL@' = yes; then \ rm -f $(DESTDIR)$(includedir)/libintl.h; \ $(LIBTOOL) --mode=uninstall \ rm -f $(DESTDIR)$(libdir)/libintl.$la; \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext-tools" \ && test '@USE_INCLUDED_LIBINTL@' = no \ && test @GLIBC2@ != no; then \ rm -f $(DESTDIR)$(libdir)/preloadable_libintl.so; \ else \ : ; \ fi if test '@USE_INCLUDED_LIBINTL@' = yes; then \ if test -f $(DESTDIR)$(libdir)/charset.alias; then \ temp=$(DESTDIR)$(libdir)/t-charset.alias; \ dest=$(DESTDIR)$(libdir)/charset.alias; \ sed -f ref-del.sed $$dest > $$temp; \ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ rm -f $$dest; \ else \ $(INSTALL_DATA) $$temp $$dest; \ fi; \ rm -f $$temp; \ fi; \ if test -f $(DESTDIR)$(localedir)/locale.alias; then \ temp=$(DESTDIR)$(localedir)/t-locale.alias; \ dest=$(DESTDIR)$(localedir)/locale.alias; \ sed -f ref-del.sed $$dest > $$temp; \ if grep '^# Packages using this file: $$' $$temp > /dev/null; then \ rm -f $$dest; \ else \ $(INSTALL_DATA) $$temp $$dest; \ fi; \ rm -f $$temp; \ fi; \ else \ : ; \ fi if test "$(PACKAGE)" = "gettext-tools"; then \ for file in VERSION ChangeLog COPYING.LIB-2.0 COPYING.LIB-2.1 $(DISTFILES.common) $(DISTFILES.generated); do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi info dvi ps pdf html: $(OBJECTS): ../include/kc/config.h libgnuintl.h bindtextdom.$lo dcgettext.$lo dcigettext.$lo dcngettext.$lo dgettext.$lo dngettext.$lo finddomain.$lo gettext.$lo intl-compat.$lo loadmsgcat.$lo localealias.$lo ngettext.$lo textdomain.$lo: $(srcdir)/gettextP.h $(srcdir)/gmo.h $(srcdir)/loadinfo.h hash-string.$lo dcigettext.$lo loadmsgcat.$lo: $(srcdir)/hash-string.h explodename.$lo l10nflist.$lo: $(srcdir)/loadinfo.h dcigettext.$lo loadmsgcat.$lo plural.$lo plural-exp.$lo: $(srcdir)/plural-exp.h dcigettext.$lo: $(srcdir)/eval-plural.h localcharset.$lo: $(srcdir)/localcharset.h bindtextdom.$lo dcigettext.$lo finddomain.$lo loadmsgcat.$lo localealias.$lo lock.$lo log.$lo: $(srcdir)/lock.h localealias.$lo localcharset.$lo relocatable.$lo: $(srcdir)/relocatable.h printf.$lo: $(srcdir)/printf-args.h $(srcdir)/printf-args.c $(srcdir)/printf-parse.h $(srcdir)/wprintf-parse.h $(srcdir)/xsize.h $(srcdir)/printf-parse.c $(srcdir)/vasnprintf.h $(srcdir)/vasnwprintf.h $(srcdir)/vasnprintf.c # A bison-2.1 generated plural.c includes if ENABLE_NLS. PLURAL_DEPS_yes = libintl.h PLURAL_DEPS_no = plural.$lo: $(PLURAL_DEPS_@USE_INCLUDED_LIBINTL@) tags: TAGS TAGS: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && etags -o $$here/TAGS $(HEADERS) $(SOURCES) ctags: CTAGS CTAGS: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && ctags -o $$here/CTAGS $(HEADERS) $(SOURCES) id: ID ID: $(HEADERS) $(SOURCES) here=`pwd`; cd $(srcdir) && mkid -f$$here/ID $(HEADERS) $(SOURCES) mostlyclean: rm -f *.a *.la *.o *.obj *.lo libintl.res core core.* rm -f libgnuintl.h libintl.h charset.alias ref-add.sed ref-del.sed rm -f -r .libs _libs clean: mostlyclean distclean: clean rm -f Makefile ID TAGS if test "$(PACKAGE)" = "gettext-runtime" || test "$(PACKAGE)" = "gettext-tools"; then \ rm -f ChangeLog.inst $(DISTFILES.normal); \ else \ : ; \ fi maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." # GNU gettext needs not contain the file `VERSION' but contains some # other files which should not be distributed in other packages. distdir = ../$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: Makefile if test "$(PACKAGE)" = "gettext-tools"; then \ : ; \ else \ if test "$(PACKAGE)" = "gettext-runtime"; then \ additional="$(DISTFILES.gettext)"; \ else \ additional="$(DISTFILES.normal)"; \ fi; \ $(MAKE) $(DISTFILES.common) $(DISTFILES.generated) $$additional; \ for file in ChangeLog $(DISTFILES.common) $(DISTFILES.generated) $$additional; do \ if test -f $$file; then dir=.; else dir=$(srcdir); fi; \ cp -p $$dir/$$file $(distdir) || test $$file = Makefile.in || exit 1; \ done; \ fi Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status cd $(top_builddir) && $(SHELL) ./config.status # This would be more efficient, but doesn't work any more with autoconf-2.57, # when AC_CONFIG_FILES([intl/Makefile:somedir/Makefile.in]) is used. # cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/intl/locale.alias0000644001050700006200000000510611340261610015421 0ustar glaubitzfbedv# Locale name alias data base. # Copyright (C) 1996-2001,2003,2007 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify it # under the terms of the GNU Library General Public License as published # by the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # Library General Public License for more details. # # You should have received a copy of the GNU Library General Public # License along with this program; if not, write to the Free Software # Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, # USA. # The format of this file is the same as for the corresponding file of # the X Window System, which normally can be found in # /usr/lib/X11/locale/locale.alias # A single line contains two fields: an alias and a substitution value. # All entries are case independent. # Note: This file is obsolete and is kept around for the time being for # backward compatibility. Nobody should rely on the names defined here. # Locales should always be specified by their full name. # Packages using this file: bokmal nb_NO.ISO-8859-1 bokml nb_NO.ISO-8859-1 catalan ca_ES.ISO-8859-1 croatian hr_HR.ISO-8859-2 czech cs_CZ.ISO-8859-2 danish da_DK.ISO-8859-1 dansk da_DK.ISO-8859-1 deutsch de_DE.ISO-8859-1 dutch nl_NL.ISO-8859-1 eesti et_EE.ISO-8859-1 estonian et_EE.ISO-8859-1 finnish fi_FI.ISO-8859-1 franais fr_FR.ISO-8859-1 french fr_FR.ISO-8859-1 galego gl_ES.ISO-8859-1 galician gl_ES.ISO-8859-1 german de_DE.ISO-8859-1 greek el_GR.ISO-8859-7 hebrew he_IL.ISO-8859-8 hrvatski hr_HR.ISO-8859-2 hungarian hu_HU.ISO-8859-2 icelandic is_IS.ISO-8859-1 italian it_IT.ISO-8859-1 japanese ja_JP.eucJP japanese.euc ja_JP.eucJP ja_JP ja_JP.eucJP ja_JP.ujis ja_JP.eucJP japanese.sjis ja_JP.SJIS korean ko_KR.eucKR korean.euc ko_KR.eucKR ko_KR ko_KR.eucKR lithuanian lt_LT.ISO-8859-13 no_NO nb_NO.ISO-8859-1 no_NO.ISO-8859-1 nb_NO.ISO-8859-1 norwegian nb_NO.ISO-8859-1 nynorsk nn_NO.ISO-8859-1 polish pl_PL.ISO-8859-2 portuguese pt_PT.ISO-8859-1 romanian ro_RO.ISO-8859-2 russian ru_RU.ISO-8859-5 slovak sk_SK.ISO-8859-2 slovene sl_SI.ISO-8859-2 slovenian sl_SI.ISO-8859-2 spanish es_ES.ISO-8859-1 swedish sv_SE.ISO-8859-1 thai th_TH.TIS-620 turkish tr_TR.ISO-8859-9 KCemu-0.5.1/intl/relocatable.c0000644001050700006200000003353411340261610015576 0ustar glaubitzfbedv/* Provide relocatable packages. Copyright (C) 2003-2006 Free Software Foundation, Inc. Written by Bruno Haible , 2003. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Tell glibc's to provide a prototype for getline(). This must come before because may include , and once has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #include /* Specification. */ #include "relocatable.h" #if ENABLE_RELOCATABLE #include #include #include #include #ifdef NO_XMALLOC # define xmalloc malloc #else # include "xalloc.h" #endif #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include #endif #if DEPENDS_ON_LIBCHARSET # include #endif #if DEPENDS_ON_LIBICONV && HAVE_ICONV # include #endif #if DEPENDS_ON_LIBINTL && ENABLE_NLS # include #endif /* Faked cheap 'bool'. */ #undef bool #undef false #undef true #define bool int #define false 0 #define true 1 /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. IS_PATH_WITH_DIR(P) tests whether P contains a directory specification. */ #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Win32, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') # define HAS_DEVICE(P) \ ((((P)[0] >= 'A' && (P)[0] <= 'Z') || ((P)[0] >= 'a' && (P)[0] <= 'z')) \ && (P)[1] == ':') # define IS_PATH_WITH_DIR(P) \ (strchr (P, '/') != NULL || strchr (P, '\\') != NULL || HAS_DEVICE (P)) # define FILE_SYSTEM_PREFIX_LEN(P) (HAS_DEVICE (P) ? 2 : 0) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define IS_PATH_WITH_DIR(P) (strchr (P, '/') != NULL) # define FILE_SYSTEM_PREFIX_LEN(P) 0 #endif /* Original installation prefix. */ static char *orig_prefix; static size_t orig_prefix_len; /* Current installation prefix. */ static char *curr_prefix; static size_t curr_prefix_len; /* These prefixes do not end in a slash. Anything that will be concatenated to them must start with a slash. */ /* Sets the original and the current installation prefix of this module. Relocation simply replaces a pathname starting with the original prefix by the corresponding pathname with the current prefix instead. Both prefixes should be directory names without trailing slash (i.e. use "" instead of "/"). */ static void set_this_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg) { if (orig_prefix_arg != NULL && curr_prefix_arg != NULL /* Optimization: if orig_prefix and curr_prefix are equal, the relocation is a nop. */ && strcmp (orig_prefix_arg, curr_prefix_arg) != 0) { /* Duplicate the argument strings. */ char *memory; orig_prefix_len = strlen (orig_prefix_arg); curr_prefix_len = strlen (curr_prefix_arg); memory = (char *) xmalloc (orig_prefix_len + 1 + curr_prefix_len + 1); #ifdef NO_XMALLOC if (memory != NULL) #endif { memcpy (memory, orig_prefix_arg, orig_prefix_len + 1); orig_prefix = memory; memory += orig_prefix_len + 1; memcpy (memory, curr_prefix_arg, curr_prefix_len + 1); curr_prefix = memory; return; } } orig_prefix = NULL; curr_prefix = NULL; /* Don't worry about wasted memory here - this function is usually only called once. */ } /* Sets the original and the current installation prefix of the package. Relocation simply replaces a pathname starting with the original prefix by the corresponding pathname with the current prefix instead. Both prefixes should be directory names without trailing slash (i.e. use "" instead of "/"). */ void set_relocation_prefix (const char *orig_prefix_arg, const char *curr_prefix_arg) { set_this_relocation_prefix (orig_prefix_arg, curr_prefix_arg); /* Now notify all dependent libraries. */ #if DEPENDS_ON_LIBCHARSET libcharset_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); #endif #if DEPENDS_ON_LIBICONV && HAVE_ICONV && _LIBICONV_VERSION >= 0x0109 libiconv_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); #endif #if DEPENDS_ON_LIBINTL && ENABLE_NLS && defined libintl_set_relocation_prefix libintl_set_relocation_prefix (orig_prefix_arg, curr_prefix_arg); #endif } #if !defined IN_LIBRARY || (defined PIC && defined INSTALLDIR) /* Convenience function: Computes the current installation prefix, based on the original installation prefix, the original installation directory of a particular file, and the current pathname of this file. Returns NULL upon failure. */ #ifdef IN_LIBRARY #define compute_curr_prefix local_compute_curr_prefix static #endif const char * compute_curr_prefix (const char *orig_installprefix, const char *orig_installdir, const char *curr_pathname) { const char *curr_installdir; const char *rel_installdir; if (curr_pathname == NULL) return NULL; /* Determine the relative installation directory, relative to the prefix. This is simply the difference between orig_installprefix and orig_installdir. */ if (strncmp (orig_installprefix, orig_installdir, strlen (orig_installprefix)) != 0) /* Shouldn't happen - nothing should be installed outside $(prefix). */ return NULL; rel_installdir = orig_installdir + strlen (orig_installprefix); /* Determine the current installation directory. */ { const char *p_base = curr_pathname + FILE_SYSTEM_PREFIX_LEN (curr_pathname); const char *p = curr_pathname + strlen (curr_pathname); char *q; while (p > p_base) { p--; if (ISSLASH (*p)) break; } q = (char *) xmalloc (p - curr_pathname + 1); #ifdef NO_XMALLOC if (q == NULL) return NULL; #endif memcpy (q, curr_pathname, p - curr_pathname); q[p - curr_pathname] = '\0'; curr_installdir = q; } /* Compute the current installation prefix by removing the trailing rel_installdir from it. */ { const char *rp = rel_installdir + strlen (rel_installdir); const char *cp = curr_installdir + strlen (curr_installdir); const char *cp_base = curr_installdir + FILE_SYSTEM_PREFIX_LEN (curr_installdir); while (rp > rel_installdir && cp > cp_base) { bool same = false; const char *rpi = rp; const char *cpi = cp; while (rpi > rel_installdir && cpi > cp_base) { rpi--; cpi--; if (ISSLASH (*rpi) || ISSLASH (*cpi)) { if (ISSLASH (*rpi) && ISSLASH (*cpi)) same = true; break; } /* Do case-insensitive comparison if the filesystem is always or often case-insensitive. It's better to accept the comparison if the difference is only in case, rather than to fail. */ #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Win32, Cygwin, OS/2, DOS - case insignificant filesystem */ if ((*rpi >= 'a' && *rpi <= 'z' ? *rpi - 'a' + 'A' : *rpi) != (*cpi >= 'a' && *cpi <= 'z' ? *cpi - 'a' + 'A' : *cpi)) break; #else if (*rpi != *cpi) break; #endif } if (!same) break; /* The last pathname component was the same. opi and cpi now point to the slash before it. */ rp = rpi; cp = cpi; } if (rp > rel_installdir) /* Unexpected: The curr_installdir does not end with rel_installdir. */ return NULL; { size_t curr_prefix_len = cp - curr_installdir; char *curr_prefix; curr_prefix = (char *) xmalloc (curr_prefix_len + 1); #ifdef NO_XMALLOC if (curr_prefix == NULL) return NULL; #endif memcpy (curr_prefix, curr_installdir, curr_prefix_len); curr_prefix[curr_prefix_len] = '\0'; return curr_prefix; } } } #endif /* !IN_LIBRARY || PIC */ #if defined PIC && defined INSTALLDIR /* Full pathname of shared library, or NULL. */ static char *shared_library_fullname; #if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ /* Determine the full pathname of the shared library when it is loaded. */ BOOL WINAPI DllMain (HINSTANCE module_handle, DWORD event, LPVOID reserved) { (void) reserved; if (event == DLL_PROCESS_ATTACH) { /* The DLL is being loaded into an application's address range. */ static char location[MAX_PATH]; if (!GetModuleFileName (module_handle, location, sizeof (location))) /* Shouldn't happen. */ return FALSE; if (!IS_PATH_WITH_DIR (location)) /* Shouldn't happen. */ return FALSE; { #if defined __CYGWIN__ /* On Cygwin, we need to convert paths coming from Win32 system calls to the Unix-like slashified notation. */ static char location_as_posix_path[2 * MAX_PATH]; /* There's no error return defined for cygwin_conv_to_posix_path. See cygwin-api/func-cygwin-conv-to-posix-path.html. Does it overflow the buffer of expected size MAX_PATH or does it truncate the path? I don't know. Let's catch both. */ cygwin_conv_to_posix_path (location, location_as_posix_path); location_as_posix_path[MAX_PATH - 1] = '\0'; if (strlen (location_as_posix_path) >= MAX_PATH - 1) /* A sign of buffer overflow or path truncation. */ return FALSE; shared_library_fullname = strdup (location_as_posix_path); #else shared_library_fullname = strdup (location); #endif } } return TRUE; } #else /* Unix except Cygwin */ static void find_shared_library_fullname () { #if defined __linux__ && __GLIBC__ >= 2 /* Linux has /proc/self/maps. glibc 2 has the getline() function. */ FILE *fp; /* Open the current process' maps file. It describes one VMA per line. */ fp = fopen ("/proc/self/maps", "r"); if (fp) { unsigned long address = (unsigned long) &find_shared_library_fullname; for (;;) { unsigned long start, end; int c; if (fscanf (fp, "%lx-%lx", &start, &end) != 2) break; if (address >= start && address <= end - 1) { /* Found it. Now see if this line contains a filename. */ while (c = getc (fp), c != EOF && c != '\n' && c != '/') continue; if (c == '/') { size_t size; int len; ungetc (c, fp); shared_library_fullname = NULL; size = 0; len = getline (&shared_library_fullname, &size, fp); if (len >= 0) { /* Success: filled shared_library_fullname. */ if (len > 0 && shared_library_fullname[len - 1] == '\n') shared_library_fullname[len - 1] = '\0'; } } break; } while (c = getc (fp), c != EOF && c != '\n') continue; } fclose (fp); } #endif } #endif /* (WIN32 or Cygwin) / (Unix except Cygwin) */ /* Return the full pathname of the current shared library. Return NULL if unknown. Guaranteed to work only on Linux, Cygwin and Woe32. */ static char * get_shared_library_fullname () { #if !(defined _WIN32 || defined __WIN32__ || defined __CYGWIN__) static bool tried_find_shared_library_fullname; if (!tried_find_shared_library_fullname) { find_shared_library_fullname (); tried_find_shared_library_fullname = true; } #endif return shared_library_fullname; } #endif /* PIC */ /* Returns the pathname, relocated according to the current installation directory. */ const char * relocate (const char *pathname) { #if defined PIC && defined INSTALLDIR static int initialized; /* Initialization code for a shared library. */ if (!initialized) { /* At this point, orig_prefix and curr_prefix likely have already been set through the main program's set_program_name_and_installdir function. This is sufficient in the case that the library has initially been installed in the same orig_prefix. But we can do better, to also cover the cases that 1. it has been installed in a different prefix before being moved to orig_prefix and (later) to curr_prefix, 2. unlike the program, it has not moved away from orig_prefix. */ const char *orig_installprefix = INSTALLPREFIX; const char *orig_installdir = INSTALLDIR; const char *curr_prefix_better; curr_prefix_better = compute_curr_prefix (orig_installprefix, orig_installdir, get_shared_library_fullname ()); if (curr_prefix_better == NULL) curr_prefix_better = curr_prefix; set_relocation_prefix (orig_installprefix, curr_prefix_better); initialized = 1; } #endif /* Note: It is not necessary to perform case insensitive comparison here, even for DOS-like filesystems, because the pathname argument was typically created from the same Makefile variable as orig_prefix came from. */ if (orig_prefix != NULL && curr_prefix != NULL && strncmp (pathname, orig_prefix, orig_prefix_len) == 0) { if (pathname[orig_prefix_len] == '\0') /* pathname equals orig_prefix. */ return curr_prefix; if (ISSLASH (pathname[orig_prefix_len])) { /* pathname starts with orig_prefix. */ const char *pathname_tail = &pathname[orig_prefix_len]; char *result = (char *) xmalloc (curr_prefix_len + strlen (pathname_tail) + 1); #ifdef NO_XMALLOC if (result != NULL) #endif { memcpy (result, curr_prefix, curr_prefix_len); strcpy (result + curr_prefix_len, pathname_tail); return result; } } } /* Nothing to relocate. */ return pathname; } #endif KCemu-0.5.1/intl/localcharset.h0000644001050700006200000000256311321666453016005 0ustar glaubitzfbedv/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2003 Free Software Foundation, Inc. This file is part of the GNU CHARSET Library. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifndef _LOCALCHARSET_H #define _LOCALCHARSET_H #ifdef __cplusplus extern "C" { #endif /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed in config.charset. The result must not be freed; it is statically allocated. If the canonical name cannot be determined, the result is a non-canonical name. */ extern const char * locale_charset (void); #ifdef __cplusplus } #endif #endif /* _LOCALCHARSET_H */ KCemu-0.5.1/intl/dcngettext.c0000644001050700006200000000347411321666453015507 0ustar glaubitzfbedv/* Implementation of the dcngettext(3) function. Copyright (C) 1995-1999, 2000-2003 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define DCNGETTEXT __dcngettext # define DCIGETTEXT __dcigettext #else # define DCNGETTEXT libintl_dcngettext # define DCIGETTEXT libintl_dcigettext #endif /* Look up MSGID in the DOMAINNAME message catalog for the current CATEGORY locale. */ char * DCNGETTEXT (const char *domainname, const char *msgid1, const char *msgid2, unsigned long int n, int category) { return DCIGETTEXT (domainname, msgid1, msgid2, 1, n, category); } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__dcngettext, dcngettext); #endif KCemu-0.5.1/intl/libintl.rc0000644001050700006200000000323311340261610015131 0ustar glaubitzfbedv/* Resources for intl.dll */ #include VS_VERSION_INFO VERSIONINFO FILEVERSION PACKAGE_VERSION_MAJOR,PACKAGE_VERSION_MINOR,PACKAGE_VERSION_SUBMINOR,0 PRODUCTVERSION PACKAGE_VERSION_MAJOR,PACKAGE_VERSION_MINOR,PACKAGE_VERSION_SUBMINOR,0 FILEFLAGSMASK 0x3fL /* VS_FFI_FILEFLAGSMASK */ #ifdef _DEBUG FILEFLAGS 0x1L /* VS_FF_DEBUG */ #else FILEFLAGS 0x0L #endif FILEOS 0x10004L /* VOS_DOS_WINDOWS32 */ FILETYPE 0x2L /* VFT_DLL */ FILESUBTYPE 0x0L /* VFT2_UNKNOWN */ BEGIN BLOCK "StringFileInfo" BEGIN BLOCK "04090000" /* Lang = US English, Charset = ASCII */ BEGIN VALUE "Comments", "This library is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License. You should have received a copy of the GNU Library General Public License along with this library; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA\0" VALUE "CompanyName", "Free Software Foundation\0" VALUE "FileDescription", "LGPLed libintl for Windows NT/2000/XP/Vista and Windows 95/98/ME\0" VALUE "FileVersion", PACKAGE_VERSION_STRING "\0" VALUE "InternalName", "intl.dll\0" VALUE "LegalCopyright", "Copyright (C) 1995-2007\0" VALUE "LegalTrademarks", "\0" VALUE "OriginalFilename", "intl.dll\0" VALUE "ProductName", "libintl: accessing NLS message catalogs\0" VALUE "ProductVersion", PACKAGE_VERSION_STRING "\0" END END BLOCK "VarFileInfo" BEGIN VALUE "Translation", 0x0409, 0 /* US English, ASCII */ END END KCemu-0.5.1/intl/hash-string.h0000644001050700006200000000256611321666453015573 0ustar glaubitzfbedv/* Description of GNU message catalog format: string hashing function. Copyright (C) 1995, 1997-1998, 2000-2003, 2005 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* @@ end of prolog @@ */ /* We assume to have `unsigned long int' value with at least 32 bits. */ #define HASHWORDBITS 32 #ifndef _LIBC # ifdef IN_LIBINTL # define __hash_string libintl_hash_string # else # define __hash_string hash_string # endif #endif /* Defines the so called `hashpjw' function by P.J. Weinberger [see Aho/Sethi/Ullman, COMPILERS: Principles, Techniques and Tools, 1986, 1987 Bell Telephone Laboratories, Inc.] */ extern unsigned long int __hash_string (const char *str_param); KCemu-0.5.1/intl/finddomain.c0000644001050700006200000001367311340261610015433 0ustar glaubitzfbedv/* Handle list of needed message catalogs Copyright (C) 1995-1999, 2000-2001, 2003-2007 Free Software Foundation, Inc. Written by Ulrich Drepper , 1995. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include #include #if defined HAVE_UNISTD_H || defined _LIBC # include #endif #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* Handle multi-threaded applications. */ #ifdef _LIBC # include # define gl_rwlock_define_initialized __libc_rwlock_define_initialized # define gl_rwlock_rdlock __libc_rwlock_rdlock # define gl_rwlock_wrlock __libc_rwlock_wrlock # define gl_rwlock_unlock __libc_rwlock_unlock #else # include "lock.h" #endif /* @@ end of prolog @@ */ /* List of already loaded domains. */ static struct loaded_l10nfile *_nl_loaded_domains; /* Return a data structure describing the message catalog described by the DOMAINNAME and CATEGORY parameters with respect to the currently established bindings. */ struct loaded_l10nfile * internal_function _nl_find_domain (const char *dirname, char *locale, const char *domainname, struct binding *domainbinding) { struct loaded_l10nfile *retval; const char *language; const char *modifier; const char *territory; const char *codeset; const char *normalized_codeset; const char *alias_value; int mask; /* LOCALE can consist of up to four recognized parts for the XPG syntax: language[_territory][.codeset][@modifier] Beside the first part all of them are allowed to be missing. If the full specified locale is not found, the less specific one are looked for. The various parts will be stripped off according to the following order: (1) codeset (2) normalized codeset (3) territory (4) modifier */ /* We need to protect modifying the _NL_LOADED_DOMAINS data. */ gl_rwlock_define_initialized (static, lock); gl_rwlock_rdlock (lock); /* If we have already tested for this locale entry there has to be one data set in the list of loaded domains. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, 0, locale, NULL, NULL, NULL, NULL, domainname, 0); gl_rwlock_unlock (lock); if (retval != NULL) { /* We know something about this locale. */ int cnt; if (retval->decided <= 0) _nl_load_domain (retval, domainbinding); if (retval->data != NULL) return retval; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided <= 0) _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; } return retval; /* NOTREACHED */ } /* See whether the locale value is an alias. If yes its value *overwrites* the alias name. No test for the original value is done. */ alias_value = _nl_expand_alias (locale); if (alias_value != NULL) { #if defined _LIBC || defined HAVE_STRDUP locale = strdup (alias_value); if (locale == NULL) return NULL; #else size_t len = strlen (alias_value) + 1; locale = (char *) malloc (len); if (locale == NULL) return NULL; memcpy (locale, alias_value, len); #endif } /* Now we determine the single parts of the locale name. First look for the language. Termination symbols are `_', '.', and `@'. */ mask = _nl_explode_name (locale, &language, &modifier, &territory, &codeset, &normalized_codeset); if (mask == -1) /* This means we are out of core. */ return NULL; /* We need to protect modifying the _NL_LOADED_DOMAINS data. */ gl_rwlock_wrlock (lock); /* Create all possible locale entries which might be interested in generalization. */ retval = _nl_make_l10nflist (&_nl_loaded_domains, dirname, strlen (dirname) + 1, mask, language, territory, codeset, normalized_codeset, modifier, domainname, 1); gl_rwlock_unlock (lock); if (retval == NULL) /* This means we are out of core. */ goto out; if (retval->decided <= 0) _nl_load_domain (retval, domainbinding); if (retval->data == NULL) { int cnt; for (cnt = 0; retval->successor[cnt] != NULL; ++cnt) { if (retval->successor[cnt]->decided <= 0) _nl_load_domain (retval->successor[cnt], domainbinding); if (retval->successor[cnt]->data != NULL) break; } } /* The room for an alias was dynamically allocated. Free it now. */ if (alias_value != NULL) free (locale); out: /* The space for normalized_codeset is dynamically allocated. Free it. */ if (mask & XPG_NORM_CODESET) free ((void *) normalized_codeset); return retval; } #ifdef _LIBC /* This is called from iconv/gconv_db.c's free_mem, as locales must be freed before freeing gconv steps arrays. */ void __libc_freeres_fn_section _nl_finddomain_subfreeres () { struct loaded_l10nfile *runp = _nl_loaded_domains; while (runp != NULL) { struct loaded_l10nfile *here = runp; if (runp->data != NULL) _nl_unload_domain ((struct loaded_domain *) runp->data); runp = runp->next; free ((char *) here->filename); free (here); } } #endif KCemu-0.5.1/intl/os2compat.c0000644001050700006200000000550711321666453015244 0ustar glaubitzfbedv/* OS/2 compatibility functions. Copyright (C) 2001-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #define OS2_AWARE #ifdef HAVE_CONFIG_H #include #endif #include #include #include /* A version of getenv() that works from DLLs */ extern unsigned long DosScanEnv (const unsigned char *pszName, unsigned char **ppszValue); char * _nl_getenv (const char *name) { unsigned char *value; if (DosScanEnv (name, &value)) return NULL; else return value; } /* A fixed size buffer. */ char libintl_nl_default_dirname[MAXPATHLEN+1]; char *_nlos2_libdir = NULL; char *_nlos2_localealiaspath = NULL; char *_nlos2_localedir = NULL; static __attribute__((constructor)) void nlos2_initialize () { char *root = getenv ("UNIXROOT"); char *gnulocaledir = getenv ("GNULOCALEDIR"); _nlos2_libdir = gnulocaledir; if (!_nlos2_libdir) { if (root) { size_t sl = strlen (root); _nlos2_libdir = (char *) malloc (sl + strlen (LIBDIR) + 1); memcpy (_nlos2_libdir, root, sl); memcpy (_nlos2_libdir + sl, LIBDIR, strlen (LIBDIR) + 1); } else _nlos2_libdir = LIBDIR; } _nlos2_localealiaspath = gnulocaledir; if (!_nlos2_localealiaspath) { if (root) { size_t sl = strlen (root); _nlos2_localealiaspath = (char *) malloc (sl + strlen (LOCALE_ALIAS_PATH) + 1); memcpy (_nlos2_localealiaspath, root, sl); memcpy (_nlos2_localealiaspath + sl, LOCALE_ALIAS_PATH, strlen (LOCALE_ALIAS_PATH) + 1); } else _nlos2_localealiaspath = LOCALE_ALIAS_PATH; } _nlos2_localedir = gnulocaledir; if (!_nlos2_localedir) { if (root) { size_t sl = strlen (root); _nlos2_localedir = (char *) malloc (sl + strlen (LOCALEDIR) + 1); memcpy (_nlos2_localedir, root, sl); memcpy (_nlos2_localedir + sl, LOCALEDIR, strlen (LOCALEDIR) + 1); } else _nlos2_localedir = LOCALEDIR; } if (strlen (_nlos2_localedir) <= MAXPATHLEN) strcpy (libintl_nl_default_dirname, _nlos2_localedir); } KCemu-0.5.1/intl/log.c0000644001050700006200000000623111321666453014111 0ustar glaubitzfbedv/* Log file output. Copyright (C) 2003, 2005 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Bruno Haible . */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include /* Handle multi-threaded applications. */ #ifdef _LIBC # include #else # include "lock.h" #endif /* Print an ASCII string with quotes and escape sequences where needed. */ static void print_escaped (FILE *stream, const char *str) { putc ('"', stream); for (; *str != '\0'; str++) if (*str == '\n') { fputs ("\\n\"", stream); if (str[1] == '\0') return; fputs ("\n\"", stream); } else { if (*str == '"' || *str == '\\') putc ('\\', stream); putc (*str, stream); } putc ('"', stream); } static char *last_logfilename = NULL; static FILE *last_logfile = NULL; __libc_lock_define_initialized (static, lock) static inline void _nl_log_untranslated_locked (const char *logfilename, const char *domainname, const char *msgid1, const char *msgid2, int plural) { FILE *logfile; /* Can we reuse the last opened logfile? */ if (last_logfilename == NULL || strcmp (logfilename, last_logfilename) != 0) { /* Close the last used logfile. */ if (last_logfilename != NULL) { if (last_logfile != NULL) { fclose (last_logfile); last_logfile = NULL; } free (last_logfilename); last_logfilename = NULL; } /* Open the logfile. */ last_logfilename = (char *) malloc (strlen (logfilename) + 1); if (last_logfilename == NULL) return; strcpy (last_logfilename, logfilename); last_logfile = fopen (logfilename, "a"); if (last_logfile == NULL) return; } logfile = last_logfile; fprintf (logfile, "domain "); print_escaped (logfile, domainname); fprintf (logfile, "\nmsgid "); print_escaped (logfile, msgid1); if (plural) { fprintf (logfile, "\nmsgid_plural "); print_escaped (logfile, msgid2); fprintf (logfile, "\nmsgstr[0] \"\"\n"); } else fprintf (logfile, "\nmsgstr \"\"\n"); putc ('\n', logfile); } /* Add to the log file an entry denoting a failed translation. */ void _nl_log_untranslated (const char *logfilename, const char *domainname, const char *msgid1, const char *msgid2, int plural) { __libc_lock_lock (lock); _nl_log_untranslated_locked (logfilename, domainname, msgid1, msgid2, plural); __libc_lock_unlock (lock); } KCemu-0.5.1/intl/textdomain.c0000644001050700006200000000746611340261610015502 0ustar glaubitzfbedv/* Implementation of the textdomain(3) function. Copyright (C) 1995-1998, 2000-2003, 2005-2006 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #ifdef HAVE_CONFIG_H # include #endif #include #include #include "gettextP.h" #ifdef _LIBC # include #else # include "libgnuintl.h" #endif /* Handle multi-threaded applications. */ #ifdef _LIBC # include # define gl_rwlock_define __libc_rwlock_define # define gl_rwlock_wrlock __libc_rwlock_wrlock # define gl_rwlock_unlock __libc_rwlock_unlock #else # include "lock.h" #endif /* @@ end of prolog @@ */ /* Names for the libintl functions are a problem. They must not clash with existing names and they should follow ANSI C. But this source code is also used in GNU C Library where the names have a __ prefix. So we have to make a difference here. */ #ifdef _LIBC # define TEXTDOMAIN __textdomain # ifndef strdup # define strdup(str) __strdup (str) # endif #else # define TEXTDOMAIN libintl_textdomain #endif /* Lock variable to protect the global data in the gettext implementation. */ gl_rwlock_define (extern, _nl_state_lock attribute_hidden) /* Set the current default message catalog to DOMAINNAME. If DOMAINNAME is null, return the current default. If DOMAINNAME is "", reset to the default of "messages". */ char * TEXTDOMAIN (const char *domainname) { char *new_domain; char *old_domain; /* A NULL pointer requests the current setting. */ if (domainname == NULL) return (char *) _nl_current_default_domain; gl_rwlock_wrlock (_nl_state_lock); old_domain = (char *) _nl_current_default_domain; /* If domain name is the null string set to default domain "messages". */ if (domainname[0] == '\0' || strcmp (domainname, _nl_default_default_domain) == 0) { _nl_current_default_domain = _nl_default_default_domain; new_domain = (char *) _nl_current_default_domain; } else if (strcmp (domainname, old_domain) == 0) /* This can happen and people will use it to signal that some environment variable changed. */ new_domain = old_domain; else { /* If the following malloc fails `_nl_current_default_domain' will be NULL. This value will be returned and so signals we are out of core. */ #if defined _LIBC || defined HAVE_STRDUP new_domain = strdup (domainname); #else size_t len = strlen (domainname) + 1; new_domain = (char *) malloc (len); if (new_domain != NULL) memcpy (new_domain, domainname, len); #endif if (new_domain != NULL) _nl_current_default_domain = new_domain; } /* We use this possibility to signal a change of the loaded catalogs since this is most likely the case and there is no other easy we to do it. Do it only when the call was successful. */ if (new_domain != NULL) { ++_nl_msg_cat_cntr; if (old_domain != new_domain && old_domain != _nl_default_default_domain) free (old_domain); } gl_rwlock_unlock (_nl_state_lock); return new_domain; } #ifdef _LIBC /* Alias for function name in GNU C Library. */ weak_alias (__textdomain, textdomain); #endif KCemu-0.5.1/intl/os2compat.h0000644001050700006200000000302611321666453015243 0ustar glaubitzfbedv/* OS/2 compatibility defines. This file is intended to be included from config.h Copyright (C) 2001-2002 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Library General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public License for more details. You should have received a copy of the GNU Library General Public License along with this program; if not, write to the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* When included from os2compat.h we need all the original definitions */ #ifndef OS2_AWARE #undef LIBDIR #define LIBDIR _nlos2_libdir extern char *_nlos2_libdir; #undef LOCALEDIR #define LOCALEDIR _nlos2_localedir extern char *_nlos2_localedir; #undef LOCALE_ALIAS_PATH #define LOCALE_ALIAS_PATH _nlos2_localealiaspath extern char *_nlos2_localealiaspath; #endif #undef HAVE_STRCASECMP #define HAVE_STRCASECMP 1 #define strcasecmp stricmp #define strncasecmp strnicmp /* We have our own getenv() which works even if library is compiled as DLL */ #define getenv _nl_getenv /* Older versions of gettext used -1 as the value of LC_MESSAGES */ #define LC_MESSAGES_COMPAT (-1) KCemu-0.5.1/mkinstalldirs0000755001050700006200000000341110527416074015020 0ustar glaubitzfbedv#! /bin/sh # mkinstalldirs --- make directory hierarchy # Author: Noah Friedman # Created: 1993-05-16 # Public domain errstatus=0 dirmode="" usage="\ Usage: mkinstalldirs [-h] [--help] [-m mode] dir ..." # process command line arguments while test $# -gt 0 ; do case "${1}" in -h | --help | --h* ) # -h for help echo "${usage}" 1>&2; exit 0 ;; -m ) # -m PERM arg shift test $# -eq 0 && { echo "${usage}" 1>&2; exit 1; } dirmode="${1}" shift ;; -- ) shift; break ;; # stop option processing -* ) echo "${usage}" 1>&2; exit 1 ;; # unknown option * ) break ;; # first non-opt arg esac done for file do if test -d "$file"; then shift else break fi done case $# in 0) exit 0 ;; esac case $dirmode in '') if mkdir -p -- . 2>/dev/null; then echo "mkdir -p -- $*" exec mkdir -p -- "$@" fi ;; *) if mkdir -m "$dirmode" -p -- . 2>/dev/null; then echo "mkdir -m $dirmode -p -- $*" exec mkdir -m "$dirmode" -p -- "$@" fi ;; esac for file do set fnord `echo ":$file" | sed -ne 's/^:\//#/;s/^://;s/\// /g;s/^#/\//;p'` shift pathcomp= for d do pathcomp="$pathcomp$d" case "$pathcomp" in -* ) pathcomp=./$pathcomp ;; esac if test ! -d "$pathcomp"; then echo "mkdir $pathcomp" mkdir "$pathcomp" || lasterr=$? if test ! -d "$pathcomp"; then errstatus=$lasterr else if test ! -z "$dirmode"; then echo "chmod $dirmode $pathcomp" lasterr="" chmod "$dirmode" "$pathcomp" || lasterr=$? if test ! -z "$lasterr"; then errstatus=$lasterr fi fi fi fi pathcomp="$pathcomp/" done done exit $errstatus # Local Variables: # mode: shell-script # sh-indentation: 3 # End: # mkinstalldirs ends here KCemu-0.5.1/INSTALL0000644001050700006200000002202410527416074013244 0ustar glaubitzfbedvCopyright 1994, 1995, 1996, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is free documentation; the Free Software Foundation gives unlimited permission to copy, distribute and modify it. Basic Installation ================== These are generic installation instructions. The `configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a `Makefile' in each directory of the package. It may also create one or more `.h' files containing system-dependent definitions. Finally, it creates a shell script `config.status' that you can run in the future to recreate the current configuration, and a file `config.log' containing compiler output (useful mainly for debugging `configure'). It can also use an optional file (typically called `config.cache' and enabled with `--cache-file=config.cache' or simply `-C') that saves the results of its tests to speed up reconfiguring. (Caching is disabled by default to prevent problems with accidental use of stale cache files.) If you need to do unusual things to compile the package, please try to figure out how `configure' could check whether to do them, and mail diffs or instructions to the address given in the `README' so they can be considered for the next release. If you are using the cache, and at some point `config.cache' contains results you don't want to keep, you may remove or edit it. The file `configure.ac' (or `configure.in') is used to create `configure' by a program called `autoconf'. You only need `configure.ac' if you want to change it or regenerate `configure' using a newer version of `autoconf'. The simplest way to compile this package is: 1. `cd' to the directory containing the package's source code and type `./configure' to configure the package for your system. If you're using `csh' on an old version of System V, you might need to type `sh ./configure' instead to prevent `csh' from trying to execute `configure' itself. Running `configure' takes awhile. While running, it prints some messages telling which features it is checking for. 2. Type `make' to compile the package. 3. Optionally, type `make check' to run any self-tests that come with the package. 4. Type `make install' to install the programs and any data files and documentation. 5. You can remove the program binaries and object files from the source code directory by typing `make clean'. To also remove the files that `configure' created (so you can compile the package for a different kind of computer), type `make distclean'. There is also a `make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the `configure' script does not know about. Run `./configure --help' for details on some of the pertinent environment variables. You can give `configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c89 CFLAGS=-O2 LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you must use a version of `make' that supports the `VPATH' variable, such as GNU `make'. `cd' to the directory where you want the object files and executables to go and run the `configure' script. `configure' automatically checks for the source code in the directory that `configure' is in and in `..'. If you have to use a `make' that does not support the `VPATH' variable, you have to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use `make distclean' before reconfiguring for another architecture. Installation Names ================== By default, `make install' will install the package's files in `/usr/local/bin', `/usr/local/man', etc. You can specify an installation prefix other than `/usr/local' by giving `configure' the option `--prefix=PATH'. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you give `configure' the option `--exec-prefix=PATH', the package will use PATH as the prefix for installing programs and libraries. Documentation and other data files will still use the regular prefix. In addition, if you use an unusual directory layout you can give options like `--bindir=PATH' to specify different values for particular kinds of files. Run `configure --help' for a list of the directories you can set and what kinds of files go in them. If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving `configure' the option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'. Optional Features ================= Some packages pay attention to `--enable-FEATURE' options to `configure', where FEATURE indicates an optional part of the package. They may also pay attention to `--with-PACKAGE' options, where PACKAGE is something like `gnu-as' or `x' (for the X Window System). The `README' should mention any `--enable-' and `--with-' options that the package recognizes. For packages that use the X Window System, `configure' can usually find the X include and library files automatically, but if it doesn't, you can use the `configure' options `--x-includes=DIR' and `--x-libraries=DIR' to specify their locations. Specifying the System Type ========================== There may be some features `configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, `configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the `--build=TYPE' option. TYPE can either be a short name for the system type, such as `sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file `config.sub' for the possible values of each field. If `config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the `--target=TYPE' option to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with `--host=TYPE'. Sharing Defaults ================ If you want to set default values for `configure' scripts to share, you can create a site shell script called `config.site' that gives default values for variables like `CC', `cache_file', and `prefix'. `configure' looks for `PREFIX/share/config.site' if it exists, then `PREFIX/etc/config.site' if it exists. Or, you can set the `CONFIG_SITE' environment variable to the location of the site script. A warning: not all `configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to `configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the `configure' command line, using `VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc will cause the specified gcc to be used as the C compiler (unless it is overridden in the site shell script). `configure' Invocation ====================== `configure' recognizes the following options to control how it operates. `--help' `-h' Print a summary of the options to `configure', and exit. `--version' `-V' Print the version of Autoconf used to generate the `configure' script, and exit. `--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally `config.cache'. FILE defaults to `/dev/null' to disable caching. `--config-cache' `-C' Alias for `--cache-file=config.cache'. `--quiet' `--silent' `-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to `/dev/null' (any error messages will still be shown). `--srcdir=DIR' Look for the package's source code in directory DIR. Usually `configure' can determine that directory automatically. `configure' also accepts some other, not widely useful, options. Run `configure --help' for more details. KCemu-0.5.1/NEWS0000644001050700006200000001266310527416074012722 0ustar glaubitzfbedv## # $Id: NEWS,v 1.10 2002/10/31 16:39:53 torsten_paul Exp $ # KCemu 0.3.8 * initial support for GIDE interface that allows to connect up to two IDE hard disks (or CF-Cards) to the KC85 * added module digital in/out (M001) that contains one PIO and one CTC * added emulation of the so called KC85/5 which is a KC85/4 with expanded RAM (replaced internal 64k system RAM with 256k) and ROM (16k CAOS, 32k BASIC+USER); it uses the new CAOS 4.4 * fixed KC85/4 keyboard emulation * added emulation of the Kramer Microcomputer (from the book "Praktische Microcomputertechnik" and the Mugler PC (PC/M) presented in the magazine "Funkamateur" * added segmented RAM memory modules M036 (128k), M032 (256k), M034 (512k), M035 (1M) and M035x4 (4M) * fixed 16k RAM module M022 * fixed memory bank switching of RAM8 * added config file entry and command line option to enable/disable the display effects for scaled screen output * added emulation of the display effect caused by screen memory access on KC85/2 and KC85/3 * fixed basic module for KC85/2 * added support for basicode files (incomplete, but it's possible to add basicode files in ASCII format to a tape archive and load them using the load function of a bascoder) KCemu 0.3.7 * Windows Port using GTK-Win32 * added emulation of the Polycomputer 880 * upgrade to GTK+-2.2.1 * fixed display cache handling * fixed keyboard reset bug * relaxed file type checking for standard tape files; now most .KCC files should be loadable * fixed cpu timing and display resolutions for BIC/A5105 * fixed text output in graphic mode for BIC/A5105 * added 192 KByte RAM/EPROM module for KC85/1 * added joystick module M008 * added Z1013 emulation * added 256k RAM-Floppy module for Z1013 * added BIC/A5105 emulation * added CPM-Z9 emulation (CP/M for KC87 using a floppy and a 64k RAM module) * started emulation of the plotter XY4131 * added autostart for BASIC programs in KC85/1 and KC87 mode (BASIC must be initialized first!); autostart routine is described in MP 3/89, page 86 ("Basic-Run im OS fr die KC87-Familie") * handle BASIC DATA files (signature 0xd4, 0xd4, 0xd4) produced by CSAVE*"FILENAME";ARRAYNAME and BASIC LIST files (signature 0xd5, 0xd5, 0xd5) produced by LIST#1"FILENAME" * work with both libsndfile-0.0.x and libsndfile-1.0.x * added simple program to convert TeleDisk images to uncompressed disk dumps * added loader for disk images produced by the Sydex TeleDisk program (only normal compression for now) * lots of compile fixes for gcc-3.2 * added the notion of computer variants to allow to differentiate between e.g. the kc87.11 and kc87.21 model (which have different basic and system ROMs) * fixed memory initialization for kc85/1 and kc87 (fixes MAZOGS) * output pin of timer channel 2 is connected to channel 3 trigger input pin in kc85/1 mode; fixes system time calculation * added missing initialization for kc85/1 rom module; fixes core dump on exit KCemu 0.3.6 * added emulation of screen border and 20 line display mode for KC 85/1 and KC 87 * removed BASIC ROM from KC 85/1; it doesn't have a BASIC interpreter built in * changed memory layout for KC 85/4; fixes FRACTAL4 * added menu entry to disable the emulation speed limit * fixed calculation problem of the main CPUs R register; this fixes the missing monsters in JUNGLE * added library to load various audio files * some juggling in the display code again, now both the KC 85/3 and KC 85/4 support the color scrolling effect in BoulderDash KCemu 0.3.5 * added emulation of the LC 80 computer (thanks to Holger Krull for providing the necessary information at www.lc80.de) * big internal changes in the display code; there is now a generic display layer to simplify the porting to other architectures * started BeOS port to check the generic display layer -- not quite usable due to some threading bugs and missing user interface * renaming of files in tape archives is now possible * allow adding .TAP files with multiple files with the same name (by renaming the duplicated names) * fixed some tape handling bugs * fixed initialization bug in the display code KCemu 0.3.4 * new switch for kctape to add KC85/1 files (only needed for COM files) * bugfix for KC85/1 tape files * simple sound emulation (still buggy, sound is sometimes not turned off) -- requires libSDL * implemented IRM switch for KC85/4 * changed interrupt code to handle daisy chaining (makes pharao playable, but still with display errors) KCemu 0.3.3 * fixed bug in flash handling (diamonds in digger didn't show correctly after reset) * fixed tape handling, stop button working again * fixed typo that prevented the busdrivers to show up in the module window * added disk image with CP/M tools from the KC-Club * allow compressed disk images in 22DISK format * fixed floppy selection when writing data, file copy (e.g. from disk B: to disk C:) should now work correctly * disk emulation for unix directories (don't try to attach directories with many (e.g. > 100) or big files!) * emulate 4 disks now * disk handling partially functional * use cppunit for unit tests KCemu 0.3.2 * released a debian binary package of KCemu v0.3.2 * added manpages because the debian packaging system requires them KCemu-0.5.1/aclocal.m40000644001050700006200000013511411345001704014045 0ustar glaubitzfbedv# generated automatically by aclocal 1.11.1 -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.65],, [m4_warning([this file was generated for autoconf 2.65. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically `autoreconf'.])]) # pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # # Copyright © 2004 Scott James Remnant . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, write to the Free Software # Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # PKG_PROG_PKG_CONFIG([MIN-VERSION]) # ---------------------------------- AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_PATH)?$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])dnl if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])# PKG_PROG_PKG_CONFIG # PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) # # Check to see whether a particular set of modules exists. Similar # to PKG_CHECK_MODULES(), but does not set variables or print errors. # # # Similar to PKG_CHECK_MODULES, make sure that the first instance of # this or PKG_CHECK_MODULES is called, or make sure to call # PKG_CHECK_EXISTS manually # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_ifval([$2], [$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) # _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) # --------------------------------------------- m4_define([_PKG_CONFIG], [if test -n "$PKG_CONFIG"; then if test -n "$$1"; then pkg_cv_[]$1="$$1" else PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`], [pkg_failed=yes]) fi else pkg_failed=untried fi[]dnl ])# _PKG_CONFIG # _PKG_SHORT_ERRORS_SUPPORTED # ----------------------------- AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])# _PKG_SHORT_ERRORS_SUPPORTED # PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], # [ACTION-IF-NOT-FOUND]) # # # Note that if there is a possibility the first call to # PKG_CHECK_MODULES might not happen, you should be sure to include an # explicit call to PKG_PROG_PKG_CONFIG in your configure.ac # # # -------------------------------------------------------------- AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --errors-to-stdout --print-errors "$2"` else $1[]_PKG_ERRORS=`$PKG_CONFIG --errors-to-stdout --print-errors "$2"` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD ifelse([$4], , [AC_MSG_ERROR(dnl [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT ])], [AC_MSG_RESULT([no]) $4]) elif test $pkg_failed = untried; then ifelse([$4], , [AC_MSG_FAILURE(dnl [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see .])], [$4]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) ifelse([$3], , :, [$3]) fi[]dnl ])# PKG_CHECK_MODULES # Configure paths for SDL # Sam Lantinga 9/21/99 # stolen from Manish Singh # stolen back from Frank Belew # stolen from Manish Singh # Shamelessly stolen from Owen Taylor dnl AM_PATH_SDL([MINIMUM-VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]]) dnl Test for SDL, and define SDL_CFLAGS and SDL_LIBS dnl AC_DEFUN([AM_PATH_SDL], [dnl dnl Get the cflags and libraries from the sdl-config script dnl AC_ARG_WITH(sdl-prefix,[ --with-sdl-prefix=PFX Prefix where SDL is installed (optional)], sdl_prefix="$withval", sdl_prefix="") AC_ARG_WITH(sdl-exec-prefix,[ --with-sdl-exec-prefix=PFX Exec prefix where SDL is installed (optional)], sdl_exec_prefix="$withval", sdl_exec_prefix="") AC_ARG_ENABLE(sdltest, [ --disable-sdltest Do not try to compile and run a test SDL program], , enable_sdltest=yes) if test x$sdl_exec_prefix != x ; then sdl_config_args="$sdl_config_args --exec-prefix=$sdl_exec_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_exec_prefix/bin/sdl-config fi fi if test x$sdl_prefix != x ; then sdl_config_args="$sdl_config_args --prefix=$sdl_prefix" if test x${SDL_CONFIG+set} != xset ; then SDL_CONFIG=$sdl_prefix/bin/sdl-config fi fi if test "x$prefix" != xNONE; then PATH="$prefix/bin:$prefix/usr/bin:$PATH" fi AC_PATH_PROG(SDL_CONFIG, sdl-config, no, [$PATH]) min_sdl_version=ifelse([$1], ,0.11.0,$1) AC_MSG_CHECKING(for SDL - version >= $min_sdl_version) no_sdl="" if test "$SDL_CONFIG" = "no" ; then no_sdl=yes else SDL_CFLAGS=`$SDL_CONFIG $sdl_config_args --cflags` SDL_LIBS=`$SDL_CONFIG $sdl_config_args --libs` sdl_major_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` sdl_minor_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` sdl_micro_version=`$SDL_CONFIG $sdl_config_args --version | \ sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` if test "x$enable_sdltest" = "xyes" ; then ac_save_CFLAGS="$CFLAGS" ac_save_CXXFLAGS="$CXXFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $SDL_CFLAGS" CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" dnl dnl Now check if the installed SDL is sufficiently new. (Also sanity dnl checks the results of sdl-config to some extent dnl rm -f conf.sdltest AC_TRY_RUN([ #include #include #include #include "SDL.h" char* my_strdup (char *str) { char *new_str; if (str) { new_str = (char *)malloc ((strlen (str) + 1) * sizeof(char)); strcpy (new_str, str); } else new_str = NULL; return new_str; } int main (int argc, char *argv[]) { int major, minor, micro; char *tmp_version; /* This hangs on some systems (?) system ("touch conf.sdltest"); */ { FILE *fp = fopen("conf.sdltest", "a"); if ( fp ) fclose(fp); } /* HP/UX 9 (%@#!) writes to sscanf strings */ tmp_version = my_strdup("$min_sdl_version"); if (sscanf(tmp_version, "%d.%d.%d", &major, &minor, µ) != 3) { printf("%s, bad version string\n", "$min_sdl_version"); exit(1); } if (($sdl_major_version > major) || (($sdl_major_version == major) && ($sdl_minor_version > minor)) || (($sdl_major_version == major) && ($sdl_minor_version == minor) && ($sdl_micro_version >= micro))) { return 0; } else { printf("\n*** 'sdl-config --version' returned %d.%d.%d, but the minimum version\n", $sdl_major_version, $sdl_minor_version, $sdl_micro_version); printf("*** of SDL required is %d.%d.%d. If sdl-config is correct, then it is\n", major, minor, micro); printf("*** best to upgrade to the required version.\n"); printf("*** If sdl-config was wrong, set the environment variable SDL_CONFIG\n"); printf("*** to point to the correct copy of sdl-config, and remove the file\n"); printf("*** config.cache before re-running configure\n"); return 1; } } ],, no_sdl=yes,[echo $ac_n "cross compiling; assumed OK... $ac_c"]) CFLAGS="$ac_save_CFLAGS" CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi if test "x$no_sdl" = x ; then AC_MSG_RESULT(yes) ifelse([$2], , :, [$2]) else AC_MSG_RESULT(no) if test "$SDL_CONFIG" = "no" ; then echo "*** The sdl-config script installed by SDL could not be found" echo "*** If SDL was installed in PREFIX, make sure PREFIX/bin is in" echo "*** your path, or set the SDL_CONFIG environment variable to the" echo "*** full path to sdl-config." else if test -f conf.sdltest ; then : else echo "*** Could not run SDL test program, checking why..." CFLAGS="$CFLAGS $SDL_CFLAGS" CXXFLAGS="$CXXFLAGS $SDL_CFLAGS" LIBS="$LIBS $SDL_LIBS" AC_TRY_LINK([ #include #include "SDL.h" int main(int argc, char *argv[]) { return 0; } #undef main #define main K_and_R_C_main ], [ return 0; ], [ echo "*** The test program compiled, but did not run. This usually means" echo "*** that the run-time linker is not finding SDL or finding the wrong" echo "*** version of SDL. If it is not finding SDL, you'll need to set your" echo "*** LD_LIBRARY_PATH environment variable, or edit /etc/ld.so.conf to point" echo "*** to the installed location Also, make sure you have run ldconfig if that" echo "*** is required on your system" echo "***" echo "*** If you have an old version installed, it is best to remove it, although" echo "*** you may also be able to get things to work by modifying LD_LIBRARY_PATH"], [ echo "*** The test program failed to compile or link. See the file config.log for the" echo "*** exact error that occured. This usually means SDL was incorrectly installed" echo "*** or that you have moved SDL since it was installed. In the latter case, you" echo "*** may want to edit the sdl-config script: $SDL_CONFIG" ]) CFLAGS="$ac_save_CFLAGS" CXXFLAGS="$ac_save_CXXFLAGS" LIBS="$ac_save_LIBS" fi fi SDL_CFLAGS="" SDL_LIBS="" ifelse([$3], , :, [$3]) fi AC_SUBST(SDL_CFLAGS) AC_SUBST(SDL_LIBS) rm -f conf.sdltest ]) # Copyright (C) 2002, 2003, 2005, 2006, 2007, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.11' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.11.1], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.11.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to `$srcdir/foo'. In other projects, it is set to # `$srcdir', `$srcdir/..', or `$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is `.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [dnl Rely on autoconf to set up CDPATH properly. AC_PREREQ([2.50])dnl # expand $ac_aux_dir to an absolute path am_aux_dir=`cd $ac_aux_dir && pwd` ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997, 2000, 2001, 2003, 2004, 2005, 2006, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 9 # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ(2.52)dnl ifelse([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2009 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 10 # There are a few dirty hacks below to avoid letting `AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "GCJ", or "OBJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl ifelse([$1], CC, [depcc="$CC" am_compiler_list=], [$1], CXX, [depcc="$CXX" am_compiler_list=], [$1], OBJC, [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], UPC, [depcc="$UPC" am_compiler_list=], [$1], GCJ, [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named `D' -- because `-MD' means `put the output # in D'. mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using `: > sub/conftst$i.h' creates only sub/conftst1.h with # Solaris 8's {/usr,}/bin/sh. touch sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with `-c' and `-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle `-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # after this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvisualcpp | msvcmsys) # This compiler won't grok `-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE(dependency-tracking, [ --disable-dependency-tracking speeds up one-time build --enable-dependency-tracking do not reject slow dependency extractors]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. #serial 5 # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Autoconf 2.62 quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. case $CONFIG_FILES in *\'*) eval set x "$CONFIG_FILES" ;; *) set x $CONFIG_FILES ;; esac shift for mf do # Strip MF so we end up with the name of the file. mf=`echo "$mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile or not. # We used to match only the files named `Makefile.in', but # some people rename them; so instead we look at the file content. # Grep'ing the first line is not enough: some people post-process # each Makefile.in and add a new line on top of each file to say so. # Grep'ing the whole file is not good either: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then dirpart=`AS_DIRNAME("$mf")` else continue fi # Extract the definition of DEPDIR, am__include, and am__quote # from the Makefile without running `make'. DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"` test -z "$DEPDIR" && continue am__include=`sed -n 's/^am__include = //p' < "$mf"` test -z "am__include" && continue am__quote=`sed -n 's/^am__quote = //p' < "$mf"` # When using ansi2knr, U may be empty or an underscore; expand it U=`sed -n 's/^U = //p' < "$mf"` # Find all dependency output files, they are included files with # $(DEPDIR) in their names. We invoke sed twice because it is the # simplest approach to changing $(DEPDIR) to its actual value in the # expansion. for file in `sed -n " s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \ sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g' -e 's/\$U/'"$U"'/g'`; do # Make sure the directory exists. test -f "$dirpart/$file" && continue fdir=`AS_DIRNAME(["$file"])` AS_MKDIR_P([$dirpart/$fdir]) # echo "creating $dirpart/$file" echo '# dummy' > "$dirpart/$file" done done } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking # is enabled. FIXME. This creates each `.P' file that we will # need in order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"]) ]) # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 8 # AM_CONFIG_HEADER is obsolete. It has been replaced by AC_CONFIG_HEADERS. AU_DEFUN([AM_CONFIG_HEADER], [AC_CONFIG_HEADERS($@)]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, # 2005, 2006, 2008, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 16 # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.62])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if(m4_ifdef([AC_PACKAGE_NAME], 1)m4_ifdef([AC_PACKAGE_VERSION], 1), 11,, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", [Name of package]) AC_DEFINE_UNQUOTED(VERSION, "$VERSION", [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG(ACLOCAL, aclocal-${am__api_version}) AM_MISSING_PROG(AUTOCONF, autoconf) AM_MISSING_PROG(AUTOMAKE, automake-${am__api_version}) AM_MISSING_PROG(AUTOHEADER, autoheader) AM_MISSING_PROG(MAKEINFO, makeinfo) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AM_PROG_MKDIR_P])dnl # We need awk for the "check" target. The system "awk" is bad on # some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES(CC)], [define([AC_PROG_CC], defn([AC_PROG_CC])[_AM_DEPENDENCIES(CC)])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES(CXX)], [define([AC_PROG_CXX], defn([AC_PROG_CXX])[_AM_DEPENDENCIES(CXX)])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES(OBJC)], [define([AC_PROG_OBJC], defn([AC_PROG_OBJC])[_AM_DEPENDENCIES(OBJC)])])dnl ]) _AM_IF_OPTION([silent-rules], [AC_REQUIRE([AM_SILENT_RULES])])dnl dnl The `parallel-tests' driver may need to know about EXEEXT, so add the dnl `am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This macro dnl is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl ]) dnl Hook into `_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST(install_sh)]) # Copyright (C) 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2009 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # AM_MAKE_INCLUDE() # ----------------- # Check to see how make treats includes. AC_DEFUN([AM_MAKE_INCLUDE], [am_make=${MAKE-make} cat > confinc << 'END' am__doit: @echo this is the am__doit target .PHONY: am__doit END # If we don't find an include directive, just comment out the code. AC_MSG_CHECKING([for style of include used by $am_make]) am__include="#" am__quote= _am_result=none # First try GNU make style include. echo "include confinc" > confmf # Ignore all kinds of additional output from `make'. case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=include am__quote= _am_result=GNU ;; esac # Now try BSD make style include. if test "$am__include" = "#"; then echo '.include "confinc"' > confmf case `$am_make -s -f confmf 2> /dev/null` in #( *the\ am__doit\ target*) am__include=.include am__quote="\"" _am_result=BSD ;; esac fi AC_SUBST([am__include]) AC_SUBST([am__quote]) AC_MSG_RESULT([$_am_result]) rm -f confinc confmf ]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997, 1999, 2000, 2001, 2003, 2004, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 6 # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it supports --run. # If it does, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then case $am_aux_dir in *\ * | *\ *) MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;; *) MISSING="\${SHELL} $am_aux_dir/missing" ;; esac fi # Use eval to expand $SHELL if eval "$MISSING --run true"; then am_missing_run="$MISSING --run " else am_missing_run= AC_MSG_WARN([`missing' script is too old or missing]) fi ]) # Copyright (C) 2003, 2004, 2005, 2006 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_MKDIR_P # --------------- # Check for `mkdir -p'. AC_DEFUN([AM_PROG_MKDIR_P], [AC_PREREQ([2.60])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl dnl Automake 1.8 to 1.9.6 used to define mkdir_p. We now use MKDIR_P, dnl while keeping a definition of mkdir_p for backward compatibility. dnl @MKDIR_P@ is magic: AC_OUTPUT adjusts its value for each Makefile. dnl However we cannot define mkdir_p as $(MKDIR_P) for the sake of dnl Makefile.ins that do not define MKDIR_P, so we do our own dnl adjustment using top_builddir (which is defined more often than dnl MKDIR_P). AC_SUBST([mkdir_p], ["$MKDIR_P"])dnl case $mkdir_p in [[\\/$]]* | ?:[[\\/]]*) ;; */*) mkdir_p="\$(top_builddir)/$mkdir_p" ;; esac ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001, 2002, 2003, 2005, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # ------------------------------ # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), 1)]) # _AM_SET_OPTIONS(OPTIONS) # ---------------------------------- # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996, 1997, 2000, 2001, 2003, 2005, 2008 # Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 5 # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Just in case sleep 1 echo timestamp > conftest.file # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: `$srcdir']);; esac # Do `set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi rm -f conftest.file if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT(yes)]) # Copyright (C) 2001, 2003, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor `install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in `make install-strip', and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using `strip' when the user # run `make install-strip'. However `strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the `STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be `maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006, 2008 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004, 2005 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 2 # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of `v7', `ustar', or `pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. AM_MISSING_PROG([AMTAR], [tar]) m4_if([$1], [v7], [am__tar='${AMTAR} chof - "$$tardir"'; am__untar='${AMTAR} xf -'], [m4_case([$1], [ustar],, [pax],, [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' _am_tools=${am_cv_prog_tar_$1-$_am_tools} # Do not fold the above two line into one, because Tru64 sh and # Solaris sh will not grok spaces in the rhs of `-'. for _am_tool in $_am_tools do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar /dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([config/m4/codeset.m4]) m4_include([config/m4/gettext.m4]) m4_include([config/m4/glibc2.m4]) m4_include([config/m4/glibc21.m4]) m4_include([config/m4/iconv.m4]) m4_include([config/m4/intdiv0.m4]) m4_include([config/m4/intl.m4]) m4_include([config/m4/intlmacosx.m4]) m4_include([config/m4/intmax.m4]) m4_include([config/m4/inttypes-pri.m4]) m4_include([config/m4/inttypes_h.m4]) m4_include([config/m4/lcmessage.m4]) m4_include([config/m4/lib-ld.m4]) m4_include([config/m4/lib-link.m4]) m4_include([config/m4/lib-prefix.m4]) m4_include([config/m4/lock.m4]) m4_include([config/m4/longlong.m4]) m4_include([config/m4/nls.m4]) m4_include([config/m4/po.m4]) m4_include([config/m4/printf-posix.m4]) m4_include([config/m4/progtest.m4]) m4_include([config/m4/size_max.m4]) m4_include([config/m4/stdint_h.m4]) m4_include([config/m4/uintmax_t.m4]) m4_include([config/m4/visibility.m4]) m4_include([config/m4/wchar_t.m4]) m4_include([config/m4/wint_t.m4]) m4_include([config/m4/xsize.m4]) KCemu-0.5.1/AUTHORS0000644001050700006200000000004310527416074013260 0ustar glaubitzfbedvTorsten Paul (Torsten.Paul@gmx.de) KCemu-0.5.1/THANKS0000644001050700006200000000174010527416074013130 0ustar glaubitzfbedvMarat Fayzullin for the Z80 emulation core used for the main processor (I needed to tweak some bits of the emulation core; see src/z80core/README for the list of changes) Marcel de Kogel for the Z80 emulation core used for the KC floppy processor Thomas Bretz for the OS/2 port of KCemu (see http://www.d4m.de/) Thomas Ludwig for the great KC website at http://www.kc85emu.de/ and lots of bugreports and hints how to make KCemu better Holger Krull for providing lots of information about the LC 80 computer (see http://www.lc80.de/) Kev Thacker for interesting insights concerning the floppy emulation (he's also the author of the KC driver for M.E.S.S. the Multi-Emulator Super System, see http://mess.emuverse.com/) Volker Pohlers for help with the windows port, technical information and bugreports Alexander Schön for starting the windows port, lots of tips and for providing a huge pile of files for use with the emulator or with information about the various systems KCemu-0.5.1/asm/0000755001050700006200000000000011412404767012773 5ustar glaubitzfbedvKCemu-0.5.1/asm/Makefile.am0000644001050700006200000000011710527416074015026 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in SUBDIRS = autostart KCemu-0.5.1/asm/autostart/0000755001050700006200000000000011412404767015021 5ustar glaubitzfbedvKCemu-0.5.1/asm/autostart/kc853.bin0000644001050700006200000000066111337333151016345 0ustar glaubitzfbedv0>.&z((>.&!a@!>.&# Autostart von Modul im Schacht 8... Programm: !E,,>>.&> C!!^#V#N#F#y(8~#(͜~#(ͪ!͕ͣ@z(W>.&*>oo>&|((x( y(z(>&!*#!.|# +>w#Nachladeroutine ausgeschaltet. >ۈӈۈӈۈӈۈӈKCemu-0.5.1/asm/autostart/kc853.asm0000644001050700006200000001274310527416074016367 0ustar glaubitzfbedv;-------------------------------------------------------------------------- ; Autostart for KC85/3, KC84/4 EPROM-Module ; (c) 2006 by Torsten Paul ; ; This code is supposed to be used for the KCemu autostart module and ; was never tested on a real KC. ;-------------------------------------------------------------------------- CPU Z80 PV1 EQU 0f003h UP_CRT EQU 00h UP_KBDS EQU 0ch UP_WAIT EQU 14h UP_OSTR EQU 23h UP_MODU EQU 26h UP_CRLF EQU 2ch UP_ZKOUT EQU 45h BASE EQU 0c000h TRAMPOLINE EQU 0b700h ; tape buffer ;-------------------------------------------------------------------------- org BASE jr START TEXT: db 14 dup 0 START_ADDR: dw 0 LOAD_ADDR: dw 0ffffh, 0, 0 dw 0ffffh, 0, 0 dw 0ffffh, 0, 0 dw 0ffffh, 0, 0 LOADER_CMP: db 011h, 0bah, 000h, 0bah LOADER_PATCH: db 0cdh, 003h, 0f0h, 010h START: ;-------------------------------------------------------------------------- PHASE $ - BASE + 4000h ; ; check module control byte ; ld a, 1 ld l, 8 call PV1 db UP_MODU ld a, d cp 0c1h jr z, SWITCH_OK ; ; not running at c000h, switch of BASIC ; and change module address via ; trampoline code copied to 200h ; ld a, 2 ld l, 2 ld d, 0 call PV1 db UP_MODU ld hl, TRAMPOLINE_START ld de, TRAMPOLINE ld bc, TRAMPOLINE_END - TRAMPOLINE_START ldir ld hl, 0c000h push hl ld a, 2 ld l, 8 ld d, 0c1h jp TRAMPOLINE TRAMPOLINE_START: ; ; tampoline code to switch module to c000h ; used again later when starting the program ; call PV1 db UP_MODU pop hl jp (hl) TRAMPOLINE_END: SWITCH_OK: DEPHASE ;-------------------------------------------------------------------------- ; ; now running at c000h ; call PV1 db UP_OSTR db 0ch ; CLS db "Autostart von Modul im Schacht 8..." db 0dh, 0ah db 0dh, 0ah db "Programm: " db 0 ld hl, TEXT call PV1 db UP_ZKOUT call PV1 db UP_CRLF call PV1 db UP_CRLF ld a, 0ffh call PV1 db UP_WAIT ; ; switch on RAM at 4000h ; ld a, 2 ld l, 4 ; RAM at 4000h ld d, 03h call PV1 db UP_MODU ld a, 0ch ld d, 43h call ENABLE_RAM ld hl, LOAD_ADDR ld iy, 0c100h LOOP: ld e, (HL) inc hl ld d, (HL) inc hl ld c, (HL) inc hl ld b, (HL) inc hl ld a, c ; check for size == 0 or b jr z, DONE ld a, (HL) inc hl or a jr z, NO_CAOSE_OFF call CAOSE_OFF NO_CAOSE_OFF: ld a, (HL) inc hl or a jr z, NO_IRM_OFF call IRM_OFF NO_IRM_OFF: push hl ld hl, 0c200h ldir call IRM_ON call CAOSE_ON call CHECK_LOADER ; ; switch to next page ; push iy pop de ld a, d add a, 4 cp 0d1h ; reached last page jr z, DONE ld d, a push de pop iy ld a, 2 ld l, 8 call PV1 db UP_MODU pop hl jr LOOP DONE: ; ; reuse trampoline code to switch BASIC on ; and jump to program start address ; ld hl, (START_ADDR) push hl ld a, 2 ld l, a ld d, 1 jp TRAMPOLINE ;-------------------------------------------------------------------------- ENABLE_RAM: ; ; check RAM module at slot given in register a and ; enable at with control byte in register d if found ; ; M035 can't be used as it is not possible to switch it to ; a base address other than 8000h ; ld l, a ld a, 1 call PV1 db UP_MODU ld a, h cp 0f4h ; M022, 16k RAM jr z, ENABLE_RAM_MODULE cp 0f6h ; M011, 64k RAM jr z, ENABLE_RAM_MODULE cp 078h ; M036, 128k segmented RAM jr z, ENABLE_RAM_MODULE cp 079h ; M032, 256k segmented RAM jr z, ENABLE_RAM_MODULE cp 07ah ; M034, 512k segmented RAM jr z, ENABLE_RAM_MODULE jr NO_RAM_MODULE ENABLE_RAM_MODULE: ld a, 2 call PV1 db UP_MODU NO_RAM_MODULE: ret ;-------------------------------------------------------------------------- ; ; first check if loader is at ba00h and ; starts at ba11h ; CHECK_LOADER: ld b, 4 ld hl, START_ADDR ld de, LOADER_CMP CHECK_LOADER_M1: ld a, (de) cp (hl) ret nz inc hl inc de djnz CHECK_LOADER_M1 ; ; addresses match, check if we find the ; call to the tape routine in the memory ; between ba00h and be00h ; ld hl, 0ba00h CHECK_LOADER_M2: ld b, 4 ld de, LOADER_PATCH CHECK_LOADER_M3: ld a, h cp 0beh ret z ld a, (de) cp (hl) inc hl jr nz, CHECK_LOADER_M2 inc de djnz CHECK_LOADER_M3 ; ; found, patch tape load with call to wait ; dec hl ld a, UP_WAIT ld (hl), a ; ; show that we disabled the loader ; call PV1 db UP_OSTR db "Nachladeroutine ausgeschaltet." db 0dh, 0ah db 0dh, 0ah db 0 ld a, 0ffh call PV1 db UP_WAIT ret ;-------------------------------------------------------------------------- CAOSE_ON: ; ; switch on CAOS E ; in a, (88h) or 1 out (88h), a ret ;-------------------------------------------------------------------------- CAOSE_OFF: ; ; switch off CAOS E ; in a, (88h) and 0feh out (88h), a ret ;-------------------------------------------------------------------------- IRM_ON: ; ; switch on IRM ; in a, (88h) or 4 out (88h), a ret ;-------------------------------------------------------------------------- IRM_OFF: ; ; switch off IRM ; in a, (88h) and 0fbh out (88h), a ret ;-------------------------------------------------------------------------- end KCemu-0.5.1/asm/autostart/Makefile.am0000644001050700006200000000065410527662151017061 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in LIBS = SUFFIXES = .asm .bin Z80FILES = kc853.bin if COMPILE_Z80_ASM noinst_PROGRAMS = $(Z80FILES) kc853_bin_SOURCES = kc853.asm kc853_bin_LINK = p2bin -r '$$-$$' kc853_bin_LDADD = endif asmdir = $(pkgdatadir)/asm/autostart asm_DATA = kc853.asm z80libdir = $(pkgdatadir)/lib/z80 z80lib_DATA = $(Z80FILES) .asm.o: asl $< -o $@ EXTRA_DIST = $(asm_DATA) $(Z80FILES) KCemu-0.5.1/asm/autostart/Makefile.in0000644001050700006200000004074511412404767017100 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ @COMPILE_Z80_ASM_TRUE@noinst_PROGRAMS = $(am__EXEEXT_1) subdir = asm/autostart DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__EXEEXT_1 = kc853.bin$(EXEEXT) PROGRAMS = $(noinst_PROGRAMS) am__kc853_bin_SOURCES_DIST = kc853.asm @COMPILE_Z80_ASM_TRUE@am_kc853_bin_OBJECTS = kc853.$(OBJEXT) kc853_bin_OBJECTS = $(am_kc853_bin_OBJECTS) kc853_bin_DEPENDENCIES = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/include/kc SOURCES = $(kc853_bin_SOURCES) DIST_SOURCES = $(am__kc853_bin_SOURCES_DIST) am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(asmdir)" "$(DESTDIR)$(z80libdir)" DATA = $(asm_DATA) $(z80lib_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUFFIXES = .asm .bin Z80FILES = kc853.bin @COMPILE_Z80_ASM_TRUE@kc853_bin_SOURCES = kc853.asm @COMPILE_Z80_ASM_TRUE@kc853_bin_LINK = p2bin -r '$$-$$' @COMPILE_Z80_ASM_TRUE@kc853_bin_LDADD = asmdir = $(pkgdatadir)/asm/autostart asm_DATA = kc853.asm z80libdir = $(pkgdatadir)/lib/z80 z80lib_DATA = $(Z80FILES) EXTRA_DIST = $(asm_DATA) $(Z80FILES) all: all-am .SUFFIXES: .SUFFIXES: .asm .bin .o $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu asm/autostart/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu asm/autostart/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: -test -z "$(noinst_PROGRAMS)" || rm -f $(noinst_PROGRAMS) kc853.bin$(EXEEXT): $(kc853_bin_OBJECTS) $(kc853_bin_DEPENDENCIES) @rm -f kc853.bin$(EXEEXT) $(kc853_bin_LINK) $(kc853_bin_OBJECTS) $(kc853_bin_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c install-asmDATA: $(asm_DATA) @$(NORMAL_INSTALL) test -z "$(asmdir)" || $(MKDIR_P) "$(DESTDIR)$(asmdir)" @list='$(asm_DATA)'; test -n "$(asmdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(asmdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(asmdir)" || exit $$?; \ done uninstall-asmDATA: @$(NORMAL_UNINSTALL) @list='$(asm_DATA)'; test -n "$(asmdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(asmdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(asmdir)" && rm -f $$files install-z80libDATA: $(z80lib_DATA) @$(NORMAL_INSTALL) test -z "$(z80libdir)" || $(MKDIR_P) "$(DESTDIR)$(z80libdir)" @list='$(z80lib_DATA)'; test -n "$(z80libdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(z80libdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(z80libdir)" || exit $$?; \ done uninstall-z80libDATA: @$(NORMAL_UNINSTALL) @list='$(z80lib_DATA)'; test -n "$(z80libdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(z80libdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(z80libdir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) $(DATA) installdirs: for dir in "$(DESTDIR)$(asmdir)" "$(DESTDIR)$(z80libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-noinstPROGRAMS mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-asmDATA install-z80libDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-asmDATA uninstall-z80libDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic \ clean-noinstPROGRAMS distclean distclean-compile \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-asmDATA install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip install-z80libDATA \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic pdf pdf-am ps ps-am uninstall uninstall-am \ uninstall-asmDATA uninstall-z80libDATA .asm.o: asl $< -o $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/asm/Makefile.in0000644001050700006200000004704511412404767015052 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = asm DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = autostart all: all-recursive .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu asm/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu asm/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am check check-am clean clean-generic ctags \ ctags-recursive distclean distclean-generic distclean-tags \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ installdirs-am maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am tags \ tags-recursive uninstall uninstall-am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/README.de0000644001050700006200000002152410527416074013466 0ustar glaubitzfbedv------------------------------------------------------------------------------- $Id: README.de,v 1.2 2002/06/09 14:24:31 torsten_paul Exp $ ------------------------------------------------------------------------------- _ ______ | |/ / ___|___ _ __ ___ _ _ | ' / | / _ \ '_ ` _ \| | | | | . \ |__| __/ | | | | | |_| | |_|\_\____\___|_| |_| |_|\__,_| ================================= Copyright (c) 1997-2002 Torsten Paul Lommatzscher Str. 26 01139 Dresden Torsten.Paul@gmx.de Alle Rechte Vorbehalten ------------------------------------------------------------------------------- README ------------------------------------------------------------------------------- 0. Inhalt 1. COPYRIGHT 2. Installation 3. Konfiguration 4. Das Programm 'kcemu-remote' 5. Das Floppy-System ------------------------------------------------------------------------------- 1. COPYRIGHT This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ------------------------------------------------------------------------------- 2. Installation Die Installation erfolgt normalerweise einfach durch: ./configure make make install Eventuell ist es fr den letzten Schritt notwendig, sich vorher als 'root' anzumelden. Soll der Emulator nur fr einen User und in dessen Verzeichnis installiert werden, kann auch der folgende Aufruf genutzt werden. ./configure --prefix=$HOME make make install Damit wird der Emulator in das Verzeichnis "$HOME/bin" und die Daten-Dateien in die Verzeichnisse "$HOME/share/KCemu" und "$HOME/share/locale/..." installiert. ------------------------------------------------------------------------------- 3. Konfiguration In der Datei .kcemurc knnen eine Reihe von Einstellungen vorgenommen werden. Diese Datei mu im Homeverzeichnis des Benutzers liegen. Eine Beispieldatei befindet sich mit dem Namen kcemurc.sample im Verzeichnis doc des Programmarchivs. Diese Datei enhlt auch die Beschreibungen fr die mglichen Eintrge. Jeder Eintrag in dieser Datei hat die Form: : z.B.: Tape File: /tmp/x.kct Zustzlich gibt es noch die Mglichkeit fr bestimmte Namen mehrere Werte zuzuweisen. Dies geschieht indem an den eigentlichen Namen des Schlssels durch _ getrennt eine 8-stellige Dezimalzahl angehngt wird: z.B.: Tape File List_00000000: /home/tp/projects/KCemu/PRG/files.kct Tape File List_00000001: /home/tp/projects/KCemu/PRG/test.kct Tape File List_00000002: /home/tp/projects/KCemu/PRG/wordpro.kct Zeilen, die mit einem # beginnen sind Kommentarzeilen und werden beim Einlesen ignoriert. ------------------------------------------------------------------------------- 4. Das Programm 'kcemu-remote' Mit dem Programm kcemu-remote kann der Emulator von auen gesteuert werden. Die Kommunikation erfolgt ber den X-Server, was bedeutet, da das Programm kcemu-remote nicht auf dem selben Rechner laufen mu, wie der Emulator. Es mu jedoch auf das gleiche Display zugreifen (wird normalerweise durch die Umgebungsvariable $DISPLAY gesteuert). Laufen zwei Emulatoren gleichzeitig, wird einer zufllig ausgewhlt. Zur Zeit ist es noch nicht mglich, einen speziellen Emulator anzugeben. Der Aufruf des Programms erfolgt mit: kcemu-remote = = ... Die wichtigsten Kommandos sind in der folgenden Tabelle aufgelistet (Wenn Dateinamen als Parameter angegeben werden, mssen das zur Zeit immer absolute Dateinamen sein!) +------------------+-----------+-----------------------------------------+ | Kommando | Parameter | Wert | +------------------+-----------+-----------------------------------------+ | emu-reset | - | Reset des Emulators | | | | | | | | Entspricht dem Reset-Knopf des KCs, | | | | Programme bleiben im Speicher. | +------------------+-----------+-----------------------------------------+ | emu-power-on | - | Power-On Reset des Emulators | | | | | | | | Entspricht dem Ausschalten und wieder | | | | Einschalten des KCs, der komplette | | | | Speicher wird gelscht. | +------------------+-----------+-----------------------------------------+ | emu-quit | - | Beenden des Emulators | +------------------+-----------+-----------------------------------------+ | kc-image-load | filename | Dateiname der zu ladenden Datei | | | | Die Datei wird nur geladen, ausfhrbare | | | | Programme werden nicht gestartet. | | | | | | | | (Entspricht dem Menpunkt File/Load) | +------------------+-----------+-----------------------------------------+ | kc-image-run | filename | Dateiname der zu startenden Datei | | | | | | | | (Entspricht dem Menpunkt File/Run) | +------------------+-----------+-----------------------------------------+ | floppy-attach | filename | Dateiname des Disketten-Images | | | | | | | | Es kann nur auf das physisch erste | | | | Diskettenlaufwerk zugegriffen werden. | | | | | | | | (Da der Menpunkt zum Einlegen von | | | | Disketten noch nicht funktioniert, ist | | | | das die einzige Mglichkeit Disketten | | | | zu wechseln :-) | +------------------+-----------+-----------------------------------------+ | keyboard-replay | text | Text der an den Emulator gesendet wird. | | | | Der Emulator tut dann so, als wrden | | | | die entsprechenden Zeichen ber die | | | | Tastatur eingegeben. | +------------------+-----------+-----------------------------------------+ ------------------------------------------------------------------------------- 5. Das Floppy-System Der Start des Floppy-Systems erfolgt im CAOS-Men ber den Befehl JUMP. Da der Modulschacht des Floppy-Systems immer auf FC festgelegt ist, lautet der Befehl: JUMP FC Bei eingelegter CAOS-Erweiterungsdiskette erfolgt die Initialisierung des Floppy-Systems und danach der Rcksprung ins CAOS-Men. Dort existiert nun ein neuer Menpunkt FLOAD (KC85/3): * HC-CAOS 3.1 * %FLOAD %BASIC %REBASIC % %SWITCH %JUMP %MENU %SAVE %VERIFY %LOAD %COLOR %MODIFY %DISPLAY %KEYLIST %KEY Mit diesem neuen Befehl knnen nun Dateien von Diskette geladen werden. Die CAOS-Diskette enthlt die folgenden Programme: DEP.COM FSAVE.KCC FLOAD.KCC SERVICE.KCC BASEX.KCC DEVEX.KCC TEXOREX.KCC FORTHEX.KCC INITIAL.SUB Erweiterte Funktionen erhlt man durch Laden des Programms SERVICE: %FLOAD NAME :SERVICE Danach gibt es die zustzlichen Menpunkte: %FSAVE %DIR %STAT %REN %ERA %SETRO %SETWR Weiterfhrende Hinweise gibt es in den Handbchern zum Floppy-System D004, die unter der folgenden Adresse des KC-Clubs erreichbar sind: http://www.iee.et.tu-dresden.de/~kc-club/05/0500.HTML ------------------------------------------------------------------------------- Have fun! -- Torsten Paul Torsten.Paul@gmx.de KCemu-0.5.1/COPYING0000644001050700006200000004311010527416074013245 0ustar glaubitzfbedv GNU GENERAL PUBLIC LICENSE Version 2, June 1991 Copyright (C) 1989, 1991 Free Software Foundation, Inc. 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The licenses for most software are designed to take away your freedom to share and change it. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change free software--to make sure the software is free for all its users. This General Public License applies to most of the Free Software Foundation's software and to any other program whose authors commit to using it. (Some other Free Software Foundation software is covered by the GNU Library General Public License instead.) You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for this service if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs; and that you know you can do these things. To protect your rights, we need to make restrictions that forbid anyone to deny you these rights or to ask you to surrender the rights. These restrictions translate to certain responsibilities for you if you distribute copies of the software, or if you modify it. For example, if you distribute copies of such a program, whether gratis or for a fee, you must give the recipients all the rights that you have. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. We protect your rights with two steps: (1) copyright the software, and (2) offer you this license which gives you legal permission to copy, distribute and/or modify the software. Also, for each author's protection and ours, we want to make certain that everyone understands that there is no warranty for this free software. If the software is modified by someone else and passed on, we want its recipients to know that what they have is not the original, so that any problems introduced by others will not reflect on the original authors' reputations. Finally, any free program is threatened constantly by software patents. We wish to avoid the danger that redistributors of a free program will individually obtain patent licenses, in effect making the program proprietary. To prevent this, we have made it clear that any patent must be licensed for everyone's free use or not licensed at all. The precise terms and conditions for copying, distribution and modification follow. GNU GENERAL PUBLIC LICENSE TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION 0. This License applies to any program or other work which contains a notice placed by the copyright holder saying it may be distributed under the terms of this General Public License. The "Program", below, refers to any such program or work, and a "work based on the Program" means either the Program or any derivative work under copyright law: that is to say, a work containing the Program or a portion of it, either verbatim or with modifications and/or translated into another language. (Hereinafter, translation is included without limitation in the term "modification".) Each licensee is addressed as "you". Activities other than copying, distribution and modification are not covered by this License; they are outside its scope. The act of running the Program is not restricted, and the output from the Program is covered only if its contents constitute a work based on the Program (independent of having been made by running the Program). Whether that is true depends on what the Program does. 1. You may copy and distribute verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice and disclaimer of warranty; keep intact all the notices that refer to this License and to the absence of any warranty; and give any other recipients of the Program a copy of this License along with the Program. You may charge a fee for the physical act of transferring a copy, and you may at your option offer warranty protection in exchange for a fee. 2. You may modify your copy or copies of the Program or any portion of it, thus forming a work based on the Program, and copy and distribute such modifications or work under the terms of Section 1 above, provided that you also meet all of these conditions: a) You must cause the modified files to carry prominent notices stating that you changed the files and the date of any change. b) You must cause any work that you distribute or publish, that in whole or in part contains or is derived from the Program or any part thereof, to be licensed as a whole at no charge to all third parties under the terms of this License. c) If the modified program normally reads commands interactively when run, you must cause it, when started running for such interactive use in the most ordinary way, to print or display an announcement including an appropriate copyright notice and a notice that there is no warranty (or else, saying that you provide a warranty) and that users may redistribute the program under these conditions, and telling the user how to view a copy of this License. (Exception: if the Program itself is interactive but does not normally print such an announcement, your work based on the Program is not required to print an announcement.) These requirements apply to the modified work as a whole. If identifiable sections of that work are not derived from the Program, and can be reasonably considered independent and separate works in themselves, then this License, and its terms, do not apply to those sections when you distribute them as separate works. But when you distribute the same sections as part of a whole which is a work based on the Program, the distribution of the whole must be on the terms of this License, whose permissions for other licensees extend to the entire whole, and thus to each and every part regardless of who wrote it. Thus, it is not the intent of this section to claim rights or contest your rights to work written entirely by you; rather, the intent is to exercise the right to control the distribution of derivative or collective works based on the Program. In addition, mere aggregation of another work not based on the Program with the Program (or with a work based on the Program) on a volume of a storage or distribution medium does not bring the other work under the scope of this License. 3. You may copy and distribute the Program (or a work based on it, under Section 2) in object code or executable form under the terms of Sections 1 and 2 above provided that you also do one of the following: a) Accompany it with the complete corresponding machine-readable source code, which must be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, b) Accompany it with a written offer, valid for at least three years, to give any third party, for a charge no more than your cost of physically performing source distribution, a complete machine-readable copy of the corresponding source code, to be distributed under the terms of Sections 1 and 2 above on a medium customarily used for software interchange; or, c) Accompany it with the information you received as to the offer to distribute corresponding source code. (This alternative is allowed only for noncommercial distribution and only if you received the program in object code or executable form with such an offer, in accord with Subsection b above.) The source code for a work means the preferred form of the work for making modifications to it. For an executable work, complete source code means all the source code for all modules it contains, plus any associated interface definition files, plus the scripts used to control compilation and installation of the executable. However, as a special exception, the source code distributed need not include anything that is normally distributed (in either source or binary form) with the major components (compiler, kernel, and so on) of the operating system on which the executable runs, unless that component itself accompanies the executable. If distribution of executable or object code is made by offering access to copy from a designated place, then offering equivalent access to copy the source code from the same place counts as distribution of the source code, even though third parties are not compelled to copy the source along with the object code. 4. You may not copy, modify, sublicense, or distribute the Program except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense or distribute the Program is void, and will automatically terminate your rights under this License. However, parties who have received copies, or rights, from you under this License will not have their licenses terminated so long as such parties remain in full compliance. 5. You are not required to accept this License, since you have not signed it. However, nothing else grants you permission to modify or distribute the Program or its derivative works. These actions are prohibited by law if you do not accept this License. Therefore, by modifying or distributing the Program (or any work based on the Program), you indicate your acceptance of this License to do so, and all its terms and conditions for copying, distributing or modifying the Program or works based on it. 6. Each time you redistribute the Program (or any work based on the Program), the recipient automatically receives a license from the original licensor to copy, distribute or modify the Program subject to these terms and conditions. You may not impose any further restrictions on the recipients' exercise of the rights granted herein. You are not responsible for enforcing compliance by third parties to this License. 7. If, as a consequence of a court judgment or allegation of patent infringement or for any other reason (not limited to patent issues), conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot distribute so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not distribute the Program at all. For example, if a patent license would not permit royalty-free redistribution of the Program by all those who receive copies directly or indirectly through you, then the only way you could satisfy both it and this License would be to refrain entirely from distribution of the Program. If any portion of this section is held invalid or unenforceable under any particular circumstance, the balance of the section is intended to apply and the section as a whole is intended to apply in other circumstances. It is not the purpose of this section to induce you to infringe any patents or other property right claims or to contest validity of any such claims; this section has the sole purpose of protecting the integrity of the free software distribution system, which is implemented by public license practices. Many people have made generous contributions to the wide range of software distributed through that system in reliance on consistent application of that system; it is up to the author/donor to decide if he or she is willing to distribute software through any other system and a licensee cannot impose that choice. This section is intended to make thoroughly clear what is believed to be a consequence of the rest of this License. 8. If the distribution and/or use of the Program is restricted in certain countries either by patents or by copyrighted interfaces, the original copyright holder who places the Program under this License may add an explicit geographical distribution limitation excluding those countries, so that distribution is permitted only in or among countries not thus excluded. In such case, this License incorporates the limitation as if written in the body of this License. 9. The Free Software Foundation may publish revised and/or new versions of the General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies a version number of this License which applies to it and "any later version", you have the option of following the terms and conditions either of that version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of this License, you may choose any version ever published by the Free Software Foundation. 10. If you wish to incorporate parts of the Program into other free programs whose distribution conditions are different, write to the author to ask for permission. For software which is copyrighted by the Free Software Foundation, write to the Free Software Foundation; we sometimes make exceptions for this. Our decision will be guided by the two goals of preserving the free status of all derivatives of our free software and of promoting the sharing and reuse of software generally. NO WARRANTY 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively convey the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA Also add information on how to contact you by electronic and paper mail. If the program is interactive, make it output a short notice like this when it starts in an interactive mode: Gnomovision version 69, Copyright (C) year name of author Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, the commands you use may be called something other than `show w' and `show c'; they could even be mouse-clicks or menu items--whatever suits your program. You should also get your employer (if you work as a programmer) or your school, if any, to sign a "copyright disclaimer" for the program, if necessary. Here is a sample; alter the names: Yoyodyne, Inc., hereby disclaims all copyright interest in the program `Gnomovision' (which makes passes at compilers) written by James Hacker. , 1 April 1989 Ty Coon, President of Vice This General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Library General Public License instead of this License. KCemu-0.5.1/ABOUT-NLS0000644001050700006200000022532611340261610013440 0ustar glaubitzfbedv1 Notes on the Free Translation Project *************************************** Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that free software will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work on translations can contact the appropriate team. When reporting bugs in the `intl/' directory or bugs which may be related to internationalization, you should tell about the version of `gettext' which is used. The information can be found in the `intl/VERSION' file, in internationalized packages. 1.1 Quick configuration advice ============================== If you want to exploit the full power of internationalization, you should configure it using ./configure --with-included-gettext to force usage of internationalizing routines provided within this package, despite the existence of internationalizing capabilities in the operating system where this package is being installed. So far, only the `gettext' implementation in the GNU C library version 2 provides as many features (such as locale alias, message inheritance, automatic charset conversion or plural form handling) as the implementation here. It is also not possible to offer this additional functionality on top of a `catgets' implementation. Future versions of GNU `gettext' will very likely convey even more functionality. So it might be a good idea to change to GNU `gettext' as soon as possible. So you need _not_ provide this option if you are using GNU libc 2 or you have installed a recent copy of the GNU gettext package with the included `libintl'. 1.2 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. If not, the included GNU `gettext' library will be used. This library is wholly contained within this package, usually in the `intl/' subdirectory, so prior installation of the GNU `gettext' package is _not_ required. Installers may use special options at configuration time for changing the default behaviour. The commands: ./configure --with-included-gettext ./configure --disable-nls will, respectively, bypass any pre-existing `gettext' to use the internationalizing routines provided within this package, or else, _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl.a' file and will decide to use this. This might not be desirable. You should use the more recent version of the GNU `gettext' library. I.e. if the file `intl/VERSION' shows that the library which comes with this package is more recent, you should use ./configure --with-included-gettext to prevent auto-detection. The configuration process will not test for the `catgets' function and therefore it will not be used. The reason is that even an emulation of `gettext' on top of `catgets' could not provide all the extensions of the GNU `gettext' library. Internationalized packages usually have many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. 1.3 Using This Package ====================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. If you happen to have the `LC_ALL' or some other `LC_xxx' environment variables set, you should unset them before setting `LANG', otherwise the setting of `LANG' will not have the desired effect. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of `LL_CC', with `LL' denoting the language and `CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as `LL' or `LL_CC.ENCODING'. You can get the list of locales supported by your system for your language by running the command `locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. Special advice for Norwegian users: The language code for Norwegian bokma*l changed from `no' to `nb' recently (in 2003). During the transition period, while some message catalogs for this language are installed under `nb' and some older ones under `no', it's recommended for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and older translations are used. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. 1.4 Translating Teams ===================== For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://translationproject.org/', in the "Teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `coordinator@translationproject.org' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skills are praised more than programming skills, here. 1.5 Available Packages ====================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of November 2007. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files af am ar az be bg bs ca cs cy da de el en en_GB eo +----------------------------------------------------+ Compendium | [] [] [] [] | a2ps | [] [] [] [] [] | aegis | () | ant-phone | () | anubis | [] | ap-utils | | aspell | [] [] [] [] [] | bash | [] | bfd | | bibshelf | [] | binutils | | bison | [] [] | bison-runtime | [] | bluez-pin | [] [] [] [] [] | cflow | [] | clisp | [] [] [] | console-tools | [] [] | coreutils | [] [] [] [] | cpio | | cpplib | [] [] [] | cryptonit | [] | dialog | | diffutils | [] [] [] [] [] [] | doodle | [] | e2fsprogs | [] [] | enscript | [] [] [] [] | fetchmail | [] [] () [] [] | findutils | [] | findutils_stable | [] [] [] | flex | [] [] [] | fslint | | gas | | gawk | [] [] [] | gcal | [] | gcc | [] | gettext-examples | [] [] [] [] [] | gettext-runtime | [] [] [] [] [] | gettext-tools | [] [] | gip | [] | gliv | [] [] | glunarclock | [] | gmult | [] [] | gnubiff | () | gnucash | [] [] () () [] | gnuedu | | gnulib | [] | gnunet | | gnunet-gtk | | gnutls | [] | gpe-aerial | [] [] | gpe-beam | [] [] | gpe-calendar | | gpe-clock | [] [] | gpe-conf | [] [] | gpe-contacts | | gpe-edit | [] | gpe-filemanager | | gpe-go | [] | gpe-login | [] [] | gpe-ownerinfo | [] [] | gpe-package | | gpe-sketchbook | [] [] | gpe-su | [] [] | gpe-taskmanager | [] [] | gpe-timesheet | [] | gpe-today | [] [] | gpe-todo | | gphoto2 | [] [] [] [] | gprof | [] [] | gpsdrive | | gramadoir | [] [] | grep | [] [] | gretl | () | gsasl | | gss | | gst-plugins-bad | [] [] | gst-plugins-base | [] [] | gst-plugins-good | [] [] [] | gst-plugins-ugly | [] [] | gstreamer | [] [] [] [] [] [] [] | gtick | () | gtkam | [] [] [] [] | gtkorphan | [] [] | gtkspell | [] [] [] [] | gutenprint | [] | hello | [] [] [] [] [] | herrie | [] | hylafax | | idutils | [] [] | indent | [] [] [] [] | iso_15924 | | iso_3166 | [] [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | | iso_4217 | [] [] [] | iso_639 | [] [] [] [] | jpilot | [] | jtag | | jwhois | | kbd | [] [] [] [] | keytouch | [] [] | keytouch-editor | [] | keytouch-keyboa... | [] | latrine | () | ld | [] | leafpad | [] [] [] [] [] | libc | [] [] [] [] | libexif | [] | libextractor | [] | libgpewidget | [] [] [] | libgpg-error | [] | libgphoto2 | [] [] | libgphoto2_port | [] [] | libgsasl | | libiconv | [] [] | libidn | [] [] [] | lifelines | [] () | lilypond | [] | lingoteach | | lprng | | lynx | [] [] [] [] | m4 | [] [] [] [] | mailfromd | | mailutils | [] | make | [] [] | man-db | [] [] [] | minicom | [] [] [] | nano | [] [] [] | opcodes | [] | parted | [] [] | pilot-qof | | popt | [] [] [] | psmisc | [] | pwdutils | | qof | | radius | [] | recode | [] [] [] [] [] [] | rpm | [] | screem | | scrollkeeper | [] [] [] [] [] [] [] [] | sed | [] [] [] | shared-mime-info | [] [] [] [] () [] [] [] | sharutils | [] [] [] [] [] [] | shishi | | skencil | [] () | solfege | | soundtracker | [] [] | sp | [] | system-tools-ba... | [] [] [] [] [] [] [] [] [] | tar | [] [] | texinfo | [] [] [] | tin | () () | tuxpaint | [] [] [] [] [] [] | unicode-han-tra... | | unicode-transla... | | util-linux | [] [] [] [] | util-linux-ng | [] [] [] [] | vorbis-tools | [] | wastesedge | () | wdiff | [] [] [] [] | wget | [] [] [] | xchat | [] [] [] [] [] [] [] | xkeyboard-config | [] | xpad | [] [] [] | +----------------------------------------------------+ af am ar az be bg bs ca cs cy da de el en en_GB eo 6 0 2 1 8 26 2 40 48 2 56 88 15 1 15 18 es et eu fa fi fr ga gl gu he hi hr hu id is it +--------------------------------------------------+ Compendium | [] [] [] [] [] | a2ps | [] [] [] () | aegis | | ant-phone | [] | anubis | [] | ap-utils | [] [] | aspell | [] [] [] | bash | [] | bfd | [] [] | bibshelf | [] [] [] | binutils | [] [] [] | bison | [] [] [] [] [] [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] | cflow | [] | clisp | [] [] | console-tools | | coreutils | [] [] [] [] [] [] | cpio | [] [] [] | cpplib | [] [] | cryptonit | [] | dialog | [] [] [] | diffutils | [] [] [] [] [] [] [] [] [] | doodle | [] [] | e2fsprogs | [] [] [] | enscript | [] [] [] | fetchmail | [] | findutils | [] [] [] | findutils_stable | [] [] [] [] | flex | [] [] [] | fslint | | gas | [] [] | gawk | [] [] [] [] () | gcal | [] [] | gcc | [] | gettext-examples | [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] | gettext-tools | [] [] [] [] | gip | [] [] [] [] | gliv | () | glunarclock | [] [] [] | gmult | [] [] [] | gnubiff | () () | gnucash | () () () | gnuedu | [] | gnulib | [] [] [] | gnunet | | gnunet-gtk | | gnutls | | gpe-aerial | [] [] | gpe-beam | [] [] | gpe-calendar | | gpe-clock | [] [] [] [] | gpe-conf | [] | gpe-contacts | [] [] | gpe-edit | [] [] [] [] | gpe-filemanager | [] | gpe-go | [] [] [] | gpe-login | [] [] [] | gpe-ownerinfo | [] [] [] [] [] | gpe-package | [] | gpe-sketchbook | [] [] | gpe-su | [] [] [] [] | gpe-taskmanager | [] [] [] | gpe-timesheet | [] [] [] [] | gpe-today | [] [] [] [] | gpe-todo | [] | gphoto2 | [] [] [] [] [] | gprof | [] [] [] [] [] | gpsdrive | [] | gramadoir | [] [] | grep | [] [] [] | gretl | [] [] [] () | gsasl | [] [] | gss | [] [] | gst-plugins-bad | [] [] [] [] | gst-plugins-base | [] [] [] [] | gst-plugins-good | [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] | gstreamer | [] [] [] | gtick | [] [] [] | gtkam | [] [] [] [] | gtkorphan | [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | [] | hello | [] [] [] [] [] [] [] [] [] [] [] [] [] | herrie | [] | hylafax | | idutils | [] [] [] [] [] | indent | [] [] [] [] [] [] [] [] [] [] | iso_15924 | [] | iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | [] | iso_4217 | [] [] [] [] [] [] | iso_639 | [] [] [] [] [] [] | jpilot | [] [] | jtag | [] | jwhois | [] [] [] [] [] | kbd | [] [] | keytouch | [] [] [] | keytouch-editor | [] | keytouch-keyboa... | [] [] | latrine | [] [] | ld | [] [] [] [] | leafpad | [] [] [] [] [] [] | libc | [] [] [] [] [] | libexif | [] | libextractor | [] | libgpewidget | [] [] [] [] [] | libgpg-error | [] | libgphoto2 | [] [] [] | libgphoto2_port | [] [] | libgsasl | [] [] | libiconv | [] [] [] | libidn | [] [] | lifelines | () | lilypond | [] [] [] | lingoteach | [] [] [] | lprng | | lynx | [] [] [] | m4 | [] [] [] [] | mailfromd | | mailutils | [] [] | make | [] [] [] [] [] [] [] [] | man-db | [] | minicom | [] [] [] [] | nano | [] [] [] [] [] [] [] | opcodes | [] [] [] [] | parted | [] [] [] | pilot-qof | | popt | [] [] [] [] | psmisc | [] [] | pwdutils | | qof | [] | radius | [] [] | recode | [] [] [] [] [] [] [] [] | rpm | [] [] | screem | | scrollkeeper | [] [] [] | sed | [] [] [] [] [] | shared-mime-info | [] [] [] [] [] [] | sharutils | [] [] [] [] [] [] [] [] | shishi | [] | skencil | [] [] | solfege | [] | soundtracker | [] [] [] | sp | [] | system-tools-ba... | [] [] [] [] [] [] [] [] [] | tar | [] [] [] [] [] | texinfo | [] [] [] | tin | [] () | tuxpaint | [] [] | unicode-han-tra... | | unicode-transla... | [] [] | util-linux | [] [] [] [] [] [] [] | util-linux-ng | [] [] [] [] [] [] [] | vorbis-tools | | wastesedge | () | wdiff | [] [] [] [] [] [] [] [] | wget | [] [] [] [] [] [] [] [] | xchat | [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] | xpad | [] [] [] | +--------------------------------------------------+ es et eu fa fi fr ga gl gu he hi hr hu id is it 85 22 14 2 48 101 61 12 2 8 2 6 53 29 1 52 ja ka ko ku ky lg lt lv mk mn ms mt nb ne nl nn +--------------------------------------------------+ Compendium | [] | a2ps | () [] [] | aegis | () | ant-phone | [] | anubis | [] [] [] | ap-utils | [] | aspell | [] [] | bash | [] | bfd | | bibshelf | [] | binutils | | bison | [] [] [] | bison-runtime | [] [] [] | bluez-pin | [] [] [] | cflow | | clisp | [] | console-tools | | coreutils | [] | cpio | [] | cpplib | [] | cryptonit | [] | dialog | [] [] | diffutils | [] [] [] | doodle | | e2fsprogs | [] | enscript | [] | fetchmail | [] [] | findutils | [] | findutils_stable | [] | flex | [] [] | fslint | | gas | | gawk | [] [] | gcal | | gcc | | gettext-examples | [] [] [] | gettext-runtime | [] [] [] | gettext-tools | [] [] | gip | [] [] | gliv | [] | glunarclock | [] [] | gmult | [] [] [] | gnubiff | | gnucash | () () () | gnuedu | | gnulib | [] [] | gnunet | | gnunet-gtk | | gnutls | [] | gpe-aerial | [] | gpe-beam | [] | gpe-calendar | [] | gpe-clock | [] [] [] | gpe-conf | [] [] [] | gpe-contacts | [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] | gpe-go | [] [] [] | gpe-login | [] [] [] | gpe-ownerinfo | [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] | gpe-su | [] [] [] | gpe-taskmanager | [] [] [] [] | gpe-timesheet | [] | gpe-today | [] [] | gpe-todo | [] | gphoto2 | [] [] | gprof | [] | gpsdrive | [] | gramadoir | () | grep | [] [] | gretl | | gsasl | [] | gss | | gst-plugins-bad | [] | gst-plugins-base | [] | gst-plugins-good | [] | gst-plugins-ugly | [] | gstreamer | [] | gtick | [] | gtkam | [] [] | gtkorphan | [] | gtkspell | [] [] | gutenprint | [] | hello | [] [] [] [] [] [] [] | herrie | [] | hylafax | | idutils | [] | indent | [] [] | iso_15924 | [] | iso_3166 | [] [] [] [] [] [] [] [] | iso_3166_2 | [] | iso_4217 | [] [] [] | iso_639 | [] [] [] [] | jpilot | () () | jtag | | jwhois | [] | kbd | [] | keytouch | [] | keytouch-editor | [] | keytouch-keyboa... | | latrine | [] | ld | | leafpad | [] [] | libc | [] [] [] | libexif | | libextractor | | libgpewidget | [] | libgpg-error | | libgphoto2 | [] | libgphoto2_port | [] | libgsasl | [] | libiconv | [] | libidn | [] [] | lifelines | [] | lilypond | [] | lingoteach | [] | lprng | | lynx | [] [] | m4 | [] [] | mailfromd | | mailutils | | make | [] [] [] | man-db | | minicom | [] | nano | [] [] [] | opcodes | [] | parted | [] [] | pilot-qof | | popt | [] [] [] | psmisc | [] [] [] | pwdutils | | qof | | radius | | recode | [] | rpm | [] [] | screem | [] | scrollkeeper | [] [] [] [] | sed | [] [] | shared-mime-info | [] [] [] [] [] [] [] | sharutils | [] [] | shishi | | skencil | | solfege | () () | soundtracker | | sp | () | system-tools-ba... | [] [] [] [] | tar | [] [] [] | texinfo | [] [] | tin | | tuxpaint | () [] [] | unicode-han-tra... | | unicode-transla... | | util-linux | [] [] | util-linux-ng | [] [] | vorbis-tools | | wastesedge | [] | wdiff | [] [] | wget | [] [] | xchat | [] [] [] [] | xkeyboard-config | [] [] [] | xpad | [] [] [] | +--------------------------------------------------+ ja ka ko ku ky lg lt lv mk mn ms mt nb ne nl nn 51 2 25 3 2 0 6 0 2 2 20 0 11 1 103 6 or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta +--------------------------------------------------+ Compendium | [] [] [] [] [] | a2ps | () [] [] [] [] [] [] | aegis | () () | ant-phone | [] [] | anubis | [] [] [] | ap-utils | () | aspell | [] [] [] | bash | [] [] | bfd | | bibshelf | [] | binutils | [] [] | bison | [] [] [] [] [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] [] | cflow | [] | clisp | [] | console-tools | [] | coreutils | [] [] [] [] | cpio | [] [] [] | cpplib | [] | cryptonit | [] [] | dialog | [] | diffutils | [] [] [] [] [] [] | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] [] | fetchmail | [] [] [] | findutils | [] [] [] | findutils_stable | [] [] [] [] [] [] | flex | [] [] [] [] [] | fslint | [] | gas | | gawk | [] [] [] [] | gcal | [] | gcc | [] [] | gettext-examples | [] [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] [] [] | gettext-tools | [] [] [] [] [] [] [] | gip | [] [] [] [] | gliv | [] [] [] [] [] [] | glunarclock | [] [] [] [] [] [] | gmult | [] [] [] [] | gnubiff | () [] | gnucash | () [] | gnuedu | | gnulib | [] [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gpe-aerial | [] [] [] [] [] [] [] | gpe-beam | [] [] [] [] [] [] [] | gpe-calendar | [] [] [] [] | gpe-clock | [] [] [] [] [] [] [] [] | gpe-conf | [] [] [] [] [] [] [] | gpe-contacts | [] [] [] [] [] | gpe-edit | [] [] [] [] [] [] [] [] [] | gpe-filemanager | [] [] | gpe-go | [] [] [] [] [] [] [] [] | gpe-login | [] [] [] [] [] [] [] [] | gpe-ownerinfo | [] [] [] [] [] [] [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] [] [] [] [] [] [] | gpe-su | [] [] [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] [] | gpe-todo | [] [] [] [] | gphoto2 | [] [] [] [] [] [] | gprof | [] [] [] | gpsdrive | [] [] | gramadoir | [] [] | grep | [] [] [] [] | gretl | [] [] [] | gsasl | [] [] [] | gss | [] [] [] [] | gst-plugins-bad | [] [] [] | gst-plugins-base | [] [] | gst-plugins-good | [] [] | gst-plugins-ugly | [] [] [] | gstreamer | [] [] [] [] | gtick | [] | gtkam | [] [] [] [] [] | gtkorphan | [] | gtkspell | [] [] [] [] [] [] [] [] | gutenprint | [] | hello | [] [] [] [] [] [] [] [] | herrie | [] [] [] | hylafax | | idutils | [] [] [] [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | | iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | | iso_4217 | [] [] [] [] [] [] [] | iso_639 | [] [] [] [] [] [] [] | jpilot | | jtag | [] | jwhois | [] [] [] [] | kbd | [] [] [] | keytouch | [] | keytouch-editor | [] | keytouch-keyboa... | [] | latrine | | ld | [] | leafpad | [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] | libextractor | [] [] | libgpewidget | [] [] [] [] [] [] [] [] | libgpg-error | [] [] [] | libgphoto2 | [] | libgphoto2_port | [] [] [] | libgsasl | [] [] [] [] | libiconv | [] [] [] | libidn | [] [] () | lifelines | [] [] | lilypond | | lingoteach | [] | lprng | [] | lynx | [] [] [] | m4 | [] [] [] [] [] | mailfromd | [] | mailutils | [] [] [] | make | [] [] [] [] | man-db | [] [] [] [] | minicom | [] [] [] [] [] | nano | [] [] [] [] | opcodes | [] [] | parted | [] | pilot-qof | | popt | [] [] [] [] | psmisc | [] [] | pwdutils | [] [] | qof | [] [] | radius | [] [] | recode | [] [] [] [] [] [] [] | rpm | [] [] [] [] | screem | | scrollkeeper | [] [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] [] [] | shared-mime-info | [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | [] | skencil | [] [] [] | solfege | [] | soundtracker | [] [] | sp | | system-tools-ba... | [] [] [] [] [] [] [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] [] | tin | () | tuxpaint | [] [] [] [] [] [] | unicode-han-tra... | | unicode-transla... | | util-linux | [] [] [] [] | util-linux-ng | [] [] [] [] | vorbis-tools | [] | wastesedge | | wdiff | [] [] [] [] [] [] [] | wget | [] [] [] [] | xchat | [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | xpad | [] [] [] | +--------------------------------------------------+ or pa pl pt pt_BR rm ro ru rw sk sl sq sr sv ta 0 5 77 31 53 4 58 72 3 45 46 9 45 122 3 tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu +---------------------------------------------------+ Compendium | [] [] [] [] | 19 a2ps | [] [] [] | 19 aegis | [] | 1 ant-phone | [] [] | 6 anubis | [] [] [] | 11 ap-utils | () [] | 4 aspell | [] [] [] | 16 bash | [] | 6 bfd | | 2 bibshelf | [] | 7 binutils | [] [] [] [] | 9 bison | [] [] [] [] | 20 bison-runtime | [] [] [] [] | 18 bluez-pin | [] [] [] [] [] [] | 28 cflow | [] [] | 5 clisp | | 9 console-tools | [] [] | 5 coreutils | [] [] [] | 18 cpio | [] [] [] [] | 11 cpplib | [] [] [] [] [] | 12 cryptonit | [] | 6 dialog | [] [] [] | 9 diffutils | [] [] [] [] [] | 29 doodle | [] | 6 e2fsprogs | [] [] | 10 enscript | [] [] [] | 16 fetchmail | [] [] | 12 findutils | [] [] [] | 11 findutils_stable | [] [] [] [] | 18 flex | [] [] | 15 fslint | [] | 2 gas | [] | 3 gawk | [] [] [] | 16 gcal | [] | 5 gcc | [] [] [] | 7 gettext-examples | [] [] [] [] [] [] | 29 gettext-runtime | [] [] [] [] [] [] | 28 gettext-tools | [] [] [] [] [] | 20 gip | [] [] | 13 gliv | [] [] | 11 glunarclock | [] [] [] | 15 gmult | [] [] [] [] | 16 gnubiff | [] | 2 gnucash | () [] | 5 gnuedu | [] | 2 gnulib | [] | 10 gnunet | | 0 gnunet-gtk | [] [] | 3 gnutls | | 4 gpe-aerial | [] [] | 14 gpe-beam | [] [] | 14 gpe-calendar | [] [] | 7 gpe-clock | [] [] [] [] | 21 gpe-conf | [] [] [] | 16 gpe-contacts | [] [] | 10 gpe-edit | [] [] [] [] [] | 22 gpe-filemanager | [] [] | 7 gpe-go | [] [] [] [] | 19 gpe-login | [] [] [] [] [] | 21 gpe-ownerinfo | [] [] [] [] | 21 gpe-package | [] | 6 gpe-sketchbook | [] [] | 16 gpe-su | [] [] [] [] | 21 gpe-taskmanager | [] [] [] [] | 21 gpe-timesheet | [] [] [] [] | 18 gpe-today | [] [] [] [] [] | 21 gpe-todo | [] [] | 8 gphoto2 | [] [] [] [] | 21 gprof | [] [] | 13 gpsdrive | [] | 5 gramadoir | [] | 7 grep | [] | 12 gretl | | 6 gsasl | [] [] [] | 9 gss | [] | 7 gst-plugins-bad | [] [] [] | 13 gst-plugins-base | [] [] | 11 gst-plugins-good | [] [] [] [] [] | 16 gst-plugins-ugly | [] [] [] | 13 gstreamer | [] [] [] | 18 gtick | [] [] | 7 gtkam | [] | 16 gtkorphan | [] | 7 gtkspell | [] [] [] [] [] [] | 27 gutenprint | | 4 hello | [] [] [] [] [] | 38 herrie | [] [] | 8 hylafax | | 0 idutils | [] [] | 15 indent | [] [] [] [] [] | 28 iso_15924 | [] [] | 4 iso_3166 | [] [] [] [] [] [] [] [] [] | 54 iso_3166_2 | [] [] | 4 iso_4217 | [] [] [] [] [] | 24 iso_639 | [] [] [] [] [] | 26 jpilot | [] [] [] [] | 7 jtag | [] | 3 jwhois | [] [] [] | 13 kbd | [] [] [] | 13 keytouch | [] | 8 keytouch-editor | [] | 5 keytouch-keyboa... | [] | 5 latrine | [] [] | 5 ld | [] [] [] [] | 10 leafpad | [] [] [] [] [] | 24 libc | [] [] [] | 19 libexif | [] | 5 libextractor | [] | 5 libgpewidget | [] [] [] | 20 libgpg-error | [] | 6 libgphoto2 | [] [] | 9 libgphoto2_port | [] [] [] | 11 libgsasl | [] | 8 libiconv | [] [] | 11 libidn | [] [] | 11 lifelines | | 4 lilypond | [] | 6 lingoteach | [] | 6 lprng | [] | 2 lynx | [] [] [] | 15 m4 | [] [] [] | 18 mailfromd | [] [] | 3 mailutils | [] [] | 8 make | [] [] [] | 20 man-db | [] | 9 minicom | [] | 14 nano | [] [] [] | 20 opcodes | [] [] | 10 parted | [] [] [] | 11 pilot-qof | [] | 1 popt | [] [] [] [] | 18 psmisc | [] [] | 10 pwdutils | [] | 3 qof | [] | 4 radius | [] [] | 7 recode | [] [] [] | 25 rpm | [] [] [] [] | 13 screem | [] | 2 scrollkeeper | [] [] [] [] | 26 sed | [] [] [] [] | 23 shared-mime-info | [] [] [] | 29 sharutils | [] [] [] | 23 shishi | [] | 3 skencil | [] | 7 solfege | [] | 3 soundtracker | [] [] | 9 sp | [] | 3 system-tools-ba... | [] [] [] [] [] [] [] | 38 tar | [] [] [] | 17 texinfo | [] [] [] | 15 tin | | 1 tuxpaint | [] [] [] | 19 unicode-han-tra... | | 0 unicode-transla... | | 2 util-linux | [] [] [] | 20 util-linux-ng | [] [] [] | 20 vorbis-tools | [] [] | 4 wastesedge | | 1 wdiff | [] [] | 23 wget | [] [] [] | 20 xchat | [] [] [] [] | 29 xkeyboard-config | [] [] [] | 14 xpad | [] [] [] | 15 +---------------------------------------------------+ 76 teams tg th tk tr uk ven vi wa xh zh_CN zh_HK zh_TW zu 163 domains 0 3 1 74 51 0 143 21 1 57 7 45 0 2036 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If November 2007 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://translationproject.org/extra/matrix.html'. 1.6 Using `gettext' in new packages =================================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle the use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `coordinator@translationproject.org' to make the `.pot' files available to the translation teams. KCemu-0.5.1/doc/0000755001050700006200000000000011412404770012752 5ustar glaubitzfbedvKCemu-0.5.1/doc/window-profile-2_small.png0000644001050700006200000021672611131675406017776 0ustar glaubitzfbedvPNG  IHDRGWQsRGB IDATxwT:mle]vY:H DQB,h4&%M164X3;l]|󾮹Xf9O~Y&U=nw,,aÆ 6l|qem3,Y',AXkyia9bxiz 6lذac/0sLDV\ `:,⛕־?;N8{^<ᄓ7,Yo dLJ&, X$e}L f6lذa7lk`7#+ eu4 |Ee=2 Gą/c 80͔@(${<>]A#).ËϢz o<}ƝL9dzW DS۰;M;EWQuI1 2QdR8V6lt IذW1~E~͊_#:ާr>8@Ypy y_rpPPR ћ/fg8WwsYSkZA@E 6lt/tӢ)LtdgCbY"40Lke"lnatپ hk KQ@aAN[0bpDA6ٰ;)J ;2fb$lo]7&TTU!X[?},-24MnUq9S7+x]4oOFL8\6-~۰ѹRnѰk*;ђ Q- $-'f2!8e B4\0- J=CL3Dڭ ?- z$z$qN8{H@ ;U*$1xZ||۷n㫵u,\?|&~xGqέo1eH$e6lt4dAٰ~=C+=\}\^n_G0Mt]C&eYl߸}0wA4 $q#ˎFbÆE *fU<} ^x=uAQ&!I"+ hJBs8NB`LŐnp'JTUUQ_WG!aƛqUbx+}ER8ϯM%r?>b8t(4D%d3J_!iVRZ_X5C8u S̎0$2[.c:QQ1{Bo6m݅$ ?'ǴMUug.Lٗ[~6G.e>Kt#c3B.u,?zA"_? ?C7\‡3z} I,[޶a4"LЧ%51dp9l( ;}% ÚӨWM79hL_^`5iܻk8Hajz2nhHу*xoF5公҈(I s c""P) )+1~{]rؾ|U76'rqٟFW|b e'uջBڞ E|r;^!?9Ow~BU E4YJP^^i(}/~F,>(ˎ0(OR>\Sf^,[_3;\.֯]Èw d+66(^^}{l*zP`ʾxzx|u e~>\}KI (%>~=6aGg^a ؕ.lh 2ET M#+xw&rHv0d`T긐2ȐM,DIdSP[!`0H`M_bUdab`ٰёG #jx}6_~(/kΚM yy͵S'q{PL.2n QSQă.C`h^<*z:N1 ׋ʆ-< ^p kE-cpu)-\FYDA@%/ե<7nr=ם50xM|9!һ]A,``U %Lj$LgZsvK#' ,faݞ!)-N_ְ̀w(9(,FIo &ξ:iȲ=y&Qo>Ɇ*Kq3ycC1-[CaLP8€~}> &hnjBE,AO $ I"n޽ٹҷUk4oү/^m"|>{UkQXৼ4kmddI%Y\$VYGuu%f0 /,ЇiYx<.]~5U 'Ԉ$\JK66:UЅԞmII ˁnn(c٧o3YAx|45dY'G8|)&{(~6gX3'4&w6ۖ,KH*HCQH$UA)kYFSka.N ˲p$*i2,a$j:v9 ]72-rHu.'I5e!I"T-ϒDYn_mذMGK?rfZoHLîTU*xa1Y3*,a" ~EKIw]PTd" X8q6ltiZ/h{Fo}M^CV͸֟Ѻ\aFo KN*Rb8xemWI Ѫ#CmvnÆ 6lE*IQКvdxL ƱC A!fÆ 6l20[:ei_+ٰaÆ ?bjd"$IԮ#u0M @^bslذaÆ ?"-^HŦL8`2 UC3TaֈcWT2zXTUg͆ 6l, XR4\?H$4۰aÆ 7nr˲H";0t+EQQI&n/ޗ,Ӈ۝dg_Oټ4inܦM-),DQ,rPbxEQe&3-RE{Z=?߅^'EЙPY[?#36\[9vmO6m4ineY(B0G`ZdY_Y:i 1_Eu4MCUUTUELɞHAY0 TU0644R 6lذcD _KIp.;Q%G鎛ټuKOΧ14|8 <wv&=\. *$:D˅""۞޻7+du|Mw{z^I6m4i>???}y?1`:NOd23{Cq83ũN]],xSݼTAq89s8`$z )**GЫ}.'d܆Ms?4]c WLe .SΠOEVUUӂs  H2axz!ؼy >֭cou*aec%4uN '2x0= ˙~n*OQ.G=_wb}Oӱg˗^j4inܦuCIi(Byr{qJJj׬ݰn~}1tU7&NLdl߾ J{ p88N@EQzc8X,u؋PPXD"&uub X&X,cgX_YbF\dacwluhSx=}I{Ms6miP :?__ÚU}Ua& "# ۘiڱX^zKJJŋ_bAdR>d(R\\mݎ n-zAeϏ \x8`"WJ:LiZ~^}UF T'BQL"?Y F='MA:Kl1waJhQ{sWy>ӦMs6\$O>D$V-[i;v"b .9bt]O =3,+LQQ;wsz)).@Q=1cpmv{/6}:|? 6ok/䕗^dذXp8&NȜ0\TTm~s~ʕ\p4[]tѺξ*d!`Τltڐ˼Yc>=WE.i4tl}ȕ+U$[G.4inܦ-\}ӵL55w;|m~wU]w[n,((ݦJy')N3tM8YB).)e|{A 2e Gy>gq .9sX,i6nȵ]%K;n\3f0c0M3}lQv6鹤^\w߻xUTigwef{f):aܦMs?v(Ռ:EQX"r=<>,,DQLk* YZˤD"&N3.7@A5a$QJ kH&QC|$ʮ, hO!W[;"I*e};كe[3׽,cܦMsEQttׄa<ǟJ#nj<έLqQ:μ; bb#ژ#yia-WrȴܱBj׬!HЯ_M|P^^ٳ>b$XIqƆ.k]ϳ1}uݹ҂H9ۢv삀Ѝ4inܦEs˲eznvFO3t]cx'ꗿOfjwku"]+3p@N7krҼ)**# e|bر0q"Ls>ĉ BKs)Fz"d$sO^I~i1, r夽16m4iC\$4M?Ba(,*L}/J~[z~{ Æ#&(1Ϡ8` @8n7;L-G @,k..R.RF{keYmL㦹D#Lb<vbB)G}LEVx, a9 fKO\fLaE'x3]ś+&s^.cw^V6m41 )ЄQki:q d]*+KEu1tA47裏`Y&4nf.Tٺ$Ij.hA:!^wX|f[k^/P389@s > v"L"Ix<bxڐˬ&e%.-Srl=;[];g:KA&]ʦMs6h[iq#aQ\CX~խjCkiRRR֢N%}fH4xJS7hӆdo +((hӟd25$Օ)ěOB'0+ɽ,H%Z|K]i,~gܦMs? @$ጓOvjvnIye9X ׆Ck-\B7#WDW5o-+>ЙKr͕ssrrtD6Zud6m4!hVVU>O|U+ 1dd;d2نWvE1?aot, a܆MsмM`捼px^6nHs]3b悰;1C;==IuѕUldz25\t H6m4iny<̓Og҄I;43h4G_|EER{gc CnPF>;;G.?T|G丽. :c,J;56m4int|Mvq"UHsgv'}æMs6m743< tQPPذaÆ 6~U]>;X?@uvPL^˷o1w5\/Եg ۼi#x%Ì{9Ģ12Xr  >rUmǑdw$r2q\{ƅ!L=&ڰ帻 eG!b7Ok=d2`R߉+/)㉄L9@ghc&|!Yr/[F9ܳDLzf HĪoV>rnNv*2}Bג0<:z(0tAI&|1x04UDvg|̴fp8~Ų%K޽;(T?D-\?g-,eN|*{7S4hju4eѴϲL5=ٶ,"MV%"QJRʿb \Y0tu\#Ib\=걫4Mt]K=bFZdlݙ=5= lb}V|{>tjf{.t^X :t8 eabj9Gjj?mADTVZ};, :+f Q4{XX^뮹y'EL3 TH 5]m]+f|[vL̜mJeƢFڝiZmn#I,Ds0i4-J|LUnz1MkOCLSL1tE@#b,r:ilj}D6:=f,/DDd)[)DDILWEQXS[KqQm=_|#:$[k(ibZ׫ EۦoYDN>c&隣1dtsH A03nXi_lZ !mE̾2ΖXY0is}6_d{ʈ;;4&C^.|Tּ/{/mN" X&%% q:(yI:.\!bMM|'v=koh=ixi_wpu`!|cQ8|1}ugj׷,H$BAaAYFLSȯ6ri238s)S9|МLҕl٭ ?"b!K"va&,u:fF8rD"q8;{ E lcGp߃#$I" y}x}nqP0_Gt¡^4)yq]$q<^/^X,A4MI :4 eT]ǡ(,I9v0m!L4p[R\O=;8R43Mt@EDA0MdI"i82qb?|n;dWif Ik׮a)(("2Hf**3}4MnE&oFNO o]9Ŭӯ־]}s+wӛnRѵd:Zw_xJ[MYUUjjjȲ$Ia>jgⷿcKHIx f;3"?r*+0{ЇޟIQTTw=u(wꁞى_)ŴοyEyLݿ4®j-U@I6lo1İ~Tuo]![4tŲe}*|india6,׈F?x<\.L$#2g +r!p8m, EIL AexR\RU1j~?"0o&L;N9_o5ig5g谡}ym}G˛y7*Hߚ&M 9sreE0 E/{I[]2tǘ>m.YQH&)..F^/P4|XIQqQZ|֙-Y$Vf̜u$g~dR?Ϡ~%%%@4EUUEpy(UJ(޻̎;xs_x_/ɧRTTD$W\A2ƛowYM푇7if 8aspdj/2t壕f{V;%VY>ߓˇޕձ=r&Tu[sn ˘/Iגxχq{3a+va]u?X#*eIرMz5!P[[ =d)((s8:]D/ZyI4[Y4_;_cg@IYW_nGnuռdSj(fmܰZG3Oɧ'/殻Ÿҟo9z=իWsp?A^x'q,N;L >ēNēN_/ɧbӦ͙~A|[o㙧Aiw~g~/{> se&(x=2?M ,~]׮GbEqb,j) _zo_]ȷ+r(Ȣ$ȢaI(bαr}ӯ/t Ģ1DQ~a3஻LeKw1(^[å?@0ƛnf͚ڔkY477q¼~ -z$6=eQQ^Nj>CE7`)$ vɜr3q:\g3Ϡcg:h9vv" 2ȣ9|쎔L?LӤ'o'w=0z W 4_YȂ /~_:z _tgH&#[k\\.{#t뀓<;ܝgfh]9w|cﮥ"_sm)_a膖@[!jI1-/dhm躞-m|b)c_H{DUuFɨ}y矹3}VֲnWs`w% e$)iTBPp8RLinfeu[ٹ>^,mn*IGf u›q[,Z d˲,˙+ X4䪻uĹb{q>οX,OSsϽ `SOr_rUW_/\~{{y?\|i^~x}Rq]}In.Oj~%#Fg̙l޴uB W]u֯㷿5O>B?~>`1?9,\ X,]%}\0Eb($$ b:~ĴL<-[石v-x $'`ȑ|߸Ï0}4x5^h, WsUW{E4MKO[&U?W_7o6#F U?v+oRnM\L(F&HQQQ&%i ̉|4A2J 2Cfӓ5Sv8ǼFWb*Pre9mPQG7̜0eN?o/6s- :t(DUUSS^ޛx"h7+Wq:y2 64cI -s "iLH$~gcFXD"4MKb<'89|,~2~x***;T]cY$I9).*d1<3ƁSr_[osG1eT/,|f>|ifΘO=.`0H8aWSÌW^A6B!%D"DQ91eʔ)p!x=cɒHD(FQO?^_|2Q`(џ6M0 >Gs, ?>kǟ|ʁSr:]ڵkپcE߯:O3gNjܙHbNrx2Sw evͻ{GݼoOy>î=f)$F ϏDQdY,lӴ2 < +b(&5ىyA>hʆ1jx ˾bQ[SAC8pEEE\ndY棏?He`0I]|Ta$&zL D!$}*QՔ-]Cqʊ J ټi`R\THs !E,4u `o:lLeY$ /\e6nHeUUz7q8,[5߬uֱaz?c֭74cv/UUhZ4ih'ЧO@3R^^-bΝ[ ׳};wz9ciԮYa21MUM1ٰ~U}!\Iʩ.M*E"O("*1?pcF4-F I$TVVԄni) e!SVo(.+EM"HjP_ȟ~63H4iƺZ ֡,()-hAc͚ZŘ/.˂zvLee<$q9gSRRªU 0~<'d˖v(^JիPTTDJ SӷM ÔzbyTTV`Y&(PL2$ &N<>L6~q ,!0f,XSه>|A$$\wu|駌;}ra`N=t]kҧ#IezQRZBii)a"K2%%L0xsfA1{t҉d!l2]̡_~}>:e _}5/ߏ>X,\n @餸]Q55}2e2)~u&ODqq!'OEeӧ1h@CeyXd)3f_ou5z߿_FColh$nVWsQG_ҧӧM# CEy9ƍe}Gk.^#).*blr\xaM˲0L5ҧ: ||-ڝ~t'5s %m9%$DinjLCo[2MIll- tx0 Eq!2D_j9ҭCvKbD OI1_"Hk17ʹۭarjM QP&gMIi H$(qV}sKHNG$AE>?^w G1`(ȕ&t*LK Ql l Kg\uU;j^H$cɷ}scZaĢubmh ';irI "P%k\熢 &Sg`vu+yc9eC1$ILυU0RN=Ӊi1Xw˥p8 UW0BHa4S֫pe |!LRR\āSH$p8̜1# /  V1CT J"x*\Ւ!#cQMMKZ͛8˙=Xf:X,F2 J˲LK) =F~E!җz  @ss3:M("H`Y&}4'0D"jhƂ""$Hr1GH$ŢrW}}} u+ v)f2ke{+Pf|SfkU@\4Ni2e[$c{#6TUC'YP8ݩOٽ]"Sm0tT+ :ynxeJK0Gw:٬նm;EᴴUU6 rX֛qb;w0ğF2A,Ç _]˯u7q`8TtEEzuF]HrJSsV+RH9kFRtc|i.$bpE#PQ5OX=@PBkm@zH%7 q)Sn;ҌV$KkvC{{AEm={;qOe섉aYKzF|*6= DR97%weUY99/A*BVV6,£֞ X-VGԘM?s7%6V]DA,lVwJaϠ,8%C"􂂑[n{? `۱N'JCFF`li&plHN\d0~bS:4{۠0D>"JARE#L]i)?QƠgeeS]UM^~wv{F NE ((,+]n7[L>'TTT iF\6}+#h7vjz֑R9JKYf5G9Qnr B޽( yy|;p\Xz5Fwo֬^̈́#qq? 8EQ端O~Z!4McͪU6djyi]ݚR2goؿHS~*Yh0`m}AMYaٽ`{bpGfU]Cr1|VaD7bذa|DŽA"M)וezykrTEium6SXT(x:t(|P![eOYY>v~@NvP>?Ƚu{H"ULǛ H~Ê*S~C YHJ*!I2DizrSĕŨc: |,dŤcm%qln} dYW\&*E%LS'i kAvvvظFƢi*0d0 jVC={E YY}bg 1G=UZ/zmZE Ѣ%YM'0Dh)hSCvN,//a4SbZZbx<7bՌvh8hi9!Irىc=:|^ hbM;*͞pU6pG8GB `Zٹ#Y(GydiTQ}"_,uhK}1qRZL1Ŕ.~mm oZ D`^o)'ojzgao pYVV6,JCNDQ@QdDȖ6jÆDUز$~Z=5oz1%WOVX-Oׇ!#Z8bh),c!)\n# p:|nJ.+ ϧk'MfcRPVU^f)5¿ng5\k &9ߏ,)@Xv-:JOڊEә\UU9#ޭϓ2>u.dB\r5S<䭷SOweɺJlUE!^t <ڛ<ƠGLgf>JxN UU|].DϛL1%nɈ"[6G~(2(mZ%%Y&{kj. OV6>o nO'Of7ܼ<.:L^/Çґ6"0B1NQLΑ|鮕n1Q*^7t(F2=zDKÆn-2v=7r*."-{/O EË/ j:aՖzQ'by뭷t흋>s;wUUO<`k$TG}]So hZK-<,XE]s=ǐ̝i.?8_ˈ#(--e9b xgy[^rq 7r]w""3f0p@_8~'2g䠩j0H YtT 3f zAxXEYdh4ڞ:U[b& O:d3AL5ayygfϞ͙gaZ,a'~ .;&<ΐ%;+%o6zbڴi;<k"f…X,6l@~p\<WVu3fcQGsM7o>NFQYQӝLCE*++et[axO%/,溙BXDKd{ůsWבՊ*b{^.7۷W`^(pcbOnعcVݻwSQQA&KYfZ,ٞ:~gD~1pMsus}w]v#FwI4x6=q#Il6N'Įݻ@mI(Icƌᣏ>bҕmTT%\鞓͓O<eYBU |^e)$!K X,Hg&!0Sw (ߗ-LA M=:wLp?<~ص Aԩ+K.}1kLf̸kg&2|romm-zAn&ZZZ})**2LiQ 2FLыiHBPRQYQip?"$ɲLQQ> $IbukuBVgɄB!,~ߏakҕLj> G5/E #W]kx^z͒SPP9S( {,|2uuu)S8IߧjJ`ST>xR*j}iҷta1$ߜsUU;;a6 ?˯W_k֮FC}CL{B Gs,kVbzP{ho٥8kmϫc\.=_…a#}3ϰg @m~| 4Gr1cƵȒC#[m#[7za(mh)" 2@ߏiC AIAVB rQRG]l `P644`zHccN ,"P(Vܬk766꟏=iȲL]]~/6M_=rq̙S?ڃj:H$iX%*SER O ҵ8$S5AIWl ]*e-Ukyy<*6׺(.V-7%/,W^U);TU%;;SN=u$r>3=(2;@Yuc "EQUIxl񵉾IʤWvL1P %'܁=EȟNH}}=^v!NjÅ^Ȏwٻq/_駝gM4Gf/Q^2Tm ƓnFq>҄ʿFǟt&u}3Lv5c"${hni1_rsIq]-Dߙ?kGi3.&14_}5ᘓ1эzqo!?S̙'|FKJ(,\ &0|9ؑ4L]}u/m :AhΊd0p𐎕b)HADj I0GTݚEyQҿcO:܂\|->z->\!GO9/~ {1DGJvYt)sNp4Inw‹Dzg$,EW:c|MpA:Eɔvgǘe1fav7oO叺P[nݺߙۼ*.iϹpx1G_KiQq:]\m6acmPϟO߾}/;YbYYY|7m"v ]vQP0έ;t:y驗-"N=@Q?Èڟ}Y&OLUU??[fz`0pŇ}DY~}wy]5QO5>n)]G u !FFΙ4汯HcC_~9,( g(y(x̛7)Sлwo.\(m"BdYFe(..^pEAN(Tܘmmqv5-`۩ڻW2p8quضa5믿do tEp1dNQ7Lii)bi3Gy,>}SDϾ=Q^}{kpB>#&AyAy\$s gYA IDAT7q8̝;￟{E^^#Gdnիg}6W^y%o̞=ߏNओN'͢8cO(n|r|qgPPO^طw{,E%qʩQ],~r\XVn7>{rEj.!I x0r!˲NIܑ9og4 O: QȰ]@ZTE*wr.FϪb䘱N}D*& Kt^s6=؞&^E $7/QGQM힋=w鳧(!>8w߅j,(E q8h{giAqEL6-.HHھ#idc07e``'ZdǦUL%`[b9眩Wr:N mi/Ȍױ%rκ,>ϧ_OI䐌fٜ}ǥ%I mE Njz=v!ѾQԝt)dm}FRXvړ~tӱeB_JwUQ н;_~<(w=}]8:l&x"˗/=yy<n}+KNAA>' ͂Og}O>\O~~^ǧܿAPb ?`W_ү_---&)t4J?CB < src\FL9F#d^EII  7qNDqbK|->>&Y*Xѱcjݛ(=M@9FRD]Jv|iTIW0h4hq<6Q. t>r [[4ƍ˦o7Q]]͘ѣ۷ק++wǨo/mrB$ux̝J($ F+۷{t# "Dj:b)!I !PP((|;z~?H]߲ 5LpF=bUU9|,]zw`hAz c'ĥM7b|~ ЯfQ0_EY \.{챨 ܆pqMv:|>UUU顇X6w.fd޻3iӦMcȐtޝ۶d1kL~>52'i)L_S0h0>~@[h&)tMol |q}M u^%ZzF2v{rM7|r(--墋."//# ͭoaL:hvK_L=)..63ZXDUՐ$C޽#&0)מ+B|g{d%vXsZ:' sa弴y:F]DU8vGF%jEn3tP=Y۴$F}j$JaF3p sq/w(Bnn.fԿc@@/ s$0[=5k$:d駟F0j܌ \xVP(EiXS!"֭vV|'[oPSLIδ=BA ӤBb[%ICG` קbق6lk@bHj^nݻ*$( "! , 5uI3$2fRH&(j]1difԁJn7ZWG"כP(CUU C.яW4-:s182Y)ѓ}ՋDebL1ŔhJ M#+BSCC|l=Y:=(=J YATȞ?@%,ȊD EAVUE!te ژ+>./#}ƒIA[{;k΍ El-Z]b{oϜ Ц'tQoZe)tQWc ݍ8u=]1FqbUc\,VZ;;=Jضm.WÇF}}KGI o,[ƒNAdǵESTq0zMFߋ"E9d|D%Q1^׌%xSU*8;s(SʹJ2JPgV@AT1Ŕ.5ltaݤ3alҋig0'P$)ӓ]~EI'OXz5l&DV8c[]ݳE: ūE4u+rss`766v6Tw,;NZ%:65`179A99&)$1(Ѐjb- L/ 0 Muu|u+"*~1' K oU+)Uʤ'qjkjT98)SqFn6p8qݴp%pB-⣏>b0h nƎ9î]ٳ'W\q/gaÆ aPimPO,ԮsAԲr8v N0+Ln(Ble MH?r*^?\x#cΜ9ŕٓ]vq}kaX[4h^%K;p)p-o[`ݺu;ٳg~`W#3 ~ yl֪GR,&)j@cS A)LH DϞ=Pd49nB I̸vO6ѫ0[ln㥗^wɠABXV=srI'a۹9s&_o0a^z)ׯqMMM^~j[o yJ7M1v5hV{&CUF8u/EUPPpFss3fspڔEbM%v#GSO_ 8@jXy4B_p!Nn /s=W?Ygť^ڵk馛=bdF@SMPT8rtƜg:+ Q$CqO1Ŕ)4[oE2reP(p(juGI#oMir*,w Ĵr뭷2gxΝ˴iӸ曹ظq#6ɓ'޽Iss3?8ӦM>wDXTٵk9hSḋz{ιtUk@9&~ع@ HL')rjo薛4Pin7lЍ %H+**lmP5&u<ȶ9TXb~Wh"vYgEaa!_ٳ'W\qEܘ~i}QE/ 'x" ,'x?>Z~qSOq-"D%YJ9L9a22wn:k΍x%߃,c$p(y(d 61M1 H+jtzDaq1?!aGt=b$hlѿv$oj R XEZP=U͌3>|7.~EiV'2qĄvqq4l0x۷sI'3gNϡRFYTYg2)L|> boKv7Ŕ\hh"C-s@BZHR$zwVuO=jJ{ᴨd{ 4-;k6aç|r V%5^z\ukl*T-Y"m[9ODQ,bMz0 QnCqJFE4k)Wg@HOYaC!"h[0|LZIQ\*փxr8||ayhHV4"q:5|WΝzTrrr ImF% a`@&RΑBdPsB?`3$S1ũ iRQp88,#r`ӐAX&󩎱٬ :G?Νw~T%u (*, .䶹wR*"HZlz"6tz{@FR=tH/1!gzp"tө_ פPrrrp8YZtkT߯COee%Cao'0{-3wyyyI!u4 ݮEX-V44<C}>iSLIolK=Hnn.$e-ujsG6ңGO8l|>_Ia"QMp: (5LF3 #JGHr{ li#Qv&m5F"Tוjeժ4'W\+m[uljkkl\z%<<K.¢"hj(ݚ2nw}dUÁ͂$Ppb EzOyTgF1S㟪])UU:lDNILP259癜=s}[۷s1a>W_śo.gԩv/,Y K~@E7aw#Χ0oGeV^qhll_zA!0d֮]GEE#F gTA_})(R\RvAoNqZV+~8?jꎁIk3R**=ٵoٹc۷}شi}ɺUyWQ517*;*FS19)$lV+Vݎ%pPpUn7ͯF>EQ$772/^LIq1477sp0s,\n7t3{gẙ3q:L:jj 97"I2Dܢ"n[`r`!l޴ݮ+onl=(i:\n}6_^/z16Ыz=6e;jG~-+ł՚yͺ5]dtH0;53fSXO "ij&0 bzj+Kvi!Ym$Iĝ^C)w[$XVvO\B'-)SsMӹƣ/ulZtןM~~@0wIm~."|>_|17xUmL:h> 8L=<3fo>{AYFdgrܵ QZQ(z^up8=v<>vf40Ŕu ;uvv~_v t](+Jx0S}jmOdkTǿ'RĉRTΫՂ$+586^]qGK(zz,/z2œ.*XzX.t$*:Egy_ƃ4 QE&Lj6AO>G~1\.>^soGiIjkkQdՊ^{AjE%B$4-\.">[RTXj,!2!IB{%=zRmNj%Ai>degD>}HfbJȒ H$IXV֯YC2ػgP}v(p"ǥ,FZޚB\ST={ټe UUU[ġTTq;5bT"~'Eӛ?x$-ad֭X,/_ίkn JCC7pfbΝwW_yݻuga…H?UW]݉|&F=ԧ]snCҍ;  ݻΝ6_|Ioh3O?bzQ,gvSO>OO纙ѳcmx^,VG5N8=("2^Ww[4 7lXAE\qŕ$IN`#wЋqE>}ڻ/>U+UU2B${asSLiDUzǷ׳q:ѷc=J;Cv,(UO0# 1JSUTE#ݺ9?j G4*4V0}q6˗/g֬Y̚5ӿ^|E6oٰa6mbҤI1ӧOGt2}tx ֬Yÿ8cRUUٴi#Gd֬Yz3nܸfzLʻb]^ LzNk$=?y? ۋj駟sL _ (#hnnv:.nz֮[s-O>uuu8N4zښ~}?z+mTE_ )x}=LkAc6ӑeE[Dm~TUQh{$IzaL-т>0hinDq`NE؈1tжL1 ':>Ej1dx=]t$(B.ҶZZq?#DF(bZXIU|   ;Wo(Ȇ>^A=5)TWW~zfϞiMa}F455G?=:bku#wRz߿ $ǀ0Ŕ\ӫ۶,ۮ#RW[ں-t0n9 $9.T=r}\,) 5jdE:(++3g}6/ 8Z70! ,>`\{lݺS^^NKKأڰar -0}t]Guш+Jhǟ9U#sk5hH{4ŔUB\]1(r~Z&N *%))hJ+YϏWkl +K7 Di IDAT.:jts ԐO?%\“O>mw?u]Gaa~o~Nb .`ҥlذǜ9s#7U+ps饗xbz! :3ȴ-Ydk'<g#YCh Ig>qَFF~ݿEQEO՛b)]+QG\~3iR/e@v(.cQ_@ތ> QuF>AhT`ܐ1ۘt[o|r]Ο??4S2ur-) 0e=\=ܸvLK&Ubm}5zi{tSTC~GsIN\-6Զr QPP1:t!,w#I#Տ}2w xrZ d 'OjAp Pُ,|kĨFS$zR6ASrb((f/`@V5?=Cou'`0%:gL&S#s(.p0Ra9hbdD똡=X)4ѿr7ŔCS48c9nOkГES3¤zWW{}1 eZ9HyyoŠ q\i MRER"ddS2%m$M!&{xSu1F*⻢߈l6_mbʡo;k>E\vEU}38.ː! F4+"Ď3#R=;D, L1SeQʒnC}艔w=d_%UQcԮ(h:"o=dm#{Ι;M.NwlCgyt`80h)! mi=A(J}n K A @I  Q%`H!$طwGNm)l3`)3FLk3)6*@3{vkf*^AUYQQ ug iK;k+N:1Oqste?z,cO]b!fIwXMY|쭪!/ص1E|_Y(@,7wTarz@nnJ>X|o i4]mI@#,ƐhBejhz#Ӧbʡ$.lV+B+LAm2[ӡ\%bG$[[QTeE܇_O|ižz/uu5؁@Qq:޽{q\욚TUFpsKJJ"AÁ륱={WϬ#ȹ2#9O5rg:<k΅8NzmZsSL9DjN'jn8B7R\Q~EUAZDjUG ek5`N>d}V^w3EfQ~0ctSLJ ZtRT\_*J{}֚NIVuEI#/Ann]:PBrv|?CP_SLJ^ZZʶmۘ7o˖-ছnbܹE?*o6z*ݺu㗿% PPP5k>|8FbѢEѵ~,`#JsDT5hn bJ @BQڻPК g-Φ5Fj2j[Kk[SEc{(;d`=@ۂڼy3wy't](++O[q:q;w.S^^ TWWseQ\\5\;sI3M}Tc9OE.U`W-DE͆oCcyLzbOݠkvj,"hD5/q:( GF#dǨJKO*ޙ`^Z;`_ "dKtd#+rܽӇcqxX`…8Nj?|N?tgy&ӧOgڵ:}jQQo<_|'N4H* NfSaǾ.Kg:s3Iwή0Fޣ@Ŏ7`0y?!HfG%3Io)MĐXwQ#.a&5Mk SJDyss3kVyG }cj423F3eEbx퍵x}ztzr3ղ`+% =v~*ǧ뮻뮻{99s&7n0eʔq]I(G嬳>JJJJOhhhݻw6eh-S`Г=bkFEdY0p^|Jop‰S6Gޓ$)LBdEU"<1vݸ̶7SL1f@_RU;쯪bݚU}XVԄMbm7_I>})*.{v_0jhl)ad;Ķ'aZ!}SMSK3?XwQB26_?Y@ZD{w_~;wriQ\\/LII '|r1O=O<SOp^z;s>cf2DEQbOjPkV*:V)xmC/Z(8 y 1y8~cΞNN Ľ'Os^{kO⣏>⤓"=X^z%[zƌ gӫ f&[]T3HB"VY\o Fdoq֙gLMM-xl#E|>DQ$''t~? vimmp⥹"2dggd*t m zYc1mdC<BfFEQU?Im{GKa#FժL8Xn7jT6sDm D^^~ʋ(4iCұvnMF_|@0DK}Fd9ħSj#i@zXU4EQ Q3s̈JB9c8cpmu8$ ܹscٳ3<3vW_T ƉRq'CEltT݁Q߇*po-?*TE^`,x~)EzLU;hjjgaÆ |r?ټy3~Q~̞};_|t98cYG477% ]22/(`gU%e!)TEa ۗc/8cYgBN\vanGv PWSq'@Zz:5_2I"y3!>S͟I9xR]tT/߂#ō 8\Nm+޻|jmLD}y%UhXUUdYg?C=#xV֯/R"x%OW1-_CC#~_+3BA^ze{~?=g?*7t/ oX ]ƆF>S>, Ϗ9n&@.zi jjb[9yvƙ67kmT C4yu8N6)6ey;VF 9f P)"==vPD.CW]5Ja±'REȢQpTBITij7]z)YY1,ҫzAnܤןsfjU%&s*x3c&(ҧO6oLAAp͛7s~ECC}555(YbܸqˑԱ86BCC " pdzY sڔ)1] `- B(x@)7m$%%s|46ěJBp᎘jQ$Xb>ftP( [En+'YQ=͍I܊X2cuEΒ=^'L`{ٱc  CA+wwx]zqZ;%y[oZ 2'␦lؚ3YnPEeu|TTTEȱexDNSN^ei;4I@eú/&o.|jkkhCU#vFUQD Kp8٭btl޸Aٰv #F-!ܑ": vC紪5ҒR' .ڬ'9ӬwQ2R8iݯ5D֒RV5"jpO<׳쭷(/^"##A{xoCd.g8N^xy>3Νv.?O uם,[W_u%(ce7< \M8,LD]ż}¡e"} +_Q1 |"9n B5hx\Xz|Cz͍ZXABr8DP !H&oiYx]gh񞆆MBԮ^[ BOG? ,q?gsLOT(JFmvۏC.ګ@*k$R5˲aov `1O0)nNs~Z>Z[tB LFK 'Fw'ҿwv@O긺2~+ͩMUPE/[jj*̘$IA]QW0bfCC]^M Z=ۙ `jFp&zEtDBW:^2fn@0T/&O>}s=U?Ȳ<;׷9*W[w"e5~17vҳAo`jP>79̵mP5umG(&nvtFrH !ѳA0ύ̠qZUUQػ{/ ’1lYs5zD7{1z<Ee=dff*n7V_W F$pS}naզ,+Ȳ#im aLۓ޹W{dYAQUvTK)--f1#Ǝ`t@UḦ́v:w}\z饜r)<AƎ#Q5 X~=1c.,,X@NN֭cĈ,\ٳg3gΜRwCw8t3cHs9h8MQde\.au= X'el nvY-|:Kz&fB´::ªcrqȲR/+F\/\(m}Yc!J͛7@e{>|8?<#G$}TX//w}nj3Xjeee߿C>kS;f@Pǡ' Ct8YYIKK pxR3,kgD1o>7fN;]=ۓ*qddY)8EfK3ՄCMǘF%KKKy'袋xg(((`ȑ|gL<ǓO>G}駟7ƍ9r$ׯ;`ҥ{Z> Lӊf5N A2LqV07y$)̠!CÄB2ÉKkMsG{ Vdc%G"|UK^VF^+ >1:f% ]됌w(7?,%o'-{K˸Vf,RR~IOOgkG= .tr-Я_=~;>@DM;w.555;;ʐ$頠~kf5-?^Z>U ,ZkzW:=vQq !+*Ӫȱ\5$ۘZ͌}(Ҿfrۘۘ)rjCP]]=%s\7A8M#,I (IJBK"2,]4GyD%6mӦMPn?L:5Bd96Ȳ7>0{Lqr*fskrױCc蓓KsS8%KEؘ> Ikf2Bژۘɘ[ЍtZaKx` ƭ^Ofz&`@"؀Ep׀c?qIƢ("IRa("r,W4mfˊ^(J,׮+ ##C %Ӟg/ 6danֆO%Tsrd̃EZ6s5lm̻s+ 퉊zټҋ5~=E&5=Q  bŧ_f& h:%Q">KE>JȣgggǵkSYD× jKD gD%;{M# ʃlEGK17;duژۘ; T1#!`ރkq~$)"E eE V&q̙xSR 3$WLDώWfuX%<K(,K]:< 666 sS݊r<5ք ҟׯh6"㡸?6TXmbGZ#~^P+koԲaY Veԧe $%́`c31yYgsQT8XSj 3F&bg1ʶ& o<0NFޞf0JȎGḾ8Ns6=s{ۘۘ[SnE-Y(2/r`@" KD0b޽L: n:Ō"Yj-@+r$ܓydUUe@iM->Pe CѲ2`5̏}ncnc~h07Irmf[8®JxnTEETZ|AUFedYEǸO &tq$J=s ֭)WBmNa\%7@A4{gI IDATۘۘw7 soJ:V? l#eW }3RY]_:,DaȉiqZOU9XV̤5]20OX]n2.5JŎqOwwb.D7yRlm{(]bMAt YEKk pF u3NDXW T4VP>҃#-- dsݤ( QXXgHˮ]eؽ@UUJKKx<^/ȲLzzz,뜙T}Y PV5jDm]CD kPTRJ͸zWå~66sCf%AP!*n=5MuQ@="uDL6?+W2o<~i;w.2c LOغu+. ^N9z*++(((@UUNFʕ+Y2G C۶۳<ܑ6`6nO<믿Oqq1Ch{뭷xc @zz:s.{;82e GuǏPZPw2F'+%d*6Q` cU5yr0RGLPH<^:kp~}YH,$/1 Q%_s=J `p^ 75jlڴ￟g}Y]vQ\\L(BQ6g&OiUW]<_?΢EXv-/W_quaNx|ȝE:oxݯ7d`nԿY@(+yr13=YiƼ7`n'b1T( Ms`>/] !w)-'UWt@gpYY'tϏȈ$ q݈GǾh")Sp3on8rrrK5kSLaŊ$îH&ca2⪻Z2l];p8쯮ִ[U٘Z̭B&"٘ۘMš< ^%זJ%kߏ_^~>~v9L>\")d{rM7C?\vetM\lڴl<8^/~!^76 p9_0bG~~>˗/o`]P*U3*n`[`n3Hޥe,0zqfbn6تƼ7`nkqf P% M!m{5U q?_9$V=yrsQϸ뮻Yd ;wdԩү_?N9c\hQ O<E]?OY`>?O8xWYb?0ź5db28aVz4?C݁~o|~<)i񋳘6ի1Xpan6H2lm̏"f1hk>r[`(LK}  9UqQFRo( {.( ?OHc2vظw\02{guY/w7=.ǍܻsdOڊ(TFz mI-z:f}Ylm̏dMt3jd񸐢2le6Er#IUEVd֯JunZְy:m%SۗN tیZ'^3gj'J\NC6Qs%Χ)Β^cƼ:Tֳ6:lm{]Ϟbf;s889ٳsn'r(TinR47`}\{5dfe(a7-I<[P&b̉N:-ne׻F+#ަ4r2Jd/ лWo]\@5}r򨭭[̻nc$ZDp#u,Zܑl9zjTN4'; Arpǝw" bZ:u#⭧S_JLحrf1[Jg (GQQʷlSVy2UU&A7H&eSrQXX:řq?=p2dȐI!sͿbGy9~}pd~ aUwYr}qw1⋩AsKf̘aXx1^xÆ ;H~'b ^/G}4~4sM74f%[3gi r8e\d"/z!)Ǹ8P_+,3c @@@4FocE\YeQ\\;oMnnAHIIaΝtDge gT(ZI&[H$ma"iKi%EwNf@m/3ZyB]K;~'s]w1ay^{5dYI1E$)NUQgpx>n R #KְRB>B;gby.A3f ~!NEQصkWP/^c=#<ҥK#E}Q~_&=h?g8f[F^]U{^"l>5>1}$6 hc~x1N$٘ۘI[RGA /UW]s]wq=Ov(..sw3}tA`֬YTTTr߿jhgFyqYF6|]酳mfc=;,Gl{8Vmfcsވ.AR.J'L_WWπxsTn/GQ$ddEBUP`22Rq1(ȲLNNoFl?&32uTNỲ2z!E$])Ȧz ̎!oU+ٍgٌ %HM!cc07Jt66G: 4^Q-D S'oEd̈́].u:*~>tN3p8 p8EYۤ0yDխN36L@XH)6[ I=؈H\7J`fQuzP]h+G=\cVi7# s)@>+E٘ۘakf%%SeTSNJuuw/;UII@T„eT~57{=+O yPeUTk{JdSY][jC sZOn}ncnc~0-:%KҲٴo#55}Ybv6d?q%t=>)Y*D^Vvt :wd%ݺ9Huv1ۏsP,yf.'AaY!tRG tccc쳦XE87R^^PUUUaÆؽ۷ogڵlذʃp}}=k׮9F n_+kk+$U444:jK7};SZZZXv-uuukkkk BȲ́r9řQJšKdfΜ #۷ogܹ;r-lٲkr{s?>֭+_~򗿌{u( ^O AwNJpYg_h"z!DQ禛nwa,_ɓ'wƷxXp8e|x3ziG1zg>;gia~Zژۘk ;gl!fi!|Oٵ}%KHMOeؘao¾}8p<֭[뮻xWq̙3[ns曼\qrWzjY6,\j_lÆ /T ˺QTTԁ;(((o裏?/`Æ w}B!~r'j*?0rHVZ̢EXr%555{L81ƈ8>hz8 n{1qQU뮻SN9c=Y"77 =\M{"'j_Y5g#? >qVC>U/ۣH4AOT7E=SR9y@sC3׼Qdo$%-3N8lnnkeŊ~7m =L4 >lb/a…q=6UU'OSE. Qٺu+K,p0ydQ\r%Yf/RSSo߾Y+5kCJzzz,ntܒ$1sL^u8lJt$TK|'o5k`wdn+11;"9vЊ ҒRDaq!nW}6*GF vcؐam1xp <@>}bi/5ϛ7W_}sW x`ٳEۯaff&:/&++j|A222x8p ׿92> ZYlm{cԈ7|TU%@D8D3u^֖V Ya׎]er(,)p];]S˔0~bPZZѣ),,$ 2l0&M'|(\xᅸHz*۶mcΝzdff ׯ_LJx<ihh`۶mRXX;CII 林Mjϧ/..Ijjjl>eeeL8 VZYgEvv6z*qFfΜɓy7(--eԩuj q'Ή'\8p n UKsA  >~%%HdEEQoY MbhI.{N됁5{(ᦵ8rkY*uf%9H]ccnc0jwVUҿ:qSEQd -}5;93j7ze+祉yo<,FVb{= q np)_&wpF33^yeL=bF-En„ 4Z'z/#pbH6q7 pZ>Z󰂹!l_5Ř4#IژۘtEUQU IDATǻ>uFE#KuYCKհmfLF::keb ?>/\ʹK;c%> -Y1zϱZ=Beջbmm{(!vT sozLt`KkUU%ID n6v̝rZ2ZRqo_Ѝ..׬u5ѺƼ`-DQ9m2uk)[Ov> (Y  -eOn~HɨӐBZM.f{I X=|I#r9vH6aYhsfY-C2-W?ۉ8D)q9BȜ<. 777y}3)nG`ҺHU5<^9^xMK:1AJ/wϴ^ ܚ̑C)c+Z7kmcnc~cnHUAUy Zi CF(yaq6DVvǍ@@bWgN(,/'H37"nYrQBLa j5MASxcNZ.GngVK$pmy-S ReR]gFVR=2S]ȊJmcUQ %ZCqT*5$T=.T JxFxgg=eGεHe}8zp/`cU#NM/ j#C笣sXUev#DesS[CVT$EY塈 (pk~0$KgkOxs wHx6Qd"|=Ƽ`w>1|'Px"a>&v~7R ^o72lPmƈ#ZVod*2BFE`Xi NCeU`8|r" x܎ׅeS/r(3<.G?lMIJLv9H0FBn1?%D|-/sƖf1w].jf[yYq JJvV*%‘l66s򩪢*"}UAVn[*p{=tvWb!سFu,H@(1h( 1'4@@\'qEYiHUEamEۤxM"H8Hqz/25)Y[+!&jcnc0w|h=s2l!8VoQ1X-"ddz^)Ҵ őEqoo3nmXUS'^V=3jx<`H}{g)NMrxD%Lg1'ԕl]3BͨOv&D66 sgEs*IYNUˮKڶ`ŀě7BT+?c XW2Qg2z}XU)DfmfgZvt11iKԵHq;zG"Lʀ)ԏMǯn? #%j@/ᄞF@ӶZf~ hIkHk$Βyo\ BD|ô8n*m9fKp8Q 4a`T]\Gd%t-Q[1V_+T#v"g!=iI66?V" ( gӿ[- ISHC+BrP ,IP{2'gtn45U'ܢN;fԳˬAk˯mx5f͌Ƽ7aIЭ.b"P gdA) IQ2RHAu) \:;"ڦpݸ.U@VQAAFL bD ݘQ]59Gqq=Rmlcnc1".D4;R]dw>4T6h"Jve hjy(.FvvDQM+2Ah&Q5daIav[$Eok7HAh|EUiheTnn$x 2fcSgLs4U)G̀[8tvCNaov%7"9B} qxbE e_m m^CQQA\nPѣGx:|o>6l}[2ae6p]Q?Ί(7( LJPupthiBV{y¼yo\LtQTUr>E#ǢH0ч.p|ꊜ2(xq%\B(hmhEmK/1Q7,_|Mbo9srJ~_o>Z[[裏={.7(p]}d143vNܬ4fJvf*9" ^Z^6= sٿUƼ7a.rx MFSS(ywYz5ƍ ^!ƪ&R*Rl .D/8Ox4DT֣ 蹹'reu_4_|W^'̓O>IUU֭c֬Yr)̟?5ki:ܪo>0v!Ӷ:>Ḡnane66K?<]w7|3˖-7ߤ3n8E=X%0'58l wi8QJ8Ʃ%Ip0Ka7ndҤI(J[QY7C=9'|qGEE%%%dggРu雨Jh}e2RJ$դzr#9%1﹘'yncnc1/H*x_O5\èQeQ,#;(;PA}1zHSQF-q"PPE RA+L3X߿?1=qfZ`u몪j&u0"V%DKƼanUiF*11V۩ʋ/_w ',9IDX V9L'^T(8d 3[A |v5kW]uU0W̙3Ip:oƍ 1csK.aÆ |I4~I'd"֕V̓<ހ8^sއ.A7Ѵ,}^RNVqNJP aJGX!( *Qh/?|8NTUO駟^YfĞ?uT222Xv-o4hO7o^,רWjB+ ) )hb@Z$ҿlf0w02јM9 hyoż qp8$ Qcj΃ H*C/>"+4 *Qn$_Ձ3Fcq::;AQN'_|q\EaҤIL4) >ÇG2P.ٚ],$aTh#96bcs1׻FI(dcncޛ0w^6uQr-C~AAg5믾eؐEnmB $lf#);+vĤxϏ2ZxZZ Q%P-f^L1K'h6^b+5Z0DM6GfJi9٘ۘOշI2@cS_SCfVf ^Uu rǁ ={61/x03=NՊj`;TlVe1?k?̚v&mm̏DMp=f*DgeerԳ83CQQQA09-!r__r$ZV=-,DžZyzIuW1ןY̪]+vwË}H7MЭr=FCt(̟@)і>֌Ȉ1kuؕf/ NJ>TËmm̵"ho=Nau蝟tr3~-Jtg_k8L^fl/Բw^+=7itWḼ$л󞋹 a>11bT - NBcS#ȣͦo2#œBff&ii73s,d$="EP;"hQku(hVVBA B vw73\̝uH2˙s^{I=n|~B!$Ij*G= q:Ct#k \t.vK~V'Rԡ=SOΤ3O=%P_[Ϭ?Ϣ>TO3G6K:"Bk#)i\Ls󋗂67UUEE\.NS]A{ުJLhr4`ޖ6w{5h:&Wose(J8!ˊ+p9(Pw%߱~j+k B.,uz,w}41(ߊ0DK -C&-F~d?e Ҵ"SLAeIϯ_{キErA ؘ8*bMzk8'}CE/]g?cݔVk.:;!I I> 9A`׮]7/g޼yԪg}V c\r%_BEF%Kp3ey>EQ+otqضmK/G$IBek׮dff}vOɓyfΜɓY~~K/֯͘1+۷\.SI׬Yïk*֯__ә2e o&o6~N:`^ FSS5551Mi--=rVS9b5gMs%hCx# .}Y :Ŗ [+&K?3NCKmmݲe^ s}co״'E2dٷo+W~y?w}&>S.]ʐ!Cx7gkjj?ڵkٽ{w,^ɓ'w^-Zŋ)//7ޠk׮,Z{9spI'`׿3<_~G}T{tOh^z7|Yfm6֮]˟g^~eΝc=FYY?8n#c5~x>cC #5eu~m:ȱhۘۘK'D>mmht9IMI%P׀;Mn^.%K(>%ddt9im8N#Dlڴidee Z<7`O駟3f _5cǎ`„ [.fSRRXx1˗/\?_|9<zb۶m9Qٽ{7>\p-۹s'={$0zhu@zz:]t/+Bk֬aڴi|7\r%$''UUUpsw-FA(_SPP@>}ٳ'wy'cƌs;K.s=\.VX7Ί+(**j<<DwH-Y=\~|Nc!VlV?csNy{K:uY11?^0KУgƺNtu7izvJt/&/M Mn,kntipЈ+rn7rRRRz;EQ _^ScٳZ)-->n_.8pG}O>SR__ߢn@ WEnv&N@ -յ3`0xȵsriiiL:~s=7|>oOvCNNɸnAn|.vءh.rĚ7egeF*ĺk i%Eq<[ I!Gj[(eцmdiTy%X?FRx;Wz s~grs)(*kQسytڅ>'a8hu=zh{=YF֮]Kqq17x#'O>SOeժU|gtI|駈 7wɄ Xt):K,ge͚5|wz$IGL6-&H#F`ժU8[8s>|8˩/ IDAT-СCtaȐ!^8h0h'pWp̘1yGfALƘ]ÇX J̍HhFH"2zF\V07zވ1K,ecnc~`nGV{pqFap|~,S[U˖УEt۝RW],xCTL8I&qSPPM7ĵ^ԩS[|wر8p/ puѫW/ ?~<5FZ#~x0sѧO]JXl]v)\/b]Պ,\ve ,Z3grg{n~߰|rƏe]w0a]w;w.'OoZTCկ~HJJ&MrtFr~ѣumA4'kup-unsjҴ11?0IND<EK^~L.5q }[AiOҏm1p@ʶz׳3~7}0 Y?#lEQg8sȷ̲E^,#Ae'|°a9d|e]@SE85Z=ڿ"D{˖-4662|pq7F/[J \}} 0pI\.kV/8g&3uYFŞnk-q׹y{g޲X 8NV}F%"R ٗ3V:qXr }vSE4vlA}QN?K' B-$M˅B!=bYź(HiJCkXsSUU#hm W#I}_7t:|.]SUq.(cEYwxhw1MjE+^[D޳:G8h"\9FyBgfV3o"L8$% %\:R232QT%QUywtt:ub.~=+I.)I|'H`G}?~6;ZDE##E3 RKksH&bw4GcI4'{{D0siO(=66JNXq-0`sUwisJ`ڐ5߰"]4V֚X]V17gWksDP(Ħ-@9(SطHr @!9Xz<O "sΘ  XFSQQ+عs~+V`x[WWNJ+)//o1?UňJZ_ƍYr%^WoϞ=ZEPڵRkٳp\XacMuֱb =}5\ʕ+ٱc]t3fn`ʕz;-*\޽oo9ai^&x$:\0FXZkm:%J֯ÑzHcرk3;0{V>6݌$JܶХ e%evɥ]wvYi T#(yf?E#s۶mc֬Y:ٴi~5Z3g/f˖-w}:3QVVƯ~+^|EC}z[5… kZ ?>ׯnQVV{V^? l޼z+Vc?Oy5_q3V 2l?]w}:t(eee1j w4Eرc/[[EFKb"ƨXq1ZSls #R66汊 㥮.y]POž OAaYQUj*++ի`ƌ-mݺQFq 7лwo6l؀,ˌ3뮻\,Y”)Sb"-- ?Ly7;w.Yk嫯K/e͚5ܵɰvZ.RdYfԩL:YfyxGݻ7{/2{lq>}.?ӤLg˖- >?15Eaʔ)Xb6l?mFIII8uVOYgSO=믿N}}==999 >krgt8}(8t:׆ecnc~`nم`:/V`|xIS9پy;;d󏛩rC(6RVR-9봳g#s|kRAڤ8Xj^x!>(7pt<***bNƎ˸qXr%ƍYيq,_\/f…,\kmmjj"-- EQkRWWGΝٷor 8pyyy P^^'cYf;7ߴ+O?DUU A_{5ƎI'駟s=w?ϠAxg/fzR'ox6lؠgɍ-&ĉY`s .g\|\{̜9>[W_{<9Rʯ:~s'T˕̊^z /LA qӮy^|>Xt)<򈥹hJfD&yi˺L$jX̺i&jX11Kicnc~c. _62"l5fYU ؽ}7ٝAn=( iiܶUU³.d 2pt!CpEQSSCmm-SL!##C۹ 9r$(rgi&nFrrrXz5Ё޽;=zvKNNg}6z{$I=.]Fi(2h mEEEˌ;# ׏"zEUUz+$ѭ[7uFSSr гgOrsseoA8)((`w# 4'|2]v%//޽{өS'nݺѳgORRRq-))aӦML4P("`–[|k5;wAQ Ȟݻջ/^x}Jt@~ZMJõέ`nmFjYԝ66 +et+,:v>DcqD s^_O0R֟Rث]L9o u"UFXyčڦYG_}ng׌3x5f;6ʙnE}]_GCO+nUg1KTr2˜hnunu-X(cg+Qlm̏e-CoM,w+Ic5,~Xr***HRV 9$93;$=7UU!Rev7S iDL=j73f"#S0|bZ2wXFa5,eLGE;l1Mb8-~5qz:qmm;sgmQO5lds)))TVUrrnpoE ~p]N)VBD֫MO4B[QdzMT%u8KFyT1]ZQ&u`cnc~<`h+F@$j]Y9}'f>s_s.qq`5Lo2K4`DHsF1OXƼ{ */Ѡ$Bę0)))̸cNĵw"ObfR8TVr^'Үxu&Z!ؘ&umODbZ\jHKȲBHQ9DQ PWWO- ԃa"yIkYqwR2³nd9Un5V]FgQn=6G/VfsX|艨e44RWm z(  MMLRr;U,1;03?AURSIODVfiRIII!%%,V|MzX9cGGs2kEaniKLx'* 5@{w{a.ؘ[Sszw{{̘{Pz EQcGCc˖.%ҥIo~Cuu5$?EeҤI8,Xvsw}v{1H(bܸqߟ_|p3gNe:bKm3V>}7f[Uk,d#(?oÇy{f11?^0+G~J38Ç!Gd%m[}ᐫ466ҵ+[JJMMWٳgoor7Vϰ{q<쳜s9,Z'|Rd˗/o5[o[o'F(s3&ǚpVXM`1>j#պMacnc~<`=^ȏ2m4 -܂$IzIr0l0֬Y(8N'դe˖pRUE9MKzj.]W_ ?oKHII&L͛yW>| 0R%Ek{FF)b!Z/E_t;`}-DTf6մG2юyB*D;zdb> !;'޽{ӷo_*++'99YnwL4> P3ir\lذ?~Xk"d.{mm0XZhbiΞ2Q.0ej h%}6ۘ/g&zh jcncј[&6蒞βeOy7P8䡐qŕWŖ[PQub{nn()eee,]TWGKZ:RaÆ3vX^/iiiўoaĈ 2 .@g$"JR0k]Fmkso:ܖ^1?|5C}s s1^_~%~!? BzЗ(xDA!"(xP#Et`ƌ|gL<ɓ'sYgQUU L4syx뮻Xp!'N[nkܸq8p &g.2M<錩1SD96 hdo5߯vF ދ;T\^G+*:#y<095yU5̓>Ȍ3BzRWTS\\I#Ilb@!z !EBC=>SY^( ;;fɮp8裏ḱJ%^Ʋxce1*Q=F5g%UakTGQqyVy<3f@eg~fY<d~ܸ$p@9jJjjpJ(JcM)Il _{~dgesHoŐ*fHc*5^D3 #p0'ƛp4$ OS4Űnc~t`n4FM"ҚenlJf P@MM4ݬVDӲw?7D{0|zM>M6q)U~?:wvZ9stzVZŨQʢJF'{wlؙqVHlh"%_<ν6Ws6mla0IDAT\z)5UƯ7__w]з80uw,cnE*4Smm̏ucѨX)Sź}]k h `Y` /F{DH9,z%kP+[t'͛ǭƍXn*nвOi&A  rwPQQw [oŗ_~(xޘ ?35։DixmH[J߾}s߽rt1Õx}908< *b66* ފz RPEWO.^H&$eWqn[#C`޽zUdYS7=cСJNcĉ˗/ske|GS[[Kuun@&l5Y{]׀#AL.ʣCJ^ŗ1^aigWZ,tܙ+W"2z*f͢_~<裬YFwkjjsΔqWs7һwonv2:>7pVǶ'ZO[1oMASSc#￷S/Q$ٳgs3g~2x`~Νȑ#IRRNZYY @EE 2: Kc|}C|+ǫn.Oc2PH[ۋ$Lp8Lb)QZG*+*Ioٹs'?9䓙?>s/=Vo /od-[Ks|S Yx O0bH-OJ GQTP*^p~Y;$SXT-'+;Øf.v]:456$Ia>u%/EUNDBA?{lnNgXzh6` Ҭ IMMaA$%%{n7d$QR"JJPRÇӷ/ilhaNa߿+V0 P(_/G%/?@ۥ 7K$QUUEee 8E-2(466P_g]bA8'%%̬l@e֒EAr8:(&TUU7j\" $I7xA0ԟw\*"  EE C\.DQԯ 65?F軈$- ^h v. QWtekɖ @ǎ*]blLFF&u]b.viG)=BwDtԩ]]b.vKNJQo!=.v]b7ۦcO$K̊M|k7ٟxω~?sVY1lk[|lm;s0zuLq=xG"/ϲsV'z4+`Y_̴D'2 ڒpƼ#0MdyܝAVWUUDIrh'$1˥K'!lDG[*LLdlm+^"q[}[ث[3VƼ#1 ,AmM BUAD:wΣ[o 3IQZʖ͛Q[A I6&u55|?At1lp2BJrvlcEU, ?1YQu: g:;ʫN?=Nurι璕sBIUe%+>3+)I8P"$(?QIlR}11(8uH[J S)W϶m[ۂo߶1g 9y(?m؀"˨V PQQAaBsN1ͥkB+)bYGxmF.hmBxF5F9s#7XSZIs뺕3Nj8/`w޷11?(*s۷eYUNiHZ(fҩ u(BJJ*N;#I+'br!?! !m:zLT@ McpX@UmVwՑh}es7֙bt;;"fUxIꈇY[߷11?GJF9@(HC} ɩ[IKFip8K<\. u$SHJNAщFXS -e(E1"IVbB3sI0c]3bܴm&(EQp8?Cv!" )!$Hؖ&z#Տ"+v{'n 1k-V;\UEZRR:6vI~^ ɦSj۶P]UI;OScxkUo$TUh( @ ~cH$kys׉vo='/Q6mUUUAq:I2?;fRw7kU fcvuFi6vf4oe\~#lcnc~4`N7hEVHNNe׎tBՁAg=۷;v ]q8TVTPcN$I5IIIk7TU%55jN94 rpY9Iat:owgsְc\ M?1qĭs='2g,p8p4ԩ:u"))I+ Mbw>3,YBYY۫=o*-Ri̠JyU Ӎu?m[@v0K"-م$]rsg?@ $I\}ոn?~<?(611?Z^ 3UN"-#̌LB2MM:ed(سl:uJGQU\$h OIN ]ҟAUùeYGϞt+wkAVd:VRǺklCS&O۶ҵkWSHH^qF>l8c4@@ fN㩧`ٲe|>n233y'q:nફ" v̙3ill[oϓFQQ3f`̙""y睤3 x'hjjb׮]FqVՂ߰ F fc?aҘAʙ'prV<^wy'/EEE<<z3f|rDQ" =A,sLG"73ՐѪ8 Rxñʘ4cN}n66G-T(ت/\YlNnt PHF&$ NJ"/P(lU[k;!j(/' Cq*N TU р|r`0`8EQSիDAihh`SBA]ѣׯoW_eǎ}ztӍHI'Dee.rX?TWWPOS[oYfP]]M]]dddpg?@ ?M=ˮ@QE& lضOIPd]^iI"I"Ey$"P9؇sTWWk.k\Dr7͒B$"%mƱ7skd|䶨_J#FjW+W3*td66Gs}j_UUDPZRSSHJJj& Sܿ_щn*z]w!+;ad*ijll;Y@Un`;%̝;|8&''g~'999:Sħ.rq_1c %%-,hll$;;ף/G3{D-"w>șg7II|Gy_OQd4X4Ƶ5ShG x3y/=b+|TԉNI).TH'@ (G?rJ|DAe~ر5kbQ0a"ү_1F>LeYFQ$t䓨lg6-+ٻl6f$c`$bt6lU mOy{c~qrPUqo}=Mtc֭"9ݵص}{ G^(J8Lj4\n7,#"9]ETQ$)9Yq]BAzwk! е[n<F,br\l۶/HNN.{aEᛯ&##+vawPB~?/ 8=zhEb/[***38,crYfqSijj[oEд"cۂEc@\ݹ?sNԟ*gSf}4y|deeSO1aDZEg^\n/^yɿjeND}񥹠(z4x*XfAB=~ssV11h̵[FASc]$kݵN!n={Bsۓطs'^OFVdfup\xf$9٫79>\.7˭KII$''45JA*0`6?FDEUq:FCTTs昳9̳P?xNp8pJKK6t@Pe ^E6+.\Wa;*+% AE*+*++tWzO+tC&2_vUe%ק(ܛV]UF7qs)Nn$pIp}DZ=C ([ƚHjD6xѲ̤ %Z5mH$jbcnc~1). $𓗟GmM-5U5sfNe~)dd!J" 8Lnn!fb.U5L(CP0ȴs֘rN'def6d]D0k׮x"fLYEAb7RQ)yu[N[0$bTzE5TEm1W%lL)l1">?`U@Q‰bC 9>jRcI\n7k~|y[p$~d^>V|ڒqSk*ϰ\'͂,$t)-+' dYNX(PUtJhwBZEgLdHobhc͍H[-AsFJУagk1H6[m<˵jQ<]/I4bY.LfҏEej66G eo(7]R{gEnRS>G6 JBBLj},UB̎QQZC#NЭHNnE#PhMYfvQÌ$Yw޷11?8%&NW&QIG\nWBeE{t?E<.EcC=4=QDSVQrºTx>ZSiژۘwZal+ق<&%ʶ)Æ -:l,5ܷAY.3CFNB^Xn!S?r]&E6 !)-.O􅣍yx4wΡ'M5\HHF>*jDiA=KqӟrI~K^~ރ:mR¢"\~]+iv9ژCRR"ߔ%NkZgVU ^!]첪v pfxk@՗)rYP^wUrzvjVe[ A% 'c*\O|rF>U[1+OOD<~hT[Hi"!s Ē$aXԐ@=nHNEЮuSNƤMKäg8Aٹt)}~z sS,+;uK  >Qn?{5ܠѱʭ%U~za_"FnXdd堁- <6&Fx"&v[Σx<t&H`PǑK{/O`inbz}-i-:nA'vK k?|ӷe[]A׼4Ÿbg9#-+3< '3|Ŀү!>%?v׃G]`#c#x(Eb nGƮN:,I$%x%Z7#79pB!A|bQlr'ѾM3\zm~{ڷRx_guqAzzyε2f/D'in ;+>pQwɅ(5 ޵(*^t",V1;+]qXYsY\:MvqUO@:W%LWq `WVn~ >/A'Хr~&USϤYY٨S@nk=#,*Qz0111F0sϙL&hUz1K$x8F:Zt8WFp.v}Z4p棷1ol$ +&v 1ڪ.i ~9}F%YdaMP[hvwU9]gc+܇Oz:L*Kp|SINlv}PLZ$(<p 9c;گ%Mfu ]ZAzv>2s QYq 3-A- > HHMkzfׁ3^nAQIWVmMS\UʓW/21t[nںIeP_No.ȇϒajf:B7"QXTO TͲ &oZ G266fu˦ֵq?OG pizyBR`ۨlöb&HOτ ƣ8ԩW&771 Qϫ>2böd8Qm+=|MaDqp$> @zmP *¾Y_7z2G=%]E7u˽eڢY te$UˎpFǥ^`b*,L|BGXob#Z"']87 :G~n `ia{щ`3@-K3|ڢ ff(,,bqLԔ|vH usbbk+wsyے֝8j[w+=W,q|CCy0E*Laem[K+ZǑpaxx}g7#&>O<ޜR$%%JC\\6O\:|z:ϥe׃JnGTrڬ/5-7@\S#i,(yy%u-%$bŮ3= nfd2߀'7=~2URYn] -DOcX7_dd#,* {<=D=ےP\^Oꁂ|x>6:9`߿I|= DI }=$Iz=9:ax8J뤢"o"c366W]N3g=Uۛke[ĴJ]7jJ: yBZ1yC4^:M3ǿFc*ХgK_P#-}fB=6Hc^B&FG*S~KWȚV.àO߄n_+3Tbr=I˕>6H3 EJiKz| -f ۷];|j "ABnOUC )APAAJAPAAJ5CPi"(]A`uRDuV" Φ:%%%HK)g(ݷvysbƌ ߰q#.]ΧjLB+*CZ- 7222ЬY3ԯ__iy"/A>;\dRT/11 ~7͚ԅNPc[;g0V`[d7~hvAwG@?'m:w)ľ>4iҘC  Djj*L,+| &LOWQcH ~/ )) J¤$;wFFF߯22331|IX0>Z.5b߼yK.Ç0|\| ֳKYӦX`>ZlYu K.֭L*s'߾Xv^X"#dkGgc&P}]Uv DH$t jRX_EBBׯ'N>бcG:yC||<~76~ǫWШQ#ѓpa| X> UZaނ7===1*Jŋg/;dm~~Aؼy >Y @zz:wv322;;;* bc~ݻ g/#~8'=e<zzz(..FTxT[+|}}aqc_x{{^zu]}]ʕ///vYqM\v }W_v|#++1ٳgt%D?>~ZqIR,A(%7ʁ 6v6wyq$%T)@5-`<|8_Uw[naMZtڵ Pnn.׮eוyqM]]S~~>Oą J~166ǃos ׉|σog'ssa+E+̗ׯ^5%a HM!5E֗F~%}ŋEnn..\}ɓ'prr/d1x1ǥ˗|/]B}~7>\nXF?+x̏koR4= .#!wo7&vU4 GNEZFzgMW)@)HWpӫe陔 t R % (H %B.~cמ )}gбvBW[zP=AAJAP*)A5/H1{hּ9Y ¿gϾ%m˶Ԓ: ֽ;pqzBob̘1ضJ_:F/#t>HW\G`Yps+} u?07oo&W.`篿iO?G¢"L 4lM?)LeC6m/Ht2ԯ.;nrrrs6 {@(tAXlJ-*3AzΟ?'011KС0qD=Ddd<==1r+ < i3RSTWl+"Xmx!9땽e 4:ãv$%&||]6RR6~l~8u$<ϟ?GV͚ Dp˒Mɓ 4A|+l߶M;RYoܭlll $70eQtWgsԃpsscl ;ZyמUe94/Y"//OnNOi]X}}[XNO+\ MOOÓ'i G!x<cǎؿO"??5 ˗/ٖ˗t@WqqlK+n/g>͹(c1Xd :u vju $RRRQ2݁1,-ҧQQmNBgݣ};{|XAYBܼtǼ?a)y:a`̝߯_,X (eȑ>}V\WDEEcuر}{,((1MLK,[neeO]h鯈Bffm'Oگ-$zGY88g>8|޳']\ѴYsرp6lX =uPs΁54i}ϙs334nڷG˖-|Wk~pqu  q_WW76pҧN:.Q)-,#cΞ9 ktA;t5:KE&8z8o|ddd 99 ,NWQ޷rsuC6mвUkXYYawY&j4fb„0a,РaCȈTs-"Q2޽> *P DϢqEU(He*~=tkץ !*<W|3T0 4yC?woT[aupquCFf:23{u(*,4mA>}p {}@ EV~())H IDATy?n\}ʺ>/k iKPG|87d8R^~0`Ǐ'rTSIѷo_?~s (">jI#> dTskX|||Ajk'@0 ̫D={W7gϞUĝ9s]t91b$''sZSY3YviL3[GChcǎS۷o_+;_3f@BB>|KKK 6MJ$;揊?ƍׯ_˸r 'ʛd:`u$ lقkb֭H$8ugs:cǎqnRֹ{.z聅 "33 .D=p]N pm لӦOG:]ӧ@aat%ej EDEGcڴi1Q*=vOFٖtժUvd,X055v!wݻw6mRZDDDpߨUL[[[9s\ޙ3gb͚5ek֬Y4r`„ -&N6!88ΰرc9׈> l˗pssCE+_:Ê+0ebʔ)Xbj ޽{A$JAh-z4}?,GbB"n ŭЛ+teꈪЭ[Wl AVV233aFtEc'Ξ= ???2QFXjmϟGbb"`ee!C ==\'zꅐ)ݏLI&[l)S&M͛ׯquŋ "!!ǫWsֹ|2d,ZH9s`ٲe6-[ XYYU\vxȑe#Gag:gSXPPnyju2ݻwgRSDLǎ1ׯ㤧GGGVMv> ɉwrrbn _2y+2=nB|q]0#HXtmà /VPPܽ{O]n``5IJJb#F0d0!!!P(d_pNNNNӧO(F 0ٌX,f@DGGs͛޽{3bڵ+eN*ۗ]WPDDDጳ3gHv>""qqqQ9e˖̮]8i*Ǟ={ 0*S6m\ (}wvv>|u"44M駟 `aa D"ӏ2 0p` nݺݻǃ8hSr Љ YɑwrrDbb3gҥK bڴa`d۩xsssZ.[;ǏS0axY@ ^x;;;v^}(;Ϋq:f̘y&K` :tGݻѢEszzz())a}||#;pi9r6lP:p$;cF~~>كǏ!;;=zݻ ??S&MqcI022R:j=bccϟC p֕MUN022…͛5jZG*8߿?vYk._wLk$%&0s!%%)))3w.{#UG"%%:BGBB9S}_>6l؀Ldffbhағ8Pnoڴ /ѬYrFǏ!'ߟMa;wӑロݻsNP(v!8xA" Ѷ8Ce˖puuf͚ʘ>}:R1m4QQZ~0{HNNFrr2f͚͹@$A$oC``Z3gƍ1{,x<JtѢEX`!lقF;)7^~Y#}"SR}{O]I]W^RRwFLL V 2Ui_044냂|o `Сطw/G5+nk'~y;.)UA)={荁DjHa]+JTeСðw*CAZwa_`ϞT!FL`XOd+C_%%-ݿ__θDb6IoΠYET Ca;4"mׯ]C6~C__*P)d ͛G/`WNB^]defBB[[Yv0)H5 C:ub  _O$\>$ $ԇZhNTLRBc}ԇ&5Eę-]/GPKC}Xԇը>wlĉTa>T]W>h߾=4Z.CU ԇIԭ[~jUSGՇUzr 􄗗ub1J׻|2ƏUE>l޼/8Ҟ24hАP99`4i2BCC,?#-[&HR>\x1>ܷo/GahǛr˪pԇRjCR*3gĂ зor /_ET1}V޸_U`}3ltԇP#RjI}= )mڴV-Dţ>|ԇ)>,Ϳ_0jKJO}JP(>$R˱B>$ߡP}!N\-ߓce5>Tw_H}c f޵P n(H圠  REV}HP׻*H$%{$`mmW/cI}D*BZ6ӧ >$4U&>$4t'!!>|'$!kAOU@ eI}HTRjRUP-(CC-W.BC-BCԇ5KC>$ (H: MˡtU|rhkѫV† 8e6>?ƀpus/[ "ݟt-Zܹs9o@mڴÇ+ѣGGӓ]3f&&&ׯΝ;umRjgϞaذ/0z3ƍ7b1KرyyyhѢ ܹ3:up!$$pNB߾}9ˆ "Ǐ1x`,[LػV V@\\\>k 3334mׯǨQ8%K`֬Y[.h۶-gم b xxxub1fΜ '''_Sƶm SSSlgxI}%˗F>pqu1cQ-ѣ9s9UFRR9ڵkI&ƍ>-YuIx".^HL8Q+Wݻ E||..qpp[}axx8']^x!n|FT>|CuMMMx"X[[-]&M)̣Pݟ,^-fccr-"wq,\ .`uCBB0h SvO;ȑj j4k ]^=ZW^e;::*2e鎎x$Vʔg,66eNhѢH}%!C _ݺvU2X^^ݻٳŮ]0o<6mΜ9Xn~e'PPP۷o/=ȑ#e}Ç )) x* .DVuoxdddoX=AA_!&&b=ȑ#;`V_ٳtYѣGѣGw)>6l(B!ZiիڒZZZuŤI`ll˗/q͛7ѳg/)u>\n=n߾{VZai)ԇ5]VNu>{v G)FMCQ6QUMO?lH}ÐTKJC-@Cԇ: tI}Ů. I}EH}HhOC- I}HZSnC-iRUԇZԇD>f JCP˕KCP aM % "vuK]ETǻv%%JBC-e'M xzzC gϞ8}4g@[Ĩ(tDŦ9s]t91b$''7FwA ԇZ 5Eęʛо}{={IiӦj 2m۶ŋ/ nCeׯ_3f !!>d-ej)88cǎU9q%ܿÅ /%&+-l矙6mZslْ/8f/ ‚1|8:>mxfȐ gh6)JiȑҥKzPi޼y̰a!C0k׮U[ޔggg+eff2rrss&66V~~~??Lv4&:zW"aS.]۷sm߾ҥօM5Aٳ'֬YLddd`+\ٳ󓛶{nt*G-͛#<r'Og%M+W@_,^paNѺƺ@W"#`ye*]H$g,W,VldsrrBjj}LM@޳ڵkѡC,^@ҥKr׽>_JJJ#GT-ysrr`nn[XXp V({>b``oFؾm+ڶSԇx%BE[z[TqԨQ2d0!!!9r$;re?;\ÇQ'j733CZZ*,,,YYY077ר~]BjTkKHBΝg2 4AvfΜɎΜ9׮]s!=wF喳v:L>]n 6ĝ;w8* 6|H}%qb<ԩAӧ]ţsŶm۱| B,#''gϞ0H5AlР>֮]*9Ai&̟'NGfMq|iӦ\C %Kk~K,ŰaC %ԇz„޽'VgWڵ+탭[رբAܾ};\ ///xyyرc̍dЪUkXZZSNNL+_u7"Gmкunڵ %Pԇv!a AՇD5]>3DCQPc~CAJV5?A>!CCBS-) R8>$4U&>$4t'!!>|'$!kAOU@ eI}HTRjRUP-(CC-W.BC-BCԇ5KC>$ (H:b%MˡtY˗/G@@@їQBŋlXr/"bZ/6='77!!!Xz5UfϞ8@j*lذ.gu HMMC&M5_@kkktڕS J')j=>Z#U®L %m>zݻwW @^`k'`c?Ϫ6رc;Ol16kʎe_x{{{vޞsΠNEDeJDeb'UYLU-44-Z$w>LMq&2K5 * Ѷ8bG8rHnD"D";"99ɘ5k6b(IDAToVVVRʔ9(feѣѣ;KaP/;wT^e4}73N~~~h>s ,M4E&M+ܷ 'tVbe2%beT6 ҧO͛ٳk>\n=n߾{k!## : ZʥӾ.7"=cسwGCҚ>߼%;Q6(H? DR0>$4ՒP CCB#]eRjKCBC7{RjRPwBRTPKZԇD!!!Q)ق:>r*>">$H}X>$@C (H B'vo̺vu4544TU.5&ց_ڥ{P{,z0v8 >&˞___T!@I}a~'L8v6¨cT:%%%aÆ h޼y i!ǩS8ˏ?ΞmkۼyslܸIII:i"WtI}%cGѳgOXYY'Oƒ4Rq8|0{a͚5]xxx`ӦMJ<1o<BXZZbذa㩭 9sfYf f͚YLXXX1c ...Xv-'R9:u*ݱuVϟ?Ν;ѱcGyO !!! \wEhh(abb9sT]uCrr2_OMME@@g=e)))Ɲ;wpJ]ǎsN" 憠 }ͻT"hDa&5Eę["b0)"fݺLݙӱg8)"ёzyqrrb睜۷B9eL^0vvvmN quD"abq͍t놄0B~:'ݝy1;888pgff2 +͛73{fb1ӵkWf˖- LDD;8;;Ldd$'Ue3...J׫vuaq]04JYQ=w #GbÆ 4GGGߴ)N tO ֕+W0ydո`H}H}XCE!Qu VnԤ>%a)YtÆԇ:  M>>$H}HWԇZ͞ԇZԇFn>ԇ=UA6Ԓ}'!QEH}EH}HTkJCm>$\>$  Rք./  Rx 5w\>{L'!s $!]CsN033/^Л75Rq>,IOj Қ> .(L(ԇ>BC SSD̅ ww7& Rԇի$aXx19Mԇ>$a5,\8[锛[閔ԇ>$;ԇk>$H}gԇt&( (Hɪ'ԇ6>aH}Hh%% !ACԇFʤ>bWԇn>">$4r'>$t- B?*BC-BC]SRj%!QuH}%!QUH}EH}H&tyI}HԇAPtuH}"!ݓg: *Ku3@I}RSDjwI}HCRVP~*Z&>1HkPԇRH}aH}HCR]Ձԇ>$a5Շԇ>$a+>$!O}(9i+ےԇ>|G a ԇu nԤ>%a)YtÆԇ:  M>>$H}HWԇZ͞ԇZԇFn>ԇ} H$TCgW.H-,=.:ga*p.i`{ K&Ii΋^EnZcef햕zuf{ڶtM.** 3\B!EG}ޯ׼^z{7=ߟ|;BFfinnsp&b<UFfZu*9q.:It(Fs&L3 ݉% 0GW/ `۱X,^rvn~n #sʹr&M*##TFFF6L_=|DH؋41gr-\E/n cR٤22IeddFAGf$ ÎdwqjAATPBA'[Σ(翕5fC UFx{26za(U^Fu89QUCXV Ï1)_/nJa ,38v;]J^;PW6:8}}%ی⢂尥WISrO.DRKrZR5v#"vT$*j*QENn Lz,N nQ4'$ƍF-|~ ͠&$а0 cHMM>utX$W1!ʈJ_3$a.R}F:&wq+9 "Q[u?rp` cksu;{v3"th=bj>‰+)6Tjkh=;?=I?*~'>e\(Dlᠺx%8,'Gh͢dWdHe ZM&S;u$RU.+&"3)+ ilᠮCƥ|AYΣx~hMk`4b7p8(qqq!$8>LS(\S1>AYΣ%N鷿M:@Μ9~VRn)S/p7|;5V!2e$V;b (i_K W`?qJ$Na};>#QJ{c1:X,mC.WWSIعs'aaa=]p߿WCll,lmoڜ{'N$44?|~zZ1eZ-񔕕]uݜ~.`.bn>;(T*Q*p|J,X.x3p}w<.]ʚ5k]O[ZZp8477}{geO[hmmAaٛsxfNa|Ǚ6mO_-@ ή+'?!ك1c߹o^\u}ŋ4deF(-Eړ}-"'}3aqq1ӧO.ZsCQQ.jNƲw_~a'L<֖t:7{ "##h4z̙?a 癕O>K6Pm^y>s̙T1i z=@ ALO(a/ϯWzw??ƽEc"{ $ Aϙ3glOX Q]]Vg]F-*ڏZ(&4&4-{%m}4(@rr2=L>,_CϱcǨ]صkuuu},Z{6OmA`PSkޤh4Z$IBPP(8!扚1B@$4~[`Xno&Fwww^z%lr͏Oh??Cj4-,HĤkӦMh" dddC>XjUs] t:߿@ڬ^[+WͪUxXlY͔01n3@;#[t.ᅤ#?Q::,ҷ<:[y_]]Mlll澾j0N>Rѽ>XjT)&M4jye2$IѣYe۶m=(1zssuTlKS]]MLLEpゥ{o*W<*mI%+usslnGz9c_~oCa4 B!`2ݻ$ѣG8wDI[nn>HdÓBCCf/Uި(?{wVz.ϥ<6mtK]_W>镹4p bGSӴJZSKޜ1ڳ@mm~~~#n҇zt˱ZqF6n0j\)--pi)JVBb-3gμ&WID4$$f\\4W:o>Q)b4Q,y>L||<>>~uYt QQQ$%%3aFMڥ͌3Ԧ+^<֬YsӤB㋤53 glO7nE5^t6CٌEt4Gv9qO]FO±c¨Q4T8No\;̚=O/Nj:l>c9rwh4ގJͽVd jA㢥i>["30o;-8cJJ9#z߶ӏ/s/)ݎ`68|͚y~2I\lӫ"ee#! ۵G OzC;^\t]EnA@@-TVd_FMM $sՑ:o>6~B@@۹)*tivY⊣xjF˨2dgg<EM 'ఘAn ("KΞ\?cOryb5Uwq/G7///jkkP]fjmPWWfC:'\Zfͼdgbh%e+L W8B &ݾwp8!^8w Yڅ)91UXJ4vtwLjRSS]fhb6cXX*$ח4 `nzv^A r;e?BXjM1U" +6jkk9U}x>_7h)D&u>zc <=<7wf *F}_DR7t:jFFeP' QL Ɍs"EFs;,J&,<yObs(ʸ/MTNnގ ݫ J;(lPg08BPJҤxjcRBA;+(xyzK4 :|WyٚuT8'E >vTҘTR1:yX 1 87'̟7N=OT}/G6UVE_eZr;vDRPrҿ2&,\l?̕ur',܌](qrM8hM.5n5[--waW/:̉x}bu~杉C^zu|T8Kr軸\=Jz ?\L'5j׫ij %#G+B䌺 ,7XKʟfl䷚ ҡu9ˊ# H +QAJ ״/E#K/V㧑\Vv.Zc~oy?G#=WJhRpfBή5PV-t4H+I p}\HMLe)qEqOZOlƒ͕ۣS[LX` sѩmZiI-qkخ% BV$$!U!"n%bVD:6oT@\ "2Bh{ 1x n?o,bW|1kf8cٸFro-< o/7ǰ9g b'1ѷb1h HtA6)_\IEMpvNńILŻ 6!EcPmE^~C`d'#]PO*^E_X<&_las VLYC٨W{v0b-qjh-9O6 #y2Ҥ0M]KYX' w8beXrݞlc< 'nO1f85Z}\t~O^;CC1%.o D, B)) J)V@Kxע1m`韷pQh%0X~_^(ۨΞ F@QmYڶ(:L m[EF 9֬=QpjT/-7n0;U0uHŦu1q'4 Vb]Zm5j˧/r%@M5 =ދÒU0 _XY{̤Nɒc~W7GvᨍTqPCF?O]>MwIpS# A@xL׉hKj0O0vG#\QxtbniDm軚x hݲUM8[lܴ(0iLw4wZ!+͑]1`Zeŷ{>G@B ܠ9W(Hu*F@kE jc;٫.>(xqK՘@g6q8OC^DJ8GB 6aB&-]/ g,ZU4 T?4VnaƦgMN1S~g*[u"|/x{c/4u~cx3[B܋OX}K3A j%Qw$"r2A!pKq!G&2Z< @MU*K_@d)dR:m:dJb_D[Z s=|A%[vtPb܁&flHաҠPy9pdY/KsG`SzuVCf7YFi_iΓ%"|eϏ$ ʇ1[u[_>~|~.+ܵ!1s^yog&&5/|rNI1uK,USCu_q˜ :&jѿ 8u2r23\ھj|+0V1& *WwnKdfv.kaZ?WCfvݗ50qeS2rOa. ظk\ZCRb#BDT{QXt"""Mpvvat豕n}0zDޫ+gg$"'''M3Dd 4 6o݂y=rilb]Jd!"IDڍP9ZõRk7j]q'1q1q=tB A'@.A.C.UkD ^(վ} 1!5Ȏ 889$áy3יYYJv,sO\%aR#"KH$d2Eki'oՉVJ"z\ID6AB HN IWk)mqur;V;(U'z<)_E}RO| .oٌ3W!!.pa!翍݆2P3 }&= LRK{ŷ+q܍MtF&3dTb|_ϰ58u5 rEvkЖDP(ᤐ^h`l/1)B68QdWO㷫yN>!w;kHQt›os+Ǟ8zAO3wrd*&WOՓz(ڲ5w`c$x.h=8o-e'_v1ɯ8r ?װx'bLֆ8y&[lI&ckpN4߹_NBMww K#`L|bqZ@챕}ޘ#N\h9φׄKGmf"b,?Ƕ,Р;R88Q>X~3œG]OHL,MxgDxpP{q; :n!rSނ/> (R8Ѭ`|NؾLٺ)F jj*5D<+S{咟Ӹ-D^k1GCaAŦ { )ybPEMct;s.6k0\c'*%NGZJ!I鑓S!z=?=/4S,NK596;)MS:5;!Q.gk=R$1:Oi3Y|JT*EUb .VJ7 hpNK%)h4hl<5YQ+׳v;-DdJܜ X="EU ï<8QluMn@ nIsw8[9+q 5|3> y[~W6OUK1; l8 9,}[O…%#3 Lzy0Z6nwg%r2Ru*ڇ~ݧXC*NŃ{T*!J "4MdkWp~_dzF˼O[`x鵻OǷ] ^}K0`8[-k,-ʤP9 RT Ah+!ƮfO1Z P') ^8G.Ifv܊BM8|^=꾎d=ڏxGmU]x[*{3{|9!zZ  ުܸ\ 5kB!W@ %9B^Cl "*ѵOJ^|b<[u"cH$LDDDd=q}?yrnģALDd/|[vV0LDd||1o\Wq1q1q1q39;s[""gFF:`5-z3BDDE88888Z&IpO79_Fx@f}^վ<X*>~3VHu:@-_ Ep>Ck%Hӂ4w*ac,^DzDxw6g0u߈ۖMOG`(u-<>WoG#!>p sӖo8HEזpnb̖Ian҅˂ Q |~s:?z'OŸ:KK,ZD ל cw|Tu=<酕WCU0_{ B\kEE:׬{!^-] >MíבZ%;۽Wo@'<5yd oAv>Uy.1Bk[3Nl `AŶ:. B }Wd yH|WG"gxanoj]K w^d1ܶoyR8 ~xy{l4f.KJΑ){U_ IIz"E4rE\FF:Oz'X0^KsK+1Ta|2[F ~ϫ H'5lV%ֽV'׮ i$|*;@G_7R"týr# \x9۫)h+,3_U31C&?S^أqŖ*dC}գӕkf1dVqv Zm^ou%ȊLgݫ:Xj4xy 77z+֘`7{4wŒ!c :97^ M4[ECtB.5\f,{av,mv*܂);/ ,vCԹxuRyj3 D%@mx[VΒc*..HMIR`u"rQ`ũhE^A P(f3pe ڣ30@=h0oFrO1g|ӯrkuh/uom3`ϖoa'Ӭ1hX ?=_ZbO}&߷61_ Levݗ֮E۸ѵi|`[ l/VΒc~&A lV/>yߍ/oRֽz:}sV<3*oJWGYV!.D_Y`PXYTD/ۉЋ:\>C?FkSbݳ3JzL$Io}o.F1p?D+ H2Bb::hKuܞd8,bjܖ-K%1!y#G{_ǂ˲/e{98g(|p_lۃ"܍.g8JX3 ;{A>p&њXHUY5Pw"X;㧘cX*[Ĥw*R>kS VCFF?R)X*!5SèNh2K0eeeYR Җ+d8 ,_6?RadnKxE4˫.UlM;c)jj;[-uXYZ8cbPc;>ÎI=0eR1acX:ġǺ1iʼneG6fo|'25kqjOsadkפ䮿tkWXK:q/e?ʱTž?R틩1acX/cg8~?2,(Yݺ꽟ep] ٫mze N@ڨ &boJ+AA{VnTX*diXYm%Vf!BT~ Bi%BTt$""&N""&N""&΢oĸ!Q? uy۲N~dTI*6lMiT|WxUdLc& 7 o4noBjuWuf.kTAhvF d`4I8gf e܎EEa(?Pt#JUWxUkBx"A4*<̮Bl(DXE>a֕e%.Z:++lSLQdXg}8ī:\U~[rMIҍ\#e$om{Oۄ s89#1cuB1x<8;>T8pė\w{MSQŦ71 +z*m؋ 8WEgչVknG'0aW Ř2^LZt6k"Ř2^6#"b$"b$"b$"b$"zCҌNwsw^YeSƋӘˏj`2^)iJ'@vٹZ=s5bLJ>N""&N""&N""&N""&N""&N""b$"b$"b$"b$"b$""&N""&N""&N""&N""&N""&N""b$"b$"b$"b$"b$""&N""&N""&N""&N""&N""&N""b$"b$"b$"b$"b$""r2 Sp<]+̟'''4j"#!mI;z2K/QA h4Q^/ #= FA۶8ު=Μ9z$I*GGjׯ]Czz:' 6^N A^!prrBff&'1q1qUN>ҋR^ʀe333VUkD  ֿBFZZeeec jLUCTB[SjՊ[Gj R1q=R)hdcޣ'd2r9c ^{c2!'mᗏLdr9r9d2jԨ CTYM1*$":e:oyND[u6lYު1q1q1qGz,GzeEdo5k7^Mkh"^U/ggGzjGz鱿MMk-N*UMDlq1q1qU{|LiRDLd%>MDDlqoՉ8DU'""8y1qoՉxNDIDIDIh"b$+q&Oի)DIJp&"&N*@ {H""& '''''1q1q1q1q1q''''''1q1q1q1q1q''''''$-<cx~JJwSͰ` Tx2VRN.HNJJUe鐖js655.W)c::h/ut 8'ErRR;WbB.;W)b::h/ugMww6 אV EϯrssRĊuu^ܒ '||}P(!v;C-xUIMU]NGt:t:o!ƫd%7Vu,fnnPEuZdU$KXՉ#TLͱA'zd3T88888ߪ_xQ!"*axg'd IMI.9q] 1"g=ZVJ&N*^3OkX)#B!)8| |||6lJG/bX"+#7R!ѧs DᢲEɨ].Q %9Z("!) m"U5 2')d`r`6(BoYO&N"oP影1Dv7Pa''UݢX?}7(z:B}k@.-, b~ \\P? lee"\V-c]wwOt<2VQ?LD%WZ-t:]ߪ6}@ԯŨd$?Ӣ2D +/|@/y!EE z7(sI^I 4 65q$8m%4ŐM1䕷a]/h2)9V=xxxHpdJ045Sr ew *1u^΀^m RH^Ff8]ѿRna|xbXt5Bcs>N~p%33<MnkS}4:ɽ"I$2h4Km2zKc/qE^Ѯ%daxB\;8H *5/ ^h0+bґ2 V_~Mŀqpx̳K87Qrin{kJNBj tr)qĠwƛKZB'̕gj^~DDxm;|72`nu9?oթJnm!S{=?Fg8!3lͼ |DTKn~j/:|~uܴ;n1X6rLTi-N{O%N¶W&+měClD@4hԋu1hfm(K\X|7yLI }_\/^hZw4 ?Yu-jPxSMm2{Df7N]E:b[_wkJg4/7~Yr'8LIN*q{T9G⧎#3} h5L4Y XE8*<P,m?1.7:2֔S~2q-pVZbaI>r^OoߋeEgnqVt,O*s*+7~zAM*L&?"""pi@V7"5kDxxxAhrzJ8a`6"v~2=xb`6puvD=O'UBNˋ Nf,Q[[qR܂_*7.Rz+K\ʭV3}2sSĝ88lFAg(F Ə∈[+ ƇIENDB`KCemu-0.5.1/doc/sys-z9001.jpg0000644001050700006200000002201610527416074015062 0ustar glaubitzfbedvJFIFHHC  !"$"$C,"B!1AQ"aq2B#3RrCbD$%&S#!1AQ2aq" ?F9VR8А9Y5(A($PDA@hV$%0#F9(~KZ7 {˅BIWY C*!cuS!}"Y)8YϤ;kv"{D_Ik7sL6,e\p8- J'殩kaH1GӌӀ?t6Yn6 q74ח= ߊYumgWzQ PqGhhn0;b]ODV]h4(_53c{\0ZK$MQx!$5ۮ2D( p< Gե6fOhGNpnq7PsNz;pKT=nrRQ7$X,",D6@%5P AJJj Xi5< Yp<},:Sm`a9t(hW>1.2FbQK<8Iz\_5 2إLp? ::W0ĽD ZcRI$qs̓ K>ӛ"@semK~S1/L:9<6c]ഔ_G͌^o4mGt;ɄSkxPmXԕ{~i+2~TVS(%>!=Û{}M_S3C|Rz>_b.UKDެa^擇rYkR0;lz=.瞝}'$Xe乄_W$qdT 0>\=oHd߹=0OqwLd+*+;{dM@V6ڵ}H.+[Ȟ{p vl@K&dnÀPEz?=㟁'#߁[cg"&3an1;u֩ҙ'g])'z¹yGQ77LG s/FO%b% {L"9'f9.iP~n-imGMpg%#-.˹ MC]*n3GN<6iէY|c\L'#y07$ᶚHzT.E-8&uᑿ"j+*&g6,`A-ۦa &*x٪}9{wxiHϺRY-@Y)cJ5OlG!tda?t{{+||Ir/.UDꙷ}KyV9rbF0ZZ1saݍK1'nr=./SlRMiAiXA'j7>^ 3c4랣$oil`N.>D荽AN:gO|{:[e583QJve#P93 F3{3M 'NcW((#.0:eg긢jYks/O+UW JPjkfItr cwp-& -DuXKU IOWN2c~IˌRU5"Ȇ?OEf6ؘXOs枬6}7i.Tuc”x2;mn{G1-A+TInw,*(Sp>W[`yL`nן(Us/u-ꈈ0.\VR&hcS\)*@}[ôΜK%NpE6Gr<:1]`?\t(T\}s}*&Pb6%Mo'i9}QU2eO(xrzgI .-L$J ;?5*9I'IqkXa`ÁGͶXtKR@W u|Dq0gUYi>\pԩYyC;$PU[H҇8<.h>c'_Ϩ+,c!z4tT~L.'v#ap597J40zH ,⢮:I$@50圥|pϢEEN#YQu<0 2|Y GnMMAt yU"&Nd> 2[AQ$<\|06噃qr;{TIɉgt1Z3e`$g~Gn!~67'T.>1C8"l3OQ/S)ٴlrj0pjFk͒|rp4$o =8rY23': 8 INC :|mds[ 5we:<_q+zKYL> m`/s#cG]YZhKaɬ#]SSSE[v\te51V&Wp| sߺ 7S+].yQ*[W.1Y)8`*z.]+exq &{Yt5#S ;VV8E  zIeh% $iD<7N cXXe˨ Ξ]= [ilmm|f#Pw¹'P)8zYQ'A;~2lqcu (gqELXgZ.35g9z pζٝ]GR~oUE#v1Y!fMK9n-%SpW4.OĢϰ|)g k~)3\tch0>J o)tyZNyHs9u37IC󌌶&}9Euiv: xy6iZ y0LsJM.`u1к?BA^[TѢ^l_P檭zS<RQDc08Or?ЭkjafL;*x20~Z{. poSu0<gs'nRI-fRLҁT`}\\ھOg3\\]FyvfXcbHwcx&twF ^3iZT~-`}9uM3H6>#asNCaeEU,)\:sѸơ}ݗrVarׇQ\)2t,'\xtܨW}3j atch}ZHqCBꘛ3^ -p9VEnܮ>maEn@n=X(lӸK3K\q4`J{v# `^4xN:.s@JQC`Spw,nydlb84 'sQ^l:q$u|ScxNݲZւ}ULlguq 5#w m$v1$Jj|6* %\n)꡽ܿmwt%.o3çwI8;ʋj m!5S<|07Eq&jϪ ai+Y}%ֳA3\OcZ栾;bdht#Z Ege=oة<䠳-)U]=*8vtPREyHL\mqA0Z[$s) wR~ wҶ}o2h|f|dwQY\[Z2&7IOD_$$JI;V "\y Ffs"o35L [O 2ڟQ'ow_e-H$h^vgPծ3ɼǺ=1ܞe:!d``hn^w;WV Y׽,w-.MՙfN:2sJS"e{DR-h8庭hU2d7%ISRF:-ft&FO9X qWPOG8r.gd夏Nت-FBG-da\@@#jT`(jT3G/GVUq{.K\rfWF2ûOO+KQL qWt 0L%S館MKaMpneE-IxƸ݇4 )sIqk)nne5_ $Uea;cRs?|~ɬ ֗20v-+斸06a{')G]sF~ P|-naW*\-k]c\G>o"Q1tC{wycnUL0Y*5pQҚp͌gBQK”Ncc؉sϩ*PqM\uWTB4 pNjχLP*v}I.byf8zKUo:\$cDh+Ac;$Β᱖M3wgZ`R;Db2 y 2gU]Q0-'up^8 e+d4᣾;7]l͓TP/-C,6F0y7>Uq/Rh)ŽҴ\ݶD{u(-T4$|IR^VPҚ&X&kIldt>ܸ/R@:Y@lG~WVZiMi9n=s\O36+x*LVB $kN-Zm’{PюVԸ0Mi 516VisT\넉)du7 5;N;!STY!Czcod- )c`O|G~GjQwn;EF<ʖz-16Xw jX3K|UEwKƉ9ȟ>;5ϦgTMz.y:kmueۏ%-&I8lcȭ;蕮AI$9KF74H`kIS`OSTMM(tJZDը H58ˠO_V;}E+N~ǡXA ͕P4E^tJP=y2+Vۅ%ʑ4Shȴ=m^X3o pP^"q'sZ˵M\9K{{5d68vp(wnLnۏ^/)\Hr)ddm.{@n7"FtF9OIuK"ßߠYĵkZ;uRm$gKY2rs6`$0ц'fg6}h۩Wp2mzXKciV=RKYFd0Լz!\%n(e oҚjhpE8")n]G51Md1VSKM(7=W4n@axG?-fi<;.?F:g1~>+t0)%vv.W{E\6!(tʩl*>eZLbei3 ݾ= T *tCgF}GOuzZy|H=GPX̻>wdg& ?uE5D50jyY,okr AxJ5w.;\EA'?\~Of{w2s=ª%_aOp蘫!NsZA +@ (U4A`%9~͖}β#V}GSv?a|:+c![bi98Jc@\Cيj&GI;@""@%+WVJ̸+ٱ?O@u7=r'\P-I$l.0Q]63=# ` wY\Hnow=Փ@ m/ij7ot=kω "1k hh hZh%5J |qghd}ZHB- SQ8<,`Ф{#OcHZԣLsG |X9H,S*xͯh!K;N+|AsG6V?CWkKkhc~!z>I20Xy>qyǢ;=S2 44׿r&KFf3GDz;P#)DIU]ȅ4M [DuYgwiK#귾)k RX1Xݱ- _C]ɵltX:j 1H$$~cEQH4I!}{'sqxq潎i!++p\,gϚ^ǡ]R}ީZ9|yvo,,kQeT V;42\nTe.u¹PU%Edor‹U"ee ~*n|͜g`ySK\$Kw>&徚HL061)dAQ>I2ⴖc)]' ղر,쭚RZ;@5, 9eoE+"-! E" ZyHGNP l;wz-rԌ;s& ~!c%;)r #-Bт{ ^杈#)onK \ sy o9SoDz%!oww-,iHȅ41}U8.Vys啃-?&_Mv yk܎i`)TA+LCFZnumE-K㕻3 g}3c1xUqMuәbk%kK۶U>nO;{Ynerp}tO^/?;%o@]qAEVڎGINـ0ea5Si| %5n@PEKk]Nb["Ff 3O))i"m8 @K lqEk"(ϲ$|UZ C($Q"G2n%6GhF4h J4MI#)*Ą$*;szl6#Y#b2 FII0sSN|3Ou)pqSHrsF ;tk.c,{pKL>ԲTb\i go d`.O'lqv:I^1z4+(i@ZUcS)Y\W^F}5T5hjt-!h৊#hvO4^tD#ci)"cZ FtLhJA ֒$2% S!JN3`d%"PEEdDLƈa B Р: A `  @Xӝ6pA8)@&~y\~aRSȚO|`OGODs-68AA42 ILAHB$A; ꌠ)KCemu-0.5.1/doc/window-profile-4_small.png0000644001050700006200000026436511131675406020002 0ustar glaubitzfbedvPNG  IHDRGWQsRGB IDATxwTmle ,,HQA hTDBl`&j4ޓ&Q#؍"6^2;}nqg-3 w}2s<#|S X'ݯ-,pp~Pzdͳ7.[-AZk>;HӴ^58b.iȊb ]GEV|u|UҊO`Ŋ/P&N.E0pr倁o 6PkYy_p޵rI{RTVQg_߮]—)KOKW!(:XpR@7-C/CM6QQ%K$Up 4 <,Pd͍`ȇn=/"nUx$r44Q\Taƍ;Qpy8Pؙ%8~,Dh[_Ē*SQdѬ{AɖeI.LD7tJ+jԙ7(PI*ۙ Iy5Wi#;~2j`+9.l(4U\r4McI)/ ,.^nkۃWl$ Rj-AxJ'88t 1II4gGkxo<җjL, f8v:/7,Ӗ h = @J("ih$?r51 --I8?ΏGBmLYEcK|6 lr!(@ꁬody%TN3#,[ לup侣ә{w}p|JFTr:r؟af[kEG7L6S*Yi(8q~`kTUg]vܿq9f24h e[[gLȒH$ )Wdr><\޽ÜD(QHa9tͰH )5Q$(V%IUkYmj_M7{ };L7Vr\˛,fj8Wgp\Vjc3$1j.RLC-(VLEi=;_Fݖ{Ou[xfD8bιUt%ȇ+62k ~]7n[oS8܏ϭjS_8Ͱ( z44;~MM ld`A8D JnDA@ՠX͊u! Ǡ }RH#83vϳ!uQYPdX/73jP9IU5FUY{u[ZYG_qK$Ap2]8@g0-Q}hl /sE" K?aqV`ia $M$Xjq"^_S3TfSk2L,8Nң$ T5"|o3t.ڟ n}'Ow뛨(WQ\ҏκVqfj+|A-Lmu <QW_ ߮k.[xMwWv]"/(%XνKS1QPd2b`9w?ZE/o|+Ofzؐ, a[a01C*H4£yQhRZ.7X] Aiym6EdNqEqQ`{4J~[0ubk)KhȲİ8/2.ٗÌfe_/sxq{1-GBw3Hm4551v FK("X@V$I Rٯ[Hi*jj:ەu es}x@ @k[~(盕). RUQm/6Yi$Vf^[E#Hirj w\[C"-aChm  5#I"R'r }gl^Kyy9 lU{2  E,Us0mm$ w",e/b^I{y~#5e$3o& d- Y$NHKQHTA6,TU@YY)Ukp72x`t1j@I'jnbԩTƌG}}=Ք  rp݀@sS#ex.(L&{$uuuEcC嘦x|I<Ϩ tnRW˾l|s Әn} C;8wpsb̨Ѽ1}jԲ:ڌ0`&Ç'H  ڙivx>f7{7l+O?噧bQux w~;Kaꔩ; 3{䒒bz~\p׿櫯̳΢s,$wtѱ\get cxB./3=6Soq,d ǍΒm Brd ȇ;8)]2W5ˮDMu_տ5{t@XTTs=iy衇(MtM3Ki 5SZVg}x7 QT\̌3ͷbvc…x Nqq1`x<֭[W^g˖1igf8cflt}(s-z>8ׁqw'1:Jݓ7kͮts8o˘8s"3qETDAܱEFL2G}FnU˸|ɴH*j*|s.%4MB7k˿dԩJH&Ey9[a9 4MED à]p\N>CsqM>}rp v6s?{<DAD7tdY淗]B X<-݌!JfWSiZ~ AQQQ&<uvG[J@ irn ~@5.B‘( Z$S)E,KB2gcW>N>OҞR*v;t'Los3e;8wp(xn>[X]FGAq+ð˙WWoD'uD$/턽}"gغbV$L2xpm7B s2f8(J3 M=-te{ Q}z^ԂpƜmS  b.}9}]C;8pnY,ȟn$ h+q)]r酿f@ fjost']⋹6|{,Vc:xZ[D"dj[^rU8m۶qq0~x| ,7-7662ދD"=KYrawY{ƲN)`A!|jTaE]/y$.tl\P؛s?%|>{qB!:hK}6rѯ`gG" o+eBJᎃoiieRUekL2/c"X|ǔgr~0 ȡJkKEQQmF*B$|㉜v mȧVv8qlYKІ|}C/} ӸdXs]V;8wpcܲ,L$L0btƍH%LIy `kV3CBpg 4MR4hPŊb~~Z׺!`$uN}|>|>_vNIRYAq]=ٞq/tC|ǏBCzRG[_B׭aIb)3;8\( ;׋ihKVZUq@'Z,}'X3GЉ%wK>ǹ gk||j|6M8 Ws?ʪ{᲏~FESS22wD*D+{y`g8t, u>]ʛ^{Yv- -\cMa{8Y=l*{GOZ':eJ8l;8wpD2Iǝȴ)xiima JKr==W؝B{Q;}OFϑo8?DIq '?U\./888wpp.DjY|- 1EwXnXM*6yg_gn*R;=&l7;8wp 膞 ʈ\N{Y UUqp~:`av{+i_֖a:n88M;9u].twQ$D"e#8;'ղt˲H%9N , I;9~s9=b|د3ӾŅ$=9~ 躎I;ifc$Ln Dt$Ibz!uV#XtyZXC$Lܞ4 (/)"~X$I1ϋ(vabQJKӵw|dIq> cΧo%ǢVeRVVNeUVbfBAHu~u,\3'3qh( l?^^!%;ޙ TKA۪]={{бZ7sii,U:jӳ:mXD"!} 3fx[ 46nc_/ <@1ҿM'& $Y(I|rq{<;t"03fm^.}i{jrJ%q]1eO3Q`ŗ_ lO4a^{rG64wܵ f=f>rrZ[Zq;6h3Fq:IƌӴD;Qo޴O>fF䟀@fﯾX$Œ2e\ &,#FԔ y86U1vER<|C0-˖!+ U#{Lq]7{ֵB ugz) r}ދ쀅d+λ9ŵBΞg&R[>rDW|!óCTU?MUUΓK9&9a:93UrndEQ2l8Yv-Fxc&j^M@%BfFMkK(SDŽ ME~4":l+A* HZQ"E$IwdkȲ' Yp I _ IDAT:jjf=,8{zzKZIr;/|sJT Ϗk!:|n&elڸѮAuDQ@evؕ CGHg),Q`]4 wFEֶV&L--7\l\QUeOo4M ‡ᅦ(C[k+15|,vd2DQߟ-h,FEEEa&GM֖e=LDu{Md10 o ;0.˲p\'SY*jY.%K,Ӥh$T} T*"t}ÕiF*;zYBǶlwX`M,c)a˞ u3JQLߏV^frv<3\Ec )RP)t :Ҿ\)q{9畕ޤJ X&'% q(q:ox< B>8|`#:.?~~-3jH>~chktR}ַ,h4JQqQYJFv/,7r7n218p8mT^neJ ZKRU%m[x(K\0G^h4Jss3.ʌSca21n؄43ce&g (,_O8x<^0+ZiF00^uUב%)Z^}QfڗӦubnJKʫyg`H ee ())ᷗ^A$fM̙5>p8L~lmR[#J"%%d%  K4ikkE@  "(ڒ^Y%t0L ; Im6<`H$BSs3EEE~dY& P]](Icc#i(--y4g.;mOzJsXf\=YH{uHWOv| m'7k_9y ҒҴc=]K=%**HD0qyTY%eUUF$I4Lcvϧ~ST,V %x{\N:$N=$KŢEr?;$qar=׿CӴJ|whM~îdm3|I9>& Fؓ]+_kC45=W`;4M˗wI0@UU5@ @"H3g#Sihhx0MH$,|&dǃ D" shk;ڗ\^VYxHT$ 9z^Q R3y8ƏNKK E `&Td2I r*X, 9De>} W} 7kYQHRb1&`RA1M@ e*p[ )\22Ȳ'aZ֯ذ~5C ֛A4v 466pv{aqh֯eY̍_CYyg->֖^xl'HpD$K~9v}1wy;OIn>CJJJbI먬 >kX~EL2SO=H$]sT=  J\6j6Gw{{*/lLUO&-1%^ 4Lt]CR|躆Qдdn,@ @ yVƮg]T}cl9"RޯӦeK=0~"#VCxN]D]֯\qT[Y4 .}_ck T .?|YW!ꠧuɖX7 t6$QP50;=gxa@ }+'t"=? .Yͷ /'syͷry:w}w}77Fn׏| O0 >#>8N8$>8x:֯ߐ)dH5kP5N:;Y|9>`/9Ï<^njp`РA<9gxR>7&/˯Y/Y2n` 0M‘0?;CpmsGE.>oێ88CxTy_@k[@?^s-+Wٌeccgk#UҦiH^yKaU$Q.*Ƃ/e@e)W9Ka5(D-r%e P]]L eΜ9WQUQ$"Ķ.+C;.{otwu'ƿYg?{&OO>EuN8~K/SH$ȧY#{)7$ Io.(l"?˷fWh=j*U1~o:4 ͖@'!jIm[ UrѦI6tɰkt>B\n73v8ƏC/.wuulkI[]Bo$I3*p8cs\Hvvbe$cvjOv|R毯"I՛[ПYʺMȲnhY۷N/2,g0 +1t3q:'ojZZ[9%~~Yq;X~Anv: nF> }!<_t!]z /e?HnV>gC=¿z?\}v.=ɁQĿ$qSN埳8唓xWypI'qßoAxxXS >O>W^}5hjf {=ӧOcƍ|Ǭ[^{(I7n.k֭c5{_o,^|9Xcʔ=XpܱZ'~3<UU3^1]A,s 3g}O~ԋ< =C:u+s)*d"\hIR2+tpN%tl(I蚎x>V4 t]g[67>c:r\/? I&蚆444OY~uui4-M0V7/EK$Feyݷ #=RRRqBrvk"wvLD!#ȑ5rTf>}9˥p1p@"15mX5LuE%'\/~A T:2 "lFIE[$FYP i;o[[m+'vUUIR <#X<|yg'rWLMM 7t#fn~_D8f֭q}9w4ì9+cv@0RӅ8e)e.бLR%"RQ5h4nM`ÈbXDQ4MKb<9ywܱ\y7o,&L?>=lzSʷrıľ76y/g;Bqۆ1NbL @ XQ*]2A`؞fT L3Űa(+-#JR]]{LRWWG$A*̝+Ev=fm@[K0Ӧvlgخ~f3 :Ǎs8r(7oF%,|vn%+gJ%H$L<@Lþ<~! wh9\ xS]ƏeH$!0O7>ENK7a#S9H,e3|@[4^W߮_At0[E0'L2yD6oތ'?'-9s=wzyq;o2e)|DŽB!*>mO;imkCUm$IJKKuH8 lWgkI<K}ɓ'q7y7xb&h Yb ?H]u)//ci,9{1X-[QU6>?^s-CnSOaĈL8 ?>8ìv<{$JqMiI1&M䡇E49;%g+aŒ393뮻;0jkkyG3{6=,YL[[H9dpm-oOj޼[f=_Q߼>{;:"`o\UU1 D -nZ[P\.ԔK0u5;[US.3ƥ3mvknnbPSC*%i5$h!rL4⠗rDQ`/A2ZBL?US3{,dn ( >>}_HQhh)SQU0bGdijG7ڵEcs 8\])J_fL5R);&JH$qJ<ߵ 1d6N;Q$o72(itC̴DiŔ1~6H4i{t=ivWGQ<}y H$J8a֬}:u MMMwC4_>(>,?zDZZ[3cΜqn7I[[8nUK,Ix|17RZRJUU%d=vߍr\.|wu;'p<,9~EQXܓCpꩧb}&0qDb87p##G`=vX0tFɀH$.R*vAI&ƃ=E`0 OpUWexK/q6 b,Y|6?]shLDB!q"j٥@MՈFL8e˖awH9+/B9āȼylU~$!kxlwo9‹/Ï0f]#੧桇aG0zh*ǟp%Py7zd i i/_bBPO ޗ2:f[\kP[LHO-Hb', v0 E 2d`Pj/ !L2e)<ģzh(-)Ы3%!aoi.We/ee <&(SZZB"#:8bm}F9X(( 9蠃i qo/% !Caړnb{NVgZX:ÆK.]D>s]ϜeaN)݇"IO{0,IYQ:ul7K2mB-W.~]ƌ kWq[#;sv-GJ_6 loabv4D"Η+Vp-q޹㷡K/a $/aBEr.XI8!0T*EYi {͜I2r1glqK'ig2(gH*0 > L@7 RǏ0L Ͼ( )(-iYp`55PUoӧ?os(P2})h,f3íffc7z(ZZZ8`{ءa$erءrQI&i}Y鐼d;d2I<ccqDd{[JCpvHKk\2 0ɈlƌSKQh 5( a EA nMhmkg "EQ?𹴅mljD"|l#F+YR\\O;- g2s>Dǃ"˸\nxu8$Anv44;锗sݟa䈑T-Y34J IDATʙWc;{-'IR -16Շ)EbDaRvHe`vܴQ,mJK nC#XnIz;aS,qqmbq*ڊ\*w[’?` jJBi0`Џ>.˲(*.F[4#J1qnDcw_ wȹJmu~M<0vNJ̊a_}x=Qd۶m#f0Huk<&4;UVЯN#үU+WpđS (p$®]2dRT\ 4hn:+W*fL9ȸZ7'f 6 UU||8]3Q2O!Yl~T}l7Yޝ%<*(v[:0f0{v~F> XgZG{X&yy=.!wo$$rFvX7w4Qy nnS3de娪7/QF xOEE5#Gt$ϠA?ԟݿ!CRRVft 1bK9Ѓf,TTBhD52K,$(Q)XIaD/Ά5~=+//q&"0  V&]SqL;.$FSr(2ee2E(dF߾&Lw0.^F Mkx 9j4njy_UUC~D^^@5z c;GK>}WUḱxm6 Q/P31&"Y~9|EA :]D (~vf@ IĒTfѯ_I3棦iUKzsz|00. ˟GAgLKR1o$aǎm 2 kXؖXMA B^.ݽ mTپm VYESQd5KrQL7nnjES R gZ' ֛oSNMիMfSU2I2]C\@tQQ^E'%h',`Dl_FUu)++7|(R__DZǟH(<ҁrMys%78j[z L"^OyF=vXATG/ri*@ۍ(~X mܰ (e7+)elL9L4ِ6#=.%1U CUf%n/w?hRF u;6k:^f3Β@rǢ狧&3 gc$'/Ϡ84E&6DKKw{3f +WbÆ:|QK,taNJWۯ>UUDT5ɺe;ݧDf2BJ<| J,4#8J JC׬Ǥie-94U 1o[Ehll4b***bCD9dc\UvEQa1f>ZYˁWȬ3DQL&123mk/YoΥYQh(a5wr.wy'kjSO1qDo7uYE:t'l̠(e1hPPӧ/zIyrEw{<477gSA4JKihlDuJKKijjJow]{={G6N^eƷCGGGRYq\S8p#G6ZljS?\ ̙3}hum1îZo΄ XnMA.R}]$Pr$W3|p }8|475ŵN'omGOt}*+EP(W\/Jg)J.b}O6d_P``&iH bGGO>; <ߙhc[oc֬hll_>,g}SN9F Xwy|駦%xi99 #(:nބ`Νۋn`0[ٱm -}}GaZ#Ӊ*ɧ[s> q Q1_q eEbǼiMҧvXv'/Ú/0`@/({eǎaw Qb=ܾPoN8F g.y4۶lf~|Lz4[l2ЉrfŽ>u_2QPO~AeJ"""'yRU|***Hv6 Ut$I=ɲk?ti[CTҽ ?G;@@Qlv 9B4P`0H ৮EQ#2,*HIeN;#LGLa,(475sϚ":zX1a„Ȋb$:b|A6v*+*93ƛ8Ӹ`ۙ5<;~:]C/VZ/d)((@xXt o/͛7nn^jty^@ ΅4(G#>_'~;:hؿf[>b(k҄dp8#mf:p:]w hH %YDQ1-UATDdYF4"0p]'5c;eH/<$ ,'.MQQUEU(+)E״(wLYeFu%.߿3gRXXhV񵶶k:mK~\yZZ[9l8QU= EQhlhʛoŒ(//rltPF2i4tYV -GHBwynFȜ{,ҋ,\Ʀ&>C^=`v~_i=t>3<ϿƏ.Æ]QGOw}FQ UUk:5kYgqy?t*|)f:9t9MS4bw8hmi6##Gø cw88xChѢ!G"ƿ˨ч+)a~rD54ͪhWE,k~D#m D]ˣV<JjЅ.\۾6 h%#+2.zt]Ub65]cns߰ŋp#㏳gJc~Cu~n7W\q9p=y ӧOFv/K,IK(C! eEU(aDAO4BZ[[?vss[9jTʄ q8'?w睄CAz-n7;P(ă>]so`9i̾"FeK/eQWsy73y$nTUwٳ6D1C;[ 3ةU4 ؽ{C nwP^QzvnFٶe3oO<^/K-@ UU2l8֯%S+eKAA kn!XW>eehQk;}t8 ]3Y3&;kkQÆlv*+ٷo/.Ӭ+,,@b3""911E ~晧 {t1%TLEX(ttGS3d?~đS܁CXVGTU#hȑcC|gpa>`Iߢ>mkBivzijjU ÄB(y@[k HB'Pt]!J6" mmx^/ q\xiinBQ 9(r6 u{6Z[Z__#Bk`_I FD# 6 USp8 q\Fill?)X!FJJPML/H::Gccv '/cҔ# HQE*$I:;ylw8ظn-#GAQdDQ겸X٧lڴE|\E?#Z`{L9(l,c@i( i{:;em,$[q8ȊCLk$P(D @$꣡X ՙ(b*FQA!V?khh0'lglqyJXIO^`0T$ @(4BmqE>Z[ڱĒ^dYWRBcCCRD5!ZcqpѺ4mkqsIӴ4JJKKhf677c"Tf!I"cǏg)F> dUbtӅ-H-*Ip(5E_3F+[_-=iO[J0`MD'ycv>G6}Zͯx2eNɑD4p:$/// (cC￞~J$ܞt` Eפ5豍}P(=x2\XȲQ)zu{"QT-T𲙪;C&ZFܒCm5MK)ѢFD-ʔl៰٧LhM?qRSUUśzTMe` Xh z`$#gI r#'=f,]o,Sk%|s zaQ(bwy"YTLH<&"v{V>X/7~Y%?Ĉ#g+|lK,!Q1&ZvWad $ Et|o֣*rD8v::#]1b>yC樂mlffp--0Ylߴt6zN=T(ժ${dyRU {8PiflFH3=SФ;Oy:%/cIk,ĒxC!픔9jf͸\Nz#J ,+\|{%PgAMBّ#^aUƔFTؓ@G7_|^gih?>?0GqiEQpI'q 'tctRTUM0Tߥ3G"Tp69U7hkOvLd%`UUaQX͔XbFG{fSk1c,^UUMd#eDH=Ď-;w8cwi IDATq]gұسs6lSO1 hnc\֭[M]RRI':u*``z,XlkbHo߾A! Eëd_fw6 XTalUgegy?^l2=ޝbK,# X_OUU{.&x'oÆw@_TU߀~:,1#Ə&ᢖ,Y5\C r1|N\.Ō;Vʟ'Zׯgqg۷on  91c .&%L*K⾞Eq1\o0,$hFQӞBP-2PUs=u'" Ƕ-5"?V5}Ǔ.GA'( $)4hO=pӉ_Bus=g_|1Xx>;A›6PBL0Mu=4~OuJCr'ڵ~J\*,So(B%Xmv++qp|knjal.}m'{'d۳cO,++.U|TVWDlvmmsgPQ^az13c-X?{+( ѳs dؓSM=WO,][6.eܿcN7\4oB^a!DGl%C [nf܄Qd%A7556R__ǠCyLvjk3bԘ-rne뉥.*++{nuL;e}*X2FA[K>,]t?< x]~d"*m~Թ7=n'F=[4B"{:oQ&jlV 2sjS`ގ(9P(hsK,stCUU𕔚.$v'GuIҝeet9vnڠCiǍg_)ƋocӋf) L̙`@31>_Tא $ǂ~>Jm@5ADUXR|Í%)gî:6H$7YU%pȈv 4 MzeIAuXH;??{p8̖[/)-)_~q7%OctU%2$}PGIQĒoHSS#^o޼\>Gu4P1ٸ"@Ángk(+WRXbAwLvt޽\Ns^عaÆ G4R#]%}465ѯ_?n7Z.l޽4]?v8 r8̞={PUQRRJQqqR'7+Mq&o`+{vyvMAPTP( iJ8r_P SƔm=rmIS.mݍFd*v1A/[ч:^﹇ÇO& v $P{tlnj?Yq\N8N(1!&][Fp:]A( CzZ[[싦k hfEIB*9_U5;wl [r" 1@1ƍLLHMqԠFE4]#]Ӱl=njw<{vX*9S|u;>Y1FRbbYښPSZ#r}<>l|}T"eƌLss $j}*+ǫ쟟' o#?F c+:(z -=T!\Zy*1O)HJiuuu,]e].'0aDQdŊ9[DG' sSLŗ^O89Kaaa`."-- jTG7D´NcCex< 4vZ)+/t!JM~**+$ ǃ*(܅1Kw2:mvn7Ӗ`74U#O˫Ce:::p=ٽE8l8T1"Qd}qE]~߹c{Z z6 5&wWŮv'*MHv;'|2<#X 7uJˆ&N'^ ūGu ME@QQQLV<Jg#).zwΗlT֘gl`zySZZoy;e>柯Ιg?Zo_ãu1n8>x9.p[n.;v}vjĽ3P同~ #8HB8B%B ~1J gƍ -}X֯[˔#Q^^IW3iUK[[l޴#Fb4]W-/ݒ.%{eee%J),2ׯBCGRQQtmv‘0vOuu5NJݰmP$㶵d 55ifD4NbAR([oŧ}JU*=/XCcC#sQ1c_|7|3 .t_CGG\p{هSO#IÇgܹL83o mΝKqq1?Mw?'p 7~6֝no)byr~Yg7#U ?onjWBkk(0mc߰Wvx޽x^|PyRL#҂nrӯ1fTWz ,(J[E^~ip̿-z1dPtMU dh򔨪JKK mm8TUA%3OHmm- :bسg(P Y\w+=壪 9L[[}AUN? X9"sW % Nʲcoܸo|@;v`D"l6rɼy8q8\tE\y`ݺuL2 /իW3dsXCojڗ`v;?oMx_OUU5"3|(>X[7oz6ouDS5#FqUUA# Ɔukdc܄t8twQXbIwBz':.gMհIM+inn! 7"OHkID]}=mmvYю`ΝG\=-FWM4UJ=l3U_hr@@C}{{;s7)3NF*+*ҥp+UUU;E8@*I/ygYx1.뮻Yfqg<ӹ Yj]w]p3]rw2yڝö1%YL/~\=B!N:$On裏% sQGk@tx~%46s9bی~(<>޹(NSUJhؿUS0q2-- כG$fȰx<^`#G G0q2pY0qhfԘqx<$`O[[C+a7?N'iEȲlzN٤@{i!LSc#p8Luu5n}uhIܹӤ6yYt Yч|q#t:FWO,\N8 PUU~;,YGmo~&MĢE;wg&\ )3 A$fh{k̳mKu Į+֪ع2[u b'+;c*DYy 9kuR+oQw9,cnɗ%RVVFEEE/[ْ"Iayy׃0y &EsGUUPYQxb  "ZD464dO];?w{'!~aVUS2uԤx<̟??F]we~uVN>dx7tSϡGٞses ~FP/&7jăh%J4Ubv-9sİE5MB7VDC85MB/ӥ۲TDUՃ9|O9.I#[=[hjϚ5ӕlRK|3]OڍiĊ]cN4{{ڶv0<EmHAT4F nch-j7[t]Ǜ"\R@[g[6#U,@d{Rť|^o'5OQZZl@2^pPgzvYgEAAA%lBxԹd!~-JwLw51O~29{!4˘[?!1RnG(I(bw[D!!Sݞ+Lm5z[n[ Tc(/+fqU銅}Pu}26Lzwe=L lBGxcR~]:;wzXbMT*}V~TD{?D$E5ݞAOW븜. 'fݥ0=!-#*긹3yx= пic8 1֖f-$DC$F6rhnj+ >URg= zKbH2 p%4 d9QH>MvhJiySg(*EAjӵ[5eVO(^;7'vMUuC5"q<ݜAOuKQ @{{z"j$LXF(B0$ w 4 >U87/2m%ZEvoAD7XxXXI2q$mUlCYOW/`˴HUΣIWweW@YP(B($][ U 4Q}r2g*Ju.Jl\r > .K.\^{-ձuV֮]رc3g7x#>I&s0Vy2z_U=E%XbUzsjζ{N'Æ s=b> Xz5db->LtEk24,.t9Ԩ';w;ْdS(""mmmF V%Q)..BGD׵%"Gp8D;2PeS+KeM%0jx1g3c=1 =Q8PU5uEQ5uYz57p](k ^t„ <8N&O |-[ygYr%'xߓO>`ҤIf=RNIx4 wl+Tg=\#ȇ2usjؗ]?ɾ ):OL{o3`6XӾXQѨn,CJJXZ[Z(**䰱Y{V Mc~́Y`.'x"_~97ofȐ!5k;w.O=^K.| QMqo{ ^6uSlN}}=qmm!hmwlY` +TUMבD,8UTM5"_&ݬDp$CI uYuYܹs 1cg}6g}vB;\.%8@v:j*2mw(q1}<֛1cUUVk%lijlA+ip8ʕ+{%ʖ Zwu{VXS3a77 C f I ŏbت-~#URb+[=B?|vs9j7MvO(ZyNۙ`&s&LEqٰV;?!}446vyChiiFes/DJyB&1B֒,ɤEIbUUaFA@4JKK]t^| [)I "vN3-\*tdUɘ@{5̸Y't*pmL4]Sq#d6;5k6b<[ńpII[NyyyBec"Ʉm!}=b~aG#p8 ۻ\.za̙CssswNunaMwtDLEfzNص|LII kjdᓣսb0ɔRkf(I ,+4ðD\yȲl.c{k'u/ո32n7o<GGSAՓJINEy?<"4|477jw]r3`FSH9:)F^WTYg ֘j;q8^gn:|A)--e޼y`hnn6=0p8LKK xrU׿0h n~y? q8Hdhţ1cֆ |#  ø\.^/\~wy~{&`|ZgD$~?O$Ae p7 1)yv#$LcS ˖(jcTUal۶-<Ȳw_1G#Gي}i1y67n?"//7/O3I3ueՇ*חN4q% (1L6iS6tLP,t]]3Nٳe#<_N~;'?a…\px%Vfr?eԩ\~8]N ̕?-[p5p]wzmq 6+N4"555\v٥<Rf_4 .~xc vuM#TTT pwl.KY `G=*j&׆bQFLc*uYXiܙ2uYxwMƯ~+Ǝ˝wމas1,]EQp8ٗ+,jfի5YBdyY4.7q]fj=87I !1xx(*.K/?)3z4Z:0ePP?[77sᅗp:@tPF5TMCttE&M2;|b2`ۇ}Wwe=anr<^*N^}UjF$ !2'ngŊy縬خ?`<=8 #CGAAP͛7O0ydNb H1`fY0tdYBBh5#}4uC H"Qnn1tUKkNR.$I" rG5&Mč7._:pZ [߅Bfbnn]eea6y(iDdGh37N"p81 Ivep\Aہtvo?v]k p8S^~/)S`Ř( VNJB(̚u(gTWW3gΜﮉ|rZZ;(*,` @cV]-zX|/cG3f, ѻB֎.ctLY~Myꩧ1t6yZlkʣ>ƤIs}QfL]x!KZ1'SW7 ck3f 7t7hȑլZ>JKKuիYC,_!~y3Λiʔ)S2ڴ,fN0onL 'SUW]zP]]E^PKtvvr~a֬hSO=ŨQuZ5'x" |p׿Ȳ lذ!|NQuן裏93,=G=ڊ޺OYh|k>창xoxrRzNN~)>tuvqc:,q_^ 9B0yd}]&Mij>;H=):DU}hrjr ͈vuuZLjDaB!DQ63 [ZZɡ( AEt]"Yr)~tlg4ke:;+$Je9DTWW_0z\{5qI'_x.o1@[[g?@Q~w"-[F__^z ˖-CujYp9QFde\.MƬw<K.j^躆jkFP(ȢExer;|ŗ\ve=Z?cP믿M77k֬% `hhh~w+xEX˘3X4Meɒ%kwb+uɒ%&ħ3sLƍk`֬ᚥ!$sΞKwwn HOO|EUzcBv/|e艢kxoK`Mz)̘?Gzz Iw{7pV F{-ԍᅬ77^<^/`X =d!4]Cn܊א10X^Î LG믿Ί+oOoo/^{-r'ز8>>SÇg̘1N;M6pBu_.; B_I|vdZ&>MW9 χYv x<̙s"n2Imm-Pɓ'1u$IB4STTD__#GdԦODe `ܹ(B0?ނGP]]M]]%~?#FHk-6$9dذaaK$I 9nRU#?`"[n HowS?C`Mtz>|4~q4}!&N(7l>rDA?A7USca9}ݗ;3K. `uω+Ov97og϶y2| }jyy9/7t˗/jYDLf'ҩt'rSg.3Hu]E\ktUSe9 a44cû\.A?]3w;g]ÿ́f >8{a ]ww9,ots,s\"c~;C +:z^6h ES4>|t( J:z0 j*63@`ĈB}+jʫ8hmF r~r䄣x-tU)okk׿5]w]w-OK.VraŌ/vYΜ9sx=z4[lw}ؼyŴ]ag ,+-t\gwXB<#$>??5ˉ 2:\n7 B(b%w 8&F}H :nażUUtrEBVdnfeQqK$ ̒5É*H!3riU)+p,8n͆w牔+vtM#2#\n0f(htoxBbsdIi! GBG]3(caC!EprPHBQ}6$#ɒyÁȄ$ CqüT s<9σ]]]:kRX/u'`J2 lO[m-QT\Zkoik}~67 Jhp())9X-'> |I*++9#bYx1_4ŋ0{l{1Fwou?8}\p'NvhɺVtj: :HAfm-'C:]ig:{^>(pA?b|#Xr'v$(db! kpt^؎Oɾl޻'QXPU]G-g=b 9F'? iV=#{2m"7AC4LHuw!EB]ęx:,]9,ży{{w.B Zmݺ?:sΉ  ,{IV4]`]ę}i穮]NXJ]`O> e>YH1cC {՗_Kw*$''  FTSZ3z `Ĉ\?v;oq3#qk6j~C[[W=)Ctgd-R*]9հf„V4<)C`HYRu%2u/{kjiU@L~n=}icvCD`Ce =.l֭>6mSO% & x4rt0uOyrϦryok.DJj(yiwL<\u)fsx9h˔a=cf7tÈ6 ݈_4'Wti%VK Ciºhooi Yʬ#oLJ0ĤQexЁ-܂(l6z֮]fgs媫=Futtprn:l6]vg}6wVۻnD$RB%4ѵ1=_OTkHxු,3[pt]#Dh0ȱ^7Yî⹅{=GIcop,6.r}g7} 7_EzYz5֮etvvEit72Mآ @Q-iU~d(r|LHߝrԝmh:fd O [_4UlF*ʊiim|7̙3;v,?0<ZuQVVfsyqv9SXt)k֬wZZZشi֭oa͖*2g7P|w!Ffx/I^~B$@0oQGeeCyhkӟ8s])))]),,%E̟ŝ ܆Nf7x!fq$/fJAAv#6n2lP5 eV#~:6Qd֭4%//׀ s_(e+в"+hSS(x=8ē_([5=uMgdM c 2Ch;GttàqVWCMM-> {=uT{,j(D+P޸ 9vnN=T>`^~ey$IbҤI;ɧNʪUp\L8~N[n%//6hll {tDцnN'|#)3O3yTzz;0:LZiRvsb)'Ϛi8O94~@Y_ۍ6Uc&իWs[E:E[K7n<.[>."x VXܹseĈ;\=P֡'ƕ]Q>T<uv&|>P];'/-A "osΥ.]79>3rwSO裎BM= ~{=[72rKzܸh'‚W3c }9?9ә5kzyXW yx2e Æ K^56 ' ~ P$  3jl̶[YCEe%}=8Z ۶mbl6kWǘqf, 㬩*Y.UQv.2) UY& `٢)l6TW֊륣lv;* 5H%K F4ʻ!mTOc'&R8k@5! vQpspА?Փ!TMӟX`^{-wuvK.aÆYsfqYgYnoEQXp!p1p1XZTU${tRu/K&=XejDsz7q,t0q**n@WE (Ynp8±+˒(8NƏOUUG=:Ktןy71t7|mZyWXr%r:(7{iݔ'|›oǰnz̙رc?ɋ/Ē%=Ķ\s͵}B<7 EUbFX˲"+>>fq$~6zzyW~xKl6ƌGoO76 EkK ~M7Ӄs7~_?"%d gg)KDQ4׮`<5 USUEQuIeZ$Y}#!D$USQ `&nkE +yUS)/5x1Mv@L*I =jX]]T԰^Sq؜4$'`LX͝U bihu^xMӨ^q뭷&T&gf7Υ^s';0kyxM,?IMjX:q=rOnH8v@wWťcO6FAA9/$_y'ϣP(o~kƏgԨlذɓ&qrMuU5s;yG-'??Ctv;rr?eىE(VHGA,xBX_u]7pgI^^^LD1ww!>TÔ=䁿^{ wAJ+CufFfcqzFֱaZr<.8Nq8hqvJ?E4߃m[ʬu]C7bbˑOiI)%%(YeYЍieQl6hmmvw`d!2&z޸2Z{Res{{]b3tr-?qL]!2 9o1_8\%CKHYeRwFX  Sy]gtt0 *j:!&Ѥ8^Ef_p!Jm>>Ilx=z(..F NAA Gaa! UrOOw(_P`0H^^HKJˢv B;}oOmmmh@ b~uOIYf% yyya>k"!P(n qݦQ}1rd->_J, ˽24UtvZJJmH gAA!tvvp8v~gte Յf潌nG[[NYV5ju8k1UUE[p:|l؈۝ilsc`F yigOֆ-7eBWWmm)XUv8U9e:'ϛ;'gC"@`,d(Y8Yt6F(ty8%E ]݂nXat)p:lQּ(ޭ\LeEY*|s];COd%sW %)t&kSR%4 %I }Vn",y.dL?tV Kh!i9J(G!ջ꼝yu]du=a43FlUi;lhilĻ^2v{"q:x7wwnҜ%- !k2r(Hlkia 9 ,tT.t(+5}t%r*Y0YSK/լ[DHMvֻB/(DelLĞx(mAH$CJFUd75q9?vi4_@B04TMC U2&ߐ J]1d`cAlvmmA64maa܁(@I/m(ǟ|5c)**2ӱZɺ^ o:.t9MZicm(x>MD2oFڻoݠaD{=f,7u|J Ş=^/9/k׬ΨKS*/)-E Ilյu_ǻS,˔$Dx:H'CNEG; lބCt`B0Ο?&`SG?nm^Uۋ鴀6n܈륲2(l޼M moo0 jjjp\n7MMMhFnn:;gvIdݡ7Xԡ _}֭]NR32#֍iie)Kix<27 ϔ{ fr#R$ =邖AWP(`kG/%9nDA(D̞=7|˗s7s… s2sL+ 3k׮p_\@SS]vUW˗/gь3N;-iIZ2 D EiR/^; %E7wC60q]=SOƍ;Xd>ܲ.T3!aZYRJ Z&*}Q2OGN#VBF}*(@gW%9ظG2U1֯GC8u0I#Go{gLtEQUUl?ֆ֗Gu >sMFww73gdʔ)|$ȉ6B}j~M~, obx5ǵ3uPx,ekx(JgS;VgEFT4M)+)+и@7ʺ&Ft8$+zqxsoYh?8aؼy3UUUȲn#t5pt:袋OϨ /䫯b̞=e˖s]w?1/ʻO`'Я0?G:E:ǗC\3l>[ gfjj +3Q9=+N㤓Nb̙|{\x|ys)zyc w*ZH<;ǡON^; oMښ0&[lIXRKҸہ-ظ"{HRbFivvKbЛT&/|>?BY,(5ʯ}x(ljjd\Jl#TEaŧcE$r Sٞ;6URV lF 䧥P &8 .R`?W_}5 ,瞣;J^~e 3{jzp'SOQUU-«ʏ~#f̘O?o{ V:dc&.TIq^?ӥ@ +Nj,qk3 -|xZw8]@0'kgN `wnAa!@ "ZDEEwtp8MA)toYkJ_IVuwkA;B~]Ѝ^r/>oGmwq 7i$&MwÊG]WW_n}GaꩧZEӱ2e`-]TUvsc,,zS ~yn,(֊ ׋{%&Cf_3ofkԐЙz:dM5B3?kVf:.U jZZ[իVZM/"` X1㾍7o޼ZŔB7ޜ 9@$յ=X3TϷY^9כ;ǣl9G\|úL1x', j-M IDATtMCn&hoY$ī7ވi9o$Z{]#lkV5#f툢a>yK@lLRqgωؙ~z\8].n78؝9v;E^rls%R S>(zңxt91`q;yq%zxTϜBooo0 :;;&Dښle Etzgm#nd<#(i#v 6[bDlLH,(ufF6mqc#7vcٰV+d(D ZҸq#7o~a`E|>o0mYSj(n6-3*[KSHfY$"zfLAȢEhɊDYi9gu.W\u}K|t7^?S㹩SALrgbgdl"0 G 0|֭YMtR(C!>}=  keN}1n!.r7;E鴔pHee%.fq\1igŊ3eBPL'qEd۶ xi\B {" 8N| 5V?oD{"oHÄ=Pd9jJqq1vW_}e)BIq1Æ C7 c{DߏDU9Q痢e+yyy}~3&FKkb0G(/?~r2~/e{J"LV?;0pPY9ӟJɬ0KR)TxV|"ONQ>i&tYǻ^<&_Q`]9F8N.[̜cM+eee\ tv%vu*z1PǃǛ?;;oKpcwiOMhFxs矇,]kX||vhNرۭEz8S9#9w|?g|Wy{N ~F{G;.l(R\RJ9sΙgԩS!f1@;IxP9l< S+9>pLs ~LI0a>V}v2Gbw84 ɤY.}SzdR43 Y~OK;n &+du\)).(&\G if*YJ"iuNաꕛ "!+!$YBBȪR}Ϩ1Iy"D;k]#3ƛdoWաgddsMBzW D|~?n9ND0$IJoo/+0w\N:D} W_uGq8>O:[o 7_v)m"l}v.D[=}=Yv\'@cq8>JJJ())F $Zqa  CKrx<ՍDS5k#ID6%\V~%Tn%ta߉jO5wc,v6;iĺ,c7g0p\.JKK裏F$$Yf=+Ï$[67sʫR%WHķkɲ,c3;jnxtMTlxoe9$c鲬`o à\74˫ DT?}\oب3m_c?c:?3|0ťE~sxg}{]5.+P0H-yԑ4onCqYg'ӳ"//N:\~?Ç {S]UŃ.a->h 9s1|~A^{︃W\+ѿ.w==f(~|3::(-/n]iq+a ?E^Ux<^Celm{],uy~?6Vœ!כQu`)dÊU曷ln2a* 6m7ʄs"2џ ?کzEl\OG$)(, z;saRYQI__^^F(dމsD%x,\0Q9y'x(//+鉾m64M+dg?33^/sP4o&1TY24L  `SOOu,pAEss3<` \r%0} ֮[CKp3%>[5k&^/g!( x'.'=_̫ĉC3Q9Sy1}:Gq=ݜ}TaYXҲ24o&?P5 {`z(LZ\FDԏ欶n(P^QI(0 7p8XT (KYJClO i(lYJjPUA#K 8NaccLe͌1"#^X A3%}XIPnR\*iN`̘1U)_uPb5zC^fyz;dZ;:Т:F}G{̝;z|A:;;yGXf MMMTVVZH(q饗u.IԌ]d"Ϯ( c2)z-]^n%&VvpXKOw7A \.rrrun hNA /?.@TIR`0qx90YnPaYm %FWW^ yy)öe)KBDBEEE\.}>hٶ C7!2#fShJČ~ħߍ9N4&N-u=]O`.]J(G}^z_W1kA~~>?] py?>hƵpB~~k裏 Hcv^{Y,˓O>_lyҵlSeIG ƒ*8S`6 Aiiٜp,{UUE1&Jԓ˲lա>vGZgG,Mw"k1 5c\~SzE{0"p"kJ_6=KoUU6l$hi= )Q]/))!$Iv-FYi)p8۽0@Naa!sO8qG |χ(I} 9)))k^`ٲe\?8& lB4]GΝ;'|hwg;ܹ&K.__2_|1(rw0m1)Ť s b[_zYB+VZ֪ |i1i, a +2nJ ҔJLf3ѥ) |@C*wRYp!K.e޼y9`L "a$B~ 4 . TĨ@G޼5IE"?g}6?ϹꪫOo~^z]RV;AXd ---(BcccQH *eI+y%< ]#N<_Z!'s|i}2A.^w_dlINiP 3~L51R0= b3S>3/uF CCA74y)⨂|n$9a<NUUO>}ӷzkNe䨣⨣J[nŎ}z Ba9d7@ʅ1_' lbX4Foo/nL/XXK0mSЩf446m ($DeIFE biA4[rQ 1h * F8J!b*B=;א%پv株Hd'%Ȳ<$ݭ.;ِr)',b\ٞox³kŮy>+`O!A:Xp4{R r͓~VkN5p8L2|f JTYV$I0gj(Ǝ@gG;֯A*`֊ %$bѢhocc:.PQur:ze2ɾI>YǛk>cw#[(Xs0ñFsP>kP <ܓcy{RyJTXA|䞕$:}.aáDBCQE%VV::;PM_yO>4] jVG'U2q4ӧ䯟lcr7 V8 r/_`-f |8Z滟aFR!w_~wA(,KT"HE9uODc25G-[&Sl|31 Mġ83f Ǐp`{)aK պUhnƚVR6>Oy^dϨSaD7 iwdP ~uN\{͝w$$f^J21ϋm2Pa[5HY f[L؞_5E}}hfؔD9IeƎW^V #$wNgGC>r\72WY*cZncjl5κ | m8'Z61k,?u9whOC}X֚S]srbR {*q8?H8܏c]}Qs;͎eܸtwvHۮrp cǎn'yy\ė=yjο|2jw5գYR&͜ۏMEy]TTFq68u Ϫ6!?ԤbߞO'F z#P}q7 }>dY*Ë DC$'L @jňA^3RyH#.Gʂp4HĘ1]ulgƼ1>fѡη@@ 5 u֡( SL mF(b֬Y͛ 'zz<&L&zzzؾ};MMM|>)R aNqA8nw!g6^=OQ BlٲF.|D2KXtwwS[[;hfIqU>}sQ$ۋEx,>&IHh{tðpJrJŞ?!K%t@F*5s1DO2r/JVn^7hinZ72f[7mE@^L<;:~: aoI,saٲeO1EQo<,[SO=MlasqEaV^ŋٱcG{Yf̀ pg}^i-a+,V&sO{Grr- "}yyWXpaҥK9{͋mOX_n:: 6^+~Bcdci»T4MDQ4 !۱dEd=iJ& s~?6mblܸnD.ր .x<կK/ޖn|aP]]"B!&: K|>L,%sHixl}n$Ib;=z4膁$b`2 rP֢za 04 ZCvd0G{?X4 A.B `Gpy\yБB3 |^{w̛7X,nV<@|>_ǻ{կ~Յn&o/~a 0pQ93Ef-[$I,\+XN;N=Pqzn8ꨣx;ll#8D",Y<@̯ IDATWWP]]ͪU8묳Xjr `z6nrޚqꩧOPQQ/˜nݡMUVK]]Fs7-"+/0 ;DpwF$0>2B ^_9W^yvv{.(iM$o@hWWxo,0(//'ggma ۙ4e*sR1]e$QBӵ4̅n"iNiq&LĖ',hχ<ų"2.;S""ݒiӬf~f'N7 vPQY֖KVH" fx|R,U+GQ,++ɌY e%/_ YGiؑR7V_A0n1fe>z#}4ӧ" &K8b&::iߵ㨮!ED:::;~HĶ-A&N*hZھ*Q@Ƕḧ́<- PU>/fTU%[vS0nS^^i޽M{{]]]Fid+-w(bapܛo Cϴ}RWomlȲG$O?#<>P(e]E]ěoɲe_֌gy_~ٶX~8 Imܸ[o]Y`7ضmvBEvAss3o&wNrDn~?ڮBL;G 389s 9s#<֭[7 8CWc`}هp89ӸOʁh t{w/m>#]q{ʗ$H$B˟Gi)(r}eÆf_Gλ _{/|0~֮]%^w܉eԩMcCsfŋkβ'ꫯVn7> ̦i"x o`h Sbnp:0LQ0i"]tv3oډ޺C'L>O!26n@DϜ  KzŜyO3~i,x0L2zbhl(& !X1 =.j(,gs5"qґ'wWo|q̙3x'qݜ|iO~~a֯_]we9*++=;@ e]Ǝ;ذa.zx :(v؁罹&-n pꩧIT/2AvVΕWZIxgx'm GeرL4O<wy:O6ꪫ9]~rR__ϛoɑGɡ ^k[$Kn75/Aj( xA,Ce\.'6Q]]yk| `jjnf^y0 ?Yv-SQQΜ9szbƌTWWX /?;'FF- |'m1rg >49Cl 2y-?comm5kpG0i$.䒴q49U__O}}=3|ϟok(rG!_җ|PŮys%Wj\n\z'~ҺƆF̝;;[oѣGs si޻P9jSYY JhCVFUOGW\ɚիpvE$IDQN)|9UUU{xW7n?Z;#FQ8ʜ=&O{o{!J&Ld)2gbYq|41 gYfbԨQ1ⱘ$e;%*"1~e`p8CQb[68 RV0t$1(%oFZe(iN]*aߺYP.-= 5йN4ӽ: ɧ k6?O ThT!>WO|Dl7d/Bd+Y?~<|0{,{nr9$z\,Cv~We8kiMnh~x,ZSSpg)K/y XM.AnfX$ ,?` .flڴS/ y饗X;l߱,ફAt[ъ_㔯nx,#gY.;;/R37?`:ݨ#W|.b >ttvp'rO.ھO:hcDzEp%[e+*&|P<\(k23)~B>5K\~u~: ѸF\tfƣ5:WN_Lp[opđGӽV\ENtKb1($QVV` h>***0D"# q:xzzH# z80r&ꊊ 0izbvE6Of ngGSg Rr|7ף'SUK϶.*n,sP"dEa2<^ P];3a$%*ўv =ݻ=EQhnn&g1l+ -WNEvtÂ$ tuu!Ki2n8BwO]wPTUeҤIA$+ ֭e9ip8y7MWeZ[qΒD( o*x066 jN*Dv| qG[_r1Gp '߫j39]̜ 1L3y^&2?53(lӰd]lW$=u,ӃbEnE %IkEQ3] ]iook0cN ]I$@ `% yi)yEUu hԊu'2i$4AT5O(9}D"a{~ucꉄv}Jim߮d6kd s UV򕭑ckZ#q+7g2X˺x#xiq%}}6(]SjרkoHY\JHϜNgwM!;5K2u8&Lټ/GI%B7+٠0ݗLLRҋP%lZUYIMuu}P %3EAVd H(><G?[!FZ4RK[ )膉" Oq[f;7[Y]S)QgP8j#j5e(#>"M$Iwx^OD#g$ۋ?4BN?S43q!gZ5!,GK܋SqзdI/P9z<_LF,Pne.t-NIqIsVZئ7#)Gb 9Y}rӤ51wd[O"Cf2Gr#J7r>Ϗ~DIYcE6Z3n ^=qb2&m}HլaA('@}l`4TI14C/!?Dhh0]ӑ=P;v=,E>QҪ? 84P3YXNw;7GX7e1oLooӬ1N'k:*jG6 i/7!NE"DbVS&'j)PDOp+i 4"rH@OEM=JV$, bR/M7Gy$V)sH`&n aY`-?BU2l@8ǃdfN'%#D%ʵ-k;3qd)M3vB'*Z~h4JyBaeeNri3ufFUW0~t]'4u;uH"fjp,Ofph=8SF&/lg>D !I䃍=hPuEM(IEݿ =l⅏P5:ynq<: g+ im`t^_]!8e&}qPT7Z1 I^QdjݓS9SOp9ρ6L^sy<[9cs(eYlb6\EQdbQfD%*QvY.d諲*B(x>[a5}^@7L-YiMH4$ua'?^}{`T`^3ؾ B spU*}qDkW[zz<\ kVɛ"V@go_=3k8F~&ά!3{B(RQ:b階n}^lX[bVl/d[gkD(fnk*̇ϋjj$ퟥ5'& c j\%p:ذzNyM3OY$ tʘ(90tKYn ݨUM8HLc?EBMIdݶ^7)wSudIDC砙5ncVVGOD `Zce[mQTiǝ $n9Dj˝<KF7Lj9őrJ"jE}洹;A-F@0k<,W(إ^ tst3á`AD%d9j꘯xdr[(EϘ ~ea0&No6g*obƼ4Xf5OU>.De%Ȓ@L5lC$mILI@-!Wu)8U7q> E\EB1ݾSkT#{Z’kmU+,TL*ę<6Cq)3` ό}:?U,LَSuf$E%*ўb "XkT-mپƱ2"L6#у]>'RG Qضi%}ϢSm1,SO}O0b{ՖK)lcBu~1 i}۽D%CbeqOw7UD֭-DġX ,tCQ\-xA\Dg&2/}pDd|7pנ|VP_iMC[14CG%tCڙ^}lPuAq8ˈc%@\Uq8ĢaEDI6u> ,# cf {@6$0,!sI4_APUr )f01aS"UQʈ '9.l_Y7(%B[آHWgOEɺ=#dx8sM[3@z erZ7 w h#kѨF,c], r$ eÑ[!^+\WU>@+G]K.; 4m IDAT#: L ab=W԰Jh^%j p8p8  S@7DL"S^QiAOOOAךiTTTnZ.2*t]G$70kz=.74M+JW13,MYn-{{35BVYHuт1Ra+/OxJBD{/2zeYfKK $&<&̜9NH)ijb;;;˜fcǎEQL@e:;;% J lMU iz)+se-ЇhsuJG?k{}ch1*Ѭ |g7=x?c1jTeB  j:n 7vߋ}]HٞX\ڃ@Ez#q>Zh,n) dBgoY55]SĮ]"K2\yKOL>~a?xѨ/$\"\i[InzN=]y8唯kh_7^/o;\rTWW2R#11.";wlr@E,ڇ!)$b&Sy,JY᭷FUUN?4-o,dʕHܹs4p8ʕ+*+G!^]lPKiLi5TPÁ$)x\bM]Ө!q:hmmx<AU>5$Ib{k+'}|~]R^CT%Ogh1A /bX6e{kĞQ40f "駟n+ɺۋ/zW_}nU(|\s5\xᅴ x嗹s =PJ{=5O6b7RLP]*Un}]TYלs?>fBe~c\>:k_֭[/Q^^_%^O?%\jOee%[{M{ǩ]˜91c:3fNgɄAK>fޮuFB\#I2`2WPƆ$s @QQU+W^{WA\m\-ħa U@>,Fnb _Ԥ]f3[uYvae۶mY%Kh"nvVZes$ꟆИE{ԜӮcg &FEE%W]} xY^?H8wɹ瞇(8NM;ofϦ @ %_oI馛uѿ\z饜|,\s9?YfYZH%x|ϋg(cBhjiƘ3֭[Ƿ-;hF<9c[s駟`ԨQX+6mbCD6vz MU `&^2:t F .9S%*OD=T隆k|>`N+DQ1`0,蚆$gjbʻ,IVW1d4%]8%k[feZr06~3~_?;s9YfYRJVr .|@!LF40E uh9%LDjlldƍv\fӍKrϲ>rJg$vg\$9\c6)8ϳ?8C=o8iZ ttt "_?k Tנ c!UO~S/^Lyy95 *Mxŗxٹs'Ə3N`ٜ֬t≴qUW+gɧ,|OK?ul[0{\s5h,455zYn't'x"^{-vk׮ .cDr]>xE.bqI,Ce8Xt"}}?noNcc#pn-[+@S5~q]L:O7>0;iiiqEѽwlJww7?ٝlݺY6m/hkkEQl̂ uK_xCX@aԎM]2oM0 &OCqPri*S@43US̚=Lz}TLptǢtu3yt DaաqDQ04WNg9y@ @GGNh4Jcc#^;v I"۶m)PKHņݝ0t\E"EwOc,ߧZv2"2#阘DpU#VOvIM!~M7.;<A,YbDL䨣zj.&MW\˹b-lL+{Im\,hkQF f͋mh2F$Py_7[zx*1$=?&L3 ;ׇ`ܸh(\.T;vlsE u'L`N=nR'CIRw 4 {2Ȳ̤S5 0,m <!AEdYYp($ܗ:pP8(L2 Q^OKa]qeKKf*\?Q)n yG7m<3hѣk1  4U/PU5E$V,Cc˖-ttu5tMG̰d"$ffI7{&j&SOo C7 "L-%dJȮ08ԩ}:ӧO*TR;W .֕^LyFTH`S g^H3HSɸxP+1cw$߽RJ1]PIeR_͘9$d9Oa(]ꌩn!9ygMӨ-gQ4N&t:Qoi" fκw4MK+5@%%7v䦺<8VoӦL4 ʜeqdر`d9-[lk<7+:Wu.@\3TRsį\8!lh19W2]1;3Z().`lP 7 Yy[)|j/ѧIהxW賘=iR 9Yia,nl{d@i[}jD1өjGUfΙGOWKtǩTdjjk /ܮivb撏 &^\l:̶rN L2H"|`$<Ӣik3vۖP&š azry)f*¢Y/*R\.Z::+|-FmWDž^4'0sYRʤrYF*|J1?56^`É< ;Y*+9Nfb0QcKIx#-kfDr_9(rw_SU|l1.BMyzp2ɬ/5,O;y_sM\Uioۉ-O-Qr*ݻX>({6'W%s:n=ڲdZV|Ƨek˒,6{kT [5-EZs2g̜EWg;ݻK\D%dYb9 a]t0sb |ЇKI0\7yP@/ y|mކ颼ϑu|?87P1l憟@oFf h<[Ůu' 1-|` ſe~dKfpFuH-J{O Úg~D4zTSenʟLJL@xu>3a󇴵YE.?CcI.+Wه j ]r3%r%zeK|̜LZK, O' xz 2"'t 2/ulAx׾FOO't?8?8/_W}?яD#l2)}JܟFi PCЯ i:\erZ&}WzvUA'4-ʦ&Z瑧4MN8A˵^ˍ7ha&Z[[+_ K,Ik swK/1w\zDQGǩ7(3p]w8ù袋lase~!_W{aҤI,[!Co0rHywg8v}8rs̡[ncDzrJurTa/7׳{rrq:aðjM0Z b%(nh2dKrr0[deS=&# ͈F$k2Į 222p\p 0`V\ɪUرcW_}56mbL2N;혾l6> @uuf_z5?8O?4wތ=Q)//gժU\pիnkjTrssY~=>(8'27n_;r_rwo箫n{ww}\c(\|ŀIAA{W^},\u]3go6k֬'#33'RTT LC^Hs#Ʉ^;7|JJZN?j;z4ch&]+IݺR_o'77O3ۊD]]A;ܿT&3;5(jɓ/fѢEx㍜r)pEĘ1chiigi$V+. ى-m.zIɗ_~9˗/[nk@?s=ǒ, IDAT%Kx9묳(//og\tE\~{シ;L2o,Xӧsmij%%%9Ϛ5m۶qsE`X S@d6R&I+XG1~xM[!܋&1wVn3GOkkkTmWk#)!/tT՗*3Z-hUh0 ĩU[q$TWWصs'} ,f3D1z{~p]GC9n)R*+Dt~drՆvd2-MDBŗ.\x*oER%f~o9Rw@>= Ǿ8t e{p8ՏٿMA~A2ⱃڽ{7޽{V*u!jq ZaÆu+ZZh$i ;\п pc.))#FDXW?p`9 4ǍdbuL:u8Flx<}kk1RCzIOO)3dfe3v~;3Oii4ib[X~Ȳ6TcC=uuu6t8NQgKQhjjt^L?NzF!8v J@MS9r0 F=X6v?ш`4b4ݸ= wb {} (0M&(v,.fϮ]ZiIzqCL[}ikkr!{dTcϷJLee%iG"U5|CINNofl7B>od2妍L8l u?`%҂?sQL\H]g5}t,=0 I %/%s'{]`0`/PfXL1$a2I$i:T)>~"v} XJ [O б ++>^(Ҿ>j^?+WF.:ӧp:1ͼ[yx~x.[6~ EQ7o< Gk}%ocf\z)&MEO?OVlrFIKK III̞3dz~mp5k&Vb֬//y/3dÅU? hm%99 :HɮfgWqA,f3eKikkeٵOW~CZuou}BSa2*2WA lUU }4_){1t{t֍,'(݃(b{!MXfٳgF @az8R, VՊbm'C).VaH KKK'_8ЪSDFFFĪӝh,`h ђSF8jsMy$<Я;lMRau&Ν-ګpϽYcN?c$gOȊˑ$qchrj&wbZOy ^z|!kagkhkGcnjo{KOgF2%%4d|ȴKгWϰ1A=LF ڍ&#N( /Gc}=&Ldo.DQ༟]hmiTj8uP65G^lz =N9] F (zUN=kI^EjKd6jTj*Q `C[ jbZ),#&$Gi, wGQX#dO$U$oZ8JDDΝx.X,<Ơ"Gl>p#Xx所y}\.'cnjKtP^6lUW_CcC ￟aÆ]MFz7(l63`jjj@ѣ8sZloAe._@rr2۾uؼy8cl6w}7Eݻ3yyTVu5!v|9n]b 졭ҽ%L8u464P__OUeS *Lni5>&vmߎl؀˅dN˲_D(xdQp=uTp8H˅EȈRxeG 7(ȸUPUYb1e4ؽ^1:hV4:C<*D$Δ 'ٶ rss۩79cIE+MR{Ѥx49~h#a&EQQÇ 'GB/ZDkK3&[2j(Z[=_A@D.|oGnn.N ~q|a=6~}N|.!kx6t(C ʫf)rMÙg;nC>ȬY3VSC+hdOV3l-zw|Mtһo< c"ux|SIUemm7(**YYY466*B4 9PVdكbn*999혺TxȮ54N%v&l-=.|={09y~%ڌʎ_OS "]Hh!L4(̣=kWRЭ=e7{9\UU5Ǝ_ 碋Ԅh%Ӧs=`0;f M p]=<S\q3Wbq8Z3^&M:*~7L0M_n֒ @EE%;vW2jhx DɀnQ;]LDURRSIKOG++(,dݚO(?x@Rr2( DSSSQ>})?x k{̔:HfV^ z~>\޽;E^^IIdl&+=-EQ {9D#EScb|~@:V x6 8֜5ss8#3+&N/+Ŋ頹Br/sa;!#3FYYY444`4IMKGU|:ڒjBY`4qڅ ҏ7uuuP__Ɔ7`>djP9YVN' `Onmm9Qp d2XȲᠵOH~*z{Y90Q{!%%ٯ! ,++$j1 [ۼi#gC[[fڭ'R1hkHEEFMqqA6M޵A"LD3hd|ՖcBʫ:Z;"I%%'?_Fr9M!}xw(/UN8;p$UtsG|]b#Glm ŋ1c^'z<6uuuv] R4-{=A?ڹcH}"0=edfSW]ǡ0lܹ??k'4go6l@ZZgnij޽3obq&L7Hvv6~!^zi{HIIpk.zo xW4 7_|3ظq#}rڼy˴hsΥ ?b~ߠ*g޼y1k,M'IMM6 .?0b~߅pTEgfo9s&{ٵ?{2k,&NO<믿NSS< YYY1͛73n8zO^"9 ,T'Lt:^( iلaȱZ?Xzp~]Ys$=TrI$;\[VǞeD˭19'^6+^󧓝1'9$'nYY ҾN?syWXd b KݙΝ;lVV'O&55 fΜ ͜9ի PU/ŋqFN|f+)))$Il޼FrrrЊL&dYvjK@e#2sEEf̘3L8O^^! pBƎ3<˱X,}\{<Ӽ\|tM,^˗suבt6 COtb`r #N?VJ 1t8HKM=F#gXhIk;?EAQT$QB.y;ޑBgcSS%n-:[m#2~*v:REnv1gPgO>Çs=+P\\LyyNNOOUWWoM=x衇eʕ 4 ^u.v;&LsSOGZٓhNe֭7g|kkk),,\effbԘwzz:ժl6kTG PUUߙ6m~;>C&Lp%k!VeYݞ%u(++ʯcC?rDvt} $2ٳkgN'tBiigft8QQzқRTYP E={iy; =ep}Wγ`ii| sa 0 ,`+)ve˖iviӦd,X@Y~=<&Kb Ə-Bjj*K,ᩧk7JzW_?g&}5@.]ْ[ZZځ5uT-ZĜ9sXx1ygyw⋹x9쳵 7GFI7x#o94Fh})si:X:_hߵ \r4Nl2?57;?]>%"#'ݽn٫'^E:} q]yLسfe؈} :ц(xqf'H3QUf"eVa]?ZUב_O[KIrj2*IJtrՔrƕ#ڶm~-$vE+WRWWǸq(**j޽{ٴi bذas9琟φ ضmvVii)999-|ӦMӯ_?mF | C* gy~}f̘Ajj*۷ogǎL>]Blݺ}1}t̗_~ɑ#GK4#FhF/bii)Ԟg˖-~TTT "yyy| >CaʢP^^믿μy–XUZxġ':cx$hPDWI'`ABL%BζힱB2DmI,K/Ͻm|<J9uĩݱS 1 *;ĥ^ϯ1Re(#o]) L8C"f#c6Qriϸt5CY0]s4M&GRw|N:jҎ,7J,ӑ\ҬkC}Ԑ$$ѽ;^KN~$50m\<3DK\;Xʋ&9~ .uۋ&Kӑ\B-}#/q4u$I.xe#+xd֖VT\2k7?+2O&{WbQUiC0>1(N4>?]Õ ׁ$]9KAA.m:hjnRU?>o{ IDATJ~Bzş)Z٩~_H&IGXۺ+1ҥ.908asp$#GT ,rG"vq I6+)dff>EKl;{pT$0{ē3!OT #@WwWa.=::?UcJR\Ҝ9s(--G{P<6g}z EQpl68j!/'f/[lҤI۱HDFF۶mcɒ%dgg3m4 -ra6ٿ?>(De?|?r ȑ#tv"o2hjDN/UG} Պ_3m4>ST@ *t*&۷GCSӼ}{GΆ\0m$wx E9&,}k*23(]1 ^,n()eee,[LSJҁ ^Æ ?f8RRR4y&/#G2d.mZ$^sw+R;o[߷g}"t̿?;[ /::?6XG_~=},kI_ŏhm =#6Ǎ HcSNAD6`={6~)ӧOgL8:A`ڴiTVVr=ŋ:u*wq6X>UUUL2ÇssW?V]M-:f&p􊑼 M]B!Ѯ }HRq{p/GEcaHhU똟 ',ǫ={V:}N߾}>b$WM㖑 +((jsRTԃjDQФ?{s,n0XbvLQmsMbY1)ޝbwD\,;VGU'S܏(O$M6R::'b={6^WcU܏*Ο<% +QFZEK.<}$)hDzߟ1Y5Fh6L(%I [%VHxjO>h)U[>+Dh1'817WoOszr&Od:FOYx<*y!FS3D [d<;S.+DR%Z!(΢cuwPG,\\<>a)@CuPVfӧ] @q\.|I0MX,f;xv:[b/*R bwGh՘Ghc[԰c8 &VfR\uu;Y>5A Px,wjR;b4Bnī lc]%Q5[|vd?LN~ˉۣp:zmn/N͑#Gw% kǩ!(h&z< bEGSL-"G* FnQ]QQQ::({Bǩ1'{cc~am)".JvbIMKFUT</"(*EUGx2G)nN-+2Ҏ(%Rb$@#ևh/g"ޯ^`Ͷk M\UU`NEUsA-9P4)D\uu̻='ڎ,FoIBhFMSocUioŖda|(GfF15#qJ$aTbÁ+b4HٹJЕza3t: ZqHD[k+mmm QK Gۭ똟GHM"ҚɎy =^LL͸<zON;w2|p*>B;<6oތngҤIZXZSS֭c̘1ddd_|I}cƌъIJIJ3vv#QXܙv6ع0c u,X~q߾&v$V8ӧ/7\qUL&A@Lq%ֳl#}:+V 55vvm@&oX8^tO覭#~0"&F?m~u^m݊ncC`{c#CB\džFC{eۍKpҼ1Nхya˳wFo8Wۧ: jvݺux^rrrXv-^O?sү_??qF-CԮ'33ʸk[(..{1=cMP; vU=DY;BqpT-fP__(HT-ڱ1?w.9 s%!BD'G|:xD3_V6 !qpYCSrL)F/%SI%6ꫯri1|Ǝ //KN=T?`FF, +Z[[ @MM 2F>s }&ѪŊN42D&wW` sikkEQ_.~YPq0xtN]'t餡-!hǼ^ nv|P1! #$hqR[SH_MVVwuvnkqi;0gooXnvngvmXV/_΋ ֭| _uzϘś/XvnFwӷAUUn"{<\.vKaQL2:餓NǍZ[G$cl%/.@U,V+cÔ,hKO~&}\Ujԗ@$)X,cX Aسg/EEESž={1b}AU|--43lpHeek֬agR_,{شiUyxrptNNj_$:jkk5T I*(BsS>:ӏA8f ۻ(CGQ QRw9Bɂ$Ixx<ʨʲ(L&n:d2!vLйE)h./ݫ7(:"T ]'t0uEX) R -H}"::s15z?1 GkHdb%xGOJO) _cQhD^\11?)_ KQ"Wqxo*$b6j'^3?9Ʈ/Fa A&`v O< ^"y;GjDZV%:јVg%bsy`29!T$I$''s0$ލ ?0YY 1I2sFElW8]NIlql2qddd­;u:队,ǡg0l?']A* ۾ Tdٗ=`0pp9\~5?nlaZ-[tydtT>Yq1[,Z\O"Df}.uȕMM>r4MOGARV~bȼЯKv }}L8TUՎThiCٱ};׋d?1Φ["jkk(,܃U<H.тj" ^hÝK}OpyXI:*7H(*q׶o7I{^ZPUHNJA NUUhiiD*lIf_?"/?B?AC= 2Sji ~9~";#j+Rp6~IJ;v]Rb#f^\qGYGqgCuuOXU5(45`%̮a6H'?/<2INJa_uXVZ[|!}惢(nQm I7ɋ _Icߎ9̓O=AɞvKw%I$d$I8\\2*5:}cF#=

$QUEBmC+&Dvٺy*bq  JvE"K |#]MR wmtHMhcv g6vў3kNJ11?0 UZ8tY9UUx01Pv`$Iˍlt뎪$%%`3Qd2a2`aI`4oճ= 8pAs&w&q=9ԩSy0 x^ mdX,ڱT\.W_}5 bk>S>Cʨ8/ iN  >G__ǠjW9Hm3{9XHaDՄX&ǕW^Yg~;n7$qb6)++㢋.nӝt)s)애:SQR2HOKNFrZ@#ddfL{۬6s` .Aff=z٫ {/*^쿶e+CT~7,sKq}{֭{ $QSvw=lƍܹs5jO<˗/trw?h_ok`6?LKK wy'.g}={6?0Hmm-w}7III|nw;[^SO=Mii)}+;8#U˗s%pk}xyᇙ5ksh42k,v1ܹ1cp= /o>fϞ3C߾})**t_>xM6qzj$It?A8wLC"7&X,/xSB"-=u#/8gLGJ59%똟cPC_]3cײф,,{"c2xܘ- ee׼=52:jeٟSh2ܔ>F`_^8EQ`ÆuH 4773lpdك,{k].'Ǐ_lٲ7ȫʁ?~^/pp뭷 IUKL&>vhmmz_~srtRv;$%%py瑖g_n7op\QŋC7ؾ:5&QzTȡZՆ6R)THQ^:AD=x2.:;L}}=wb\v&HFܣУHDJ_\_#wF4I5dN:lss_UUDP/ $%ٰX,(VWVҷ?>oҘq JUzA]k!#3aj֖f?Q"Tv,CP1-ٻ ^ /?*Lf3YYYYwmj, |~v!gy&&fcϞn7iii!33 Mf33rJ?St/8㌑ucX44t:LܥOQ"% ptUJ-m^_wşX_dpQ2 I ,lp{[GTظ F{L ׏_'cǎe |*.LJbzG4'pF[Yd]{bY"1DpdW lLyWc~9Y`e9DkK 9yyػB$#ѭ;@zr K2lFz\DQfKBE,V+^ل,{(Ӈ7["y#hTշ /5\tr&Ryq_ e yɧOFF?.fYdggcٳ_JV(**BE `޼Ǹ 5+IDAT_RSSÍ77z?/ˣx2seƌhmm;D1Ӵ8҉_iis2g6O3ꏽnEFM)63S̡=hms{-'ԩSo@U ҥK5k?8o`cMD}(Z6X*Ʈxѣ% }=<63j8Z[T$Tȡä$㕽t }X,T 4N_%Yr(riR&%R-y0lvgș,Uzl.\YzO;# ̥oo5 uFXTq>{rT^շ/.@bx eX_?W}xg01v8A5h^U<Ӄ M)Eh@QUvi4R hn^nkSAh0 p/iP)8 rߣ8e[6 f8oաR M( ((h[xנxqUQ)M8 ]~r,ikјY$q^8Q*Qæ]C԰ D\e.\ǃLx̘WLa~v}+`@lˊ|(U'>1@I{NY[CO(麬>iz֒iZ^M22C;齋gAR b~CR<[_3ї0kn- 8 妭˧&]F#/NҶ0~*“* IKK2wLg5Ua{癲I|ePTo| N3$rPs=wNzia4$)8IKRTZ. jXӢ%dqX٣&]/e.e>ORLT/o>͠3=)0 ۺw~)A ٘BAY `k4QT=!B A PH"5`jXX)JBq  @6J|evgMw_>vwcs[>¼nR|`0fuZX 8N!tɺ[goxm!fYB@F5zMӺT8p`0sLDV< `:,k׭}[=ZXx\G ),,'k2MRA@KP0}8p`O6ȊeY0 @YcNOU Gc?oyG4hЃ5Sқ# 7;d4Uy8`TL{<= FSS;pPNvEFEt@D IJLE!V;Ձy!Iֱmp^Eh|2IQ|(Ɖn;pܳw N9,Kx9G)TTk|+v\~tn_AEѡynZԇUhSU%KTH4 <ɷm,Pd`ćn/"nڵx$J5PZRa͌5Qp y&EIaƍE"&mMUS*SUd} AȖeI.LD7tʫp35`4;o@FMŜEeW-vng!~Z:Łlsiˍ3qX%nYbMJKiehX^!e `Z Eh.BurrƷmf~}>Y[7psx歯l]w0N%OM<A@|0LI1 D 3k0_oѣKCKȒXkd[aZXŶ_ӳ0 ':7t(ԇ"3}G^g +1o*$IdpBih&4SSNRKq+n Hʤ,U"i>}P_W&J`&4 bm{ 0M!I͞| MY,;lْD0|>.lƩ 4DT\J4Mc^Tx qսR#O7 ]H"]m[An!f$i40o:/W?ϟ/|4`VoQr2mƘAI߱\r3RAZsW!ahMq~?  3~X5M1n^r0w=)^'VR޳7=jYDezKCu ]($2aG}zIm.\` ar!̟ԓM[v"3?'׏i! MUuk/λLݏΝ}Wv=+t#k3,[!mkE*#K"Pn%1Dӻ"ro = S^Bˑ8ͰHSi; Z$(Žf}%)ǚQe>4dqx歯1M^[0 V5пg)%;Wnrѿ%b˙4~$pQi$>5I8'y~e#="g=so{] 9hB? ]7zg/9dRFu[a??iaQHk8~ Z>H3A8hIS HA7 jPSd' HqaJkXLÛi Tئ++4 >c՗.^|y(J8Ɓ6TRM7Q,[<_}*<(-HVjLCEQd$R:[l~lo"{ Ϸsˌ܃U;' # bf<׮a^i%o0/7js3(~~z`vjzGJP^*0}14ۿOok+7NjGa١mM,DIdSX$S*aޡᨗM Ҝ$) K/΁,=OO)U(wrnpųk_rթzSUe~{q-e=xilL$RJ*n G_SϬB`x/QW8qhj*3b@b 6y5Yċ( hCVrUT((ĶU_1o%wE/}kNf&>&%ҳ<7;X>GXE:2}s:jj77KiusKp8hgͣt 74x(*%](mKE-1n $qy8qA>%hh 4_LK2 " ѷw j 7#I"^_=ٱүO!rjM-u[D@ @s8B=5(- R]Um/u$) HssPIx|TV;!lU{غJئTZq &,XL=`0dfǟ,Kl_ċ9K2e2m?SY.q^1vB1;pK޶,dYB$; I".E!V" ֲPU-"۟kavA}dJŲ,^7鴊iZ(,K$Ix=nt@׍lvG˲zܤ2jfMZ^,$IBQ$@4[n)KEdY"wA.J^>[>`f@evn^x娪J:Bt3Υ.&ĥXt5 E=SY ]MqsSNx^]s>CN͸>՞|h]_~8p ,ܩ_ Cgu\J$dcugƘ$IhQˊ!;w v7)'ϋ(jhYSCɁ#< gs|( Ae|ݎ-ȡaFL98p0T5M:F$j$uLx68pHlߔISR54ô˴F2cǍGUUg8p,ˢW^|>*@mT*9 ݁8vkה[E*߁[.BBMw{\uVOP.+nge_w۞o\;4whܡwGEAd8eq) d(v2\wTQ&k򋝨|n?&A>&_{[\5VVhL -|ʹ6ܡCsͿ["+#a]|Y3|fLE,VjuMPUUUu=F;RP: UU1 M `&u[Jt~hki5cq1f8nolTf&@Ձ'.1|ңr!"IJx}z!N,( GU?9L;r{8ēCnoA~Q\nN;tL5\Kii)eeew}=>zTt8;phkߴ^նi]9y_~A꾆N4i"}MM!f3gu֭㕗_+ab%4u…ǰxb Y3^~tZnM}]ɋ]mCwfdW,͋}|;4whu$I´LYw5}**OYa=_  @c誦?a&O̔)9j4۶mUĢ\..hlGQ~?bT2I2/{QJJHstZJLB6mx<|>Q$HdMLb'Ky)rew&v>vEV:E;4whNsbM&NHYe-a#B!}0L!L&LL4sD"A=NJ A7g]Dyy9 pAHyy7t3(zyWYgÔ)חQVVaL" 30zAo<(pיg1߹Vf{f7pWGSO2bp8gR?&OQGa?n+ /_|z5?=l8w6zk|ayNA'['r=YhC!Vb&{pBh1,P($PHPBtqhܡC2[4sUSr̘75W m\kۧo2KJJx4G%=i9^NSJMoN$ӧs衇o>p'sΒuԑH$iƍ\}͵cO|̞=3r&ifZu@ _eA/$[$w&=ZxҙWi;3Que sbN84whܡ-q3ơ( < |,,DQC5Qw/lePb'MGCMM5%%6kN=TBU5g a&FftU>cYNIR%%ί^a̙;MS0h%$q\.W|R\W|{1goM8{ZrwhܡC = :,+/ψۇ~;nC*egW_OyYa_g_.1Vm퓼0Ջ^΁dmRf Tw\/̟?FLđDWFPhl4n.sŔ]+{R #ksI% Z삀Ѕtgvw ;4wheYȲL}C=7~3)#E0ft]ӎ;~M}PU5W_f`tq%p3x`?8֮]ˏ;2ΝK"Ȟu 3edLcxɓ'Dxꩧ(E';#ugu'sw^N|i1, p=1;4wh}\$4Mcm70`JJEگjwwq/bt%>'nn&ۛlw˕ H$8ܹ;;1caYVӸi*x,^L&DgY?ÏȾ wse!L1C\ (dV輨83嚼n kJpQdX;4whDscOPs C7t{ f綝=Qr 47﾿`YM! n&V~vںƤRiJ,9'/ҳgO,ʞ| J}S~?HO>Ï8 ǣܹt:$IH$yo)&Y%%$.-G6P]lݑM]0'ښorhܡCea&T2=ko-ee֭_GVڋy5t4hf^ɧ_~9+-^@Mjjj|[JJJڴ'N )$uuvTH-&| 8~ҙpb$b Me{gK94whܡ 8yjdvPݫD"A h[y5|޻uu(:YY߷EtkI$B,ݽ'y[!W!g&EܓܡCs[UUw?/?3|pxt^ͻ=Qj(/ԁCs_yK.ņo6/3e)~6nHS]W]zi\vufNNWejkvtfUjMSwƹ&PHΕɡCs;4OrIL4Wx& K̾.KGzW2y9 Cjwq%_wt <S\>/ͮ884whܡCh.ds0 [#'YfY*6bnsOwPb,d1b] phܡCsA@7lw{A+esn%%8p \! Ldӆ 470 qp~t] rqy/'Y"}WY+;on`:sAj9eYSoq#3N , I8z9=b^?GiM *.~DQ.9ߦdzӻ>--D<^/dW( hJ*°7>ۅa:$c6H"os[( $ tCV(x>DI4]iLH$Leeu<-D"˲$ ߿+'#yŶ1 xqtأi-s4aTc-$x?rx'$Ilڸ1Kzr <4B"Xѫw֮-(з_A1ݛۺzkWguy^+mޛ>wBt֖b[Z[s:}i#d%ˌ-A"`19@~$ p3#GW>mL&dg$U444xvkE۰庻 e; bokt:b)g}F("v?hnCLwF5_l<7NUhnjv^bQfj3$Q97F$#7t7C[#}F<e`( H:G0r[[DAd|޻tl\.׷ӲXȊBϞ#{Lq/=ck_~3]WLnrBvb2uC! ]gʴ=Ioʎ2l8d՟#³[TU?Euu 9ŷ76j'TM;Eӕ+8xشa D"ɑG~6nXϪO>aYG 6Fvo:7mb!A*2cvֲO6}j澀dQ }$"x YdYUN%I&߲9#  BUp<5+))-CԬ2M 2u IDAT7п\dѹەг|*{y[ߟWCOx}~ @T|Ns4)/`ax<t]GA,aX`Z+,+H$qLkveH0&B' ZE͌O޳5Qwo6o܀(ئ=r+0M~ J"hnnf߉ Dz@cס?z}DA$SUU5@vImH+ \"K%wDP${835 C7lQ~,raFNz4u-3=ZYD"[W`wM{*[!Xl/VWܻ򚲻^˰Ac7LlQv9B^6MSY'RŰaz}yyk[ESs3gy_k.@̘ T5m]ދL3߽V}4&嚀$fyȦi!e$IjMxNӴ0yLt@ls$Ye!3&e 4U=f H$vkcdd1Ӵ0;&$0\\.heY XXLӴ LBP5QZZfnV|!Gi֮*bvҶi[ny]&MH0V2di%K7/bSJK?[cP$rNەsEI&8ߥ1\Rl @1h bi#3US Ĵt҉$a:nA(I7^'A؛\){s^{sDAÏƛomv~{ 6?_ۘ"mwvfYXҒNs ًCQ2 2s-!SdVϹ7.gT YٹXaQ`$.$ ]}9eeti>(8  cxWO:bQ__% i:p˅Ae,$ hnnή Yd3 4vmEUVzt $h–iy:^YFu\ȒTp^}Q:@MF(/keڂb-К&a " `&$4://+㒋/՟̳>C[  3a$ٹs'`0H4~?,ζ4z}eeKgk>9mg7uJ:+־; (΄}c+MW7t3mvgt-񀖨ُxd2ϻl-*wD$I4L#G#&fw/1Hiy9SN9O;2\|1wr }z`v I )++_Mh>VN[cbu#T*Ϲʹκqe\\L;0oagj-գl1ˆ,] f \xyLgO{޼ ˹]4dEإWVTp|Ǽ iJKK$ 9Dz^Q Vy^L$2fh&/MMMȊiiR@˅`LYYC#֭]6|/2ȊB:&#d`0Hyy9 D"I L2H0fl"LLӤ9G"VߛoqI'Ss;TTT xUUQ` 㣲G%H?q۷ֿh4eYb,2-2{L4~V?}>wu7eeeq~~%)~{ "v6}Cii 'MO%^!sg&bb\e;߳]MBgi]/\BUgG]y[bM63`Ya%Z]xD%4-}mr[E  y+{gL?عc:Ph4FeJMT16d[̳;%%q]GIn\g+Ga"",;V*Y6[Sj&(fm:ݰ,N.#`j{7 >wٸŧ[ҫGO=apcԨQv|̛;>8۹Kil㙧  seN~N=f>G}4"pm¶41>%Ibݺh)s^j̒scCY\~??(83 F~x2g4.z+9#9ᤓySRRUW_A3披BYբ6#D#uOw2`@?c'E/Ϟ߁mGKy̝w> .9&e׳fMZMM!w<3+b6M,scY5ۗzEQx1}:T;vp1 u}].W98唓ihh3c&:'Kpi?&esUs\׵< KtbrWBc!xUKE.*ڸ[͌VghK'UM"I}~rl:t]F31ۤ+w,FUuF͘czm\|̜9 ׵UECo$I*H${r]Guم~nY2\Ia_^uM%R:6Sջg/[ƭ ȲвvM!9,Ȳ}0Hlk!|VDC"f:,əB <߸ח1g, V ᤓOb…<Ѓc' лw/zf۶-׹xX},,=|=?3g1mTX5_qH("Y2q\<}x嗳fF534L2mT6o̊+XSQ2zhmou޿0x?Y?d2YPZZW\ɕ_/;~A@Ӵl;Z5sw@s[tB4/pF5?)T2nXIRrN%Ll(I蚎x>j׮4 t]ggN9je֓[tQ[9'J%5 US#Li7֮1}'iZf1w߼( 7ç>EE/HYٶmo&HQ4q2eeeY'4+"i9sM&֛"2i(dp]6l8Ç ; 5Sv׻­(GYWώ;ٴi#Z:`iyik*Rƽ^%C:LP^{`I O<$>Ƴ~Ihg2n8  d*N8d C$jnѣX~3O1"ʫ3{<A#L&u;r2MT5R2g=n^|Vf7oG͛^ױu;t[la)D"tfК!;o6o 1`ҪP0tK&?o~_|?a 7 G>|8TUU)//u{L0tMb%4̘6zF$膎jiVUTU%>_`#Xb14MxyorGqqÍ73;v,^~>`SL*6)[wı̾+gԻ^r`<zĈ:VGi Vfͣ,L;Q-vuL3x`*+HS0q$^/Dcn1Gv$HQ7h G:uU QbYO3h <7?OH$vlݺIŲ,w.Uv fNh4B"DL<~!=r)ُo3f,CGtݞ7e鴆vƽ~YRtd. 6}mORJ*⫍9Hn&"((,"\rElݺ~;Ǐ$O)h۶0cx`|it]oc!l@$~K(~X,F<gٌ7ӧOI&S 4+`?^$IDQEa9?G:Y/H8b{g-gibdrq$ ,>t9:w{fvS[kײmvJKy:=x9ꨣ~g=9)tۙ+uU*s/]oYFumCz1tAcUU0li%L,rinCqP.ݙߪvJ%x̘?.ŝ-l[cck|M>}HӶ&dF-lޜ4=$E4襢QX3P#cnjBl{m$f7AQ{gP555L6ի "Juu;_> G|z,Y2cvCYp!шC?‚cfĈT'+V|]FuϞYg\y7d i)PbbPgw{{w됛k]>ǿbdBrgg-Ԃ$a"n0P(J E+:z R)&;6ee ޞ5%!ao)Keټ/ 0b((S^^F2#Z9bϜ[ŢcH0kby#a.B!L(LK Ql j5A[4v-,>?Xےo{gǟ.iYCؒ M` ,4aHȊIuxcs7kPR){{wsqY4go‘$f|Ih# $b:MF3\wlظ /5BD4-McrP(ȲLZMHIJ۩sۏ S'K#I2e7gMX,هN}0 ys`aN3f4aһw/<DQ J@yy_k,"P,OިW_}ŴiSW+/z1Lt:gfMp]qO]D*IP5]ݔb7X-[#"BMխM-P\ EQz}xɬO&R1cVP030Y#ֿ.z/Oa6C7Le3LReRvҡpy-$LsW$9\Gk"uk=GK83eL:lM2^q[9577sŕWjn3}q`][ ^ IDQ- JrvMc2H&,N?k C26A tLB~i[oD؟_t!%Ni&6mfַaZ9_XDQ JdM,H8D"6tI$M8eYq`wZ[ʉF66Y|*f.{ Y!nKG"ld2o{<Kpӳ1~ͥwF5_Z!j}CL#i#_;2-IJ6^EqTTV~C IDATHAF"̤l Cө1l0t:w▜ciMҥuLZt8[œiI8Hng}!xf-~ԨqA~SÆu[vȲ='r ( Z')tB6iө4MMOnc< ]ӿH%S]BVd{L0-[WM~BiFjڹAbg(, rg/)L( P!f hjfxC7z,h$2FbϘڏcKCSjaR,q{#`bZ~;ذ0TZClb$=)Ҹq6I\.f+kE>{KQ((w&s4H2m{t{53=={ND0Ia ϕ; 0` =sf@GGԬQ{ \dI*t>$T2clk0c㤨~pptJ, bKb`(hLTb@4D H^L7e@;cS>m;jAq&jFff&Cs5rcn(" "60ȌXkjA0D:/>gZ4|ַޮQ[f#"&ZxկJO<>Qx<8ZZfkRQár#臶~y5M"4rX҈rYtZtTUo&?y]a 71:l6 𡑠AB 8V & ӥ`f'GN'HB5I3el#qDM72 Pp!#&pѿQxPLlvpL}FVr18NWQYdEu!]5@jʑ#df]붣 FۻF99F')m[u/'ڵT8I432شygݚz֭[KF%Xf+Xy}ua@ӦME!#3-[ЪU+<Okגov<͛Sv-}Ax~8@vP,~j]W鈦iYC~~`u6hmKtHכ6N XdE(vꜽɞ$Z>בn5hoԨ1MzE{`5[^59kZ~`EڃLNIsά+~ݴ4MfѸqc:wMk'4e-[RUUŇ>@U:p8hݦ 9( ))tԉWx4iBjYt7aiժUU|PM۶d]:itЁ9PҺm{H»U+.q3Qz܉fie"}kM=TiәNJJ zB/㭮x?`SW2ReF99xÂdUq\.3fJA|Z 55ը}m;u9Գ]p5q Mr׬I(HII=^'d<:9]4x԰6 Bƾ.Ђn x[(!#0S"lh󡛀Xб,qFEy9}kr-hEgVp8}nڷZd3=tr->I^7VV}DMv#w =ԗ3#I?׻YG8#UUٳÇhEv߱HA&tn_+|q?u!/9?O`Ӧٓ/3gx w:ddd<êU{&O YYY<0u, ##+q\ƽu񐑑a wq5:%''wYfBsĉA^Qgر<d֮]˸q;8r 0zhzƎSO=D(ݻ'2n8;C5 -63gkn믿θqxGZ#F0n8uֱb n& ͛ǬY УV(JWOc(HKH&ڦy2ӇHjΏg⚛%IJbW_1uTO֟pWO"iǿ?=3f֭[n>'O$S,I| ZiKYyjzxN6͛7s7駟zYh1O>)SPUo>'5-ŋǰLa;ظq#+Wٿo))){ŋy{xwXp!FsaƍYx1=%5}]mv Toj%>,(xbFEaa!6l`lݺ˗l2rss)((7w/ٸqc6"!v%b5*;^3ڵP3͸xj H}6x0-'T4=n2l6Ɯ`p>f?ҹK7ZlIņT63id@P\@BoS0l02e ^8__Gtܙ .)EQ wlFa fiO`X>5kpAvbڵ 6lw>ݻsYg!I)))уCfڵkG),,{aÆ2^h),@,wvs1{߆ɨ+Yۙ' jS 3o\>NʠX\8B.b233Y\8BMVv#CYI% AzZÇgĉlܸtv;~ d^d„ 9z ۍng׮]jՊRTU%++ Ip:|,]#FpUWpBΝk޽<ӧOoCak4Fc_p=D46mڔwnj DrrW_ѿc-222P+p$E F3'QhX{!,gښ'$Ѓ(f*tOKM_dY!|(,CzTWWQXX,H Y $I1^Ha(RR\[5TZVN=>cvHIN(B^`2GNN#Xw}7Dעq DQ;v`A 2&Lǟ|BEE%g nf^Hvv6̙39|05G 3_~\~L6 ?޽{Qj4W_}ロ'x~{rAŨQؾ};_~9K, U_@ VN?̙3`̙F.999ȓvv6W_ -?Ilb4SjtHxcTD|4HU~6ӦYm܌FBhJZZ:.._~tE!qŋx<۷&ѦuJ׿С0YȲ#ӧsɼx{i(cEǸƛڵaN"3tZnxd ؟*TM# )%EQҊJdW1vxAoW2K).:f]B0 .hwT~RSS0蔔CTU u]TWWt: 9n YQe9d%z(Bzz:F/?`>3EK + M+fzEQ4oy-4R>|EcL@<`hH4hkmtmR]]Xkw9CY.z)U5)_-OٱZ&wafϞ1ڱG7o.N3<Ңm۶;K/h,}<wu'$?;v4[@òȢhLɆE4 + Iُ(ĆK> UUUFn_㯷lp8ZfSE ز2dieU6y5`x||[dNj׾=w2j=}|^Z$ĭ4͊fAH$:vLZ_BFxѯzfp-1,Ȣ3I5y[0 {uNUBGAQU233pxAe^EU2Y]_!Xx~Ш"˽eE"bc0{LXEv}\:f48EmF rJL_X':O>s99՚ީL'{ 5xg0?\UvAfv6:ˊȢ3}/ Hm[6ѵ{Ϙ|ݞ( ->!"< mr8t 2÷?d˹ տ\ky} A,"> eeeqs_m{UW]3.Մ"'LPAV`I[O$(,^)3shXC Fc9\*++mKȢӑl6"+KNiӮ="?yz.TkePUbl6( 2 \%GEY% ~(`wQ&%\s5ڰaK.e߾},X&L?@aa!_~9EEEٳKrWm6 ֭۷g$''IQQFe{bFAƍO$0krOMëɽ!7^c'K55rM1,t"͛ܥ+UBlAUSƝO>a4mQiҤ ?9s&IIIa_=9Ms`]vϏ'C${${$EQHMMe?yQ:v숬(k<~QIJ fp\1mI|=RHRR$j~߀LŠe2PXkn/`Wc6vny_@uuׯ#77IV,9,ٲiytgEPYYM`z,2+kR&I^zzd(B~ t@5'^{zfSFfuc׎]hFFv**I)I2%_cN[la´VZ1|~?. M4m۲xbNovoyu֌3& ),}}`ƴ.17A}a] Vdn,ӟZv_d yWob< ƌY[P7dΜ9Hģӧӯ_?Zi˰anz.bv۹[i\:~U)i5jP0Zbߞ\xɥȲĺ5?p{<DADȈFqq Mhb] I _/O[dQW3\a%tޓ{#,Ժy +XJrs"y.r@S^RNjv*W& Zwx˺SB =CZʲ[$hr&Xe@͘#UjrOT{Qe%MСCٰa#tr0+5k?oΚի yvjό3(*.y~svϥff7())ᦛGAAM4W_#ѱS'v yW IRǚ7FUU%Wsɰᔗt: QR\|>uKsmTUQ%rATVǍK"Nx9i(D^f(Ѯ}^/nǜn7E!OM﩮CEsø|񚦝vm\P\c>MOёdnV0crMq%3ߚ5j'^Ykɬ[f>~_5\D^|d|Wrĉh'QYQiZ222XC8]ʻKVV>dȐ!:Z݊YvQw_$Y3F7(s<殟) iuTVq:ڶkOYga]YYTIr{G>5n1S9RX#`JE[dQ* 'Öi۾%33݆P+&lǸnrKMM3gH7K4nDfFFkvhvN5e;r7j*x8NE!;;c~RZZBQQ/2UUU<:o,]>[n嚫1}#TWUx'DQy6l.;r'=ڼ}<!Ӯ}G|>Mr')ӉKzf&YYTVT\m(/'=INP^Vt:+R CkE%osEQpt܅oZA.]o:ܥUW{] s:t8Td_zx~(Rfg=Ջu ԑ<~Y/OP֭+}HĮ]{7vB9QB$?| Dee~cE׋iwyFd{ .00JZlYc~SD|D˲LJj*5T~rg5$ J*O"TNȆXwEbl6^j&[(@ dm5ydeg*/#~?,ENJ8PïgfIE2"TQ;UڇD*ř}H@2Ti$Zf#99?MN޽3M -ã v3|_5HsU5Cb:~n̦ɜxLK" pzh̕,I5,(W7Z@[{98\.TYH|~PdUEQ>nԴ S'ӞY_M2/UKPknJw -#(Bff&YYYFW$u}⵪*LO7Pii/qBM24XhJq4ߢh7Ԛ냙*a|: xj>td2EdvqNnQS D/M0 };"*^1-/G}5oO O):Vs5t%駟O?1uT?$%%QYYo[hϟ?+V`h߾=&MW^\uU۷3fM7… ;w.7nD]"z,_>LO[;Uzv;;v#F EYt撆(tadYCsȒpǟzU^{]:waAL2cNJsطo?8K,f1i$ƏOc-Z'|e]ƤI0b_^z0yd=7,c/MuG޶6ei7BBZQQ?SL'`ڴi='r}O?p8袋~x^ߏ6_xF7|Cػw/Ft#Gطo-[p.U{ENJ4Ϛ~vf}Qի~[<"~1rٓƨ!a5t3"u$TwTvEUU%JMJ EFyv+RnwfCmSO=ٽ{7W\q999̙3̚5 EQ3g^x!g&??_| .O?M޽yW4igFh&XB0K8'R/ɦlWlS{ ;\GnZf .EYKRyy~;$Mi["@Ye5mڴ B7JRe%](>U@pz9XXA=bafqfp]p+B~ׯ_Ķx衇ԹsgAعs'C57eʔ硡L3fiDY'P~Tl&VUJVvvDhV,﫪sMHKK'' %5[!{^'(#eo W^Ё#7mۦISRӨUAqQ6n\ɪ"/xp6s6UU m,OS\ߴ ji'SqkNxEYp$2{csN(奯y/k\!h4g4 owP\B;F}ٲq>ei Dۅ߫mȫFff(jW;_lT{Ļ_ͮyAqtY[>,ȢxawD|jZYutE4/ʲ"ˈp RX&X8v:uijϽ?ΝJ?qNcn,S=DJJJL+ oZc1ź5w6"4D5t37ĚGC333)..6 @ZZ[A(++CUU233#V ^2ZHB^+/I dY6S tk+dToE1ldYFUUSڌE]4$%TȖ-[С^Ժ8beٳ{7_~i$ KY\&K,>!q'PGZLC hD,f4D*5ԚѴcdjn_z?rx׹[j7EŖ-[4j@e9LvE!557XÌ2ݎ,IHrt~f$99o^~`\uUL0"Ν"~-Bf1yd~i/^رc quu8_nL JKUaƑ̹LѢ}j @Q54UCԚ`75TYQ&FN*B1Q+])VU6%n"r]ִp8o,Æ d˯o-kk~S ෿,^$_~3wcnp]|2>#>#X%^灩S 'g^n7tؾ};O$^8ܻc㏇ICWMMu+] yU& ^q{ [b+vn6+L Su $KW^6[sٰa~V^MeE%?6G?1cX0>U1r6mÇشy3N'|^zsQ9B׮]'-yf ֒ӈuk9z<R??D p8F%Y3Enq٥2ax8 NYi)[n[]4+ V$[o}6nxj*9*X2ݢ3WEEV}2G~DA@TڰFrYgq]w_pwnQ4lfk)*-_>HRÅ(I9Z÷݆$+\n$;;XZ[C[/jLF4|>r -f۶m<8m*X_|?sr ly ),,mPQy~"|^m6N'ݻwgܸq |lB͑eA\ vBIn./" MVgӵkW-aÆq(fڃ~zzOIb~x*~?,X0]v/xHJJ"''K n,藗)$HRSӸۙ4imڴe&OlTa7__=\֩ Њ!)hغmj @6r#D9 f㩧bl6>ONqqq@)--fϞ=C=m5\¼y$~[o?Dg"Րkn6dCq٥λp:h,nݻ0q"+WDT^G|wL|?k׬*$^GEEC梋.曕+[ص+xgg=Gyy\qUgd"Ir<$kD:tno,d̘1q.\ȨQ|8TUEL0ArC!Ȯ];ٺu\ߏf㫯_oᦛnf] 4+V}ƍE|[s}w,UU%y<̳|͔mhd|wX x+//wެ_>PZ iK}ڜW_GU75E:KP{5+(/&=EEusIjz q1|#Mrw^o^|5l 6e˖qwsr 7ouVx6n܈c=z4fvs-3bcWXX /1c8r 믧wަ:/f.v\f9ECy>$zLJq-}XIL@R"|ticXxN]ɐ/XE'4mQe$IMM l dl6,][Nuu5vݎfm6ifּM6s%P]Uel`7Av<ON'^EQHII! ncEӉnQ. 茦@ @EyM-j?3&M snI<532IB=z~?`lӖZq)//3 `W|vl~̚A@QTMc,:%XMQzv |9@.OO<#KXp!aEh IDAT@޽{:vÇq\kZ233_BZZ6le˖thOnItk^7c'bY<7 ZSim[EȟF*Yh5]i5n͆=@]䰢E~Hk imsU쨪86eYFeC3zjȲfmtaKV,!y 5DhWVVҥK8 >'6iqןh?৲Ehk4x_P]]M\9SٌkڎӏNEddEyȊo;r6l`o>/ =z Ź ʕ+رcwy'-.ȸnܹ8Nzm0xZyir֣rFiv k,PCC heauXBbEEZC蚇y10hj Pl];uBi|= (RcYB7ڰȢ3TZ{ ɲQ3 }{ÈDbtz_DYAdTY"+̓+xې%#cA۪U+yJx h׮V2ѣG1ٳ/袋;پ};mڴuTVVqF&MINN[n1X]| UƬF믝gxf"5QUUłNȢe*6EY$~t>vF=rk,l)~t^AVY,y{#)Yxoӻ8UUUܺ6iT;v,^}U~K/1uTz!^x?c\s=0rHl6]w7n)SP\\lʾ{\,\/t9&u9H4-fk&'zw"!j~!|`0{.4#G2r0ǤIٳK3f cƌ KKD$^RWWWDYT-w3h>b{f-iޢӦGZrRe~FR\G)=В9^_e=AgխBl6ß%9235tE1ru-'4?=ڤ"if"3Y&s4?u~gE4XkimΌ5vFaa,Eb?̠q&FX2jX0`E7NWh'5Q );Xr7nC#C@|:X]ȇ jܸqX$s(&z:V3Rٶά5 [n<ԪE&JVG4D|T+E̎% PxUxGXW-.AARdd?[7mfЃqo,t4M*ZT4KD4)6i,䡛!LD|x A3yC-PYd餴*Ӕ@OX; MhҸ 7U)))AQOBp=hт;2;g]ff~zO}4uC7$ XFw,5)LGb|4 'UQI1ftM4m鞑r#o,?n<1޵φXX9Tl5!Z:;(֬5'5 9Pks"h'P^ڢTUUEJj*]v zb|@@QUJ('PA@~URÇӷEao,(6ID˳[ӧ'>۝5~nW-++#==Wfedd[E1wĔqn ǝwދUEQ54TUAVUO23ңOP ܌'O$"N|_ۚ FhW>L̘1=A`͚5,Y3G^ PK|YBϻYb~iI."[SVy“w}ǡcdfsQwcd$B2Ӓi׶5Z%##=)S)_Z//~(Tj"jlBp\R$UUIIIA9iW3{ h;t}vFeakC+334C~'ƍy睇ik׎ɓ'r"B"ŢtWɓ_(<3~pnmHqGj\զH(ԩS9p:tX qcySfzѠkMC,x<-(=`6LDRO'^33x}q^|X{b_D$6oݻ8x0][5gx枫xW0tiS\\,aYӎ(a~Ç)++ ]@qQc|>az Quu5Jhf>sp';9k~DNf Zg}ƻK(1|)wq'NMVv#PMJJ ٍ +;t4MvBVv6iiǏgddϣ~TTU n {oΝ;IIIAUUîqݤ(UUk3tO`^{5:tә9s&/"v 0f?"[neԩzvm|>DQ_W^y%/"{+3gbOӟ7|+^z +^VVƴixWyj_@~fbȑ̝;7hKfO3b.]$Iflٲ3b+l6oW\qQB߿뮻I&N BE(+ *`OQvXVEQt-+,""ؖ&Ŷ@$@-$!u2\'Ô; $qI2s{{yg:t(7n`00}t^yʂ 6lX1. ~z:tܹs4hK,Q r 73P]] )SZ?0zロiӦ1rH~gNټy3:I&#p-{[G|rSk=tN?F6"ӁjCeP z=eKض ]PLYEv#7n},]իW#^{-+W{=>.իWs,YB]]WV;}|r/B~X|9g&99kr׿dy睇hlڴ$G孷bܸq?~]vر 60}t̙yGXd ӦM`<3CsPm>J`Z Ү) 8NBDdQnjaӭ^4 aB'@iz(,,_fɒ% /0uT{9z-Wo< ,wa̙Y$ƏϓO>IzzJtz3?^gϞlܸ1k΂n3EtpUkZ+Owgu:y㍙w߽̞.lٲޚ}NfL<;'Nd=|p!EEyW瞻ټi3cǏgq=r1zyi6oš5k)((^cIlܰ/!Cᆿзo_֯_ѣG1EwOAA!? ZJ5z/K/qm/gڶm˖-[+yg(//f1tPsjaXZ\wu8p0f$I?yOzUOJJ㪫"??b L>c޼y\}l۶Mmcl6*=z˗s5ר @BB]t\#j111;uڕaÆC]˷ӿrssׯYYY\tyBJJ U}'L{FӧIII k ntJi@{iKۃ2t,?j_]$ɱcJI8l!#+au$<ڵiӦ1gСC5KzSNK./gر<#|W<쳪I/??N:!ǎcС[+Cͥ}ҪU+n:-[ 7@uu5 _I]]ݺuo_$>>իW#IK.eX,$IR[׮]o1c,O?ĨQPMncرv,+}]RRRxUFvײtR~iUTT[СC ażm۶^^g׮]j[eY@}7jgXHHH`dgg3l0Ea߾} 4SWWǕW^ HHH ??_q", ?W?s6"ra~NF>ƦGTCOR3Uwſ]Ʉ1mʥd677<~;K zQɡo߾k*1%_ѨyFȾ,X xb*Ǝ+¢Eؼy3{.,_nݺa-m7g Ts|ux'oP}l**+xiӦ oVdfdaLV^MNv6(aZQp:fp8tjst9(*sJ!CXd K/bذa6l6uoudmĊ0lPl6;:^gbb" #9;\tE̜9{I޽;_s :oIHHO>*9scь7;.]p̸qR[gff tԨQ7}ҫW/=Ap?3wu:SLK/EQ 3W_}K/>sb6[Y~=> ?8஻waƍۗ~1vX>SRO3f0sL>111ȲɓǠATmWc~z[:ty4iSL!99Y7 /ٳYrڦ^{a֭|j(/\m!ر# ,૯駟vu3-;ߗ+P`{cS۵ŸGPޞ,Rb(5|5}).Ydffђ|rSuQ\{{qsVqy}gm^ϠAXjJdӧOgٲeXɓ'm62d1c0fbbbxW?>*#F`ݺudԨQ̛7kRYYIx7{ 9DB"!A*jP9DNWʣC6z6V?reWp ^d/ě3~Y#fZ;7g38\vٟX , b$? YYt#Gd7PPPI\i^ 0cK |n݆W^~u:5\3Wpa.BL:+Ƅwra26t(fs q :$d2_ xzs1(r3zyݛwgdk3:ohkQ-3sgz'E+Yl_F(Jl9ݎ F~\_@a =7|5%9M1Q جv;"3z1_|>S_믿_7߬ƛo$I~mۖݻw駟ۙ4i6yQ\\̈#8묳EĆC81_0FE#Fw$(f5!66Lee% cblTWW(8͆hh4 I.;XSWWh$lXbe*L&~NMr2u'|ҭ l+vYINNp8ط R빻=Fxb>oOLJ}{Zݼ9qz3\g2z˲e˸+O|{xz6xxSKp_2|pDQlӲ6Ž]+Cה`MQmѽG7{ lvAVW! H6;uS+'RE˾[J,suשDIĹ瞫˽i6y衇еkW5Jsf3ƍYh%` 9,Sujb`0F@ף멭U7{kJX mnHbV+55j:kt:GQ[V^^!x>GS^^W}OF5klj%=Ӵ׋gD/"9=|L=Ҹݾrx>û.Ç BZKzFSۃz5}23s1_믽LѾdEʄ,IB"JKQYM1XM4NId&Oe_T ԨFXyS?|mnLݹSdd }[+t+è%`ސpDSsoJKSys:/hl]`Ёހ33:Z'ƢPr۷2z(j_ۧ/ ї_C4c KēOo>lVvvr(E|}}Z0k`Ru65G3``K!B @=\Xccl#oGOQ:bC1<3f(AeJBJZTh7`D s-.@s`C$5\9Ř{yxt7Zy?Bو,+8W5IFVd,\q IDATp>g礆C?URV OOג~b(&X4i[-?Mk}yxtܿUA =gMMuꔑDNt`H(a:Ykq韆ҡSSωvjkG`r3R`(Mz8HHhKp)&cڱ٬XuX@ꝟѨa@և|@9>CO di2Py݉T%h04Ẉtǣ( C:*k?/J:i05u zlv'~}%^J۶\;]M)P_{{ՠ`HJ|B]82ci tz+js`w8Ohk\өzP6愹ߣ!`([fH"9tJKK)9V3(,.O}r9 FX5ǠNl:f̘x'سgz 2~xLBiiiI(++fĉy衇;v,\s j̙3տ?c^~zBNzz R/.CkZ 6:l:dY B\qZ߱9a=H5Ụtż!ҒHFIFuZ'IfVmG Ѷ*[ei9RrL-_ rJ~a.L.])..c۶mЮ];;w}n&+v͗_~Yo|GՎ;8x𠪥{Wp:S}*:Er k䍉9Qê؜1yCh|]#I2oaKnns?3 ҆G8;XSf |IFveZbsnӻwg}6۶ml6MVjjjIJJbƌ$''uVw̙3yyBsBO2p1j+YIjsSh4")mPcﰹ`~:stż)a6C25WHY,+I03on>.Ȳ¶޷]v[YztݺucΜ9fzj{O>#Gdƍ呙6K#?5Rywl.k$G>>o_S3sL ?۷W_ʈ#vmt2m4h۶-W_}5W_}555a0Fkܣ!*khm}k\֩hBA$+aUN Λ#Z v4U̵s xZ*͙ΣƼAB&dr9gcԛ(*s~&l: (ٸ |$>tR$I"--Kx饗.wBy3dȐ~I}{IT_6`] iD·n`k$5%Y}%0"YIwZ •<a ̃E{j!!Jhݶee>{yxt\hz(fA8$QQ~t*ٰ;ApH6(b؝9B /d245,/h_).k]Qrr󨮭##3ݻN];U35g̣tǣ(`rop:j9xcB$IFAΎH$)(4~D"2u#=@$6}<_:={v>}{OA*s?mPkyΣtb||>iƟ~bEo0Rr6E׽=mB, &q>.iN*@ubڞ24B EfC 6x5kBS.߷_e:ߍfꍰ47#`Ք1y3t6,PIFg0aZZ|ZK-$sV4zvhτ K2jAQdUI#..pU3L"2'..tu&-D$rsskKKKQ\fz$x\ww- 47$] lBFv.{va2|j 歷VesTyy3Fl6,&eU5Jpi:ZWxUWrJ6l?ϻKEEӦM#77rF7x={`4IHH'`РAL8"z!P)SгgO6l@Nܹ3G" 8`Kڏ$Z+!гWoWTҩsW?ICWss<&\0NyK(1o=T"pTpǏ6ڙٿuPNJa!>$KW:rrrرco6-`deew_s˖-믿Vx h$-- M6qSQQ9묳83?A[s0TIȰMl:];;>5PM`M.z:0?4tż)a] BD$IyY5EYPD:ƾg/*d~S;w2}t>C$ej- ?|%ϣ_DVyXZw7dlV+zA(༼<.B^|EgBhdBөsg͚ŷ~w}}M7wYzuhaCJyZc,>^XI_z&(PSĢG1o)kCg>/P5Q1e.LZ|rR3n;Ͻ{\ΚȢ\O:r&MgG^`L4'sNڴi_#&&~u\3f`ذa_ݻpQRSSYj%%%tЁ%K0cƌhU A,XsP!@ ̵D35hAmJ NI")) I(SNe3dYb۷gРA8k, o _bƌ|w\tE 0 zj{9RIkV1tj ̵?uuV̭p}7gma/cH$tżb`5ß>jvGpR[qYku%dcubJȒ]dY+DQdYk\{M޽}h4r={:sW5JΝH^Q=s}ap%z<M9aIE8 %aRlvaP mLIjr$&%!rjo&|ANSO7Z_:FP/A' z6м69Ki Q^^91wy8x0siKƼ%ysj!kZ`+..s >}:{n piʭoSt* Uj Cfbϗ*XIچ4{(@(@s^EQɣL v3(_挹 Hy(G1oNeZ&Kn4IO@^cfZZl| Z?+P|iٴ\P/ Y՜׺Є9'WoJkQ:y-`P( PWWCll t:eEP]d YvvVs/IKP?SQ Ђ 1EcwןyI+Fv 4e|Vd=zQQ9K9F<-7̣tǣ(54t-&jj.aփ9$$vn!mN,Z@ʫcU6\E>--c8]`a(@ÿ9cŔ0Σ7Rz$ { +:tA%dY\ץ+*y-Aפ%2)Nr}@s,2T4mЪ1p/ ]m,y0cs`/p8裏p84͘L&.Bj(c9<^lC"58WpOG()+CE?wq#FK.|3gv́HOOW0a#&&Ç_3k,t:6mb͚5&Lkfseh%PrC^Kne(o$* 9%%>5tż`,k"ɓ'ҟdȑC"YC8BJJ;WsD1oz:`(Q[*4t_3M6||,ZGrNYBtJZd@QFɧ~JBbymdž 둽RUU޽{֭5jw1gee_Cff&ZVC@[ -O* `r!6>Vo}2戹Xs<55Z:JQ̛]:I3f ǏgϞSQDEWU8EAe?L>m1$uQW|QTܫW/~ ,szx71c_~:^{{7`wGy+XhCMl)="5Ps`9۶EENh=y$̳M PD8k(JQ̛:akof9ꙮ,2: zٌ$ɿK'$6IvR2[9՛ܺ:L&seܸq+L2ۘf|Ak}Q q߿HffjjςQ%*cn?-P:K=n-ّ^ I5(MP}Z6(Q["z(mM.bIǏW×_}GdYD@EYE@;p S&!!Qz=eYfѢEHDrr2/V_+ 2!C.//g}Y24 -c;BW8TVZ*)Mclo3%jhGΣ7'еlZJA '+YEE 2DdQp4-6:c)p9v5A}h4t:ߥ  j0Աz3s-B[H$^_Zk7@1uBZL =EA01w_{0G1Zg(G1o.G$mM 0hJJOsQdV d'NI&hfڟؼe vi>`0r9ac2NWp5=-P";!jNl(sXZ{⫡j?;/V(G1o=Jcp*N,YX*DI鴑J :bbbV uф e PkPIO0s3+6ֆ0$43̣tǣ(b衦t-YlZ z5Clv-7rRs@m5TD T)5XS@@6ιg6Z֗hLmazX`YN74!yˠ(n΢P(s_d!;v`҄I<( ol4Sz2z8W$ un-憚N槃R.@90w;JQ[2ZMp⥋۷o$&\QQAr$; IDAT~~>*ܳgz}- (4TVVRWWWᖔ$qF=z(6m7NA%??Ǐ疗p8ȲLiii4 , EpũӍtKE1ot7`@6_y++ ~6݌ٿg?ˎ>ŴIiCuE5EE2)5j {nnJKKq8~,Y?9s J1w\^|E,XIXf K.etM*#޻w/ӦM믿gs 7p! /uV-ܢ>o˲ II̻`W\O?oͳ>}T9/O>n ˜1cزe ;vtMډ6̜9pjꫯڵ+]wZ5##zLXGZZs?r ;v'nrO?OӳgO6lʕ+5k7nWDz=s'N.cԩ̜93g(L8Aqy!" %%}qW5yCF q[Z%X&-=|iZhTӹg t T,c룘7fb.6.~g㛵`~y?Ȓ̎M;h \FvTYSSÄ T-`Νݎd:Z?πgذaũ{79s~wxW&xOt:GFӱg/^^gL2Eevn?R.".\O>kFjj*_~9}/"K,K/\}nV+wqsΥ H۶mٲe cƌ!??gyB||Zb=nQXh[fĈkO䬥^$'RL89~:6ܸG1oCY5(ٹNtL1&6mĎ@Q: mv:J]OP]wŝw;@jj*nZ}sϱ`222[fV^͙ghIt:;yHLLTք? >Ν;nK.;v3fwpaf͚EMM%{,Z>D?O?MBB=:t࣏>bӦM,XaÆw|YUFgSOaZYx 4vs( (ъ4ny0r<i,%c+Xyܽ%"_?m}_s:K7_|CbDJ`2oׯFe]Ƹq㨭塇gݺu,YsfKIT7w\F2낂{9$Is/ ȑ#t::Ğ={Xn@q8\5?Nee%NS5FQf̘g}rCթ{ !!p)**`ݺuL< /jfΜvଳbsNn&|A~Wп̚5?x">t~[/VKGP0Y(Z]KuQ[Z}ݞzE!.>^$Or "DZj-i=$spA0g1M*:.+gLu3 ==N׮]߿?k֬AQZL& %\Baa!<$&&bȠSNXF#fڴiCee%رc撜SSS%..$`0O^^}e߾}lܸCҦM DAAYYYܹodrss2dyyybS3<\@vXndȑСCL&111y'>n{`;Amt+7$+;:K8%IV[I钝(:XLZU ~n Z*HȵΝwC$*+*{ml,:,L@4u󖁹mgEz=ʦq?==dY"5-=䲯Z_NYzגNcݜqٶ.yȲ̡CtnjОEfmR&@]ּg22iyߞǁXt)%%%dddpw5z=W=Cb̬(U O|PVQ!pJC6z6V?reWp^\_Xh1"G{V( }{ x Ms-jŜ0DyV-ża.Ulgsv+h4U oJAPv؉~JBvHDJZ &%3QUyܼ5`\0_OFggy2su}-<`DQo߾ft`m:ե_}hL|d|xү!ѵ~ $٘tP:R)bnfQxݜ%X@L׵W cz$_ڬ1XmV28```4- *=/8DY{!Ϯg!xh ђ.PY"܃iH|G(inB5j̵0`BM9cuQ̛7a1tYEV~ 1+:y$reW?k\rե\wuNedE۳):yR׆2_|v_'9#=sBOO?˩C@J&I.0o<(MNM^W߀Юm[6ڸsԌ=ѣ?JkE hn@I/S8]*yK? ` |Iin&u !୫G8,6/MgV\0SҪ#q^5%żeйK>q٨d&=b0Y-8muN!l* $:C+XL1DQrѤ#t?yD飬uSٍY5Lk \b iLHKtWb~j0OL鍔O> XPbzcIN-}I:;I(JDG#NQvY#(eژiMw %)T-;Ҷx9P+i©R14Q̛'aeYA]OvnMpdfNTUU(ITUn&-5eAR<u ]$֤AjF=Qcp x6YV50u9eEe$IzZ!aeF=LzD> N[B%5X^D ::S%ƤEARbI56 3UCך{Z\BKL>,@Yul]i[Z6]-Z}I8iΘR/#y<4 &igzS z<#iۚ *+$ F^\xq 1kاבRDZXaudp Vп{ unSR~s ʭOPMw\ܑX5Kуri&$cu!F+dqQp6)tqx{y!||Z{BY:H$HAR`c{`uHDX,+ub48w2u$'tug^]V&}%W W;C_?Dk@5=?>}mjrkCy?/ a(-(εyCYj>Sv-cW.RRyt?;;$MtG@96S}r+u*8[2☽VFrźRތ:,Nq+wM7 ײp}1NQ!9Ġީi+E..Ⱦ,pJc`Vn9ƇK39zX%M,C:pc(I2ݳ8Ckf//@L*3)\/+ #:g&H*0PYNi$Ǜ\VE9FFC|Z aKhSNG+Sy$b<02mNmNP,q:جv0MMn\lCn1ǘb6P: YrҔs~w)ɜ)Vb6ꩳlWɨGz;T-3D3G+m؝=R_$U( P\ .-P7wl)k$#f]p^InmluF([ac8D(H-`tHߎ3'm+9#']1`tKhz?"5'ż%ӢGν(:vjjvrˤ[HlHmu-5U5TWTIʹSLe^hKip50t -:P:'9qtH;QޥMǘtK4@F z!q툏1kqLF$0+sIVKSz<\ cxZ I2(.e4pJ.S$W^kލ :K2c2c6ذ^I ==?l.![GޅkW񟊴ӹE*)9u$,@Y|!~SN . nKqiF@E hkvrǝNP:6+ŠSd6́R :=,ݴM4FMچ.a4j%D<~+^lawu[A92霑HIUbf= F$Yʆ"+8")#m,ָu8E:Qj\"km j NZw0ֈe_u(X0Sp>ſܒ0d7oCr@ ;VE%#PU]uΣp 9޺4ZłD dPd6e^b;w]XaF{#) 6P$[e#.k#e%VD|& נ׹:H)X"_\+e?bՖލy9S2ώU:'L3UФc\qNYQظCeuHK0 IY))CDYױqg.;K[~wDNJoh֦?h(ρ߳J -T1ˎb޼1KCY֝vVCY7RGX@yNgpg!==9^VSiK3"INE!)?m'ƤG@ c40?Z Lz Z40V+`6] p¼ c^ZѠCLF=I>P}٨w=#GYǢԴz)g/K: `xonbzDڲhژy}bLztĚuW)J;wQTVU/YFIUPqPWq3UqG⫎s]Gg\ ˈ $KZ?:]vNPOK9wy<9%[:#3R/mFYdkRweC4b1īM$HW ;y]S@ Wzd׃-R܈Hn.9g7u(r :QL ` -Z;HKt; @JX]Π=+Պ(d$Z@0r2t99ZrpJA$h U;Rq c{u;j;kMLvGxZ k%\uّ#P68 j!,Jɢ߸[4pRûoI1אVҒ#IVcJ&,cYƬX}L4 h@VmV5#k{:HuṱƼbW-*-6tkJFJS]- "EݎR '9kepL#`ąǛ!Яe֢I2TW<^Ƽbn BP|äaHB;FY̅@ T ab0E*Nv 9v9-H͘fkToթVxjنm&lk߻ 汤@y\(=>w{*MiMZ^!W|^Y}ݳ'ÕjS3X_UsfdRuZcK>y+Qڌvk;"v΋%,Lm6qn+RRQ<*$# Z@AhNo^ y4+c~q.֢p\\NT TM@QEEASL Eg!ܵ!|(qcg7jsG =kMFXj[s󎀹#Yt]-i 2ٻk9 Ԗm!+2juHkxѧrrE4B4ȊY30՜% J /~a>?LhjMK`Њװi)Q $ﱲE[CVmi>jKygAh _p8""))ccIGA؞'f8I~Fԡ.}:nO>3grVijX+^UW#!՝Jff&]t߲,#IRX'@өplwx<.v]Ҏz[RYdG <uMuL8n[˷Rاzf?2ztg:}i= $I)O]bc~RZDQrt:BqoU%f&I$tҾ 2&m#d'yܲ U &dYr Êv۷Zd[r=o4PV3~=]Ⱥi!B%!.뮣.jB1+QH+2uTA[#Rz-;^W믿Ugu۷o׿ OB$EpvZJvv6;v`L2w}W`ʔ)_^v=pEO?f̘_Ύ;\.Kޔ f~pW~zϟϿo+OԩSy7x뭷|t֭r1DMMMTCyu(BSZ=ٖuҖuԖVZ`]Dؘwl̓*G:xxDe+aGrerzՊOdޡVWnٲE_뮻xy뭷kE5j?ػw/+Wᅬj?;CSS| ˖-cԨQ̛7O]]vj˒%K2e {a̙,Z%K~͛G^XhO?4sᨣb0a/=^˹;)))1=>*^7`l߾k#K/1w\~axGqݬ_￟wyG;?SpcVӿ~?ǏwdffҳgO ~_s,f.ҖY|\pv*jjjowNKiPUɓ'r|2h m'駟έJϞ=9s&.+Vp 7gb Z1/F)6|0'ڑ3-JU"}g:=dcncU0I#G~B[3uDln3F^fO3ҹɤLsS3M MXW]D3CĆvS[[KII vpU}H{n;jkk)..ŋs7K+**y衇㏹⋩oVۍ+"r >~_TA䡶gddp3|p222ZaqFN?tx㍃b{^n.Mnn.v:nf (--4>G͛r2G#}y$%>JXVQƊ}8ֹ̍R6mFFt%̍1'UB1"v_Odg_y;=+ȣǬfmҧ{ӳWO5K4u?Bd;B[v-\L2ŋsqDZj*>S:(>DQԟmjjkncҤI,[_KSOf[M$ѯ_?.Ҩ;UVp8}L6N; 1c 裏棏>QFzjgwE: >?/Մۿ?3f_MfALE1Yv-cƌ[ J̍$Xs4um$=k#݊cvps+oĴD%ꪘagc50oAdpqFap>/P[U˖ЯEܗmQW](x=س8 93),,=W_}5_|1|AN8 &Ô k0`wy3n8uuHt;AbРA|%ӫW/ uɺ*p%K/ϲh"x&L]9K;?>&MkOseʔ)p >TBpA~|׿ %%EgBP}.Kg\.iii|?^Dr^{I Pp1 8\V07߈iJ+cnUB1[T.r / = r9dlj7*P?dO}e㺍 5훶3m+!0IR ճyf :]fY¯<V1CnnA.#k "6zB_ \-[Ș1c =< :=~2n8#"rXzy6U9Yԁf}7=m4Md;O>%{y3oEK,SbW(q~>qC ;R'j,'I(`#kXm]saMm;7 ͼll M9 )j [7l墳.";+US\9laqxNөsA$\Ip\$LI#8υp8ZW IGr'ԦP_¿5HnyC c+p5Q(¾ޓH~Uɞ5oZ^9Ίym;J9NX9Z`v1++9OYլ''''&0f9s=ChY\E8Lsfi 02 s+#5+%Jf*^̭Γqygps÷M U3R똽+Y+.3N9LRRRzlmks39*Cv1΂k::<:V {\Ѝg3׈A`붭 0oʇ~8وr"y%FWi7Cbaj?::mɍmsy$RDQ7^eMLa:= ~!Tlˆ#WWE=^ĖlgD6AQ<ڧX4Z:C\`」bctҖ-E Ql{nv?0+4{8Ed*r8<~HMMMTY y/\P?9ToD;_|e˖Q__=Ï?'~ }lڵk[:'䇦 uÊta^V1"4v%̍Ƽa0Aol>Je6m(>PQٿw?ÎqHӊHG U2b kMMMXCP]]+V>c駟0x PYYIYYYKYr%swfժU_VVz ]+))᫯ү=@0z&ӺuXb⪫bʕr2c ZV\g E8p-t6ꜰ4wY{dyX/kpx04hfYl̻ hi0ebHDr*VгOOʶ3Uܱ͚Mk=P!)"fbl޼|P'.!b8sLoٳu"x-i&n=k4?g,Y–-[뮻tf_G}O<)7h RVVƖ-[ػw/G}4eee;j  {B'_:wouj/<5l^uNC?rcd_Ƽk`n8RC[=53'RXTȾ]8vO!Yݳ:j(i$//@7TV^MVV3fhБm۶1n8ZȆ PO>k<.]ԩS###f~'˼y;w./Yꫯ/䢋.b͚5Caڵ\tE(__ ٳihh_gyh?ϣ>J~~>ӧOץ'xLi|s=lٲ1cpwGpTUSb ٰa?7|3[n c#m9S믿N}}=O?43krI';}dIuC{XmHF΄fcncb%o`G7, @jZ*x*;6|{9L]M͞ffe&r@H2vl)ǟB^^n 2G' gU8sx衇k)))Gs@2qD:,V\YgvY|ɓYp! .ꫯU[@UUֽvZѣ{Փ\.dY|]ؿ%|\fϞo_jٸq#UUU?O0Bk1qD:(NG xd1#2ÎC)Sg^􈾇~PRR_'p3}t^~e PUU[oŇ~é7dĈ<|<3x<gj ~QZZD$VZ/_WwNeenR$ݻS]]݊xggg܊ȻnPvP;֭;hR-]O>Y , 0 c cbBWW{pVTqV*ovR2F>o iֆxU< fhL~L.1:IO"+* G_# [,\% dwn q8+?IL׳l2}h"ΝK޽/xuu>}xXx1~!^z)Ǐ'33EOpWojfG߾}yP~Z'wu6lYxnKnlll5 ?|,X̙3Yp!{/< g\}<zꩺꫯ{NХk?=Z'\ά=`}Y)/Xx e Y'^Wg*-[oin).Q L[`UOxϯ1/ɈY֞Cڱ=FUU22(^iVr)0rH}FEYYY0_èQ8sSXnn.#Gdǎ}ٜp I'ĦMeդ_Bo߾M^^z3f $1~xz;Ȉ#(((3K/1qDcǎ**v0`UUUxHD޽ݻ7MMML6 A߿?yyy(_ =BF7҆3b >=^z֭^w޽߿?iiinݺM6q"rF zoF^)$B j z艪ݻv2``=+H43Su+i5md( 55Z;\ Vf5J1v΍ ^**RXK7K2z):z>xcqDsQPX@ Fɶ3e;zT:H,-y-2Q]3hb=g+(gz~DkYd}=8X&cd9w|V?ZQFVuv̓y<|r4>ZcԄÆ c9pB:Fz|[9yhư*w3PGbFsN[9>D0-FIJ?Y4bYCIIq'9/V<T=ǬdbnߖH G:1*Csʱ4{;(>?JfF7rNZZiiitÊ>QOb72ys 2o,Xc6X-?^>R"),̅6b΄y[t&uncޖbhC'$̙3)))644@@3o0(--%%5446e]/IF$rrrYhyyy\x8,Xvsmc~a,˜uY :{p3gLe:vXKV>}69ͶNDlAϵ9dwGܪʲ`L_]m̓ JN:1c!GC8‹,+m?޽{`ռ<U؋-[PPPFMMWUz7xn3z{n7O=v-'[eMx<曼 O&Q=g6icm%@ME+Or g5դ f1CQl΂պM1*UąK/QF1m4$IGT$98cXf p8p:TWWΖ-[)K5jT(mD+Wfٲe\y啭l7|\@ZZ3i$6o/̘1ctm*)2M^2S9w؋ֆHUP}yX8Mҧv̭`~8SiƼ#af{<=yj*uuuQ5te ?뙿 Vx>Ea+\&֐H{L^#N9^^{;+V0z#׹y21o53P"Kff&>| CUՃ˲ENv[6oACӉջXrrzzsA(++cٲej8 <~; .gڴi`uYTTT0i$v%\¥^ʽ 錪1SDz)6 ho5߯vF ̞3T\*VTts+*΀y,02V2yWY6I$tjYf1c dY֓Dvpjrd$)M,ȊJ㥨/#.5ۆm|wd}w8|5UUuL+cY2dSDTO欤*LDEޑ:#V sF esy <3f@QG!쫬ଉ'TՙH*PO],#]=.IRTsӉ A|K{BdY y@ rPUUWK5K(DFV5Xl1^U՜XL[;V}KF+b׹y;%g1SQиOfjf͚ 'ARRSq,+9|W_Ykr uB6ZeLVȾYmW.xVecx󾎌yU_C%N))nr2xVT+*؋2:ND5dcn4.fc[c/UCK30>3an#oۘ'aUz1\mV'[,Fdq_Un*Z"4[Zj6+Ϸs3{Y}VaP_ h0'EFؙ0m krb7O}nz =yT(A+x~^?{ g:(dũHUdD bԦ0QS"-"{V :evUCCC*+1rD\{\[Tq.c΂Ώunc[OHB72rM eO6q2YT@@AUeTU#jRԻOO)[̢EbmxFFx`8~5[mfe c.rQ+ k.@V] s+΀ΏuncN9nx8X 8]&&hYwTTۄ3OBU4kHKOa^='砜F|+xB"vV1F]p0$X l cM1Cos3 ߏ$Ixx< ͸΍LXy&wSoZ;Va)1iw΋l 'AjYFE6Ϥ!ogo"z7}OZ'p%o|s^/6mc }>>3ܙg ڵkNӏ׳j*ƍGNN|嗺7n8=K,UG,۾3xԑ=,A0jM(`卛6QVZԋ._|\sM}]Vft**ņ~v]:_} T 4 ïɏ/:^ٛP̓96%WGq6$5|A%x1{9hإ`"1Y ^~3;gѨh"hJOrNɠzjtw IFr ٻg΍(zW_}|Mx<ݻOTjjj޽;=z`ƍ\5z~SidEd%NؘIM"<555$9@ia f x$EDx5%FL #s+dƼkc{P\ܣuܨEUTD7X @B|Y9Gg_pe8| =`}tKF +=O<9sߌ9{stSVVVp2335juuu|\uU A,G>!NurEE|rrwY]bv+M  IR_<梩*)n'"rݻ)+t4hq` 5MmQ1|RRRصk)))-CغuEEElݺ[1fFSUV| 466p12|pˊ+_RXP,ꫯط_r<=3Q+"KDUU:VpHS*iHcc# uX.v 9iiidt4o3AGUvm(q;5MӝBGm$ \.]!2,#". ߯q\_ljI軈$ -^u热n]U ,۶n S  yTI.v]b%l †]b.vI&;dwu#Hv]bإ}Qo%]b.coKgKFO-AbcrN;^`h svLH{В21p8X:,ݗhhф"m&WVuoxF[ؘۘM D@ٝQT%4 QqG쉢kvq]Ӵ`hKrlV6tx6d׊qP-UjDlcncޞ R[SsĄ4$=)Gw3I(-)ahܠv1"I!9#"u5|:>op,].F{,99݃ǭJr*9"y,+%+;cw8 |:>2`Lݻػo\~c7p¸[zo83iqJ>cNH1("L1d^2t(۷oV}|h_?RʨGqTEA 3[UUVѧO_rw?$//^<@=\kH47v 9d ES后. D̜GnFKS11ooTMCT˹[pҊPA P(ҩi*uJZZ:N;øIE-Ñ\HkOl8DcRwk ˜xNqFN:/ֻR ˋ9Rb >ocnc~(1T5̓4א FFfwԖ0jzrXG;4ToAHk CE$}]Ű$YMZp/M5L6IUU<;!"!*$V>mhS.X9^deӎ7Z[ճ$09XA66DEZҺO~J#''䓗۝nl߲JRݩx!ZDSӠ%烪*%cuG? Ik~ /Ρ^'O-[jFCN$CO$jjj:mbIhd4vScz *C#Ugf{"0+ֽ6-Z]Ѥhm =;=o& Nꟍ<\ ѷx?A0O4yhjl`bT܌ A\$ 5TYfgy/illBh-cC>^RR\s$IB$vs/ صs(+ݡ7Izj(MHOOcKQ~~\..; ul-O8;N Ʈ]߯?>4552b06m3%993gEQp88Zr{t֍nݺ_q嗣*(zO?eҥgB%p$EJ/ :>__ňAY.~ؾ= lUCyE}r$2R]FEII ]v&L#IW^y%n2;<۵S ecncޡ~Vq3UMN!#+ld&ݲ(((@*v!{wuD4\h OKM ]撍tsO+LSԗo~(8j.H4y4ɲ)Si~öիߐDÆ9S9~}.̞=?ox^MFvv6?8N,Zw\qn7yhllo3ϐAQQ3f裡Qn#=='|Yyhjjg} MVjAtʒYǏFP|c?“G*mxvm<3cq}Lcc#Yhyyy:mJi iw6F>mC6H=}6hYqYzO搌IVvژۘ*[CNq l|,tpտ/}|*(Ln8R4~Ӆ`rP#Y@ijW/<}薑I^Gto9fq|o&pW1l޺\`ݜ~L<,~+[˓O>III .odڴi0kll> .K.{0}t|A7|3/2~ͦM7nwqsa̘1~Zo7|M7ļy|&{(<*x5p2f@R]K``<6l߃$[n"^/7tz*w_}3f`刢D H?A4wLG<73Ր8 Sxñʘ4=Gmm;Hh ++ͩ_ӽ.dYFdYAArq_P,-]պv zFF@|Ausնe9@ 7(pq`UH 444p"d9?y?~|M2{lf͚{GUUuuupgũ#<_H=ͯ@UUTU!✘0Aw9ذ}+ OdO";+HL)&,z[CsTWWsN Mt.J8tHIFq\-W҈ՊL&5ه\o%|W4Q BTG!-zk~\[ij]M sMm MzXRSSٿƆ?ߣ蘃R% ApSغm+s! \n7yilݺ@ @qq1"H47{q iƏ? IDATG~~ZZܵ1cc֬YLp2oݩ|ч6q^*NE 衣qmQB6mca/Gu[DK -%(R(h 6R֬N=I4 )_cܸ?^dȑ io"(nU0|=#^M&kl{I6x$cb3 [Bz&<٘D<.Puz鑟OmpgNz;6Po3 @UAfһerQA(#")(B \̺k2{!y.F,bFɉ/ycݜw$jjk䉧[n,TUEe)'D93ܜ`~yt_<^rr{rIꫯFUfɒ%L>+ݻwos{Ce.r sAUhJTXfAB=v+ۘۘ7߮[N!Я$P_gdftCz-mOIIaoy9x}>r$;߯_墹ӢՐ$ {n>ˍreJj*)~GVVՈHvvUiiiu9|E=wS[W˘_%. tJ<YU{^@YA2W=M>~߲sg9=zNݻws]wrŗPUU$Idg؀FmBHtΦ_?oۆnI3*(ɊhxƼ#a4<ŃNqYLZJ T`/~?#G&++ES_*% AhnnB*yOSMz0MCo&N'NJb'.Ii: 0<` G*d<C<@!کc "9"9v܌n_x,Yڵvoo@Ol~__lo8o?7nz9v+[،1at:m`0nP7C(!8C9:gh6 )E'nBur Rq] ?~q^m` PTPVQV@sdƠ4('k /7P=%c-2S-++r(E65a t 7ltձL .vǯ[< PCz<An(v:k' Nkqٵ8izhA@6=4M g1QJcd$0zn4! ~@"\l ;D$tuH#d&nM 91K!fJ~60p\{CHHJ!A1BuV5z$(~z4(Iኯ(?J;('&9Z470泰y(C:;Im%,9G {`̀pxbv82!3QbuH)h4Z1PC%vNJ1Qj5TU,JmU~3"o@}2g9g6vln‹s%$/)+IO èmm>+Ƕc8?$*t?#0`̲t(HrGs Vfܷq|{CVrQs=O攴N{hc5'P$&}&^ҚfwEXҮ=/kXNF=6xmsmYR g>i]x}A%Ӗ*VVnaccb[lp˴.o,ߖE'ju30GRZ,Fi66l͏ôϛE)8xㄺ<|/_y YHBvqăX]]ū^/`U* 0t\X++3D3t-VyiEӶfhOcy +k!HĪTb f;hZZH)u>K c.vvv`.@ʣ˴2(5DL.OʑiI\]z-t  Rn3-4~XJqRjem::"ХOpkѢEK)Ky4]HBhc89imô`hѢE*n֮оIENDB`KCemu-0.5.1/doc/window-select-profile_small.png0000644001050700006200000033212511131675406021104 0ustar glaubitzfbedvPNG  IHDRF~sRGB IDATxwxSjWZuɖޱ@ @rK &p_Hn.HZ!j1nw[djגeV6)d;{r9±߽IX|懲0)BP"B@>y +)rמ^QQ8LLEE(¿7ae $)Gu]GS@`낁_}!+ξeK~byG~O+BP"|)( UnEgct]GeϜKӄi像?w>K(ɜؾGwX-BMK`wz :V QlTE$IiHD\Q02:H$Ak^dYBUU$IBU54MC%A@QvMuDQD%%~EI[Y 5^&բj#I";:ϾCa*&SRvַoIT4UEen^un~ oQYȯ.;Qj߾_=x4X/L2(Z̨6|PIe UU+ $S ݆,%v}!Fx8tMC%Mf)z$3M$51yll"rۿh<>P5} t%xuTUGDQA4qJ]E1G;9jn lellg~:2h,N$2ɩV;8a]gyIsVCRAqq4^}clvg4:k64 9xlJӞd^4=7MrSxi:qҷFuZ94m#NcκAд"KeQiaJ8k.?}.o|ƶnxQbe77w1#$(qtc6ĕ&Ia2:e%X2 U5M]}>j*<ĕ[[ĔPp(J/?M;0"_݂$;GD⊊a[Bw@,RucYز}&8iLs5F7 g?}):@5dQ(Ƞ?$X&*\Ȓ6 .]}>&U$ف P^iign>\nA$I͖|Cy/8g 67%$^yٌegdJ3ﴢ 3D4[)/u! ;% mX츝6TMC(@Ӓ i,^{c9z݃!،$8z\^HB0MÄIt 2 {roELÇ^|<MSv/2 ԄF<e|OK㏫7#܃xxC&[dGUIIFYPϮ#Ssӹw9mI#i5=̨1gP,vJJ+s@6`2ys?en'qEEG(el3aGgBci@4N[w]} JXMM=>6w`!60@86?DIfێV8rpypVqlmrօ.¼e.;A:"f&4Tvmt Î:,M߈ +TxKxs?#g|e?1UeDIqKŴBӆ1l$8|3!nInm;i{nE]8?_i*gB ' ~˘dSOkkzX0g @2oKLIn.:e!ӫMl'ρj\t,Sͦt':>FGc #gr:ڻ |D~⊊iS+tsن (N4csѳn[Kx9+3|G\z<:;PuA^׆UT8k<+HzBSÊH:hJ?u휴d:'Rdž[3;;Zmcaj]W}0͝~Zmcg:~!3]vB<4N;hLmby]}~CC~*˜ֶ!?a_O%k6ngj:Gny{]ˏ!3|iq~L615.iNa5^q_)a!Sw8s\~\nz]ZˉĔzxXѴzXNxMUI`;)r7m/3c8<%WP6q*&MP4yɒDɠ?– ;_ M0Eiak yL%ȒHۆfavColtzc H oA֮A G̚TAK H]BE6v٩rOc MWPb1&T0dL3cbV̝Ϯy}a kwƙR挣_wNPpՍyűjh\BIl9Ax QT]h`(N="X D8n{DbqQRu.[;25.d3k%pc;omtGE>f>!,&~>kbU4VP6I[b՛H]~U&ͭl6/X80F/ʢymX:i1=~L:^AlV 6larC 6D"i"W8EϛzPTϛ5Dt+U6`HeĚ<  ̪FQDJfQ,&r}0}mv,Kws|/p ʔR> ^dYb{X4/m~*=|}MZ}}|:rm" MɣqS5^Y5gtof Uc g5tk^n;gZ55Yϛ{E۟_>>*l&fO򲩥Ak['o،$$T?Yd6 _ےtRдR} 2[Xsz~o.lmډ,I'AH#& =mה1g /߱崊^V ^MDž&,Z!G7AN77?@8/P+}dWF=K+lփ,iP[YJ[oY eج&vs~0R(uH66c%Ƽ)C닲ik ^} ҉izdD7v΀ OySrX QZbg fW­O}hqI&:T2 Ef-{X,hj9 D/iAЎ,Ϫ+TRWQnh-]ٴs`0BU^H0rXhbc[2PP$Μ ([[zXvdZFUflV3Ak`>AUB\Ѩ1cR J`=gj9/ϷsNV$4].ʔbȐ/@CF_A5$^OtLq]&%.:;\iԆ?'dX"Y jzR %4HCIpXuPDd]q"1х͒t. @{@SRqpX2R7@DǬ %HƝ~юI<4HGdǠĄCaƜZ3;dI$aXij1^ Ith{l:C*DVin7,r:1"MԖDp":`JD Y+t;6!BM8f$A7j!2TN(;hv¸腝 eiJ5vj𵶀'juK&Lz Xl6+5^t]oP8ʔIuDg6 e5PUvT54]CLS].j(ţ~t6,^ ^3X*I#ؿ:ɶ 6,:b*!( `Z(qZ+ Ul`6ɸ]ndId L+ekAJ4.yW27ܬ *f6BDž( 4 j,&pb"S(s;'ò8ج&;}>I$n|F*i6% ƞ0^I>fRYae]OI(X]6DQ-┗z4PCqlV! YFݬ댐P8l6J:vTVz+*zCحvKE]j1j"$S_[^vB8&'B}M%}0 UĆa;fǶ&Yrc$BR(8u<J20;VZn R׆qBz!:;۰$4iS&i:J"(]SU( |>*'ak'yQщ(7nFLkLՒ,椱Ll,ƬZ"|)Ӂ{nIҁ} J3#Ϛ]ɠJUՐSj8QF[PdPy ?.F$I=隘 ۆk$>m63.#qjOϑl;/,iKV,—  Uu KH$ud!L&S27$#Ot+lknůheEE(B<t"& څ($ A :쥇cPRVPbQP" $Llԏ<Rjj jC_E(BPkDa4Mj"[eQ SEb8vDd. E(BP\W'O*!lj)c4lzE(B,V+-; RZVFdEmЇ &=\dP" >u E-R"_r0͘Mf(6'M.45]|$ڏ J\mTٞd逵1{Oc7_Nr2~f|{q͛l{`ݓ}ZdzWs[>,12{Ǿ8sw,0L [oCy×ND"ۙ _cADmg^>z>L3Fǚpݹ&%ӽٞυl)]cwloaӌg-gg iwLcDn\˵l8̈́|¯wrs,3c23KiTfjwd))!۳c5Ld(t8Fݼmbߚy0r2vEӱ-MfÄŰ2r$L[!f\F&.St]+4mDZ(?#z6.ˉZD:jZUU$Iu_$IYs-\5rX\e]9ȶ^ \V~BEC ۆ~!02gpd{5zOm-%VlY$\BrC#M5md#n&~V 6oOFQXp"UloGv͘ǟLEExAzL߯int 0jc$Ix^PU5Hk<0c2$ZŌƫfS^Z,bo2#xbQ/TeTZZlct(ww.@?<嵔WDz4}߇u6~\yhbee-VJ+ig_ .S$˟#J2< ,W]E0lxJ.=v(T-Vj'\( 0|~DIfڵ|GHK)sqtʩWTWQVN-[ ---\g6n3Z, Z0gzMK-f1 UI!X>I)od\bF꽡3jo; QS-XjeuD4F̜?֦aI '0CH杌)̜=P"Df!u0|Q$ s۷o??=6.cX9Nn9Sp~\|%6V   ޓ F =j` 1b欳[yͦQ`v#NcՕʰs2uOs<V BD"Qs3ͥlp gaF„ÑuYq{Jb`;TQ}1s9vO{Xs0D%feoV.ե-Srotƫ7\1*+D= Džx2~KC=n6ۄdb䉔xJVx%%/YSADBm;ڈFoa~pEiMGBWWW2R0Loq?ɫ_y?ioog97&7p=?ɵwùQưA\(<^~g$eoǣ#\LR}=uM64h 6\oͬh-55l=$1{l}ļ!RҞM]yE=}Dќ8(0%UVWŲcE'z'|6">]~9ukC>ڵk9o FuN봴W^bQ/IF駟ƻMVZv4sO~#<#<]6-$ lV+lo7ggk+;yd֬hj:N;T?{'|>@+8{y&O̒ŋI(qJ\%ײatwuчpЁr%iӦ:`ٴy3m; uMFKe:::ډ'vytvqz=裏1LEsmΎvv47q)믿L׀8H\L.?Lm!8Lj\q)\d seH68\NF0&s1.aԠB֭8- GM&DQl6#JsgPQ]o}HYy2!%fΛ$JbF$dL0 G6dGSO=m믻j@'$ ?0zzz[oS#"xs=EQ Y|v3֦J*P c{@O͈O36l}t]CϖFOULm@Ezqx˒^jƙhF^/ .䩧:y,Y)Sx*>d)TV矇l2T^p+KBTUV?aۉF|X n'fwpmp8x1[$852iR{/,I?˛n]D_o[o-O? YòeR5z_8 w yfߣo{b7:F`0 ӼӎoG4EdIf'rg K2?8ͭ~45yf6JD"԰[I.p ާ|-ټy۷o㙧f]~x ]]A;pMN8[biGu]GÏɌ,<䓄aE9˗۩Eӟob1 B|AȲ+W#"VҥG|ٴ288ƍiݹ?X4jk ̡Ae6;x9ЉL4*|#TV%N{{{ҝlta2Z,}Q/ZtC@4,iC w3rɡ&`@_@^ٵ7wp9~"76W_gdY[SUU^/',=z:zpk p] S/Mr0e&70w>ښ8k1>{lH.f***pDTU%Vl6XVLf(vb{di\...2_;D6N{?02qb~8/?5krwp O緷܌lft{߾pBf͚gdFQ9fG4.B^^wYlnqͷ ۩4MG,|LyG@DRX}]&)$iܮ_4_pI쟩/$˟}yrr!$)37yhijea1M @* =e^&OLkM\RvUUI Tu)u Zp []aUU>*Di/TL[f]'x"O>0-I$j+2Kb6x<ZZZRǿdv8~z-s.,[1|Alݺ{ﻏrfϚfcCyG9s&^/HLK^^vZ2ł\hERK dy>|cǎi=-ie{fֻocuZq Y4-Llf tv8AҦD"0~OZ,Iϧ7\x/v oy\z8]N:+.? b2E#y<ē*PUUwCII ^..bg QZaRcZ" ȲL$3p3gva\3n[8%:;83v& %E]ĶmEю&P ;[[xnuK[[77|krU>z-vn%D;ǶMuqO%({BlepݷQ3PWSK. ·X-}~}JEMNnB55v/bNo4D,A<1yb# 6b1.^|/| [plܰ!.&]ncd|EZUe<S1*?яXJΛO}}=}}vAEz(_9H'n~&54$'*TKv| g>6D"G}DCCsL}G W$H9蠃#D$('N#?O>v7np(>@NB[4G}+_W< բ]ݴכVuhzf'EQ$Hpɥrooa~@?vWo' &W ߾Bx bޠk>PǙ1m'mv&Mn ҎWkvB->YGUmH͙amNtG8sW䔧V˄ FΡ&9cx EI8_xkJ%|~-[ƛoYg?LrʒŋAא$dfϙ,g'M"n\EP(w.xI&>uZŏ|%x 9G}j`VYq466RUUE<j,qԤs|[b|b1]e˖qQG1{,8b2x ͳ|C9S&&JE%+R^T'L`it:MK ~Z8 #GK.ZlyTUeLnl$1oYfظKU͛ H kDQDG9YhHKmTScL#eI#6rE Yޝ8;c$+# F ˂ +j+k9!͕$. *`D]I2;|?9Gj\*RE%oYg[ұ ,CEu}=vQ^UN0$.u3k,oό\-CGƱv 7*NW >Q)ՇbU$߾b38>|bMR4)IEE200$Iu- ʔilt aZw'0&iǢAʼ-$1[i7 HjQ #˼^@`hp`T Ap\ GX4L ^/?Jp8;i;4.)i$t(45&~#<9rB@:;ul.c䱛9>%W]Qo/2ٰ=PHn3`.Xh0,nk뺎_dʌ)Ģdt8UU"2c 8$bXذv:\ϛG8N6&T5S{ĕ"X`G;aoL9yAIz:~ԡ!JB$Itw']SR(tuv b7AHʐfdBаMOSuӒLo혆4M )n5Wz{{ӹF ޟjw8!9F-9N:2H9bRxFBQO}Rur:uL8T`0lmǫVaOt_tE1-V%_Lnzo{r'[RaḊgAcTU D8]Nt]ik&p9PUUUf}zZw2iJǍ2\Ze 9ԡ+ 5u > J] nǦO?cȃ3#mq.î }7䌜j~6RY,LύK.2V2IIE{go+ʕ/3GX>\}85d2R%'QYHB hgpkFƕo)>^l"#0q2'}<ψfx,W˻kߧ**u η =qƉg0~¨ĸ{Q=BEZYpzdWc#UH}\ /GȖ,BBpl4L!ڌ!ٟFT/pݿdTm5^ )$W\B#H}# l&܆!:+L$ 5ǛXѨςfodH8 @h4JMM <,Q4 > &PIP#Qㄥ@b.x6QѮEke͕0Hj4-mgF*W[>)4pj߅ԎX6UV=Vh[rIc5"bjs˥ ,d}.V H X|ȡ̟3ήNqws5Nf,1Na20bLڛǛg<~}48i|7=xTs ]'V85B]gJ{yo[8l63uT%A8hSEL0F\a"""$e\"ER@Jݕ 0dDJ?6[KZttE!$=ĥE(Bh:A.qUDDE(BP/yAt'LDM$ҡ˰XT7a)ҕ"E(B.HbnsV"E0Fd8 nRh$@*_>;OF"i=\8 K ˗+NBs9c!3G|"2vFJ=SF"$^wl27#s_f#\uUhz#Is3_D{>oP#[ޝ {#B?6F\qFr~B2 4 M!ȵGޗhޣ=݇B}S@*ie."mLDYȜB()(Dit]4>O#F (D3poQ<1l \Qz>B֭; cZH{Ǝgdmlrq@QtݚTU\jĥe&H’[,el592"lyǎ;ǣʕspUgSgDmh!i|#lx{(Tce\fֱu>F>{_zb.A'z !MFɧK=c۱;J0^\.V=]+ƈH\iDͷJG\ȯve"ɪ`B<\ _#]B뷼lz.9(dKH-shtM\Oh瓋PRէwhLM?,wq.I. UUx<bh4pdYS4>'fۈhO(nQSS$Id;mx7X,\bw}{}w G׈ZFO$BS;rqY%-a|RA߀;#s6=nD'F%LLψJ9Z7WF z9}ш'߾Ȅ\c`O$^y_ȽYgE(J[DQDEyikr bXS,( W !} )hpÑ Q0s xLVt8ٓQH$jU& W 8].@   F!b-`ƌ̙=۶RZZZza^Kq%-[,]{﹛:^x^$YfŊ+Xd |_~9{.='NN?;wC$v{0']~UUKuk9C˸Yj'Oꫮbʔ):P7j)d})7ʈRh\kK>B9%\rO5kOf^۰iD"_ÛoW_|~.bw댪l6$Qd8Ow=| &[oH4 K??Wk'@}}=n2m\NF9LRQ>#N*Ɲicgx\;\>~@FrMN#Zu`J.Fe!(͵~rQ|=wsE?k/CCC)D"L<7|g}>WX7/nyiӦyRYQ(v,gEdV+ʪj45WV( O<$@>>&O ìsYD8t_o {>[k֬W\A,Og}EdxA:@<`.BN8kSU],Ym&K:غ󳨪wI[[ۛiDѴH$L&fsx] `BoYaM埵@[.酎Z_bw{ 7_Zs!!p]MEE7\ K B3O禛~_O}}]rw}$1k,o?"});[KcN$lN֚RVV$"看[.>'O9)5 DQD4cK[˗rw9?{o'GUq}KB"k,HH"ȾɎ \@e+(W( k%BIfZ9әIg&p|IOuu,gmYTWWl!JE5hjj끍u䣑z} $I."W~ltuuرcu˗SUUE}}=tvv2nܸ!GCy.xg;R="6YcJມFmo CuXْj(F[z]ơ }\\D)%D:׿ {7J)jjjcSS[ǃ%{wY5?_JxJJ=\}J\*Y[J)%)e ) Q%}+ods)2)c)ޠVR [8q s)v$%Ȧ-wXpRsShSJuœngQŠMxJnGq ں)+ iW\]wņVtC0 ,Y‡ 2j(&/om娣>|M{cNtvvλ2eb޼y$ /^.::w؁lS nv`ر8C:Of,7B"~t=؃ 63c ֮]˪U2e X6͛^lv]K2yd aQ^e˖~n`C(piCW"A 7oYX)d(y)%T%t6XcW>R*uE1@<獹.>m&Ȳ,,"J͵^Dž^u^CooI$\qNi C4-l&b$Ir\1ߎm7\n~R)\uNT*8lyT<'LdreY(hH$B*B4L,Ux> ߍ:(.fjnAJ+ݕl$p Y 4$3Pbd¸E&XXmCDKKP4IBz-wl\[ʶJiJn/5e2ϕL&SnпiMuRxST# !w[M(- D r%,) 9(_|N2ln%0#[l.XصGR꠽a06rp(ۭmkڶ-H¥XӪ:mj劍:p[ֶmm[[S%D)ɨ1J.Huke nmkڶlۏߡXep--7mm[ֶOi1ӡo}kڶmki:׷ֶmm[6ԃ {xp,TA R0URD*0䞡ҷ [b~l'|;& қPQ5RM1Y~C0 ä6*7^~A.`0W5b%_tnoEE_1'zx$R)V*J&\ As\ ZmC۔~ ;wGWwn<9Z ;gr+ܵ%bkCt"ClafCבRi U)4H44%h(%єB(PJ'=$MM͡8̰RP]§$Q迦4Ab3|JzhACCcIno~?R +x1P0ʢR!JD jk0\uPirT ʡM*ŧ|d)V _X鱿$B5Zħ4yCt:Jf%,=&uUX|Is]jjI&2_'[O~Z}46(5\Oqa j(Oa Xs,lˤ'k3zX&7"('I߷BW&͍ (-ϓ ͳqps<>B Gm,!i947fϽ6/a8%,%5iڵ+ (%B9.2Jy|B8'I.#k Zg)qDaA|k QJI )$B|)I&&wD"TM?~cpeT%4j7+-Bx.J8E|cۗàL/ Ժ CMe߫W/6mQ~?q@llRh(.'\p\>"L=`F(\YI)Yz) 19|)+dqIפ#fTm.V8L'νסT BIQRRZ@Bn$Rdr&Geҋg|ua0I˵DDr.3\O$J \aW:$cyi$L:c0IuM*Xߚ3/t~w~| i(T?>9gATgA{PJgiPX|>liy|2? (PHPR l眉.0CȰ3?XԤ |o^u& :R"Ti|JiH" ϘY [ R v#>A]U _7JѯVk@(Jz@CS DD`D8į6 <#T4T >h4y뭏k6OGI^~@$Ji \!O`1S<谪9V+hog_6?6` 3OTR4$(iƓ,tX\\AX,F,%ru!e.g^RDQkjc=hjj00mh,J*DJ<|4@H;Lx4J0 У\smPS;8jOFaҞhllM˱bR \Obڂ4}[T|DN| aRfEQcҌ۵b$ C,?8 D"D\3=9f`D5zz9 qL Sno vD"Q׶m\0t/^̃>|@UU@q4HQя~rnSE_Fb&QWWOsK:.qQ4u"cm7xQ 'J^'ڤ!b nA3vï|bA.u/r ‹/ߟCC\Py&Mbv{x_SC._'g8eTHUd IjJ?۱q\LOHkshC9S4]Ģ:SډE[JI_k bk67׻{ˊOW0.)BAPif1 ,]e'L*C頱.~v`ѧ(\Hrz0V,r+$el2?$cB]s _Ē5|紙y[ʲ5mKg($!^8P+IE35RC*h4c=FV" D lɒ%Ʉ 3f ]]]iY)Ecc#WwF*:^ OxBbuۼ|cpt\Æ3hSlWV@ZY:ƌTFC=Bl ѢSTdáiŮqsI%bOOċgT&9j^yy{1l&Jyan| yE/M+W켺AHLvچ~8_yZSq꫓\{|Ga+P1UP.|eLsG򽻟UT%cV%?kkF.lRC^AD~UM˹"w0>c&%,Yws?kzH'bT|'Oa:|dL _rZsj:9:y~ >]oA{N;wdt27xQ z1d&z~u B7_\]{ﻏEERhH$B2w>(ӟHDQ,BJmO?MԈv4a(l>n \MSm s>AԸHKaqh/ՠƌ^g#D0mc=$sM7 Um95,Gr:\wgݺV{{Cro.B3 BJ{G?u]+'OvƏO4% i|7gmL&<4.ZaJ=Dڪ|ΜA";Q(;}:OT% 2WfܸqEg.xz*SW'y sP.Hf\@ AcccI|yy7V \+|@it'^X{[?{y|w\t}i>/KU*F_R):feZRħEG)|uU -~ԫvQut1 PG|Edy6yx4,5>=^^:qDVZA*Alm1ZD&M*Ν˫JWG۶kxyxXv@hP OrQ(C . 6Lie(XDK+XiJփ^ -bjJ谼FOXR?>^{0xDZ&gfd-PHDd]eU vsh5Sqҵz5 4#ʚ5kKyꩧp]X'Lׯ6ˑZ gxN.+ @m}v !!Kl2oV*Ө܂wutaZ9Y]ӈ '3Fn)EHF͡'^8foo>vDA"Y_ϏQϯJlPsGj-1F||<FRzF͗O"#UHWr~a*M< G8ǥ\B]]/"iH> 2A.c!398nq?_$g5;os}qs ךGhxBYҿZ$rhA!ZEU bw>D9@@B~XEC]3*97sZ ݆u I vډ'1ab=/ .$a[6< w/vΦl6KcC#mCq.ׄT52M\f;FUqoNǰ3Yv>ѣ0ҋp2HϲxΟN奻 FĆWiB eZ"3xѷIcX}v:PդL: L#᥻aN IDAT慟<7U(@L АJbZg/٬˓O'bQGavy|8xry<yYU̴4>Bi©^_YDo9s@xlxv5 '!Hнjo<(S;/ON:6555|nMd2(8򞕮\%:(}L?`կ0Mx<Ί+xG둞d2˙>u [aU?#^W&v G9hszQCOiXE; Q ]Q"!ŐYwCi&SF!Nog'lF4"(deRlRdY vl,h1̧Vup)7zrVy t!PqL!^fkӺb 6:]td8ops9PBz;So}ZCFsGk{;}фP:,Du^x kRueXxWyT^.Api6,\Cx.ַayH"HNw_Nu|#L'V0' 秒7~T?>sYݺyJPU'8 QS??Mb vӑ#]3sy Y TQbPΰQW u\ (J%LmauzddY!u/<K.aE5K"D*P*'U8c]ztd]4 [GM>A.@S,6Q lW wSDjl.r3 O*&O!~Yf1~xz<ǧA,c7n5U5%xwQtK)|9#vէLap WHᨵLq<;nxˮF󸝢O#WCƹ{=s[f:Uz5[/;Z9+XώG"8V]7I7`646ӡ"ԟy>/cwy4k:?Xb^n-I+lbgDzh ,bBϰIH Blw֬c&֭ʈsO//dҫe9Fv52O#bܫbUfZ!6%(Z@>%6t Ѡa&\p/2.ո'~]e]H|'؎K??O UsXnY8<(, V@RA4Hjp h28P5SiyEj0)TTa\)y(:6lȣzH֤flSn>UNJu"bWN؍۷_UR^ujO!K/d,']t f-0R lX|2yJq_Qyoq+ӫ`ԯ"Iƒ%G5+71N>dV\봷3z,{ Zn~1y% udXNxu]\m'| QP9lJSo'4IW(29nP ³U^"LǷidǸ5 4/5=^x"1T;QzO>~ MUUO)hTѷ%$hN5c9V^lWp/%nT"j;>),4H&z+gE[OE4՛"iI5c:.Gs$ #9-ڥR,/s۸slwj yGEb$ SM*ts݇$1] 8,<>H,ƧaC],ui"d,Is ˲Тk2Y$Irv(UhʳK&f̰tttC#aˑahmmu>[:1yF!U!S(W7yM M-$JMm1måa1-4 LQN+/;dwc[RrA󮱧+ic[ZZhCNGo_/J9UB \"4A"4m?OSi477Qy=4C&0 aDةig\)SJN#ʫ$X 3g! R5Ntr&m1,RN&Ijmf@'$JbI b`8i) ް2mZgoѕ)=R[Fc}پbFHT SZh , +7_}C4fcbeQ|]>Fn./h+Mb|ãSߡ@te&Z?DuQ=ؤRIUfCHI}]OήN Rk%ty׬_ϗ?{~vn{ A J:'܇at1c.x&j1JE/3I AβP!$|˶{,V{]]mtHwٌ~~a up~[Ztbe͚9dmʹФup< v12Z֝ǧzpe†CG~~r+qO5\_ vIۡ/+Iδr&(k8F_:Xh4:e:0ͥd'} '} wzό?Ɔv tw!6EU<҉'Kyk;ү;d̢nJ69_3g.HmM;:[ǎd i:Z?&q\>Xソ`~AThC{8pݓ83xgcҮTWq lXh,A˘:;J #I:׷NU8.W>*o u`PK>Ύ~{=HÎ[C2iTmפq֓NUcY6o{%K7eˎ#ύ .a͚\t%<^S Ə5v꫰e y|+U<[/&җZfϨ$\}W_v%K,˾+{J%~Xz%u AcC59W#A2Y~UZ[[7>[׋bs!jRc%sݕW`|\R$Ǝe465:2$IoxΎvu@3ZL[?mDwG-یE Z8"͚lvT\D2Iuu ]xq}kuAV?3cw!>0 y1.Ǝi1MF,jIb8CzHLd'7Ԣο;7Qķ%ӄ{7\ɸ1 @}S3gQW[K"vlƦE"er~89ƈF5MK/<z!:_;T2Am}#kR_[K<Ƕ-OLH"#ZLDn1HOK'|?s؟ 7x-~QO}]U5uN:mQxbNo&G;3d]Ӧu[Ń;f\ ܘ=?Ǐ~_iii!UUUư-gsPKTl:6/fq}ט2eHޱnZ_nCgfu+/"44`;Q8AteHM1]̬Guu5 ?HpYm+}},[W_:CX#5"dsYAh.m3z6uÏFhhho8Y+QzռW2E>yoH]}mOЏ8=h~cH)il7aa\Wz<,ߡF&+,VQ-BoB. \ml7n~pӭ6\plv{9% ChRJ5k|``|&LSOew甯}m! l_+[Y|?CϘ4i;ۏ㎛]pVZ|6ɺ ̟?g}0y?v$t f M"i_nbF:{L^{5q̙x9昣6mRJ-6?+Uqni>?/*؆QG甯{Rxa֡vœngQ(`t3Cc¤vؘPl1?#_u]F]lYxw(f_ WInc&]F|h4:L |aCQ֘1Vyy_`u] ,_9o!Ġ|'N,);?`oBxbLئlެ4I3ywi9bCs}]w {quHG7Hs-vm lbG3H2|폁"mI),"Fd3 __QgF6Ǻ쟗B O)D"m d(Yү_, 5??XJܫ]7ű_ TURJ<8˭JG/l%0d.WS0 XNן TX!N%;q)0(HT}?<\!jouW-S~s1+uoJRt rx)Z~j211rmƤVuSjܥưT`bʍQ= QO9Wr+7~}$ߐR,+9@&6dW2O(5тƩSiq6} uUZaS%$!!APhwA %hNA=8S=R %) 0n*yPJJ`?T'rcQە;(Ġ@J_aC㏄-T45?TCHcn+Ya&mL)IfFPQd f( UH f$ʃV" x\iH[#)%\h4F,HDa FX{S%n5?RιRz8Tr JoʭRXlԺ~kȯO#[^5ղ/+(W`at5ta~5H^N'[[}SO[Nz GAn晟gs Tv .+O$v9$0[*p_ *n=s Fm H%r"~RuGWxmQ;WTazm3oSؼ_a<<GaJنK3AӦV0 IDATNa櫟v  #$^IZ\WQGVXf]ץsc͋wuud6Iww r]]]|>q*Qd l6;~|===ePUqr\eYtvvb۶/Mk~tvvAooI904bMӤXԆi?iA___q^70g٤ʒhٹY?n:tttA&)I^:;;JG۶Ci}}}E,lycҺ+Q[OO===iK⊌aI'{\~L8K.^{G}l6K$ᬳ.&HmoE!`ٜy\pZ{ /{gocᦛn*pn8^dyo[L.cs9<<r9${.SN-rtMX۶99餓8S#;rmimsUWqWr=Յi{~*{ιG}.29N>d}Y?`YT/޻oV,⬳bwq=ܓn)%\}{\yvmCf̙玔mL4>S~7 N=TfϞGy,ˢ/w߽؏n:::,y̚5zLd\}(ꫯiV~i:,-[F]]][%h,X<]wŚ5k+袋8x'?mrUW1a„"Vnz{{mK/3grG_Rkr}s{fy7 ˡWjK.׿5L.;O?\t:׿u&O\ěd馛Xz5eqiqs]w{JXh]t{.B"H({J@ڵkky衇yĢQ4Mcɒ%}E裏O.5?yu}ݗ ]׹Yp!UUU~o99/V=ݪ[}} RJ)%TRJi+u<%TrRJSO=U=cJ)֮]PJ)%PJ)ϫ/C=T)ԉ'٬Xv˕RAm ^d23TJ)}M=J).]8 n:R꣏>O]|!Rc-ٟW_}UzjÆ /:ÔRJ JmWJ)u 'J)>Cug.RO>_Wo,^GQ]=;պu# ER4 wҥ+PJ)5g /(7o:U6UJ)jժ\]wݥNR}}}j֬7<׾>3 0 ;F"*.q;-1QxbbTΉzrNvc&HĨhdq``zgyvf0WX]]]W=\}_iZk]hK/G}Tkussu]7m3kA?Z?Pq<}ŋk^pkBk֭͛[{=Ǐ~#Zk}g駟w_w*o=?7Z_/Z+Bhnii֭5y}]w1{w}nmm-^7Yhjj*s_.\Xn彰m۶Mwyg͚o߮_u}=?]>Z庳Cwuu7U(e]Yg{QGrpAN<@jjjxصk'p^pD"=PN,bժU3n۶[āٟC,}vnvoqI'os)0brCeСr!+۶mSO`ɜ{ضͱ˭ފaXѣG3l0    Nxx<ΦM;={6s ow8>|x/|G}4k׮elܸ3<ߟ?08SXlSLaĈ1 G1sL KVX-w$ ֬Ywˡ ^z)xq=ztw '?7xkr90vX.B֜uY\{|v?ϸ=(rA,aPUUŲe˸OZX7oW_}u!?~N=T^y,Xʕ+92d]tJ). .]ʍ7H.;冷~vfAvdAjh4Jcc#~;7xcFw8 rQWW iXbg˖-~*-ꫯH$:thACK9+S>֯_O<'9{agԩo6#G㥗^bܹرgyԗ{wX`#F(~KIk$aʹ/}p>pkvyw7noy;w.| +7=P/_N$᠃Pi0b yD"6l@:fҤIگQF7-ZTSO /0w\,Y… Ruu5\p ,gaƌw}K_%YB!ijjڣÆ _zﺅH͛׿¸LA\JzB^+灞 Bq׿2Bۻ[ζm<+Ql~ QK9)ɓ'CqWf_K_}Qgw}]3nʴi n]]Xd2y?KtA,_פSSSSOwӦMp|G}7444"}*M,⤓N[ok_۶m`ԩ{u;N/2qD~a?_]v?uTp]t:_pu]~=~yfxaI'T3W*}$IOΝwɥ^͛2e K.-9_}UΜ9sx 1 2l0Ǝ[2;=Ru/cǎ-Pt/}enʢEo~n:vĉY~=૶4Ja ּW MMML0_vm\{},^o &GQn[O?͏c8裱myqFX|9s֭-ZēO>|.="OkMSSp> 7|39SXd gf̘14773c >#K2DkyYhNs~ʬY B%?RQG-UW]Ž˅^ʕ+뮻g֭\tEL>pSO=zd2ً{'R.[lxw5j^z)^z)f*ض_sϥ7rJ1cXRnO,б---tAڪ_ G\h BJ_iGK.a~o /V) SP|sꫯT TDO_J]Ι3o۽&پ45H[Wsw7OSY۟/>r-= >vhb_c~Q,*(rtM|AXIPT+}\S)\{듥TX,+Bt)~}-EV:SuDib*Q=JYg,b?>teYEetp\Y }JrɑrE~J/RD{`ﯸTOv^AKܝoJ {/c _D6{rrE:HR@9+Iۗٞ)D6%YSt r=錠z$r=KA ~{}14/(~ѾgJ _Aa@;mйX^PQoy*b)͠ʼnVY2Aޖ8h*W=q_Y0|@I%LA*}⺷}poJ$+)?SIގ}R)/z@ tEw \y}n_qR餾&J's_( {Vj++ Z)JjKg_-Tzoh Re_byKVrʽ*ySF9J(sW߂ʰ>w9}{mTb"^$R91oZ<@i})R2Z,(VbhJshJATjE7pP(h%J**v9IJrԽ+A{Rwy'hぶ@ ;Pb@wd\hR\q0 2zJ|X@;imwA Uz>HAR}4h8v%ErזF -ܻc]ޔ9R8J/RH*dA/&A hRj5 b:Plm/=ϾjoJॾ_vMU ݕjrTY4о ⫄V.W? JS{wC)MiݳbK=W1[.zT B]iɕJ-Uڂu[ȫjVD)Pn_|Fc~ Ӵ`[ u7RضG־3AŤk}IS!>I8葴X}}SBK)D^X*ݗD"ђ@rfJ-0LZVݻ[ȦZ=2A*R><%] TJ#<'#ILe90h4KY[;wlfxh '$'BISJ9OH4 + ږQ?b\ O<)AyW ̏?'RylG*&}&*)i aKP7O( \W̷9>LJ O־Ì0a :MDoif͐aT\!Os=Ph‘*M8I_Q{mġ$&[bϰ%ƕB5Zi Rok&y0HӜw|Zsr`|ϗ$;7fZ)}|h~M _&_Ur˿1\iAJ &viaծ00 %}D s|ha~AKz1\vEv=Hq=oѡ3"E}HMH&~>s.~Ӓ$!.Fc( dWr 6?>G)m+e{{^ՋX}EF+TrR\㿢Bw/`R^_Q-/ qSCb<%Vl۶k}3a";iw 9J+(/\ٷ[Y ^C<֏W%9xʗdӸ?E&u](_aM* hJQyŀl6mM5lD?UV1u=Tl0-T\[_Ȧs$IH8K2t!+\"eIyKE'mW]u;viEe+)g]=VW3Ofu89ΎNR4 ܜKێv$hا3aU)Ǣ+dWKk.d4TϗZ3~$֮]gteqT*>DbF$ 4@0R l䪫BJ9?KK)^/?2>}$?)%w.h'%I Z\ףl6K*.J1"=Br5-믿gy_ /d͚5lذg}oW^y>h%1M,ӟla$I{&k} k^؄F1zl~i;o\><"#u0j]3z4~ V>uMoT[,w%iX~NuK̈́ýsUezj/@ ID0Q# Bl嬼JJ k{)*j]e1H(iPH3]C݈Q?3j1=4 V?yA ˅/@ \>M^JO+h[ (LL4M jMfG KB $sԄ)0 ]e;!^Zk;[TzJB}|BJL΄S1(Ga(0 i9eir#DsPm3\:h?]DЮ$Jfc[6&bB!F1]71GШY&Z7c`*Ǘf_}-<94oo橧C;GxXQ!;Hós҈)9YrQcvRc&3QT}34hTt1UKJyd2jjjc*te^G>泿`¬Gs9IftmY"]˄3F"7Нu)?͛4h,\7|~xx΁byb3^݄m/%8EdHmf6divҲwoHm7.0i~, We(2 bm9gQSj.Z˧79+@MݞJ+E)?*ۍ0L.k#{ٍC {j*F)d 4 >gy씢SʅJ.$ejZ!&DWH̤ޮ1ȥGܬ2 E9,Ub& ^.ѹ>۬YQ!Anc$(%a+G>h Z`?`U l&:9DZ6HyDxC3"$"q4J 8|'hFضMGGGA_jŊTWWK2$ng1:xtP9˶RC2=%p.Nm $\kY'DA.BPL $e9*IR"AH@% Emm34Z"]Da6r; >2Rl4ЈͶ/z5ln&tD @JPr*"2d|fl`*L(85VDyxq+ a2++6A}/\*QUҟGCj(mug+ʏ0fk4|ԙ^l(2~T+_da5۲Q" dIg|絥(vxK*]LɴXJKj"OHc5x-T ^Njl )dṕSD{J}Nu בȐF%L4R`A {Pr)M /,^n)jz.J9]7>4Rkb[6HP/acf>s}?,$=xA¦gk5ZW(2iU>Ԙ/HWd3Y ?ҟ ~v1ڥǸDDk^w1n+4MҀsesj[dD/.i:u/9x!<=QF_~ 'ϼ P!Q%mT ~ W{WUYm#!4s&s~~)߭sBdp*JkU7>_v):>o\[\I8NS_v4 ;:Q_3}7< MxK$aTmMFl t:{ ;}t&5<_юs|흨xwujSd G4BbNW(!Kd7ߖJ3rD=|tvu՝4DG'*@8.5h:tL 8G4@b!KӑP~b1/IAv9Rv2cROv9sx}R6nZN&/C*jCe!9.MfBm:2iַF!3z-:QBH֯%˱VHaG$'j_-v4~O>/x 8D5Xcصy555py|RHV/+Vcv_ 74a„;rr{3zZe7{l޸+Mn`G0iV" 0b;7bEψ|ykYclK rFAŴJEu{?`횕\uu46~!SE0i"H*v~:rZ߲|'6bvH'=ztYD)#ԜR)7-[ķ]v4o#8+TEzvnXO}pҞmӖ<>?_M[M&v$J߹444Ke*RH4Əw~{7t -8dTb(cƏc2tks:Fh3.] IDATsf0b6vu%c}/Ӿ;N O(*)d&K.cօs\B!'2aQ;'T%dĢQW`Bضւ utvH'+WB=q BH)-%Kr/Da# " Hw%c YaHF4I&F 7C=y5{rI%`Rb&K,\q9;vdȐA;SKBvښAd3"(Xtgxڪ*p20Munm#ɠ{ᮻ_PݴJ9+ e纫ƭeL-bTWIgca$U jU-c׮Vl?07pJBU+oJ+V| ndlRƨ"NO$BRVWQX JsN0К_\yx꾰˽UuO7n # sJ:MUU$ݕbq&56oO .(o AÑ f)%>Yu\͚~< 8tjl 0d qHE,n3txW9S7PL-vv ài۶bŬr9lWSD lSBvQ^Px_{x4+Z)vL9H`~0~x?Bs0}-aIc:l6MEhGzi C!K9a2˓цE6c?gСL6bp1 /ߎӲ>y:R̓-[Pad=K#Fik#j1Ll᷿xiӦaLݠ:>Tvq+UFHT4ò ,;x<,iӦRT(y) Zŗ_d\tعMMTRU30Lpr~ȘY%&d0l8m EB_|AAJ̹PJoDv4mfj !Q]tSFŪz 1jBPðygp; u-dW(.Xfz.zL@.,lmuW COrY?~T,[C#GED5SdY9^:述hrbs˖xB̝;o͘1Ǔ`ԩ<싟G!(D4sz^߽=xs1RJ^{N9Fh G3/>c4`Rϼw{G ._L&SP.vy =A%vAޥڳd&_xEx7U2e &Mˮ .腯r<{x(ÓOd釬Z:֯/oڴi5o_]򕯔dN/G{]t'>Ĉʌf}咀oYVế/D"~2 _|qsA˦2y{ ߷$ܹsb{3Mt:E]_Tr;{I$⾜w|L /0RuXʇTItcZ/RU_d8 |%T2l9X,֯u/x/S]]U_&a̙ 2lSRr?S$:t3<苯,I  _{nzBK1|wqO ,g5B0~~ŋ-.Aw0:R~eYeyGU;%3LzBA@i*6TT(MpATdŮ Q׵*VDU,@wE!d\'-NC>${sӟ'lX֫=`\TR"0jqI# zd Z}qiSZx|6MH[(ab@’mH$@M,#L⢶;ۍj=EEK_bYh;竑._d|a|6s@59@+u|"N!zj"FyS~NOD0c"Jjfv{EN#sX ?'F ո5l6AOF'fɱ%R'Dd<׌/$S2ENiY,yj/r aZbzUS -!z|e#m$飖_bbb'No|yTP}Su~z8hPl."%gDb%XpP=V_TZ ~3̻7):tkdUU-rȈe"8Ј"OT-g_9pFhbE)G 2zٻ=>hGY:'Fɮa&A`ÈPdcTrˢߢҖYk#Um}&󏞳XbZxZ2uϺK=TWmWUMbk3v-F]φ2jÊZ"ZJmոLcMM]T-mc=-2^QW^jK|w.ZEDiDGkE׻6&QWcDV~5BUzZXVw5֚ZjcR&~2wmD%JL"zMM=~z.Ftڊ/D5˽!E Q\WDH1EkSHur_O7[[ A$O:V+fZREXZd9#n9Tk"kc7Dbm;uc3z?~c6OK[Nq"]ZbO YHts:/+[T#d;x,76AmZy/>;H$I'N^xW_***$I|PZlb /^Z4i'H$I˗/nvI$k1oҾ}1cH$I_|OK$ϩAiL??Kׯ(]:yŋK'OV\)I$K_}H~=zTj߾/X;O_'OJÆ v)I$m߾]Z~)8J#?^ڵk$I4g[}Qi޽R޽KǏ$Iϟ/]zқo)I$ϟVơJO$J뮻cǎ6m$=R H~$ITXX(-^X$I߿tQ3g`0(y^I$O>3O=4{lJFnf{<1Z~.W^yEzw,Xp3[n.?sK~_/S?Vcmj=m[6I6,HeeIBKtAhW%]iM0'ࢋ.m۶^3޽f͚E]Daa=@(OXs8 :"nJvv6iii}Q ̲X,,\={OqF+))aРA 2˗q۷/?7fʕ|~/U{tс;w)Slfʔ)rҘ3g6md2'~zz9t .租~b׮]dddмys֭['Ȯ]}M/99O>9sɓ_߿?V"??Ç yWxݻ79vZ"%%ɓ'pBVZŰaXhׯG$ƍGRR;v1eee׏Rvɱc8x C%pBK6mxܵkW6n$m۲uV6mn[n ˁb5Q rT&|>ׯGnac 77]vvZڴibs 65k԰OiƴN }$I{9Jz쉿γHL8P_|~)=zaÆ5O)Σ_BJJ ?֯_O׮]Y|9Geɤl?C-[`2矙2e .+ѧJīj'`AF *?m'|BǎYt)3f̠3g~z=o@ǎy'IOOqdffR^^^C5xT zkp8?Ɍ3HMMvp88j~gv; ,ࡇ"//Sb2(..fǎ\OVߵiӆ={PTTyGk:t(+V`ڵp RYY<|`|XV*++M 5 RČ3h׮/Ȥ A~~>sEEE5 &@_ވ[m#GrwrmqI#<ªUjiXxט5kr5ھ˙6mv:wʕ+5ϤSQ0Ukxb6l@i۶-III<#x^ 咉b]]%*g梦袋ի|Fz***Am6)))56Ř1cXld1U/zիeeeu]|Q(=vͥSNرC~/%%.ő#Gdb>lc l8qⴺ!11TNʹKUUU HZ=`\qv}Y~>#3m4>C,Y$IӬY3 (,,$55UӻH ʘ5k-b֬Yrȶ,YoJUIII{W]u~;5 vNDx<6m*s;wviժ[nUKa͆fc„ IHOOl+Wr˞6ƍꫯr7lg %\¢EXp!]wקH^HϮ~~m>#fΜ)K ֭k׮ >W_}}iӦrxѣ7o&--M.IM_SRR]wU07oSUU%sqq|0׏gy_~K.UVx7ɡ о}{>SΝ˿oYJtVSRUt:yw3f ǏgҤITUU!I2ю|vˌN{5j_>;wСC4mڔұn/X֭[v}HQXXW_w}K/D۶mپ};;vwާQy j xhݺu #F0uTgǎL2]v1rH GpPZZZC-GєjGnƌnutЁ~+G Ih޼9Ürwviݺ56l`ܸqa69s&/!aꕃ e?OL2ؾ};SL++|'TTTP~}nf{9<_|=M6UâȳQx֭['׃ʪ#LǎYv-wN,6mʏ?7̅^xH(96T,L2GDdw]+!lQg5{}hhU؁ K- K$ ^$Vm͔G7|ܹs1FmxԚu4=-| G5U~] /dåuX IDAT=,Y#Gpm)XZ#>(Gj҄iYC={ؔCѪ_%m1sDH~7Kt4lFDFuGADV˨IEG%:R:\_#2z6S_E&E"hϣb{~S{x"kt?2R;ܗx6Waod|V=r9ܟ~E+H:E=@ĉȱEz-*S#Z]-~CdVZH/}v%&hN b%:M1ke -GX"ߏ\~+qM[T&.BjFMDW;H.ё9VjT1J='zjXgJ%0.DυRH*j%j6%ժ?dPU5Whdڙ"{Loʹqc=EK6&" A]adN)FғHd?z8Ǻ^LEv\l?Gj"!\fcEV*uz2ZG[A&-3% TT":Kz(:^S5 ^ULZUF䪵%,-j9~ӳ/b9I\idߋWWLVm[ks}_ɍ؅BK;U]Ȩ W)2FX]dcpb~}aE%Yx+ږ{d,-ﵕX׭.NBĥʎ!qC}q1gLii ^&qCvZH %IqI6oX8!q&UMr)ř̅zg,qC jaCXS-V@8!q.2XśZ-Z."RZ5j7OjJi;vm&Z+ں2b׫K}#wO+ ĊZCZLR{XojIɘFαXƯ_FQ<5ڔPz_[L$T6RdqKt!VpL96V|Z$M*;=>ZQZLUa!o}F%j1zxbPkCjs/r(z0KZqЏ>E!=<aEp\d_ͳfhs(`@:mA1uDidM̕ J$-VLQ╞^ J}KȜWѸ J=GQFuDy")EΩGV$6ZҵQH!F(=  bZdCBB) E9 E"8${-Bǩ魣ҡjfiK(a#\FkY"D&pK3ĪU,,((|WX8[h􀣓Eg^5LHHWMf8[dFYQ7|?2Tt /++L*HNIvQQQAFTv{Tӵޱ$Q&Qj}bܤzBI&㏈49ԓ&Җ5] VI[o=f8Em=ZZk(ODW*IvVm0t$>ij P\\LIIS^^$ITUU"; w|ddd`6zS@ۭXM-VVt*~7˱9FII1{￟v2h`Khܸ1ݻwe˖x^"x܈QCQʈ2z DڎOIw: JX4#*Q;ѶrFp¨ux촱J.J}ӷU Z9zHM%̩? 7kÇ96fLf3'O摇JNN槟~+W^8ط?sKdc6IKq53D&3UTVVl1l6||1T̬,.:q:ILrPQ^pH׋d"3+Q#GG1p@ 9r0Sxt:ICMq8III8SpUURYYIJj,ᣏ>DY̝)j KJ䪅y K6Z*%iKOڋUғb "iZUMqzz\Qg 5U\9=D<-mÄ\_/eQ¥+s:H :6CK]$MIN5ʆD6V1r-3믙?>ͣsNk9stP;jZZ?Zv6-õV;j:hU"jU~)4f5ڳj!EWmMԾ!3nGOr1]=tIrQ_=xT6@[J맋!zcz]\-st`O~`ĉ;3'0^7D3f03ϐƅ\cq}W/3eԩ|Ƃ O{ p#`b|*++Xv-~wwߡgK0ͼ{p+IOOgoqHx~ MqYz5ཙ3e%,_b&q%;CŚ5k/iղ%>?L~-p˟̿ r[C.z]˯?Y^Rb"=Bk͹mxW0>j)))5*vI.":hW {J݆iWn$!&BSzCBi+<^}W |ϤMɈ*/pIzs4~WT͈^a{SkJz7sǏgԩ}ݤ/P^^Z5]شi3;wt޽{9rſ“|7@6mKx<8I`ldfcyyy8Nl6ۆǟ¿K,!9%g~E8q0zh5k$I\}Mo:L\}hpom^z鯲N1++!CoQFlذ*n=J `钥4/$, dlr8l߱"okNYY_ Gb6MR3))IKaXt(8>}tB??>& N[tl.w}nMNNӟFqq*a&|7p$&Q^ZJjz:~K.Oq\V,|^>е_ͧ~5kڭR0@VV#GJzFロVZknYx<8nD&MHIIaܸPTTL^^5j^,,f3HA~?!)juV)PlX0jzl5^{-_|wq;`2 N(M62ٸ_QQ)@}1g<**m M̙3sg͛ǬYx晧c߫yntԉˇqܤqԴt NP^^΅]RR\dSp̔qeqW?t 6ln1zx={2jHݻ_=ӥK:u̳<gܸd?߱=7=FAA,htZ G/Hl#j"kDM5ux\ #s, w55l1"lzCBs4Jz8lXtUb-[RZRLc_ƍ9p 6 .b?G-ؿ?/d2egϞ=tԉdvͶmة-7g͚5TUUUK_Grr2ϧs(\.|zllt]fr vD˅%))I~(++# bq&9͸n<VAUUl6˥{/ b6q:L&*++elZw|8NnLz嶓x<|>6քj ϭedr\D8$p< b9xDpU0 ukRX}%ɥq."DAXEjbwP0R[rrj c6e"n7nwHExyQ뿖%^5-1[i3*11rXU,g"+h8DSkbJbEkŹyiDZ4EľB/YS9J2W5'D6=MQi!HPQʙx(C[F\OEy^δ#˙T]:&XZW=쵌Tj Q:d7{IϘ7HtL߳TI&Qj"PJ|EC$ǩzL (NhH{"jLhީ&8FHĻZ02_jx!WԉZ!FՕ%V^"ܲK!'$zJR Z."z0i[$HQՈ,zCK׭3jЍ5^{m<ƖvNGoϋ&4ꞬsHm d'RG/r:uh2sBn^n#)J LqF Su z OP㐕I=WD2I&" .E IzDtˢhc[QDVaTgD\|CRb5b{Mk l'zgLjMM OD -H\lvS!qC&@[##ҦMx^)ܧdExۻ)()>qC`LrrXۻ`j}TkRShڬ%!!Cp6 2)L8cۖ?r &A&ro\|IO2q$EV4o*>qC?'8rǏsa|먐ZAPqٿo9G^N{Uu!g,K5wq`)oLeDv2l4md2#I!)I p$p$bnHQ$qoϾ{YVZ?%šRtJXNYi ' 2 ÑA!eb ɋC(/W^Lؾ_=UW_CUE9&8l)XAS{x'L&&S˦Z'}qd K}>BJքNd}:$IMHKO J;'NbаaCV+Gֿ)8민ח9j$&II̞ W]} @--`2 m;j,(I#Gԫb~{}>TF< jh().ftq~۶ԜER%.^3ӨQ#|>yyydeeaMϖV]qvQUUENN6oHUeIďЇ-ɡoyܡYIRPvA, n|)v& 6aq&ȯWTj%G\ 36[ªVǍW$SRgJl5߇՚]w Ѷ];JCYD&6NX݁vz)gDFz://ox(ĉs :;äIYr%>߭ <BjJ >ouUCxgx<9u mڴpn`uv8I"̳}+.X󑙕͌_ѣGw&>`Gyl][cǎʫ`i>KsaIdggͷҧ\}Uʫ3вeKv;=7W0x`k,v 3'm˜9s~/c2)-.b4Q=`$%9!RAVk%9TT5$0\8"}wcǎ宻3OrxYpk.]}vl݊l }rڴilݺ`钥̝;ry{>C"jb1͜((`ٲXpSn{ᬵĂ`]3f3UUU5j$nc>ʝcB|9jݺvymwM4>yfsxlv.RJKJة߁_~ ҬYS|A֮[U{{eJJ2nT5jHZZ\/qP@ ٵ)T7 ;Xf:D/EiU~?NH`vQ~}n7`}^l6OFݷĤ$\.LxS~9krs1曱X,\uz-q8kcPt]|y`3ɾػwlW !׃ ~:*++I$hۘ>}ެm#Gi߾=%q8{uaܔ$Lf3.I&yfl;~OQxlD?OiI1erJJEEEg\.\b*f3 géRRRj<!V+Ǐ-+a9΅dI>7dXVv~v^5?ł,GUssAL&UUUTUU\^ M&M&|M$Y8P% S)))˦LjxD{|/Ƚdv˄$z\.pCN=c8ނ@Xc2\W]2Vp6()F*=!Gۗ,KZZ~_ܬV5bbXE8@8+r])ne>Jbf,KHFX2_oق[qCW'G)Юk!JG5@  2%)@ `@0/PYYFv\8!q@$[MǀZl6S\\bʫ<!ݝ'"^~ۏrQQ w8!0D*S"!ɑ&I1*xL$d'UhϋllzpB.<6;:wEr )"OM5} WVFdJkC 6ڎڸ%[g6jbg4j}[=_mǥ/̉I޸"zł+|zQdd2SXtݻѣlۺݺq~ǎg^˯ʛo]N_&jaWg9%Dom4b-Hltk)7Fp(ml-B$"ENC_!bm1#w~k,jk#5%Ts )ul6JaF"A->'O UTA|vJ^p:;vE̞ Æ $1VCŶ{nh޼9J3eڷoOZZž}8tf͚ѤIS&ehٲ%L&V\YmHNN&99;=]l]#mZuv}w[[JvI*JK(+/'3='kg!D3ؾ}; 5x}^232,/lٕӸqc-ZĞ={ӧm۶`lڴ.]PTTDAAs%.%%%1F^^K.^O>\:tc֭\.Y-wA2%~Ţjm;\/JT]ULq Hv&j*ONT/Nuq=SOP[y=A&+gSS)(:3ebJ~W /QSRT/X\pΦQFrUW1b}Y}]Ν˲eh֬{bDz~,X@aa!YYYtЁ?>}0e9s0i$E:GKU=ȴ8z]PS1ΏR[jhg55ZD^OueDR]5mȈ*Xk/!:'x#9hUQrq\\zL<;w̙3iР|8GCAra 4ЁT^{5v<@4JKKT5ď?Hy?~<~ʧ~Jnh֬nOs뭷r]wѪU+xp8^u ;vlhY "m+q+Z6xjdJ8 ZqP;$T2ͣAo-Or"Js5_Z5#$rz|_dDVyuղj͓~sE ' s'V0+I.C=͚5[n^c…|rzA^/&9do&̤_;tDk{޴k}.e#$A;NrrrXd n[X,9R(Eqa+++9|0͛7s! 47`ܸqȑqxvE#}bFDo齧צ5CDd|ZSצ<(mbydb+:z05-¡ծk8ԞӚw%#7^#}ۧD5S]q! ӣGڵk͛{ }rjppe…;cMrРU3$r2: UUUoߞիWsN91cXv-֭ /rJϊ+0a#Fgj֬YAƍ YHwEhq^ލE å. FUgim7R{JOm *58k jڮymdE$ڮl.JpҰaC/` )Ɏ$pi-rWǑZLbX۷/\r | C ɓ@۶m7nz+YYYdeeͯr,+!q".acȐ!ߑAqeE9z@ lF L!d8RBhۈʪ]bvZ d7c2b0dffIz'Nxɑ=+Wm5a¢׮M`iˬ ?VC."1?VԸAH0rXDR4rH?jkjzꄸ6R-)nrG"xKSQNlRA+qH^?Vc)))5l~uAt:e IIgNNN U_8F'##DrQb)N6FXlmd~cyngܝM*-SKSsԫאz̥͹-HOJ&řH3<>r w}ڞVPⲴ'N QȨ 2 BMTR) oPj}[+V-w]mZ 5tz E8]QѓNl߈!"9$l!pf6LnL&v]qL8>`EZT=Yo-M/k9(%GjibF?@m-o"es)qa, 'ODHoR͛ z1Y@)aǧVR-Y'eUZpB{z_pJRND М7#lQldd^r=dr1o}:PW^ysRPPlfر 4on*yɓq\f=ʵ^ѣCX , >,Hտ֯_/gGp lٲ1$djQC2d… v;ƃ>b2|pof/#F`6LAZ4miӦ8y۷G}K/€۷뮻aÆ1rH6n( ?~<| fڵkׯlfժU 0Ʀ޽{SPP ;;v"4w)ǨE/ IIILYha&g`q!|Ūlܽsh޺9پl_Jؿ{?iiDLLJJJصkw}7ks=#G;CEEgk磏>wߥyrp߷mFǎi׮ѣGC$xNٌ~͛7wɇ زe +J9o<-[Vݟ/;ww^, |̟?Sɓ'|+̞=x0`gn3uT TjzƍOX,JJJX|96m=..jre֬Yܹs)..szjz~z SӧO># /B d߾}oߞs2qDz)ʕ+z,]Tnl޼%KdDBii)7of0=zs~?j*Nȑ# (7ۮhދŖtlWgԥA? nÎbbмMs2s2ٿk?>RZTJvH%t8Gnpxxѣ&L?dtM7yWCuHԫWtr:lܸ ҤI|>W^y%'11={rd-)I fY&XVy3FJUUU{(){SU.QAFћ1Qc$&&9ob\LF xEQF#""0>kmU T<ꪧ|;vop ,N7#bŊoGe>s~YR_̜nEEEx<^/k׮eѢEz꩸n:|>]]]ȵ^s=kƘ1c5km6N:::Xt);v`޽?`ժUttt?ףi7pQkO?4v0?fNnV~X$3~ <0soǮ]?~<#Gd֭\~||[ߢZ&Nh! Qq\~4McҤIA}]>nV~42*-]a%t ZL/2.f͚ł Xz5sI&1~x:7 UUU<裬^,j6o̪Up\ձyf.0k׮sE4)((W_?9]vQ[[ˬYp\_ڵkQUo}[YE~?[n38Q9r[DdR̖=CEE .2w\Mƍ77̮]8lt\^o_;N ?Yetv_ȅ-MflK9px2= 9Q'b䱸\.}>q#7yc'%(O^}uttpWϯk!C^t:p9~z~i.\.6mbذa*|&znnf*++-;qqF|If̘/4W~5Oee%;pIeF֯_믿W_ @8&??RKpwO/؈^x={ ;w.O<o&ͨJee\ .o$''bKå%vDj=>( YYYV?VX s]bU>t:ٹs'vw}7999뎎c /i&|IL‹/Hkk+@Fu/on***ȧ~ʺu8|0@ yX~=7n䤓Nt:(,,fEQ,x(//GUUE56`0yꩧhll/G4233{̲SX"dRJʣ`.Ye1qNHvxJ.i47'O8pᣆ#JBfV&  M~y>ڀ}I Pn`0ʕ+ BXg}_*z!jb>3ǛoIaa'^f w5fI馛/`ҥ\pdeeQ]mB!멫/Ye32--- ˲%UkiYj?8(EGG'Of\p\wu\F6 r]wQSS{ڵ+WtROGaҥtvv@AAӧOK.a 3f̠گ?<ֽ~<3߿̟?iӦ?zj$Ibذa|Gٳ5kGYy晌9믿 /raְZt4(JIu_2i89HfT<4i }ކ$I%u׵C5SA@t~mDHOWMuMJnA.dd\lq͍̜4dI D1e-ZāL0~z^{5F ,FuN|8gСClذqơ: ,{wH$̙33gnEQzϘ1UU3f dƌ,^7+p'r[RRee%vϜ9sRru%rcLƭcԄӦMsʔ)x^ &NJ `֬YrpB ͛Q}~zӦMWƏy9󩬬aÆQWWgIee%x<K3gY*eSr]- /Ů9e^O3?M&$Sg!D^Kv~a"U }@=Qts"/U_a)aĖ7$,Į `ɔMx6]^j"K39Ğ9&Ȩ,˽\\cX8׭£A6z={]cK۱B&ax˚'[9{,IUb`.G>~LEѠs'Z߮^~5GeϞjn~&Rͯ/NjlCUȥHTp,(ӭҟy wZyA:gW8(. |Ǿrک *0ch 6؎wSLtFt%ʤ˝I=ra!w7lm 6p-"+: Q@cqn9ES'@][Lw)L)N/03`ltMؑk\騚 9\[CFO9[),pPWtl<~ۈ_`76ry:d WԡCH}EC)i4 dU㴹˛ vh"hnq!EQdQd 9$J4z ] ]Tw" A@8(EE9AAh̀$ Ght2]V5b.`9;Wh EuY &k[%lt1(jkF8Eok~Ե6P(Zt) w㐎 ecr'"0se'nh A5 j{1^ݎ!i;]N#D Y' F8#%YLTD(v갯@{3&|s-c8gNk̚keC<&Bcܫcƣ~(g.#%NcGWPL4%18tuȚQ$z_{bT 7 x\"۫hD"ƐTtp϶.*3p9EtMgLl@CS$"k)dBE6AY#7_v14e^|0$]˞wҖ&BF_v!h幙7>HEaTi|e 'hGvd87>f YcNT}/DqWzT:' j"ʆ\:XC`$!W!"F=6U'V F44PUG/9nHP6$ eC6Y 2yx63G粿)aOmzƇx+6DJ˚f# "EqI FI>2NUGV4tt :!Y)&;  W+F $I~})GyQf.$Q.!b?ZR[0TMJgZ Qt9DUEVO׭!J]4W(th-Ov3bjג#_**'!TM;(3~xyk#MafC@`&"FA4]'V9"=u=lL.WΖ}lقdy$t4pJZTvLIsg@Xw,cz(aE#"k*=!B0l d%A`ƨ\vbOmNI(Dž$#*/okR3.)#yqs*hhLƝ:km n(ň z0aY# qy纹z^SY)%(k(-C*#K39uRa Dd [b< wh\r|A|[i [#(6TM2\aFv|7N.psQCj|:a"cGH6N,SNm[U]τ,|A61o\>E9.~98D,>n0ɒEg9P7;qI83n ?i8%s\4wi+NE(GfDI *LAO[hp!8".Ȓ X |sz19N;#TyQ+(YӋyyk nfPQplȒ gϻ1ix6fY#ײ@1 %x73ú8<fΥ<)Ȋtdg8pIԴhd;qD!* =uc #K3 ]z,YBkWw22 qòY4L]O:wr|c|;tQAuC$(kL!? #K3X剷p"f} -y+B_?'yF²7ST™.Q^ࡪoaBS'<Ξ]jvNUC37Z>z* =?uyVΟWBP䱷pBEM*mM€I K ':&m9>:aYj)5vIBt.''~F3Ҙ8$N'==jdxsPUt=@4NLDDzmS49EpKhN_&Vz$T]'dyd9[׃!醸F`De zlQMo|AXR-}ԣ+1v1NYtQi [5>N\ȒL>>EKrlEg>+ 3, (7L0$FE8}j%.#npd%#mAjBn H3.ܱ VG,;:?@P1}r~E\ f5Pնoa ȄS& +:o~ڊCaT| NO~Ӳ1 \#xbq])FHXѨ(GD]3TF͗ݔxt0M~j| n!dS (:3֦.`RL @HV(*C=|Rݍlۉ(~aoSE)Tw:a:#o5Z#x\znGu߇:XvŬrY(rR͖#YVU*t;1nG3N@5NcHMM{%'RTV6fSGUD#>[' mhaYT5Gx$/0M=qC\|P6}ڌ!pbv ɸ,CW@&Q94M㉷k8E2da"FSW RL> )L͖}†MB_f0/Uur ry:²JH6E9.@M4]`wm7S*8'ie(OOv~2˥U  ! s3,n.:,GUV*:@SDTHA gM/;(Ǵ\CDD(qbZen9Qٰ]1t"4wU%' PT FsW*nrj>m&dƨ݊?$?>i&%Qjt#E{kw,-] n²dYQi S⣪vg)jC => ^"n+M2di0eP Gx}{#9NDusRYE h  +TDW?BI}u]h#2N@ v d9 e,eAtdUAV /,L*፞&Fd5MvZYV֝.>t'MMM}-3 Sf&a[L8g"99=)!G4|]>SVQWE0$Q9hmIi2ʶF*Z`'N.?4*I{_٣!"qJl`щ-"%yO;Y. u;E:CT77G&) a.=Ń)XjWwTZ%ve𬑆(("OaYcѴˀ{rN..IK Y3LeI&۟5|fr)"<~-M~*#7MkON*BU i[Ȁ%mKgqJaޯCV O%x\"6pjTMk/5SDQ5ΚQʡ73=>Ƣi%}sN2Ʒ 7y6Ξ]Ƅzt2umA[6ƎŹ.TU) Gft]gfQ,eVPZ0Bp!Ϝ 2q8\%šj&1jJ.  {8ZBJDfĘ45SPOKC C+Nwg7Y^dAإTJ8-pH"aYEt2D{A S4wYI#-$$te+!#.aӻǐp ]˖ snGO&pGݎ;( "*}c(f_})+j:.P e8DQ Da5*ļ0Eߐr<2.(C@0bijdC1lf1eQ ba]"_EUdN7'㧧a#+dhmleب ʆrp>~zĚэX$ Ê@Ga@zaHEzi}Aa{.EV4ۂFmH;pE%:jpD zΔz5i ²jy+1ܑ?:ΫF4Zn4%cb6^(NCKWr0^:_q>t]CD@Q5b=̄j4w~7PbQf2pDUkQDs@4G¡/?}ij:AˍW4!|N=/ teL7fIGT†!~PK`u4XT IDAT}i(a0M!3$\Bs}#*(ȲB'[LA ҫh wW{DQ'7σ 9攠DB{<^|  fPTMT^ )BIz-^yOg$`@)\阢^f)>pzx0b9*'Փ=>}k^Gç% Uϣ )KS&Yu3w}mZ'ZǾs"))@'`Hl}k4%=m *ddf1e<T2>qAG5D $ 1vuA`ɧSsDB~N'8g~K/Ae @dĄσmo&m>UO{:z_K z &(bx2Ñ䢛+XEqg2yɩ q䳗Pd&_1t U!`R3Ʈ 6M Pu2"GQ4\`zHzhf*Cw,R/e b5FmƦ뷯`lm"0>7rEH*'P1#A,iLRmѼ_&q3%EQPXgX0`lhu9Dٌivjě[u%"GatE%QDdZ(,NŸq:`lZ7qeX6v[E.rJ)** #"3O'?6`76EU4K `7"@qku ;;[3ÔI9T-Fɨa hT9: 9<߹($IG/H9g;߷DLvٝ_cL/Aq{qgoow 42 JѿXd%۔D)K@Pb` 0qTL1=8}?_Ov=R!uOt9}`93x0C}L'igv`)պěklLK6ag& Ep3NdD1%"}]4eVptoY~ a:4o;AzqoWՋ$I?_4ckӦMwj1ICC۶mC4zzzY}%I"''BΝЩ6.DUEĉ 9*:&@k6mСC##p}裏2uT /~ ^yy6mĒ%K/d\y啼ˌ;M,.åI$qOtnҝ[*0J"(Cj-;O%MgHv`)"aCCRk+5'DN$̥&nqbNP(_̃>Hkk+{-[l2w"CGV3.1!8IGwP!C2~ =C!D@1x^233{]|׿nSN!''/ " .l2dG駟|38UUyW,"v,@q&vwdK4t}.HW%1""TjI⭩]XxdLgwξxA@0`q444 /aÆ|rr)RCȪA !աPe/=un GA3A9  iiia5YGW\ɦMX`MMM\wuN$4<E;S]Rqw8];Ḫ}$<^v7%jv.y xg"kcHII!`.BKcvT6XM:!XDI[:.D!0&$p\+%޸q H׳q]7DkNf㞚 ^y]ݮa&_2!SosRIۉAi58 YTblE8$u$kY^-ɂ;iUVQ#AD   ۆzTXeO._?nIb\uUL<^x^z f͚uX~2|p^^/o&C `ڵ:t~#Ge\wp+vI:}:v@$eWH~Jkg?g8;=]$da2Dmgi")7QN"ߎ[]rIŝ]'L= KB *èVTEJRڪs~;$IBQN'$iZc$).q0Q8y]&2,M*NxLzg2dQ$BJɐ]D ;;4hT&b.TJpٍM2u$;j:T*2]*5Od:x~SdnFNAQ!JD&3ۋ# YnlE?VwMH2AW'T`TvUXb!}~Dv ɤDcߟ^+9$ZǁHLa#Y%C:ԠaM5t@ͯ$YL̥9`@K--T׷̞{ijmBqPa"*t:)))e'-bI?T}Ntt 7B%r*($JJ&l?\J_Z,w6Tj1;6H1]XՙbcUE-B-Ǧ:%\ur6lG}DW0UUɡ |}Jܱ^{ݥ9鯿vc1‘`2؟uJ`,]h .,۴5LeGIW8^ʀ\ā'.]ҥKiuNMh YTH餦"OWEol8TD:7M& }>ɮ"c~d;)ϭT2]W'u;sLz4ܐ#e7Wr?I(TUMR1B舂ȑ#GÌ3&-ֱ NJuN,Ƀ)ퟩܷcwOwztr?q 7I.t($IGe ol`+kGœ|.tMG&ѝ]}]u;^;Rqvlvv$t$yOǠ<u@]_A?xӮA~ +\Qdٮ |3?!+2W}*6s#,' 6sN/X}KIcз ĹEm7%M3)WR"⑮UU;5 I54Mcsg*i38Tkl7O]:i^q.vrٕ*ӍsIY:MANj {%E^~S\!98Tsjƺױ]ID$Y:Dl'Rc}n*p3駟ȑ#V8*OTnΑ>~9|pڪD"Ik׮.eJ=kcIvrkWD!СbLHD:BAQn?Ow{?aZZZzI4gSS۶mc޽q$?>m6:;;@ ٺuU v~$ Z[gg'555G_XjkkٶmСCرUUeǎSKK ۶m# k@(J;-Yȑ#ֵo.IXz5+W?fӦMp 8p02[tCYRMx٩h·~޽{پ};~!,*H"fP(Ȳ k}$}xƍ444X73olld֭;wP_uz(5~A#%[̮w_@=UzdLLzLj ~vmFLYE%CJhmlErr8P ^ ?o?z*^z|3p뭷 e2~Xr%^v^JF>,=/f߾}~,_nc\q,_R w/@e\.;vK/୷bڵPWW}.\{<@NN;櫓v~0w\jjjկ~EAA ?I^7-]~7rss /ϧe˖pLʱÛeبa*j8ݻ0auz_|ȺfN{c=e4'|O>+5ksM7:w̛7EYe7$ xp\,[G}+Ve<'xb4440yd&L=Cff&uuu?f…;[nN; Qٻw/g`ܹTUUYofGR:ٿ?s5s׿vkʉrrrXnfbҥ̛75k0{l~iV\%\­ފ+Vp{zz`E"1K~+bi[[_kƞ={BQm~r90{lV^⥗^B$8 ΝkfNAǂܾ@Ӿh큐3_K˱,؂S0l:S_"XD;i9\x<hS`񌭲,%''^5VO,4 K^^UUUL>7|W_}k?ϼΉ'7L}}=-戢U<>|+V$,7k^|B+..o6lZjz-\ygm٧6o̺u+x饗,2w\a6Ö-[8sp8qVI At ڰ>n7?Yx1g}6[lꫯFE-[fݟ(`l&.} \En\v|ƃ0 K )*+=mncبaUQ\V̐C(,eÛzC46ԩS9|08|p/󎏢s{*!@ !{Q8P (*P:)_? gWEE=T,"H66#|fwx-32ydfϞ͛$ݻ?at@QQGwFȑ#Y|9?<+Wd͚5<#|4mڔbbbbp\=M4PQQ套^+spr>|8mڴQrvJjj*r `6;v,ӧO 'P^^Ό34ɓ'6l0F_LV6^s5,YKii),]Tܯrtԉ+V0i$^y&MĔ)S[ӧSLᦛnb̙гgO:t@-[`{4i҄3gc%s eYq1n8LmFȞD IDATvv6=bIDee%.Ke+ մm۶u& Я_?{1RSSק`m۶Ӈ+{^zE5v&q#p]qFhAtL^5J~ɿ9lvzݠMm1}>\.n7Y( 3f մnZyVee%GYfJtbXp8-66VY7'==]I ())!//-Z.//*:uTO6i҄2bbbd***8vڵ#66þ}ʢI&F Dа=w>"7lhV]_}9Μc|S}EqY Dۋ'IXVOg9M= l~.8z6׎bbqV;9s}r2$OUv+<9r1q/A2 "opl"}`ND7^A^UZ!Z/ 'җؕms+J:br;Pcxb5k|+8jߡֺ֫BУX0Y/+ABߨ"b≮p,{FKDDD 9U&eu.:%%=};Ç=֎nufkaSU Ow-;:SeqY"~XmT[~xZfoFd1zBm[%=ֈ\2C &HdD "҃[oF_,?D({5f>ě)dfգyŧ)*fѦu.t.K. c5~Ex,XeNO[6CW6)v_T4߯ypA*C͝sq>5W]cQE@ANspx(lPs/i܆999 ̋ FZnߩ?PsEmݩ#Zԛw:PsiT F֡u6Z:c4F5Pj(JIi ԺjٵeLQ lTWT{o5 dСC >gyc2c `S~w;o۷+,˖-c̘1W`- ?W^y%7|3SN%??_wEEwy'7nT>#f3^Wy֬YfժU\vel6 ?>7tO<C=ĸqرcR+enfΝ[O.Z1c_*H1sX,^#G2~xnJ~ZtvͲeسgm۶RS;, %z.6W7Lk;3g*A,+?0@zf3+d„ r-5 4 VBD4gryF--j[m}X*֔踅NEְZӻW/aG) iݡ5۶žm{HLJ{Onp{v+(;wd͚5ܹJYY+Wdݺu͡C:t(Pbܮ];yx衇x'g"-Ză>H-"+?3<ÿ/G||&NHaa!m69pO?^[׭[ڵkJJpQ =Td=5DZkL;ʣ rnj}OoD3*\D}FaeU%qqXmV:t@M9j'yG(+.c4Kij!!!䥪wժhkƍp_ "ZnMnhڴ)fUV1n8ZhĉYj>Z,q8tө-[f͚) 歷?wիޤ\.JKKi޼9n#FpuѼys _8q"]vSN `ǎٺuk]W_1ydҸ+Yf Zbݺu||w}ѲeKbbbaܸq߿Joξ}(++c=z'NsNx駟XhrF~~=E>F~E 6#GtRڴiÆ xodE1qDv?yl^c֭VYl4k֌40zQz-,YA?l޼ٳg+< _~%Vgڌr|OϺr="\,K/+ˆr:KL##UZҋ.%ǑG8QOQA55tӕ?̾=ˑGv0ڵm^q2XSPmС 4A1p@rBB/IRdyƍ%\n߾C)˗/WιK\\7o_~a̘1.:H~ٳg+@![SSCMMM=1?}eeүX*++{L6 RZZp{lܸҐsb :w`РAٓӧ3gzw1bW\q'Oodʔ)k.0ADB ju9F6jEQqjՊn7]taڴi,X \.L8Ss)$r*7x#'Oȑ#|w i۶-&M⪫⮻?T<ܹs2d˗/5kpw2yd>C ^%Jeaͭ"Q#T ""f4]+-TgsgiuTIG TyHLyGfGcѦCR3R|TWQZTJzZM- &lZ,ݽ{ra6lѣHJJRJEE"@8Ν˵^g}N߾}Yt)̛7ͦ4f+8q"#Ge˖'$$(qL~~>gfڴitQ(?|>b%&&RYYIbb"$&&vIIIQ@PZiӦwڵJڟPPPP5(c*2zϏ1ZP'ZHkmq^pU=Jzz:555 կ-">s}]X׉'Xh}l6+c'3oPVVƈ#r=e= ؂Ӻ:ژ`*@% R pn:$h`߱_dw̮;MPVTFL| YUUd2$ [5/?Ad%LeN8,;v|Omm-/"|7,[LA 2<Ȗ-[V#Fo /^ ԱR.^X*!//>J-ZĂ ?>^x!VQPP/ԩSX駟0l۶믿luԭ[7yv޽{ѣ=z`ǎٳg}V^yg9~8BHvUVVVO|>&O̒%K8sAn]vP _x^zPZZJ׮]55PڜV9X *Ƞm۶̙3|VZŊ+(,,TUUU)W$e.R3<ðaY*-[p:<ӌ1B!hb…8q /СC3f ,K.PEjZZHgYJPZ֘hQPjj)zWd\k׮+\uU\r%fzExwС}QզáգK:GRՂZ/JsFD+~[(i׾='+؛[MF4jjݧ".,:*2VIȘ=O"#y#&>R2Rؽe7{tdde`1[(.,7NR$]7f"_e[ry) Nś BqC|>~z a!= _RQB}?/~vhwӦMt҅Ĩ|iEHDjn WbT3:)&B?LCBE:Jm k(sYWG&x}>,a4,QH~#!>vX-V?nZntщR?]'$5` v#0׫l0@|_7_ 2"M1!е/ ג߿^;cLk{Vk=FAaZ?EAI՚g1!ďvmZmWEV \D61=p\k*;:xC}?s555u{B/lR J 2BV.=!ڡfK`Hel6+=^d^Vp( Xv6W]},p ^ރ{q{v&5,}ѻkoztrv{v7-s a<~dX 4p8 lg}X,8$ F[_< ߃[3%ZIgpL >? U8ʈ$I<}#\g+K<>Vߎ IPS%YFd${,ܧk1:_wu 046,˜ 0y&>.n[Kv[+lO5k8~v>لaWelL;|d~ٖjV+YYY 5*Jp>ijm1vw{ZZFC\z۟Ps [-в1 '"E%9G\dz35/^ERV:*((r[i"$Jlvj JhJpI#:"A,ґjM~ci4.4Me:R8,F=I%tVZQ4>%zo[h-Qj?;,ME§|&+OYEÆ|Q22OF%Scd _ÎjZcw8LCFbD*` r_ tPD$*pY6 tA> ݽG܏m/d+'6xG8[L-K$R\Ÿm&$|x<>7>G]뢲$.1~,%0x-bjzr텛&h"ZA+F$Mo=]5"4=\ wkQ1Smh*~o,j1q7sl1=|Cȕw2{INNBz}$/,#Kuipm}l͙NgV|XlQIύИ}v&⏔&oh@Lv=F6mšCGpPZZlBM DyE9' , *F20vzծjNSH==zE %|)f(MT&kD(u:*6XCFadօ^s'Smd=($0 IDATbSRRFee%tЁcǎa1[p{$%%a6)//GL8p@1$''p8HMME$mFrr2M6%99^Ao,tAiɓ'9v$''++tNZZfAg$,{mFQVO_4[LjqoU OU'nPDqъl؊Q.yk/NhzH!>RC%b5zQ=%'Eo[eL $p=׏:ŋؼy3,ӼEs~'F_7)Sz_|޽{jzvl22222w\mۆS믿Β%KXb#G`…t:ٺu+]v?_ħ!јE(/\$a$'Z^表6zA,^BM98JOC[oE,`Ξѽ5zmPpb.zS"# yx:wL&R9sԫ|X-VN8WkPPP@޽ܹ3Ww|'ߟ\.: B>Ot:ŋ/uHͣXZlذ{~ Gn>|8 `Ȑ! 2zK͗e+N:ucǎlP-mwA"D32I3FMom FZg"Na+tif6-uAk)--W^rp8xY|9SLi%҇^7p:IMMUu7oNQqOYxj-?bo䥗^kXYYY/z޽x^ w^ 磦$I s~ˊ+5k"XD0D&X͍(K(xqI/MnjUm0Ss;sSzYO"32ě(E& /"kV˕e4f{c.FΫp3|.~p'|d&M磏>I& :(ye_LYom <"JLV, _?1a„zv~~b6<ep|h8x >xQBcygVoܴҭ&r/[ZR߄qHD֘V} Zt"Ytlܔ̓?!B+:o~'yǸ h۶-~)6bY9|wu&Wp:WCxHrd2qFnv^}U&LX48ХKK$ݺuSn-A:x ݺu[n0vX^zz@ mQ-KňEib$}1Q9eYZ:0eD7aԊw5TXH-r"bֆAmtE(D/QAh9sЬY3ƍ@{`Ll Ng 6 X$Y媭JXm6.n#3MFqq1wfڴix<7oΣ>fܹ_*Nʜ9sԼz,FǢLBu.$1i$KUUUMR0x% 6;d #C&Mpb )//Wjꫯf„ X, &dYs{b^g&''ZlI˖->0;J-i4;/qzUFty>ݗQl1-a1n,j{VDpנ?&0d##3%NeE95exd,dsR!`8kQ@fx$`rfB*жmz l[ZZ,K='r<0G8{5Q .xIDVY gۋj7kMbBq1nTMގϝF+rz,04`[Er{hX"\i?QxFJs|&҅i/mm5h,,T?ѳyV<^LL\^d;2IT8pp7v[qy =QS:(F [J/)3@Htlay4p[rgNJ(DzcWo$A4\//2jx僩Yzh^(*ȡyR"sOj2HrqܷZFݒzw@Bj^j{"j"".Q5KMW{ڜijʆ^N8;u^ QEJϝ+F/Y+BL.w?|*nM m,HjHz"/`ѿփQ:^4"(zQ0=+U$^ɖh(YX "s=K uWivh0Fh֮[撋.w`6-oc뎭 0zˑfgSbY]Zh1\B"4\$G57FcrT1D7H9QA~:2\E!s1H%?E|w&bRSlᑧqٚϘ|RӄUZFEgE*EV^Ut8;tE+E^ f5uȆUs EU0 -F* NhEȞ%E3&Id0gB_O~)aN%K?ɬYHLL 96`ӦM\|>E3f3<3}pwSQQԩSl$''3sL233yW)))ax<l6/N3f( FfF4@#+I=g41]Fe4$b Ռ FŒ~.ы<̢- nh[~-k7%C&ڴFjTGbR"*'w'6.]S)UtR CI&̟?|G}[o f<裬^?ի?>7nd͚5lْW^y 6(k.^/?0\pfR pyҤI\p̛7-[rrss73w=}GfQPP+ `1W{/b jy(x^"NUeɪ&؇j؈H^@km͕u"2POt9ֳdYFА,Kƅ?HCp O`YE6bcؽ#MpQ*+;GiQ)wEz l6Mi߾=qqqʳW\رc;dʕl6Zldn?|&OLvv6w ӴiS己 2.]W\#믧GTWWW^ 991cưd1/W0҂pGE7F\~_E7Z@}_ioHۡ4bs4O]jfaZYljpDѻ.v \ϑߎu{|$Q]U]ŏk~Ϳ"K2^8\.r_h߮v Gyk:ԋOxzm+--%))IhYcƌa*+)+*#U5`͝;.}6.'%%QQQg+&T G`Ȑ!|>l6,e>Cz#==\~p8ؼy3='|Cjj* bz뭴iFl75-&wÍrDoH7"3Zh6O)"41ES #:Xs>pɥ#zNy<^^Y[jjj1u_( |]lӳwOj5&ʋˉ -# Gۍj%Y^@̜9nݺѯ_?1$$$"??bÇ7ߤsμ\veRVVFqq1dz}v9ٺubUџVUUEyy95558z΍7ȝwIzz:zoK.2bĈzB b:222۷/8OiR"]"z }zLZd]FNVV1(ZՔ&+ B*B8g^$AO1Q u&:zھVhbc: */TIxn%L|ȒI0WՂs"WVL6*+,c2.2%1q1;xŸj\,&;3[qW]\bƍL0ٳgsn:kΝK-멭eС :ɓ'ӧO.rrss?~<;vntܙ{2m4~z)8՟zc!I͚5g嫯{k׎d:v쨸}8p 111l6 *ҢEqS ~~jI9窭k4=}V\+Ayzs&z5BUhCAd^Z F(sgM ͆ln㬩fa"|]{('N)"sջAHqh~<q12ؽe7wôj Dqa1ee poHrd!kpKAE_KkCzj[57g4"%'Z,hX.FDV{ñ\`qo=WoZC˂\,6Y"np`}"\|>_}9Æ_ʾ={;q]ygyװmLN.hիWB=e8}> xZojJU-90{t]vܺ4!-2s>O1E7͊$II+?_ժP%.)? EO00͊?|>_g;oJ<8{:_d Md /`ĥRYY%l=8Wjeh?Ǎ=N&敲d=:{!nWf3fdVfk ~a! PEh/0Y!`䛏vQƼ6)3)Zm 7y2|ӧzeOPZRn'WL\ڈ`1à *~z$$vˬ{gKfL1$Yl2Ѿh]Sԕ&cHUd^6 ^Z8Wj.(QN r8= 8Q#Nv+\ޚRKxFρhXV2gb2QUYԩSq]JZĵ #qvȢ$B"dY=6y?kOUu]s6nBjh14{^gpҋTѤ`?cbIs.& Y]YSu7shgUBQVK|o^G~,YEϐb.J@@βVS$/"F DhaSjF D*QhQ^1Rk]j}WXf!&Li鬀O͏ $)Tf ̜Xo/d6#IR`3O7Rmch` ŋ.I5,`ֺ!Ӟ^fN;z^UY[)8;:̤)YP;X:ի8x;ulbql·WgZ$=T^~U"bEyOm xpޑ -&J#io>lPXP@jJ[x02&5$Z^EYtҕ*dҳWo<{,cw80p_]Y.jB uUB[`;86R˕G?*d̃p!0Ȩ77K(V{G$ YUW$,JPAHОΝjEz\]cY>3$lՀm}ǩ IR确{"JV;TGR-uP&QsjY>q2O͈.`mwq0[dNñި"zsE*:KXvߏX֊",V3>ı5Iڵ'Ig$ynΜl6)m{˭l#naZmhCUK2tXF,Ցnus0XF`@{%l*!r۩ ,s 3`D N[DEzχfc[osh}th׌f-Ur#M2%{8:cmG_t 0UmED x+ |FnCcX$XfQ9G b>sNXmlۗr %o]e%h )V,L-!"]FHW$6V5zcpU:cF$a81s{ie݋Tx_Y!R1L$I3 w??_Ve'sIDAT9r˗cX eƲe˫67xͦPTDҴ\Ʋ_V²j|35.Mq|8QAN^W|OAR/&@IX/4iH*5Z`KC-f okqk^+$ZPc-+Q9f@XmzT[Wz.@8J9^[ ^z4T%TB5$>B\s{jjU]ͮٳ%ߡ,1Xd7x;6مi2ۅ) ڧwx͏b2:t.@=%KFMM /Bg43tef;|~4QGpJy u)Ga۶m)|O(iGQ\|EPͦ꣥kiDbjӪ1gii"16L,BM+J +*':VF[$cj mxOJA?@fHe%б1xNTQpVcZjUW]UW] 6ɓ'yׯ/2V;v,vL¼y߿?sQ*Ǎ}KZ'^'6uH-~\=s+z*m^;֮]ˇ~{ς HHH %%_|׳b K1\bjci! #pcBh$Q5\76D/㷢F_"C5ñlzb$/^vzJSzb{pc.sɎIItswJ[~w={6˖-_̙3>}:fͪGQQ~)<3Ʋl2.r}VX;o⋙;w.ӧOg+aZ9~8C Ͽ>lڴ+WW_1~xz!/_Njj*~-Ǐgҥl.Ps)ؽj1SVYKcJM~$$6K ڶN%ymZ6[49IˣG~jcƌbPSSCĉ$''3e Yl$v3)jȑՅHn:X}5;P+9" a5h pKtE rM,KD1lye|@oi9uBCv)$| d!v~;Lii)nM6裏t:5jYYYdeep|>n)2c LB߾2tP6nȺu馛(,,ݻwkQ[[Kvv6'Nѻwo@.)++e[qQ^^XML0Cpa<&Z-Cfon,%gELwՖcLbv.I#sd+;LM$8̤&'c+I;Ne]Hzu?yyyJ$I)ߏe6K`5ld*v=ZZA|#|h͉^cXZZTj { 'jg"7Ku=ƪ2DHZV9ٝK[iS[O-(D .^/`Ŋ,^:W_} ;exuaXlڴ^zc5k@m7)--d=NV:tx$IR~|8 OΣJ<\.3|>uEouUVy밮Ȳ_oOzqMc,$8L;$Ƙqm9'1{˵^KLL,۶mtҦMxŬ_nŋ_b1rE.^1 ւJ".>4a\KVC^^ }H;,E(E+ED T; +gu,̡%2zDBױJRY W\<%H;bGOz8$Rr"nYٳiӦ _ό3ٳ[naر.p:kx饗ٳR~so#vѽ{DŽ 2~ͤ1x`ƌCQQ k=~8p 'O*cTSSCeeePE&YoғxՕ]3invU8Y̘L`1bHM)-+QW}vƍGӦɜ8w(..ǜ9q5YfQ;R[s!ȵWx蠟v i/zQZVZ_E\Er_EpLц(Sm=)NzOԭ,cٻ*g54 &o_aƇTZ9>K˖xz|IV\B7c$ٸ'z,#GЧO|>'OҷyX,f;lf߾:thOvv6N6VÁeX[_(0 ڵ똚:ej5bkk p]7`n\xxM}1X-@J!up.X!V, #Xl`e}_}G:66`J˗isǶq pz۽޴ <׍v6:"rE9 #AߜmlAM|a\[Yō[+p u4000Pq\r%/C :@F#\B(S"3 OtσDj׿t"0Th,+E)w:Nx rDXYI^0C<"!uӒȱ&MѻR>D)\krDgU&E,mJ觖M IS#R@"KJëeÖ%E0i v*0=hy1<5=Dc9!>܏J2F+F@+XRt MGcwX0Myą٨5NAHVY."'bQϧ$$ [| ,ܼ˾h9\>`\pwR@iT0RR N% PZA!RPF] y_I!V ޏgX WSǻW?C6E,n/ ,41 "{җ9$W2*bkU!$i ߥW "ANChܳB#܏ϲ*QT{)c7̃(p]atp/:HSx "[_De^d/sls:Ԁɺ- 7ߧ͛e{XqeVɓ8~<ϋ(+cph]ٹֆ]\o‘{ !qeQJmdD)[e>!zQråD(TH"3Vn1Cv= . N"VT$!TzC=5Pt OQYrlåP  537Y4AD(_TH8/&cJ##O"/-zT*G`44N3233d~eVne1j+AWw9Cve$˩A9"c$[]=Ii#uVyt>W/eư . E6xrTyE eNuAZYV%R"V =C2;LLv32(`l@tb""$=ZdA>88-ZC2dL>D28n$yB x;Li: >p*(jT.hL vt32\{d>$"b(h d`x~bL$8ll@"nP$N$rt.bFx^&f6Rlj*XpX- Xa Z>- >{ Vc c m >>IUamy>DP\htdVX_hpT$ [O$$  [[PO p024108"mmnm  mmnm]cy(^y>}^#R'q   a0p??                                  '+/-* )(&    #*+&   " #                   _ @hPhP_P_P_@VKA 6AB=C9 # & 66666 A @Z oE ++++0v6%,,0" .#+3;CKS |&.qQ1)QYaiqykK+ -5=EMU]_?6aA!iKCaV;A!0%!`%tD`/fMH/awwXYh'3%6pTt+a A{_ [zwofqs~}^V%v\O =YR4i/B)+%)SFW*3+0. +=ZYJ%T2PP-+ M4/d*:><>:4.*L8G^ncpp9DFb\>QWrLSZddb:;0%$1|^+!).'Q4/w)S:+0FM>;%18_.A+d(>G5/,[Pw='v&06" 'jgj5\%;/C;8M)vlvUTVfwvq}ny<,$"u4+!&CeY3CfKOF)3eSpAVTZR34IqiS)!qL$WlUQ1""!! eKs/DEBMF?51&^Hm|\NlotATW$ ~{;_dpuypDH=: Nu'7JR7_-&A<5gJ-b^YE<G{+|+pUR33if( )Bgm8C$,v}ds'B2I?;V1bckWqmf]ikux}tptWO mTG <UO4a,;"#'O{CQ&+"'&):TUG$N-IH$#H0@a*:?==93.*H4X[Juuszdut9@Bzo@6FSKRXddc:8-x&)uY-!&$N1,q#O7+$0673/5Z+f,,`*2.|. *XLr@~'r #)&bdb*W%9.A:7J(mfsRPQ`p{pkx=QIZSLHT[c^\fTMFLO?7Il8 G1P+  @c\='HH#)M{JE9.9RZO)C5K=;KV"(%$!!C0B\S'43.47<:8!@?@8? &,##%*%&8*FEr3aG0 M.(FQ; @&(,//08\O*i  q/,Y2qo)s!!)?]pcF"<2EA<Q'BYkQpfURGUbok`bcl] O[" R980100@H(PHHJFIFC    $.' ",#(7),01444'9=82<.342C  2!!22222222222222222222222222222222222222222222222222" }!1AQa"q2#BR$3br %&'()*456789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz w!1AQaq"2B #3Rbr $4%&'()*56789:CDEFGHIJSTUVWXYZcdefghijstuvwxyz ?G ]cBH1M0W-|u)Ԝ>QF5ż~(Ԗ]kK>_ W(%wRy n ka;6cfnqHPKd8Mm!g_U)|aod6埑GRQ NH?Ş*A{U˄vgsSQcmAF2럭xuMڌ1B0xYµʥ_#3V\qƞYr6ց[)ald{!~:+ȓǺ7ԣ>[yL{$wb$SȦ (68.́tSdaui$N_ J=},J.(gefh& se*(g[FW<]Xoؓ5-jȼm ^ԣigO_Pʛ&?oN;Q:o;".;NC8fc|gҭj8eQOOa WDԠdXo`H?S"\ƣfi ԇaqOb=Dɧj#}~ҭ+ZK{u%^K}+Mm Ef{جK|o j*)+E}xаnsҺ!JW9jb"F \P:WKme =ɳ$ MߗfO]9lmv8BEEۚed{δ/8mu[HXf9BAP8?/< W>WUhF$*ʽJ>>y. ۞x? gM5i{%ܒx'H"22(敆 _Dr(;GB){J +NwI$#8b>= ks*[ #dNdҧAL>bjޢOKB_'j*/tғYs4'?1|`MPgr<;O]&pe$z(5%S;HҞz~,&y;#+HSs _l\һc/dm#Rn=Ib!׬zՀm3֯/_rNR<'IW+]GX1phLtC(|tnRd՝X2uTn=s]$9q\'_k\۟>o%Y16zY( u\fmѴ)^ݽGvkBg+|B۸AkV׃|Y`{32~jiOTʆl;'q FkQ_J1]n/\Π\yQڽ?84"o1hQSPywsRQZ)uKlIH#9.2x.>Ӫ@ W߁|=e&?N\&U5E+'Lz2+Ζ>N>ʣگ3Gj +s MQ9㔁\9{[Jg=+z|N. &d-o$E|OHʣ}~ҊO0ee;̱!qY5;SIsf_,XFȬQ@쳘ȳc;7%βn-ac`xb*zHbaZaZa"")w;~lԤTm "noEAUG!)T[4$nP?_sG*E1 c ^_mCR)9p+K3å;vY"ePG8ݟ^{*ΗM#W~04zJ!BAIA< dz?6`!?Z녟<].26d n{V3HKnnq w'֥j.0dl# 䁖 dScW>S)x0{}}OzcΓLoX;d8)&vCQɠª[zOTiٸy {ncw5[q=*m.&7dž,pSӽtJwv2 V N$]BHzZҮ 61 Ru>:uޓ{DqH9fK RA^kS{%eFߚהi |׎ѵ8ǣ;m#s>KZ88UV7FujQ4X{t|yEz{>n#0ǟcRU7J3㊼V-az_ʹjU맃rFּS /@92ZNRW#V7EZ;{.F_FnYq[#zqܜdqڸYU*潎u#ʙۮdqvF8ȩRӜHMR0QA>W ]qYݣS\B}KZjd}?^~[xfX1QkޔLg);E] KԌm8!8قjcQd=k_#ÿB^ A;O:u[Uh{gRYɄF2rWQ";ê*.U種!l/L{sC^e{yPdp~5P'uN,w1Bs2bO3O_gۿl[9YC |wcz#SҮ 7p8$+XR792QDe Tx5clrWޣu$&9jǣm Y5y=en̸p~0K%_\/b ϸu (|m_U}GSp.&Ue+zڊškD =ht`N ^_s]C? oצ*F֑#ZB+Ր ĤǸ1Q?7jH3Gr9 ("oDS8ki̍H&񬰍rij8DbX Zk(.i\n') z`8:{XܞO+^ OBm (mEvDv%Y~%?0z[umvQC)/9Ҵ3Ԛ36q[vhњV6a,PFNN;'?!:)M1A~k&v`Ѿt֥C2Q a:38BVd$tdy80N?=yIWG!  yDFm+;I㚇% һp?oxO!`0&?޼$L5գ٘F>}ש_י|HIV򶘈_,П_waKl$tM?gV^O>kGaR)D^7K5*nsLoH -q6 yxgzߘ=j&#D?BjFsT֑-E KET`\ү8Q0 Y PN{ߪFtkP:l\#k/#ߙi3QlMZ̑,qV"#mNºQƃ8{vsz;j/#`"ju;B^yo|C?/uKHv9B8h>xc7.(+zm܇[= [JXvI]gVJGKu5E9v}2if3af́w O":k,{d33Fjhn̊GBAU>>eX;Wi'4?JM"20)Y&HuۼsBXaX2:5ZE9c33i#(O?KI'wO\zˆMJfg![lykBvy8ׂ(.k:%ca?ְu }K퐢4H!iWSRpܪ$$M˞ڜ8e:uT4o*@,]r[8RujaXE20{WT w1ա:qT՟R 8?>|e|L¥+` 4ݞ>M~jD}LIʆi1ڹ?\ޯ]$ON[ N3VͶ`iI֬N@$Q^ow:KGoUMWM$ Bn+ʧBn'*\k)mq (^q4ou#̝9J*,$ rխ!T[ʩh22On$OJC.sHҜc4ɘ7 @:Mg.bmWMY%EG+77uZ@TB7 >acɾIdͺnb ,2~E9s }u(n 4b9W L S[3 t(cGRUaϯ5ܷVz-jke4g#\uO9YK^f?圧iUc èO#R<<E,3,mA;+bV$&UݥaSap̶p3)̍M?j.]N'\jSgВ{(|&G*> sZEi a~q fmkhV_:"Rdw:;\ى fqx4WEI~z3Z0nUe @3£MhRw|u<ͪ†Wڪp3\\'ܸ~EW~'B7 ]3@ RWO*$Xo*W+/C+Ӽaȣ~D?Ҋ+cث'Tut\'!\Q\VؙEX󟊚׏l&yw ~sxXA#Nik̐0hTB%`Hݞ4QYٿA4i[jWlVt2=袹))w4vٶQ QE[C  !"$"$C," Z !1A"Qaq2#BR$3r4Sbs%56CEtDFcu8!1AQ"2aq#3R4BS ?ڗɕ?uG.SV?Fͣ#yN7-腼WQ AiLW!8u68K3qU,[JO&hhz)f`;ϘU۸mGZlJ[DCQ{"b)fW.i!k^|M"1ץVV5` lr"S}C{G9T3}  d`N߷EOyBt!R;I'f,o:~-<;}ߘ;Hgo#Fs6PxVvN=psHeŷTp1[>)__` k 3ۣJ`tb+$aVc@r蕵mDiv{KHR--v`z5P&&ݟg'%M u5Zv$zq?jgbɀOTppANWؾgULid)R\v/1[HڸIm}y}NWm8r BˮCs>qJC.l/N%VQ69x:TJMGSI߆Yh)(>q *EMa9}SRW^AQi:ܲ$Q%%j_w5S$6B6=П5?}YUTRpxfi+ھo|IY2&TbDwJpsIB$CkBE^!ZXƤbYg՘h߱bi|YܬPV!ѪrVMbihࡨ,XT瘦s9>#_eq)$; eC:w4":Idk>* tJ)2rFnS.oAqąf7LXZU N!Y/ihlxT.RYډiGx\5q tA Vd’3jQhϮwW7 ʴ6xZBZQ(Od[/j2I`JR:'.()ԋ[pz/.!dAW%{L,G-1&lN|7:vwO#<-`<'6Qb&e*GrGXQ^H&e(_U'O\JZ^QL/̃~"!fnIqdb­**;# uR-9e\'jR4VRRU/({7pJx6^q"?'@㖑tAPZʁG:)MѧtkC-i !zx*8Fsy)tȮVU0߄&Y86z dcLZP,As+HMKyewaLҗsH{m֖IϽ0)sb/aC7m]j"ڪTȸе7sPU┥6 Up{<&YRN'1Qcj^OTr.%oIVeZ;)b}`阶fyG\j7kE.I0&FDxȱE5I1EUA(m?Zn,7ײ*Aks7LRLuZJr>dSFf?<덙CΙtMm._,39ָ:x cp<|WMX1[Iik:ݽ ?t|z en+Z CzK|4X'T6b Äc;rvd`C<Ķ!ąGHS@GeܹAS*?woTIc3`r?TʍrU'R^q3=n #$d˂jl #DmQ*E܅maSg$܀-cm:LQQH[bJlhnEJuYHBq(BJ`3 4&SֆZJ&Z.=I\.:>p>iZi߯$\ ȃԌ56)&X_)ΠAٽI^Dڜx t-8[h ,-ܧdU 33,LR [/StfxK- kt>$jAX}^WNLZ(\} w9oױckDoHm/M)smzQlJ`s{;aEk *Cg$vȤo]x~X-14T|3B5{٦S1ۢb/.)9 %6$xn!Ͳ TAC32Vn8mjBr߬E,t؛\_x-C9L,$.p:TN&CW<S-JPTl *HR I2ouW[rRSR Ļ)Z on¦ئPHm@>!EXs7]792.058 $8m8bRPhY RA hܬ̪eJII#^PKMT/KLIaZ eZmQ$|5G ֢}(:<1c@ w3.dY784 skWR3ڕ5񵮍 2V=#A]SmkFT]g9ʐ,9RyDd߈2nJ)׺6] Jd< 3ቂ Rt"[:=09MsR+4S|5|HY U`4A͵ō<4QWK幬FDH5VR@RRO"KaYIeqwR5B.!m,d"vk 5&s u:lRQu}sz-NĘ^AeLiJ|XJr;Cѩ88] g,m`AבC\MOhtI&ڪ>(!k(DxjY^]65eg&aйtm*H>1dtu$zbgm-_l{Uޑ9FzbXZYKYQ܋ueejkiL&_;ns*33ʛMRx@<~aCGĪꖓIm+YnQekkۋOYEU@ vv $qA=')sT38b`4u\,meQZMa|A,~QiR HɶAY Ng'Vt'@.4x~^"ne..X]բ#{#A siUP!U@u4?l +`<ߺ"fAzZM=D&m*},0B-e@{>0%$䛘|>햱Ĺ$sv ) q* )lߘ-I -7[It$%E EBo8p[Zsp\Նt6 5~ /Q ld)dvM8,,MܰRy %C/p~PmT!,d<&EYꝭaDvPK̗FI#As t) m䛈.)$>"N0*+qe%$$ǖ0P ?+AN3:6:zx'09Fy_F' TSEF K\EYIQQRr9J' MՐ}q9uTNI,}9U4> v45_]Lme@֊|7[L-IS59ӬDERlmwI0Q凜$@ү+zm R%8jmC,hF><64@pV]DnTb0UZjhʻ5:JE0_[JXF` s:r1Vm,UR^̹qdX>E()5\]/)CYIP#Fݔ,'5E6(W4\Y|e RAI{'qwE3lµȪђڔzVaL &ä4}>5Ngx<#;&H4ү:&>3#M8ŭ-Hr;r+FUu0.C &%XD#b"GG2IOC]+g4dEEqfac KJUVx-0#oHü VC@l@q;czƁgVƣ#`#frw(צ9r߁m9*ֻ#9rюH񎈴jׄHsMlcr䚀!ExG6Ic "6-4 7;3^'pCW]&v[K궛XELw0gQiBS=. Nd܈1M5J,e Ho7*ˏ;Dg{$+( Fi2Jx_i#R!RhtsbAyEȼAHMTkm1yMLcǂN0]4XDv+@ {^]-Ei~nMJ&C)=Rq(ϢJ8H5SyXy}%{G[AQP ara `+iV)X) qUkƈvZAiAr*"2-$aT:Z.!) ʆԐP۝YT0RZ6@ToUFR>+)XOD]O-8M\&Kfb`8&s, ʴܬX@7=HʳCb( Lp$]Nqb7dQSI:|t V]&&˩5݉"k6I>[w/N 4Lk oCkʼnEPU{f!;9ȘlEݼ3QCsQ0NSICJRT tip}ZKW=dm?(݊O$Җ0TL40T]AR[HSvwTRR\a*PB]5#!{UTuR-_(Ċˍ8˖JR}{.t̍1U 9. SeK _o E\=;J@9yXR|G/|E5o Lhcc!0en&a<~7m `m V$tr'TN|˨IdC%Н̓B|rm9(@9 4R?0_Z-ۋNV A S~Pr'su.*tyԩ6 D΅) @ihh+Cp=b(ʒ9 $l9qo ROn0cs4d*Uɴ^|C'S^^'m5Yne!*̌K.fUҠP/$xcaesUC[]S)AJ)CpE&&MQpi0O{vJl}]ЋdQ}iD`QQ5ѳOE mw?>13Ti^@z@?JXwtMLƉ;m޾=*%&Sл."47\ @ űU2隄<]uZ͡+ <ױ. ؋+h60XTцJaiqԎp~lwpWLx-{ 47ҷ)@_k1V}$D]>"xB:d+k18['Hm2z V:R4P؎];vw3b b,˗<[^&tղX/Ǥ ??Lrf)I,J u[hHP*0acZӤ]ͨbP4E'BRVm~IGtsȤ6Z\'IkJ$mx}1oѤ\Tk0o3cL#cUoI* l(o|o?WX^zw.@uurMI@rmʤ&dfNdy9aHJIstDy]y5Pdsuö'/.i$67FY|oɽ)8ӓ'!v Ρh8CqRbAn3N8v|,#"]Odrs,{.}Wvneʚ`dU_!ԲȗF+LS;HR.42ʴ}t@iyT躠NphL7&&㫋 Zx깩˽=.̜o̕ '6FJQ.l,2!H">qOɖKK[BTڽEU/NԐYqSp{{ 711#klCOK8LԘɷi TI\!ImU͒=>ʘ )F[Ko8F]sbN]taLRSP*94kG]G.* ȇy YBc,POTLԺB/H!e[[{z3L5-4[JJE+ :i*?YxUTJA.iBdQ3*S&mpi#_@5 q%v Lw+Y+A$ ;Dձ3 Ȧ)mkC$$ XӬZCTt-d)jX'n@i聠s%{}yW5_5_1œUͽ04?+j>?xQ0n5slh0 $ڦ7Xe0?{dd ? oK]CujƨFпh|NIuRȖtʟfW}9*jAZJ”H&^9V{XۻD- 76Rgyn)ZGfAP[72ۗP$YjqCnSdyZ:ZbU2)}QIe-eYI{WTsW^N{5M쩇G\pr>ɳ6= R/b $fpZ+*eE6>$LLKʥRǔ YI*S3ݖL=qZ *e ? #[֕ÿUW2@REVs6DB_),Ug;A% @e(pXZ^yЦeN\ٹl/CXVbg. ES+zD'PlJ=׃4Y鼓)I᭕4'kݢ聶 NdVܛh !s4h|sPHUMTH,.mHZReλ)l)ǯD%) s`;'/:"Re+KM϶/>e{Z.zXq>T6H}֒=LڹC pYGFE2 FT]7}p$7dxXSUJ&@D}B! \LJ\%(9P,ǰE~"Zވv)RAv].T,z]$1!PLrh[IHc;f /}ai^ ޙ |;iw)M[R[t7B 6 )v LFwLGڕe~;$s;SvR.l:S&"'`w40N+$勜@z;F:C1"˃EؙAm3%Dܑs$//En? uo{73}"QfXK-YNy`=YPH=;B|ꓤJߝ ;1,20زӗE{!cQ& R@ꄘ K. 0r]zay%lhI )pd7c,r] Bf.e6ߪtMgiJB= vϚ-`ku& ꒐y>ujfDRS NL$z1[tp[+?!| l4EQ Q7,tnTmIJ7 ?8^"Mu`*fB%kWV{cSM #>r{n)rls'_/*}e{wDș΂ $)bԕQA*)*XjAQFLM02ړJH܌ݱSH\Jӄ:]E.] BME++T$۲EqW0.&kY/ #:x_WC=#}-(i&ـU7.>JRGU6]QQ8⨨$۲!;pV1%:䲒q4@oIj1uT ԪrΧXY=u3CnqtJ^b5'r Khc/$2.]\7ncx]ol€M6a q; г!4\c}kZ. q%C w./~~ΆP20JJp29z,EZ|4YJ@m#R-%'@Z@#Mʸjse E"d]Z wݓنD"ߟ#qHZtIELK伺P(ct\aVumۭ00.56F]J\%C dt6= eR9GiL2΀%D=U)&-$@HN^dƁ!%.ԤHi*In{BoML@)PB-i4!o1U}:&0rV>I ffL>INRHV K\$gyիj/tI*A*H?X :ꓙ6 R//*٨L-HM#Uʀ[ -Qi!W} ^PEݖ7ׯ|%? _76O.NOqįALV yVWU$.4eJ ̒ I8Ma8_1t_Vemxbv!n 'ܑO>%Q˨:>SN99Go~Y\IIk8v:GmSS0)HY-_5}󥖁LgRnt&m*Zgu LMm!Y8O`;FWS@sܳ` !*I#]z *UNў}iFF[lyzҚL>ˬc8"}ni A-%CҼ7;jmN Rt˘9EjYLTc@[b8"-=V@B2I&f<E{i$7qb) НʪE- m PY GQ$$#󃙐^mT 1l+˧TCJ%ctq?zRh#)2I2E| V|{U] i*ʽE"e ] Eԋ!iUuVŠ+Ol빿s=O,ޢݻDCbMyQETw_AF[IOL%`uJ|aP 6]6?i^./ +H+g\e(.'5b#!>!1zkEӲ)Xx̓*qZ OI~I|T??G@UxdOD}#;UWps$(yYS?hʨ%)2TI&0﷯)oU6?O)uD}-uy;Qu eQ( #E!i!;$_hELDLtq d!hsL孡 /6RJ@XweTT詛\ ,T[[nVΉf渴exkAiim(Y˸6,߼Wq˻8,lCgzq"^n|l󌌋!RkddD+Rch]o22#~U*UX*}q"#YxYJysC ~B22)MD15f}菝L7Ⱥ4?|v=h{ۈi>225C]M22$Da?2/ȆNOU1?ƿd?57tMFFG; (@N*êϣ`d3\=L,)eÆ 6v|<#vhiiaWY̭B#<~6lذaWGRy]RJW:=Du_} sl }]qNVM,APUs.Qr!*EQ^JPP?f| ݆ 6l|N 6~@2J;v21RT` (Bpa Ѿ3DG8 rc)-!KNZ{ uڱg ,YSȩ{-~So`O'3(w mq(#I"dވHM9㎩BWuZ?ռIa['heNBv}^w%2j0l\b/Svp?!oS7l &ׯ`9@/-.5`$Ridؾv9ltu,x[9gJUXɄCI $JbcRt; Dx;:[h;)-Fz(z=v11R $Ro۩-xk,!j!Z#~PH'(/aVQ?ڎWdK&PQ92Jx'\CyW?V3=玬$l`æLlB'W1ǐJ)lݬ5p SkyYޜC'sZ~\sZpWw0յ ab?lEdo9+82w:󬕕e:[g͢A(C,&I!*I]/#b'y3F4 dYw rc/wpI31]w3ɕlǑc ׿̖/ǘZowTxIGE fc7z< v2JbO'=N^=a49 ^ ˛Uڲ56%K.8{CY,$Z@ff.wIETJ|tE Qp6/߾u9'=yi׼cL*l~mV`.rpABqfȠ6}lSɍk?Gm }B4]im5ҷ:#Èt (gN`;ǖs'ss- i &~=q|~2 %Lf!ci,WΔ37]8~N;..`ms'0p,A_!YDOzL߯dT@䴹S?i8?k'Nim%s&XE2Ϟ68 {ԚB 潦"SHO<)%jb)n3,FQ3J@Bkv #`K x\ǻ뗱x< xTAvjtmhDU䍵4ǜfCE|m("?^ O2|T@[ĭ& M׶\-bDn˫)5^ @'Ύ, _8NjbSk?Unuodұd?x&tm=!Q^t\l-Q# XgxUO_BhK櫮%qH60~q9 ;xꝏ 12H娡tm[AQ:GH ֹb/Lz ӀvPE[g<;:x93Ͼ^`ٚΜg x,ْz<&pÌݛ'=oիrҬjeUxX`pUR 6_#1@+#ʿΧn/ѯq!03#ıs/p;@Ln%QbNº%"'ǜ!ܢc3Y l!IS ;2D,6 IR| zcW\-`Z}'dFWt3+814KKHL/g4U>WEhqdG>7#):SECL9~Z nQT͍vTf/eĄiHuq?K"W[V4PPHr,l _&ԱS!q_m=؈R)3ǎ\ǎ>pPZ?L՛3חuy?%@G$祍(a^F&f*"uFXָӏf8a"PV% y%6 #ޗ8Jp*3+WPW9飵]ZYg~Pr ҶThcP@}}1\@E jƶTVO-㐆֔(CxtOftJS7LSv?^f /D3κ!Q,0?XK&FG E.7RR۸& |82s)PJXܿY@SϬ5lmng,%ɨ/p33ɘR6;-,5k3Mlԟt> 馡_v6l  ֪M6"k{^  xg{Ɩ9B$e2 vENz\}J(Kf9**2)Еx~U8LSo275ӯ/>"1e6v] tUB%(Ѯ ̘!Z\TTG\E2 d]3xgq1B4A4Es ^ b환nE$3^aaQgqqph`y's7}Kg.W"1z?#_NK̞h6>SB4{?&:pܭ&g~ޞ.D_!EJE} ts)G 4zOPv6v a=s~}"5 3Au)eM#TJGGoACG 6aÆ3l[zc Jg1A}C'xE(.o!Ita&baYVYCjVض=ذaWЄ,P HW’GnW/CQ+Ҵz1~Iӏc6lذa m}}H{D0HUB҄KfԨQĢQB0@~6lذa#/t|h{bRRRk{l*BprrJKKڰaÆ =#8dY_ BEE)U0„"t\.FT2ek6lذ񥀨Ƒ4mĎQhOQb8XxNdÆ 6<Qlmg>/c/q҂U<.>\=zk$)U|V6lZٴiwh%xfMFݨ HDpǼ|-X1cP?`WI+̣>7fR7uu,WVO$YbfwV?oחM;nTcxi9zΫmcַ+;aݦM+V6vV D^_ <0mA})piȊJ p +*ɄS8#^%-]ʉC"&v5%?iob;sςBT%7̵w4P,EaSA{/rپ5kNel۷oc_4F:܍/A쒰hogYd5 Vйβ:|9+]Ѱ/ |V6lZٴڛ1Upuk'I;3#vʲLWWyw:CqtO=XmȄ8|GaHZbAprM7of3n2?~t\xzu<_a!Fhߦ܈BdIBvhkk#$SIdI˅PDnBIi)skT }}D>,dV5*N流ٞަM+V6> ZɒD, cܘ錭@$-³=38ߧZ7/BgGӦ^XUnfPEҊDI3( ;6+\DV; cC ZmgPDo5fs $cڷM+V6lZ}Vh2-J&Ӹe2yTF;7F @< H Ms8S] (XI8b4% Ԫ]W;'2D42^E!I n=vhvief–Vkt]kvζ!8sV[a'yڴieʦA+#4N4ՏS * Υ~o-|}JϾGnb&?#8v^Zp#c_[ZZF(5VNBc?V8r6 o6ٴieʦEH#;al.}mA֬]Kt 5jMb,(;!vCߗJmʦM+V6>{Z&v;$2b5R9x^ <q9}83@ m7}է꫽z~0nƜV6lZٴiȄ5\:ETU&M̃7wn&SWUxhڛ:xuc\ASsw>6lZٴiej*J : 9`l*fO n\e# ɬ\gmo0rgPc}D2X3G쾏3}M+V6lZٴZ\Xb4Xu zdb,WYKðAܛ|U|$`lKXd5-nʦM+V6#Ȓ/$潦ۃb/lص (qa*tlR Ifg0r<ܕVfITV0/UUeV_MZ(Z"8j!x Ά {.x<իYC8u.Yux<^ܢ›o/?'pBV1K`\،9/uVfv{7L&yܧ16.ߵ[Ůٴj*Z5x=~aƮC$b,Sٲe+ )--͙p;XŁ_ƪU ,BBW&G)+*i:'ffi@nL]BLLqzՆ^-YRreG85хH!Zjmzs%,w{c袓ol^a`N+s)) ~vvKskq1P0W[c.ٕvgoh|RE>$^iK' 2LPQɄ=9t"bLp0BAv3A["ac7&r7(*.?n 6<2L&dx Dh_͗,a6bZ}V "jOS?U$SG 0j6v q&54pWqnO$"@1uRYIS i0Pi,3Ȋ)̪1!ő7O2E;q]#$qID${bq\j׳q5+%Iע 50A_ ښ|A*+D?cC6Rd oOcgj* ISaBDh7/JE::: q\{B &54e[;͛73rH(0A`ڰac/cp`*+l"d䨑Hli#j1]Fw\V Omt7ךJK%1ofV1X14Y8 CB1ψtYӘ u‚LPPX@AaCAa^'YȒ % EQ%IusPT\s9É $d99efJ|cOY4/R+ gݖuFB|g)&o2f* "Zݞƭ=U=&ro4iť@2-cѸ9r>qA ϾI{Xij/syQ0ĝ߂,Jj'> =R&x6͸E̖p|_\e>*nBxq2Ȍbkck?~Ja|Ij]O_@e?ŷ>b+oF饜=y&#;핧IιuU2G{4evAs$ [03b禑)Iv5{ +dOjoLeU*DGQBI_pK/Ua$-αA"vw~}RJWC"PDn.RN)eCH'ye`ol|uc{xmvV6Io1Īg{\- pҩgr7"FI@p&92EvqlfayJ=աq9};_3jli"d RlT ֿϾFK˸"nӷ"+!\LsQefnUQ"+#Qrk[CC-ՠ)5FEYgyÁI -*PoNfoFaEƿ3ZÐ6QSo`Aj|VM iݢB#iف,;q88'_̻3f'@ggVb4#VQuE1y2B_C{&9qD\zݥlx}͛Uș'7_=EK ];1+/ N$Q#s3qKW=Z1=ZZ֘1Ơ45TPc9*͔*#Ǭz8: {dF%I|S/]wE37@'ߺN6EIH&E.@2^c[KqR__z&Yv.8.{,L >K~wVzu0m[H) f~FOG8RU]2w!7U?a̴8Ѓim 2?CG[Q;b \;:(|xr&8i x볒UYfI*˜7yF5bJFqY򅪪9Fw i1 /YIH XovktR)'Ik֬fɸ\N.Wxulo]E~ޏ5kdڵxCAo֋H4Yʼn'2eg6# aƔN T#ToyWr3K:ؗDWg@NFk[bxɧH&#<2R/Ss% Quf#b$ L&%=QCzQ':35KeJ,NΝݪLuÑ՞;#jD2nܬK=LXAXF]gNK3(Vnj4N:}1Un՛T_Q B@YI<CE+3]8T.'bsþQxcI#g,C~_Iw[iz$5v&;(tWFơCt=:#I*n$ LCcZ)a.nAQ3L2;WUyT#sc AWƖi`."8a>k/ht狀rjdɕA MZ5_ǚ0JܛѶ ET*ɏ.YNɮ/ a֮Y ozuWƌD_8 zl{d /e|߅V ć@KB=:d(Q@toJ(h 9&!-=81eN!W[cFf1Jw#%͎Ɇy˴U&L9 H_%WXȸ)tfm\2J}W%؈fXmmz'9Ӳm-e2s9g{]woqGOnX M3@z.}BD<%QRTL}}}dFYt)_ٸaN13Gz_h&Lt@K$^{u8677XƍĹsDx=^_z"&Ȍ/ }-Z-[غu>D vQXZE2$Mt;q9]HRFy٩I$UP& 9bڥATG9qUzf/ܘ t*F֏U3+`hEծFp {| jXH0OX}WSO3b,FxO/bP,&L?Y8#ؾ};w?o;s@M7u'о?'9hF┓Oκ'zU+W3 eظq#^rI˖.cڵ۳z-,X@kk+z+ ,곱+~`$Ѳ?,{}bh3^h>M=z4۷oO9q\@j8z+h4755裏Ѹn x袋?f&2'v Xs鑰RY[O⳺[y۲ Ŭzty" 29c ^["I,hB_Vfs]].'.+I2o^y>&NlK.f~8ܳ;=Y,9өfRC3jpε9aNyB0y|Y=1So{fbGy'8tu^gϿ`ux=b;LC7LO>9q\m> 駝=o):@Ma6FҐ3UbrTU%(+J#f%91vowkRӮf*(yW9c]7d^ɪ>&R3t(LE {baQ6p,`{Y`Ay'cnY IDAT4믿f"K?i3dpk׮c{|RC6m 2#8"x=.*;0*+Rscqs&E75gb'=f3FƢ9٤w^y7:*1}S-.*U2F0)槅 EaцykBWLRZZfL0HE~+PPDDQxόx H\hS&[.aJ`T ׄ X|.|4k֗p1H}}={\wMMf~8ϳ>ˉs0gΜ]WZE0d}18٪ M3Ռ'PUY*"lIfG$NRtVOTfp-icRp)R"dh}IHiΌ 1=ӾN+]tJL2VG "ԕ ګ6B#WZ"{o W]y5Ĥ˅63n{v"~,٩;X-K.i\#657,Vhoog- 4h4:`ըj)<|8jkkԤs?QV8n:P/[:wh;Da\|_ tǤUNN-©dj B&O1^OgH:̄!hjRF}f4挡 $}Vz̐ ÑO ,Af{Z!#E2J=*___ϠA\}ljjvVZŭ~SX:w}4Ljag#LA755DQ7?'.+kѢEx̟?x,"gu{=y9d*Ŭn ᨣeߍ[o-o21z^655?7x ҝl&m'd$ Lc>V~U3y9H =cg1.4fxV䦵Y=N+#Eم+`G1~o/ZDќ~ij ˇ[cVMoK.e8h,9˅~[ 9rEձ-Zڶmk!n>wA(m-?\tM7+y瞻9s/dIaR>suƹ+f YX?ߥDuV=X=XF #s^*gMzm5/&üPkǭ="{} %Wx&1f()UƦ5ƺ*3'9z/fܟG dy-[x'ਣ;ǏqxqLo.K6Xc9arΜ9YAT3<,eZZ U򪤇aR$ 6#3gNֱbAjaEEws.~a^ ҆]3Y g)+83jHyFўgVKhUvkCDZ5ȭhdb"}kҮD` l`-G=R_?=2u(..呿 k^Xr˲rx={vֽz-f?s`@&jrGwtN== 3;=ݎ]/ĠAr̟?[ͳ|x,^FٟbHϧ$&w^p+u.lQ\i ֈ3J.U+W{4p ;wbaJјYfF_ܖG2iSv½cGKZz+V`XNyy~lj)^x!F¢0 )+^hd v pD"^neY\"ZNdQ(j?XT={^ǼyIJJ`ܹmW%\5 9W,XucycB#I-ߦt?*k}k ^-U&|3}N +^VvV? l|S[׭`%0F쫯"2Gdcd ^<53fchڴ)sέ[ҋ/.ᡉyxdN']: OxLџTqK)))nמvl9Ą?_J74hаV dk˘yZ*6;3##,I~Ó8RpDr+DSs&E5 .b/: bq;RTl-RUe{j!,Rȋ7H׫V,W>K3њjLy48}:nWw>kj'Hk:}bK,+mj,'HmΗLg]\gOTק)56}ryM}ǭ|G\ضVyl4Zx[dA"|/P1@ mx+BttEb&5e~ztZ첉GzF7i,Qn V"U.t>elvq)C O{ FQ&$5e{65ڜD'N#96zΏᠢO %5׃NǤc٨pWMzN2O`6[p8*ЉlTxʱ{¶ GNr0/l} tsa-) XOTW7Eey{uڮ+*d`$_9L3pj)2eȌYNe6cN9vh2lv< {p |vG~ //gυtÄ1#1 iݯv's?bp0zJ91vxԔ=GqqCk>m/f!`X/|/v-W/N^XluۘϾљ18˗Lb.Σq%KW],)eg?0y4OIq1Z6jM@b{%iEbjEb1;e2Jо?0:bDNB8gݤ&MK?9Fe[۹G=-xq7fԁ+XٙS -L˸ ,f/^xi|RS Cpt|j.&I* 8ٷ#7K2}fs˹qIU31ԈWճ 3eL\9zx`N2ksYt/ZIch0X՘Xmt47ib5qd,f1;oɇmڬ|Nn\)^egEE{@2[d\<S`vf/}IJ|jR~c\מ .9UF;L~ph0~HϑcH_ Z^ԙ$[w;W\/=G@B~ 4$+FnRx6#@{* xݒՙ~`œbS;\5>xN=.me^YJTS"'ĭ%ެd&x1㝹zK.GRRVYY$/%V'-]_ ˟ Rù)_F2b4€hKt#~wv[p$٭度 0 >l\9ZQ'2t~+" N.2kعbG/>E5h"NE.@F݄0]} 8j[!{.8f#QOcʪ&jH5}"f1Yx_^F/]׋h4K2 _{ʠ^غv"3WsVc"2LlGFjng]||A%"qGF toeg$[MY9qZklY&7PRλUV.F?8)og?bjЂEk+v&͘|.HM zi3 -޼ʕ7e]fClhtq!ɯ1z16syoKw &]6jgѣc lv;/5DӔ(m_g jlv;oLz񔔹$6*\AnLƄGbt (XP /U*n\FAН[kzΏ'J4DM0,f1;y&vJ`NG@MKcȹM p) zki);V`|X]R.´ѿR4d%auوkҖ v$=a=V 7 gY1& |T8XtZ)U#-*[4OC*_TWRFYBPS(?X),+2;ьBt]մ vbc@@CjZ⢃t0\}5βb^DZmA/zV^܀~ :X&SoUnJ+6FAvjy{6njHMVM;NH[m$h=oDx윋MNPƈAv##F cbxi2{|*+LʂUjNPL^ dWmb4\>3W VkE*3ժ@DѥeƧrO}bujE k{1QQ%LQQ>!R4SJ;齝,mkTxX$bix?֮a} US1˜2%0PBm%N(tmM ))řW\}ezj&憿_=n~v8\Lt;f1Y3PVM50А}}i 25&gdbʁ(N$ĺ<"S`TL+ _xEcûcy-,.La(sCjk2FKYN08zA62 /)$1e[y% ɗhV򜁈ki7?_F*#1Ŷڀo .& H1$#f5x5NBb 13~L|F|ڪWp4Me} j?jSҼhabb0F#(UGn S W ĸ\>e,L+-7Z6Et Fcoʉ:ӆD[F+4+2 BC*k)"J1QyjlP ^wȵUYTLL& .12:V;[/fj/&,tW}S9 "N;v H˜"3B=O- ET5נZCu j"Go嵩Ep+LQ^L+b@(I# T-ft:>!kXqq1{aݔZqTTo>=[ՓY-ʚ]IIX,sܢ W4VRjj*(Q98,JޏTטTV"\S~bħx(O8L+9e_nn!8RrE_/#FcVpp^XӅ ~#$wyG ya휙 -[Nn>,`h"S@VV is̪Tc9$,2Fi J j E;< B"=DG>JCsN*.qL" >ݱUٳ#\~zt>T'@(#ljwŏ?nd2q5]5jlII,ٴvmJdeeMNN99 Xre]ƺu9sN-[rMkhTGym1;{g*CH"2,0\R9wQi 2GBM]B IDAT5z&89mk6 Qڵjޔ m&1233*%̻41FNu:lv;o[ǎ-[2ح߰, 7Ԧ9! hbfd,S=s:qf3;vsNlڼU+WyILH /?-[/7

9Z@DDDDD|YkMtHťH 4 "vخkD0lX.Xa ˲صk7sVR⨮quD,\B06V¶-\;eD0Ķ,bcXy3U DDDDDNxkؽߣ``4Zu\v3q7o$aw$%%(@i=KEe%{qo^ Pp(BMmuuC!0mGg~wlq0`f KJλ^T-9˗3t4cz(ٶ ag\L$ c[m۸46;Ų,\%6֏klXA5@DDDD 9x 6˗оMIJ GB=pP0DEe%5h`Fɾx1dggpBLm;8.X:uD.]֭={o߾wy 4&D?_.ӧOW^ݛ{,%>]vO>L0 ZQr'XH&!>}W\kg}F\\̘1A_`0HFFm9CCΝ1MP|UYY;w-[qF֬Y~dr˛=΂ Xr%˖-cҥX xy睬]UVѳgO~# ,"""" PNCPb ?ݻw{Ⱦ}|۷Cf].K,m۶8d]->)Sݻ7EEE-gL<,}:qb ]߿?'Tf@bȐ!"""" 3 F}}}48PH$BMu5SLaٲe|{7 11vɰaâM^/pn8P]}qZ.sۓO>I0Erbb"uuu>),YDVDDDD̯˗/g֬Y N8VrJHff& 7|;3L֬Y-?@y> p9ysN}Ƅuuu$&~rrlΏcZZޠ,_"^}ϋ[x֯[w@vv6/2k׎k^/֭#bEHOO >>`0H89f|/b }UXXȺuͲ֯_Oaa +))ロ3g֊7r" V˶xdu"cciضMnnn䌮qqqq~lqB9^{_sx WTTČ326z?i$>S,b޽̘1֊7r" k#mc&e8a`ٍ3{<L1ס!ЀaMNہmfӿ<,/9[nR7̘1cX_yL0[e]{ZQrHpPxKL">!ںzw$qq1 p8LZjH*>/p\ǃ)i).)--mq6 aL2)S_=_j(@9} NVJjRO|1^ l‘!rq!,˦&HNv9w N~ol߆\L("%\UM$-k[1nz{\?1B5Qy KJTDDDDDdu_L^\WB|q1dtⳏ)/ȎR¡ q)iT],^YC1ip jkjTDDDDDlʬW,~5ۥCڱP(HEn>۽˲ع u "CUM%Uue?x]+P iCg[czb"l؎86"D\!`;6`>P7)p(@9q//gr{*1p5p|a\.& QSSßg4Qr~nnu3ċaDDDDDDWUM|BNVz@21"@8¶m%`A  Vp²,vMc/rWTR^QofsRS]SC]]6lƵDP "Ƶ-,$bq] e7Z rL/p]4>_DkkjX%}Z"Tq5E]  cpu\v\ǍD<!T&\cD0 Dl":cؽl?* 4ׯ6R'@(1fw3uT^zf;𖗗7-9 ,`ʕ,[Kb .\ت㋜MfϞM6|8S~\}5}eƌU8"""r6(Fk8?1쏃K8pU$:Z8p7i?5k.d]G=ҥKIIIaܸql٩+ŋ^|En6Ǝ /p6}s\z̚5I"[DOqq);H[ RfϚ~'9Y3WCC+B'Ƌ`cۄk,%;![+34T7}L. rx.ڵkk׮e޼y9iӦQZZJ^^@ɕm#~Nڢ멯'!!!H]]]td/Җ1yPDDDD<+MuliR 1^IylΤRz'=o]G2|.EMy`຀|2|\WWGbb);0 pm;:_тIfmgH8m8^}]x?=X?^kKLOIL[MB0H$ h"V\Innnt}ii)^{-?Omfxb4[B֭[ǐ!CX~=|0_lzٴq}6}_K))ؿ׫9֐z(BضuIꘀt \%} Dme5vwlq^d  j1`^uF=äI֭eee<\wu-"f̘An1c7xc4d/u5װ|R1˞={ٱc߹暣nףW/[=INIEDD2mS}oagoa숃kxLOvl\qd.gl u Co,5?oıσ^x|fp뭷SO1zhFĉٺu+۷gM%>ܷ[nÇp73f̘-9H[1/o,9f,CZz:_2G.%%>mk1W뭢Y4M@oP۝9iدEyg{Y4Ƨ PDDDDDDWI~*9#z{_R3Pձn """""r(@Q"""""" PDDDDDDYë"9=\%cG"8*aaqظ{&`qql v׆cbz PDDD$@UU{*wS[[BIBBYY٤g9CؖEgO8XuP5xL%%Sث';w3HD"iFݿ6.z۹3111 PDDDΤH$Bmm eeןx<q*+ve&ڥ#)Pdڏ:2tٶͶm?zc۷?^ܵ@ ܿ>e(Di`./_ddvql,R|2;da&nʥ}ŵm6]ϰW_Pk<=z:jb6֬+kWݿrc{!q PDDDu#-=Ƕ IMK}P\С*:wkc:qCX~u:H^_y"bYe("""AckŲ"*6xq϶m5 j|>m7wG?=z{% `G"x|>cOH:EEDD(A^ $%%G$UW,^11~,+?&>55U4ehW95\quq]p?ηz0GW*@S=7(u5uIMI}BA'%-NiĤDضM8TT޾X~,i9x`/u5Hj'rX>rbخBME=zgfq>|11_E]m-] #..8ͷiƑCjj*Ibv$&}fooVSW_asˎMRbGHaB9ӲdaFZrB,זv Bl\kfz>؎C8rB=z*C7i4p`> Ӥ{A*w! `;I7D޿?Nu_u[y/o>}Y|mW\ />ܹ3/b՚9}JJJ2dqqq\pktܿ3G۸}ګƗȸ. ޽GQ ޓl@XE.^sT Z/V< Xlcs>Yfs^Ν;w2l0y]V2E!;{>\7-AC]FtGhogxHhin@^ii].a 37 8YY]򝞞A0m%͑wN}p t)***ǖ3yٴZ1l} eQ8xs9@k+޴t*++)wǟu9r$o&Ŵax.>ϳ;Ht~a֮]˪U䔾!OA78+ 9a9uJZͦpY|tm]>GUU_|1?xK.ߦ篬㗿%ze PBANQ4NQq1.  hogg䐞۶a&-#aEᓞbOX+fwҋ`1M=wQ[]M"a_qu}PŨQ e„3ٲ=:::8s[zغe 70u^Ϲa***zRVVFYYY2M<gɒ% }… WZC=D]]cǎ婧bĉ]utimҥ<31{lx Rߓk.Rx]yl5:.D>=ژ0"ASA)mm84Cv( 0Qg…̟??m~Ϧ_nx1cƀ/3%B' ԍD:C' px1u^:EC?z9A x=K~s̹F3|C03}u8NV A֟'Hٱc;v38I'tx)wq? PYYI86֭[ٳg555)7nƍill䪫bǽ>ȶmزe \.,Ymm۶:d5<,_) um &VY`w|6vh)//rr֯_W_of͚5"8E!0Fv,@lШ*yy=G? 9~K/?]hhSW]Y&A$%r)h}vN't۸;L:Oz)..[n!//R-Z!,_"|>˖-K9c=Faa!E}^gI3--_k]-[,]D"qBǟL\k7o wޝiuOiHtιgYTq#SSS]OSSSʶne˖1iҤASvK!!uFr(vOݵ,ˆ$ LL>Y8zg͹ GQ7SΣ L% ?V]]b&G"n8NVd}:?]O˲ؽ{7>esX,9^Or0 #%mw뵵7.Kڹs0w/_y≕}>x?"8X`E,a%TX@ZteZӡSbx/\fС]s)i{Q~7 PBqAlf"xLVό 8EQ0h4nBk;q:AW˯QIO,B Çgs廀UՓ38o%VPP޽{=zthoۺ[/((୷witM7}QFrO޶"Fڍ̞1l7q$(Q0T, [XfS9.BV`;Szu^xaJolΝ˓O>W\>I/![bLnDx4J{(}.8ddh$n1([,!C`K%P{a_8P?Ơ7Wn JF5ЊO>|i! cӻx׎{3/W^0fҥ{4_=?{S>kwx?ۨ"sNnߺMk&7W2dȐ:m妙Y|T^;76sfQ6UaƄ.73<DŽ<ƌe԰:"ҹ_L9%YbO?4``0o[VX]/b5 ,/j'(B!Ġ,xڃM|>MMrc$[Z8oEð4 Φ_v&eL^}Q}:=l2oO~Lv>`q=Г.\ȯ~ٳСC=ᄏK E+ }O;uL!+ﺌ=Ο8 ӂ}]3weB@4Fb͚5,]%K`ڴi딖v[ӦM7k;cMSnW$B/H(m3[wۂ1W'0 .8mmmXGUQefb474`4,:_ 8tnMON~uce(NjFu?ho D~6ozYW]M0v,奊̿V񾍉ٵk7~EEEtttv{8ΧgSOR8X<ᢶf ˍG>f_y%^1`}O#q~gOǾ+wښjZJ!]8An^m6,"0QPTDfvveYĢQhPm64]2rh<\ P6O`R֓6p _7gȐ!!y >,0l+^dȐ!QPPN*q*+CmW7vRXiEMάwe{ PBm{)04;oZ--dfeaD#QTF"a~mauZZxp8hDH_/A}K/Y]|>72+0,PUYW%//p8LvVIO^_iqa0tV ܜL(*`ٰl͆먪ڧԽ(B! l1tNVnISS 2>9/+P0Hss3n,VUկC!b7\n/@3-F}N<Ǜ#&h||Jg7Mv^1-FLJ"i^"H$_H$RiZʸ u$4aeYn]6 fvE!E!no4 T|Ag7ʑb0&̄i.i)/{{$IG 8v{~H"B r88NkH ԟ(B!yd@l)"T6J1p$ l6q_$*eJ 3>YE!zi<܈#0޴4,9@222>p<)̬^n> 7Wo`_Y*Bq*tèMII)EQ`N#2iokg߾*Κ0H4sfcYcyw9bINg7-L8 ]yfcYgw2e*9y"xESany'2G!N_;{hkk{TU1Σ-2ظ;>`0*Xf×cرfcw8zk!C?~Ϊ0c CB!ET:MU r!i !6,kNa4JuASdB,;gXFMx?A"wqڳg(.BѬJR_xY$~3‚X$f.c-0ض;؏ &YƜF}ǀ>=ؗ~X #pQza8kF߯ 񘿾V #i o;_W=h.A,{aex;zvLwv?VH`@ f BgyŕuuUL{yfh MMH//}=GNriv5~zi?ycV}8rKyQڸzr +񡬬ct8V uh1!a|* ~? /oJV<*ghWɉB*V‚竢w'Wqi(*.ᖿ`4 tLwf[fwo+i:KthZ L6f>qHCL}87WO~A|y?M%xGK ڻ#qڕ9~ǯ#mhNNLVN._l%!!F核=OlىiVm`嶣sM_z\ Y{UW]5Yr V_lDQZZNQQa$SX^``^T[Qdb4bqx/WD\}~]tҙ\&KUd Fv]is*wEx 0*U@BXhqJմ tz-zBhFJuu9**߅fPp:l='6,JR)*.Mt0׍y~8|ItZʫ ?=tԈVUϱR-k玧]/Lh/~N}ֱ0pNG /vtD _Ovm0jB\|=F5Qڨ7J:9[J㦷{nOscZm(sًY*4ҮUZԣ|v?2禌k9ap/&+jka)ބK'qi$Khjb{OR\}X-94h۶jZ ~~U="1zRkv|:k7#׿®#cZKؽ5"CN_]UgC`X umGN01Ķ*VQ :d;˺ѳC4A~uyeh4Ɔ4OTd;1^]=VzmĈ NՅ ?ܱpL#:*K׹/-Za}L{ka)mݎv!"<L`v#_#]{tVۺ}w"sԯOO4ڵ ZϊTn{ݷu}}+{) zuez?c]¬rjEs⣃))-%8(D~~!q1:;~>ވ')GOPpI5s *+M$D{|/( "D.=ѣ( [xor7nuAIx=>>Su?FEaO2Xڸ7`,+Qܪ+t/3g_}#o&Wlf,Vn۝t#5#Q|s*+6{R$)bԽ5#{'2mQa{Jͬܞ;0nHG}u,dӾtKxFؚ xd3jG4Hl7NU۾wQ^UQͲ>څѩ ꢧvm'ᯢͬYDE]l7ów&Pkחp5}(gWq%0U`X d\ 鈏NCh}xQ X,fbņkI?Fmckj:-&:#Gri:ć.znͲ&IlݾN;V@ۄxNwJvHxVCQCٚzط/0^Lf^J\\4Pwal1*߷MfwoPFN)j) ux'9SQlҽM^JmGjMzMorǨmlJE`=b_OTTd j.Ep(k9N θ轶oO럺kRgW] 7ZךQ_ׯ%j[Iu+JNmjz¢ %+'o`!<}^l3Oboux'ޘ~9EӾ]mnpN|YJM<+uT`YkYEOl1Xu=z6mÈӟ᝙vK*ٞéQ)}Hl^{B#cg1[SXAb([0Yalw׋R+65iZf%2(2&2ǠШ:*.~]yqX+ٴ/}*p|"'11rOk0"C4X{&N,pJ+dL|zJ+-ڞAή⧡ZkHM&cjȠM|3nGQ^McCc ,{k"gr^y%u$SdOoyLhc֥#>>>ee9NbքPT\ɓfנY?&q?awu"r;Z@##u-=wAT=uFӡ(}8NztN쒛ɓ8:=AA(г{W4Z;GݵKG|kmjV[{aw8t徆G];{,z{Mf?wݎ^'$8(Bufsd%%Xm64j5nNs;^O.QT:AYy9:n];И}ٿsHnN9 6\?fe2|X2.ZJ+6-?VSey})7xcT_T[޾?ًB!ha {5e3aH߾\5rc}ʩ?"[?ɴAEFo6@=0mv)L3m_dB46c_JKjW1k1l}rn[ uB!HьK._2.|c=7jB!.J`WuY=bSixG%B!Z’&_f7޴ z:IY!j \=F^DQa$"B?Ly{u͕B!(!SQQ~KHzB!茹3/N@!B& ?2H!B #!B)B!JB!hO~ ?;v& @ #!B&^k"8$TPTPĵ'p0)BѬ"Lf6HHJLH!EQش7V¢BK>xKO@?/gБ|7d 480zh4FB!hY}>w C";SQ^dOtBhxGQT``}L'S}TiU?rͯyb:M&B?=knRZ&($}z};Ҩ>d!~Ʉj {?X~w΅QxDdX:w&ҥ(rAq$M""2Hu>3o\2#- mZYj:tcGug69~8}jjӮ m| #ov;\­on/[ l7/Xq&Bjtޑ:N?Lm7{}JGo>QaA//7۷̙z/_;;~!:^7NVBq*?/̣p8GOIQ{Hiq)qm.bO>} S+ĄO{%K;`߾}<@.Bh2s`ݖNhMa^!Wm`A,f:#PvL'Vה-NcYl^EPd31?s9xP)jv:H!0hߵ=QDE5+G Dg˺-dtdd4t8'U{yŅl]2zA#"*tI« ^#u Dr*nu2]v#*:Ȩh|̚5!C: 0d0fϞCAai[vc{={c/I툎SLFp󤦦rҫ7qh:0ش7yGxD$;v쨳G~fάs;O~ۼgOmܥm+pD&#&6^磏QPPpb…\5n;t$&6=)muBQcD3]ב.SZ\;1]c9s‚B"#h48Ndtމ)]9 Dp3^~/ ygoxo׮]LtC(==t>S|?/N9rTiJ~e%w}&{q 7bxv?>|Ç'z.9bgdfZz5Wz:U=mȑ|8|2JKK/!12%Kѽ;rd˫o WԧOXn-Ǐî;5iy뭷YjU=߬gaX/U~,㌷^cOdger,(?x=k޸-޽{9r$_.#ö[xi8NH©E!)BZ~~جmKrdlÑNK\6Ltl4]{vm-f Qg~vzNw:K/waÆ=T,z}rrrԩXѣG1`@.3ԩt:w?bM|ii̟? aҤ:9jl݊htY4tPP~XիW{V*++ٺuaÆ56_u,X0cڕW^n;dŊx'bɒٵ{7W]u/zjm۶' $$o2m]Buťv::Tx8Efp8hשV%4VXbUhhuZ4A՟ooEDD0j(̟N35+V36 3}=C٤I'}O:f㪍y7m'P9Y9߳<|CgW4Fi8XՓ1o|WTTޢE';laaӣNoH2it|vk.֯_Ϟ={3X{Q%` 55ޠZ69r5"--}xݙ$''9oץ:x], !h>6nވJ"Cb}Ĵ!x6|{Q1 F!ءC6lX<֯ct]0Gw m\u>|o.^9sX,|+.c>N!Xv{klmZu!Ctu7n 7jZΝX_B4/hhp>EQ8z(Ņ :vHDT{wmفPrO-xF_|j޿\u^?ozE]c ^Wx}.-⒒:?yfj5Çw?|pj57o]ڽ/>E} msS?nϿo***H!H,'Zݱ2 b%:.xF3v <*훶S^v!4J0mMZZWϚ5k0FV^͕Wcnګkwɮ]ZL&67x#~m࣏˩l6cNn> >b$/7nݎdb]}zYqսC~-q\^#F))ey]fȦM osS:\7x;wdµG.υ'5\Æ d:{=̟c:e˾ѣz:?8mjsP7uwؑXrrr 5j$;wt5¸8:ve ײ~Ɯ675>n&ӹ;]H!22I`6)'~Quk0c# 404 ݻw灩SYn=>vd#Fzm˗6III*;F!88޽{3YU=!+'u8 +7gLF=gyv1%o'K pFMVӶC[RuɝףOӞ]ߏjS-z3|t c.\B!ۋ!V1^7Mm'F hoOXDǕRW3:Wdgeo7#!B\\JK5 =鄆%]s`߁z0VIa$B?LyUc2 ߷}QN|zvOH!-!#{:6[evCi ?KEYiӰZW2ePVT5WO+H!FMg_u1 TTT0x nfrrsן>d4!mq MwO?kIa$B Fs7s1ӺMhKhP(yDF\tr2$7O)0LfcFB! j^Ca^!A8 Oҹ}gzLM@FB!hV"#"/uV%( ұyn)BZ~o !BHa$B!B!W 1 B.**zII!˳B!3c$B!B!FB!R !BHa$B!B!FB!R !BHa$B!B!Fe˖3(#"tm!Bx6l>~lC >2d`^~9ɖw(~N!BcaT]p!'Nd͚5^Yf 'N佅 U_|||HIСDFEHyE1v]Łٰa#r$: UV(̟Gr^}5Eŋ?wƵb̙;n{QغuΜٳꫯ<>%t:yWH՛Xz_tz<6t1Y!R58: 4$GpSYCrrsh߾W\q|j;v ;twͶmx79x`??^7p!n&fϞ ݻYf5Gjj*7tElm￿={r7IKKgz^}5}^}5G0~8> 6M/љd!BHatl" ӭ[7C?L^O6-z?{ |||CV3x >0gw;scpi=(\:v,G[s"S\s_3 p~{ ~~~{|sgB!Q=ٳϺ(1|8k׬ݻx f1g\zŰCٷo[l?H>l9Z%c&1c{'NЯ#"Ij:FDDӢ\jWt=T],uҕuxq;'-2UhEUs;LB! g2suq4=tZjn!C0p M֯gѢ9j$F)S0y򭤥nzfϞS!=-}5=6w|}}Y{t },wУ'N% acν0jaY!jS-٭cXV~߽PcB!hrY'AEaO?QRR-,EB!;ms]^M~xGeO ![ڹCB!Pj@!B #!B)B!0B!H!B #!B)B!0B!8K^%!B\\vF BqhϗKW $HB$IQ!veB!FB!R !BHa$B!B!FB!R !BHa$B!B!FB!MC{W =}1!uUOfv\&-aK~'I~wFzӦMÞoSxgp1g=zBB0Vp:p:(NԠRP VAN@Nqh<3NWTj^$ 뒟'I~&?9~H #N>'fJeuZUqK `舡l6JKK1XlP\ l6c2l5cZ[TNq\ݟ 'm^$?ɯ9'i]adY筷rd2s`_?VݎF!//\Ef=df /~2=Y=[^h`O5^Ǧp:}|mO=buvZ|h'h4FWIs]펹P,z&&<'I~ʹ(ǹC/́q.M9XpQ6ߟ */ q> cd7i@MH 5zByNE얖]faw]0hT$?Oi~rhw6JSyYj]1FvtX5ZX3ZԳ?[ՂGzaRU֨q:uFW'j pQ%?Ou~rhw.NKO{wZK/Q]v<ipq:5(<P.BUu~V~zJc%E%EFN aPղ]T}@$?OWsnNsniD3ǸuwaUSM>sVïmz|7l!C]Zl6*(Nţ:)67L;*G''I~GӴ=(͊vSSs߸X-`{:tֵbt߅Y4SiάKmƌ#2:H"" " K/Q*-qM~:ɌJBpu\ϛS)U7?|4y2,^+I~׌ǹz?̩b0XtOz۪u:(Bcdli/hPݥҩzcq8j.gP``mסOq(F***l7Յ ;>/LUQ&-ZS$?ɯ9'ǏsoPb5ioU~-'u|zq֬Y<ହŁ-Ybast:z{s͒܉d)I~ǹWR6_3V OUz9`?8as9sf 6wEqm,yپ9 'fw@?$?O|p*u&nfB=XST`"EU~N Lro~S$?Ok꯭۟)|7D's\ t<+"0VB 儮5_#C|ZL~cq:c w_]XbSfŮ]_{__՟8ݟ4LrJOKvE7. I~ǹ?EQPfEcj/Ήm8yjgZ>9> ousTSֳA;j'OOQ&coxy#_e~OpRM'I~r_ӭ6kk(v~ZB=F&[Ԍ3xgssϹ}/od⪎-ݨxUSUQͮ}JvJ~'5tzG_Muڟ[=/olԼ]#ݨn9o`s5үZ['I~r8_^?ckc|[|SZ/#{/4(5Ki?b00lXmV|}} 25~|juz6͂N‚BO$f?4*v럲]Ȥ~Ln9Oyʭ}_魞]ãԮko5Ь7S+,._R_։:S,I~bㇴ0*;AHH0釋3M(`Eq5ATfT*N K& `VL8NN'vݎpPTQآ'I~'I~Qat_o7_": `TkvE1 J58,sd+|XB)5’B"""Ї"V*2ZSǵSv +XZu($?O$?OkZNQ^;~Y6鼯/JdL?w8ͨ*LN'juau_@RX*%5R5תb3p:vE*.]^-*I~'I~_6\?\vLyQZ =j(pX CRpVrXAAŀ!߇PV<PVTNc6/t'I~'[amN;:JE]KXX%jh+d!VKBNVX hjZOӨ%?O$?Ok"Mi}ףlj P[TNUMv+fN+zPV~fQi.CPQR˾('I~'I~Q`|?_V'aFCq}OP`FJbWWaFѫ4AJQq"+FsQ5fO$?O.#+jR'I~'I~aQCAN5fO$?OΞ%$!I~'$?|P.B!H!B #!B)B!0B!H!B #!B)B!0B!H!B #!B)B!0B! VZyNOOW^[i⮻[n$&&rW׻#Gp7Ҿ}{ڷoύ7ȑ#G<ԿS߿{}LsrѫW/|MNw~_~9}]<|p>| 4_믿$uOAAV\Ʉ h۶-ݺu{!''Gkd~Պׯ_z 3s\qs-hh7uv3ХKvs=('NQEQ =>xq߶mҳgO/tO;r䈒|JQQbX;v(wuW;v/*Jii /(^zo<裧]lݺUINNJϞ=_),,Tf}v;l0+W*J~~2sL뮓ĉ~A)))Q˕W^yE7nwߙ3g*Zz {^Sz>+2={= IDATn>C媫Rrss\媫R>?l{m6Nj=ڡLwr 5k()))ڵk=~ٶm[bof%))no1њ5k={*k֬{=fdjEQF(C~m۶ ( RL&S,s~-0/q\j*Trrr.|d7n8eׯWfS]1F=ӧOg 6sWƌüy(//7xK.cnݺaxq8l6eС-۳:?Çog_YY̛7Zlٲ!Cx]ڵkӧwF.\جfKo̘1___yE~/J?Asэ98pdd>֦Mz?iFlg̜J\\_ͭ3nWRSS'*O={ƍ++ Uכ_||w _~nWۧL8Q׿ը٣ 0@9twU/Gʑ#G$Ff+PNg{ W͵tP8p@iN9ٵnZq8{^xf̘oVPhy> 'N$--4ZMVg>FC.]7o}GƩ0ߧͯCquבJjj*'N_׮]7oK,i07r`ڵk'a~٤~Xkd~f⩧BR_}u\h׮:tbt>3 TVVoWVVb0d+.](+Vs>w=e&&&9y1-JNܷ eӦM-HQ-TH (ET~ J E"(RT҂,HpUB $#첓M6!Hv~g9L{眙wsfgֺuk?Q~U(Ԥ_˖-o߾},::]p~ VCpZu Vok>J~؟왚շv C}*ԩSm۶믿6zڵ3FΟ?_m z]1̙,))t:ƍϟcjj!?f﫯2ݸqè_QQSܹs>bTڵkـ,wM~ŬUVLoٲu֭AA9s气Xnn.[|91bg~ ۃ~Օ%]y1~7 /0{ǖS;wT?OOrU6olLKIIaSLaQQQ,$$ 4:t-d}eslٲeLR1;t?~lW\¢٦MzL<٨k׍`}eAAAFJU]+ L˷oߞƲ|6g/_rbk}WclСf){5F՝[;ʕ+YTTbW6 lH4g ~S /ODOÑy7ТE L:G~A86z{|g ̼OnO$$$U놆u\'H?#>8qj}pI#H?p#AAd  AA1"  cDAAƈ  AA#  2FAAd  AA1"  cDAAƈ  AA?a@ryzzF3E9PC ^6S*U aҴ9_仫FUZ/%#~'m+W+z'JeepBPABYR^7:UKU"^PR@"8...psqCzXկ\VJB'z=ݪ~eePPPkԤ_REMab9_:~] J.RgDΝs#E0yƨ_Wӕ>]U?:~#nLwRDAY@ںR[^wozRPU3B~gۼ9~jڬɧWm1|?rWM 42LLQUCdf9>=Ϡtw!*9] ̑#G?үIP4Jҿx?cBb0C|x 'n<N8]'mH+ۑ#@@ffa4@nN.˼s z~߄nv`~MӪzM-m^^?Z]STQB| 0IR@?@R ^fR: #SAiuFnouh>w&/ o4~ؘ^ " -Q1Z(nfh>Ye4Cwd E_xMѣF\s3> %!iC^X3b8WCR8y fFq wG LY+F iMˁA&4U\n_RP,jxTuׂH0$\T*+lCd~V2P O& "EɐޖClDphaL;_ׄO3(<޵ݚDW5:e*1N&M^.Z'gp_<:i9,F~-տ+T-Hj3'~e2|`4Eb"5 pATf~d@F?)'rZTv6uprSd_VP]o=,݊q84rwcI2Rkk uvgV$8ynn=3m-)CWZNe)Az^)5<[ q3<1:. J^HxH2oZr q q}g$X3D<#=[iiOKMFo8www7 qa " hx ]?c~'4  K5J[_[U?S OLc t2{E~"AO5DM1>rWp !| w+1a*Gs3E. Q*GX_1sct(HAXm1/&)yF$y-@F ڏw?(+{=i~yUdI5CzrajL7˖F[ܿ\.nTQSW+Yz\RZU I~geVC}.Bg)rtL3heU7e\g?2Nr5^4rF~ps{euz]P8ẇSJ",?i4֟u^C5F:yY9NZ:}? d0E"k5Hps#H?NQSU[J1 ŽǮQn~VJL{WT~g_INEl[vb G ~~5>o_)"Z w֭[_TbsN;صkx7+c~k:TO|||f vV^7:j:ӧO5iDDD_m1׮]@D4c t:ٳiiiHHHaGY]3fk׮8wΝ;h̜9V碆͛71rjsxm̚c _0|{'KOi,Y¶mf5yfi?@0uTxzzgŦMPVVRlڴ }5)~ ,]O?FffM:.]ŋ˗ IHHw}$ 6 ƍÑ#G_#99DB֯_ŋ!˱zj= _N8b 4HP.11/]Q[Y?DϞ=kIC}6o>t 6ԭ[78{sU1raƍ[碇Ebb" RJ1o]F`` 8TQYY͛7ݧv#*k׎eddʕ+,&&-]f} xAAe&M2EGG7Tֹsg8ݻ1؍7X.]Rd1v֭[7c}֭6N[Szח&AAA肥|uRdڵLSXX(ȷfFuƮ_nc:tz]v'2{Y||> b:ή-| sI{h IDATlgy;wV:w}=,,,u֍-]X&;;=cƶc:*uj]D>ܼyNwssCEEqnnnuI&avw܉"DDD (**Ν;J$i6mž={꬯B{бG5kyN!!!Ϸ8X|8֭ìY7oFWիܹs֔oڵkpB:ub`СCDFFXPqƂ-L999ƎԩYQ]g#G… طocVtuԖu?,Flѣ$ ?8z(]+<==xb9r7n_|Rӧ[fܹARR0ba퍢"is(mv(>>M4fO1 mu =##CEJ~~>kٲe1RDGG4A(::<ϳgy\=c{롡f}LSM?Zn~5ܹ3۷o+--e<ϳ2A9KԔֵkWvΝ:;K6lƍ-Ϛ5 ڲ΃ b'O&?^z%cGfGN֢!!!VCCCTmǨ.ٓ6 :bw^8pqqqJuȑ#f"77k֬Ql>66ׯ_^G^^֬Y.]4xg~tAAA`t̚5 HOOǼy0x`k"''999Xv@C^ePPP,]vHW_}qqq;w.y-[ƍQZZRlذZ9& g} X}ǀZ\.3nݺU/O?:ӡ둔$x.̞=n+b1ظq#Q\\ Fcڴi ִ%%%qWM Gvv6[駟SII Z-.\ x8&&D~~>8Ý;wV{oٲ%6l؀2asQCcִsxmf(88x?`|ʕ+YTTbWf<<Y߾}Ypp0СX߾}YPPܹ3[l?L]]j@_[oWJ͟?hтhт͟?_U?x ٳY3%%İpF)?SS~Mz?HM\¢٦MjO?nݺO?#FDZ׳nݺ`O KȖ6ydBBBli:Ə_ ~- b}M: 4:tH2e kݺ5 b]tagyyyj_\d)SX޵)b$3k[)E AL4 C СCI AoE:u*AVuػ+<;` =+6>ٺ> By޽7ol{:^a;R jGPPetmA4NFAAd  AA1"  cDAAƈ  AA#  2FAAd  ѡc'6i && ѱO!Cj=gՖzdC޽K°NuTF*" Ç^s,g%DEEQK  T1ٳ___=z1ѣGk)2 z&Mė_~)S^1ٳ>#,Z柛SdX&AA1b)bbbp1e;lZ"S0u 1lб~=c2=_~%~Уg/$?nVӴnƫuYm۶o_يVX}5Γy|G~бS4>#LTTT`gtlL߸i^ݻwGڍTVX͛q)7|\v sDj3֢&‚|:xnnuZǤd8zہUǪU1tL />>2 Hsc…53''ФIMfgg߷V phcdj^2C.cܸX書x1= HzM6ep!keƎZ>C ԻuV];A7mwA~~>_ 0C} hRϞ=yV"2bʘ>_b%JKKQP_EQhh(ÇQQQ5kך`~ nqPTXr%ƍk6]}c}1ztr@VcǏy۲5ut.  6ҺLR/ 7=16j+ rnߎm+fj9GXuL4?ovYkϺuҵ{Jx[ok7^MzYRN{ 4 >! _ CXDD1JHHĔS eBnF zt>;Eûz˗/45="*];y4HA#DtxcĈa81"jtz\FHdq>Xr\0e|9u' ΌH q<ƅ  T /֭[h49s&PVVXlej77789ҥ˴ ?cՋrpr!>>7nB$A@.C&A,?G۶mσyC)6mBj 0^ gg'ڋAA؟1Ttq—_~776c r Z RZgΜ_FB&!+3 899C![2]v cǎE^^/_ɓ'j5n݊C!-- Z_|au{222zj8qeeeD=[o!88X0]7  1c$Rǟx=x?3r*Q!(7\!H J!No ̝;III3gxp';Ǧe>}'Nرcy@yy9bbb+V`Ȑ!d8<>j9}txon߾~ɢ_1a„j AA ;v O=3}oELL [9vtK8:"k#P^^H???j8˝ Fp "<z"$*#4M65Zk"-- -¢Emڴo!Z TJ  b[ cǎ9Z0/H$2%VhL:tG6̿-bbF]{Z "ӧO71` j-ٳqUHMMŚ5kpU̞=۬իWqcԨQT žQUsbŊZ"iuqˈD"m9ݧ<<<ХKs(++RZURQ5J4i֯_One`РA}ZD}\\\0bDa;~YYA#SslٲZ"P8Nm1ݾXĝ-[""4fLnñ}vd2̝;;w4-X[ڵkrj:u 'Nvmڴ|Pػw @FF:P# JB}RK\^A,]FA2I9ujfo߾/0a,^eee={6<==qAlݺ;veˠmfpe\>/^FҥK6o 0w\A#6EB^^:N_XAg(D"0A&C׃͜rRHEbSݻ#99"66V[Xn͚5Xf 6 pTcTog7^~i nߺ=:]!iE0N >G`sZTЯWox^$ ѠZME)* $yyP4iL :Cu*|CJ!mWV7o@YHA#09\'M$h۶%dNh ]@@芋S僼3A,rؽ<:eb e 5ڋAA zQjjz7ӠVw'YٹtHSY,NGqi(*.AL(KKзo_ڋAA w.ebi8N/ N 5&< e)^N`:ty^$ ~ۋ\T0Omx5c@h} N ccl?v87>AADmAAd  8)8Ï@0uz[7AAd입o-DvQ6\=\{ضqq  qqq0aS,4 n puwE~f>x{RDT(̟3<Q-  1Zj)^=Ɓ816oߌmoYi ..h7sn%Q  1NkW@ÛhPZ\H$@#F(UjAHY cq@ӯ#m${B;w% p 9NNH+箠 sIRUyZ)|2d.2`fΝ m:&''#::1-55ӦMC۶mA~iiixHHKK,eu~;FpmsAAAv}OMzꩇ~2աe˖=z4RRRѲeKlǏGrr]m'deeժҎj[ ..m IDATB Ud̅3Gfh׵Zk[ٸ5pdFnV.5dD} DӠ(UOj\ٳg1f,]ӧOܼy#GD޽^:3fk׮8wΝ;h̜9Sp@7/_cZ֭[1c 8v<<<0k,A_Uva6fVVΞ==z`Ƽt= ٳgqY 0GFzz]m'Q;liGK}:ƍxxx`ܸq>}:>:m'q`Νx'gy'ك^z!$$D u#KujԨ&O ooo=z~ۛF… (h4|Vy[%YS]н{w㾻r UtQ]  , jԸZuhK^/#q4oˍX]Fm.~ sN[!Cj}Ylڴ (++ƍѷo_e<ytϠAPPP3gN/B.ckעOo?S0ĉ1m4\t .]BDDy׳7oF۶mi >|YÇ#!!NI Cb߰g$''cXpŨitA#Ku v؁I&&L>~ۚ5kD$$$ ++ k׮B:u ?^}US'N`HJJS%'vptϝU *T|R77 }y(@"fMe n捡V{EۛqƵZ+V`Ȑ! ā<8l߾y_r˗/ݻ꼦N0b3fMgaƍ9s /@f:,Y~߿{`_Wr9-Zݻj6m*оfNIk׮wӦMÚ5k ֭[W/˲UW222pElVb!C`ժUu:}wʕ+1rH^b A[m{/// >#E1#P^RMUVQ ^CM7E.о[{͂ATCU´ ɬ.k͚5Xp!N:emv¬s"&&IIIHJJˆ#kVСC@-lɓ'1i$!<GNh7gΜaТE  22R/u8Bff&N8\|Y?-ݎ+((hmN~0 TMj]M;.ܹG@@QXX;w֩U- YppY{ ו6)}G1Z|16FX0x4H$25nRyϰk.dg!(^DpuwEPx߫P\Rl݄?'O?A^^pZӧ+ctir7n+O>ANqrr”)SSɬLӦMqYDiLM1i$;wHNN2/n߾mu1 M4T ^d1MdV Zg4B*1m[ j*83@,C7]fgaسg1}ظq#QRRV ._yl6l@YYʰ~z9t>[ly괝7nܨ#Ӻ~DGG "0(Lǎ-:zT/.]`ҥCQXXh7M6زe T*rrroX]6A1zXb諲BK^;Ѩq#4irW9ƒpUOSAwQTǿ՝Nu:; } ۰ 8^EQAWqm"^EA@E˸̰(J0a K$$dO{WGyINթSNuԩ/=ߟ 6믻؈gl߾СC^xFd/^4zE^HOOg,Z[/7o\xf@w\_~L8Df̘1`gϏ}r-aq .d޼y$%%1a„ȦYD֭[Ǘ_~IJJ )))_⣏>˓¯k=vߜ㨹miʕL9S@#d6ݒQfBCZme؀axL_ﲲ4iv!pZ {9sRߍBVTE鯊BQ:MN۳Gz䝟w:J<`0ѱ<61L&;%/ɲ~ڵ$Imv>z;#2+oЫG/ڮSseΜ9v͛.*EAŴDGXdxSB/ޭG֑PjFb 1!Zu,&&3x`FcϩAū5^E*(/!&2 ;&| > zrrME$,f z/=QmD+M:SAV$7^yHBO3rHfOd b԰Q̧t!No~mAApjG[TUۗe11WOyS-  IX"RS(.%.$ԷRO5 (u3s  4BAAI=F˿>+jHA.=VGUdNf d:2hU  \n`z#*0Q^=_KcArTE&}jFUT),v\[9 .Sx?!@AA:E*w?(|N#Ӿk;`*J'o0V  BӁ~)M]Tcv@;ƒyF!ZN*zYFP#eT` -AfuG;mɾ'ډpFwk*Kqd\.^^7%S'*wвOfӾkUUbPUQ`D$Ah_j9{L;R/WAM]{LA8M%0(oo+:݁?vV;AAn{_B>q>4qdߩJc`G1!tZj{*9Y`&?ú\{ܹrQavs²/sͯmމF}p*;Z.{lnOsT}\ZK!ʶCeXFrYߝW;Y#κ& !_mZ$HߠR/q jW^]Mډ뢝z`t}|$v 6! c)8[@R$b)-@Ml 3yTU1__w~y%del'C#˯ Oa`)NJћ>FN?0;Soo1J ͞0) F| #{OUyz1:DA' \_~m2ͭ km`nEPrJ:ep_NY$Ft)&0w8N>U@ՅNKl[bYFхcF0f稲6Էt -Kor519[-zD`t}s\֑=J"cHD8A!AtӭN~&?J2IvK6)k_o:ytO+(hʏ'*}cHds Ov\ĐNtG#I>Qᮛ9w%rz'p9m@GSr 3#>u]?Sd]Bq Kjp5g6UgSD%{UDDᄈS]2sp;ĻlvxI~s=ñ +z >z f첏Α:@ߤ FgX~so.鉑%EQس2zC`ړUAɸlN/Ĺwڙ"3l 1!>Z#%<3}>/5k?t `xp6|OA_Lsc ŅOF:/råXVVſyz\R9UhT4u΅i56o 5''闓Sy6tlW8]dw}9.rk6~ږbH;~KUf֜F/7Vg-ɇDyu'u֙Mn~o^]"36{yMS]t z"NҾK{f!u{14 F/yB=ϯf7m;2c04hڻ~? T1){̓ӥpRo/LHv߯[\Ε[ٯ-Y9X~zoΖZ2l8eWMպ^ S?z-`n]l'6Lc9/SVp|wG{\:Hn#zaaD0ɿ<:4AzF GKo\6xjDzh$cJUrod``wS; ?/$ ,ЛӦzoZS]= Ѣ0GGy/ԙ6pnUc}& ̲z?c GV9o6>-:o^ -[Tܨg{3r=6x):hud EQ<h1[:EdL$A.>z||}M%a 6zTZ irrNrﷱZv+m-[{j(:oc @ޘvѽ#1R+wPF\#z*6spҽ_X_kv7-4>ʯ]/% #M2qGH:-V|fױro/mo=#0PGɮct lmJ'w&aw*:^FRwT p:\ 5NNְ3u.[_x~ EcQV೴suUeqjk.nC$;Re C0xQZ`ѲF빾iMs;2G8|ysK<~{:g~E>-:@tq](+o%Vw v9B~7!]BXbͩH.YFy@/6m$wu[߽v%%h4:zȘt:Of-EQ\m&$<_?_KkIDkIi'ĝ :G"Dβ;^5n$UR{rú^JMW1x;mo1O~YVN}uDĴ #SҚ,˘]KfG'C<,SQZ1ШdqWu"!ҏ'|:3(BQTw\ a1Ա8y8}FRyށ/Xt=W5 IDAT^G,Q #Q'7Vc ixBhlv!W0w6|6xs23m$ قé*nA ٮV ggse6h۝3VzɃ} pxt:ށA^Jk6gS?ڵT'(ĈLM#C߷mAh=F }Sڷ#G D  7[`Сtcl  z`$*HA`rwQC  \V ~ OgaB$Ҡ8dA۰qp8)[`%ۨq*xvNg_NDAeg (@eU 5(heUv@VeNىKSrr:q,xX]F'AAh]Qxee 5BdUFR%j)h4(J`iEQP}(*^R  /0j((8Gqq!?<"jj8Nh+98.TUY**Q\pP<2>`ؓ  HT$ɩ%D.EaNR.pT;*O}Q2^-(^xU8,  /0r$.l"s8 4ւIBNU $-"#giB#9qV^-  WZ崢(N[p j I"}dmmD.=NN2N qi&(6ZTﺢn(]v%66]裏1'|!Ch׮C aƍ ~Z.v|TQἄZe0ӂ-5HZ5OB=+2jZŹ*KUUƍ`޽8qEx/?Ζ-[xg9q=[lsϳuVfϞСCdС̚5;vV' 50ڱc$5%Rc=u$YBPRKںP$B։/ *rKj/k.\Çȃ>h`00h >F=q&L`00~xNܹ;wӣG. B+. ^~EVEFm5W Ⱦ.k]h*HޠZ$ڭ23أA'C\)駟SN[YjV+iii_jj,/v SNxi5.7 I@EVdAAF¥''lvƺooݗAAˑ}6c@,YL~)\BQ8l3EY4HK"Nl QQ6TI{QAq_#K [6'vylV;jBCsVT-,FJXJ(=BiuGOc1[^AF#Gyi iҥ:o=Qm8{ qZP!GtĪTW&  \kBVKǤ^l9AF#6 AΙج6_P$?'lC),&RynMEAA _c NäYPQj )^Ӆ(*v.;!ʔ'QcDƴ{̙3GEAAZo`ҟ^g2>\e" kgd<'[*t >m۶?MAAhŁ[$I{QAB#@AAF  n e-_m¥gs=nAAD`?RP^o/[vlawxwb pF,,=**<I I/%y%l޲O7bc<5)F AAn1Fy/=`cYR]4zMaB LJs AA1#G1[h?|'V 1HeM%ee\eL2)Ott5_]۷{Mo?0/:k_s \Qq,r<$P^T~}2.Ih47WUU,f ΉD^E+VK/׿W_}foʋ/˱Z 7~9/כcqdWby@6;' :^Lr:\֙YVVSNK.k׎ѣG_48SHJJ"))SNylϧSNtܙ (pvڷoϽˉ'̷tRbccYtiy 6zUUeСɖ-[߿?i۶mcĉ$$$ХKfΜIiiiJ MmӱcǸ[)ӇiZ}KR00?Ϟ{lImڧ+v ㇎#2)-(6m;lj'iC݈I!<6J[%_ӌ?!CwqqϟϦM\fӇ{w^zOc{}TU˫fua^~e>fo,Xӧ㪵reQm߾`矧_~uP'N^p$** ? >^{ͽ|s?uֹ7o/zܿ,ZիWӳgfCP}`'ӱGG:Hۤ.dk̄GӵwWF]iņʣ=&?g&LѣG9z(Ǐ'ta6kjjo:'!!̪U(//'11h)//gժUu0a>#337p3KL2e˖m /PY ,{mMܹsOK3n8&)) y. (..v/,,tPMϞ=[|L_PTTD۶mq;0arpF}` 0 I;-8,Y|bc$KlB,qxW8_2 <;{nfϞ1`d<~Arrr&IڵcѢE<`X~=iiiuvźulyzyfϞԩSMG۷M61sLVXA^<Қ+Moml~ &iMM?̾}رcuuY#""سg>˻DDDs͎O>/X! 96+zO;Mhd(^^^J.:Uo/F'3gZ\~ŋf***߿G}e:tŋEy|?7|B y78qb把_~lܸM6Blll3=zxt_0sLrsst}#|rϟϺu>>zrss;6o<(++cܹ}I&ϒ"33ӧ_6a^|EΝ;Gee%//zGEE'GhѢf#00cз 7H`Vsl! l$M>>&rtQ*+g7IOhp} =?%!!׳m6Hrr2/cǎm0ŋFJJ ))){Æ +M%4MWӧٳgFZXp!s%)) &{l\hd23xcĉ$&&2cƌˮ㧞z3b \qߐH>c>c~&1m4F-JFH.YFyYG6GۂܵRfawPRXF!>9S@#d6ݒQfBCZme؀axlFa&L'dРAm-ZyvL2:Ϥ-ȪVp؋sRߍBVTE鯊BQ:MN۳Gz䝟w:J<`0ѱ<61L&;%/ɲ~ڵ$Imv>z;#2+oЫGaÆ뾌fGU&LAkUVZT( o*S;|:rV%4"S AAhN#*"i%%Dx<ޠ'7+}NJlA'MhpA#7^yHBO3rHfOd b԰Q̧t!No~mAApjG[TUۗe11WOyS. B47FIĢBiv)q!qY psQ7Ϗ93=, B.AA  xa/ɲ̖ҳ{O   |_#e}w+  7n`$2Rs`ȃD~Q>qRW-tX,:vSh@AcWޣ{ &86-Eܴ\!@x|8g ̟-@A#0r:=~SxIDTBaw\ᤲۢj0L,55)S\7剎ܵk}uMfŢq]Z]7e1=&)r$uIxXs~p, +Vॗ^+zߔ_|˗cZE#AQ]os^7Ⱦ#yjrp`9qFg_eQ@:u*]t]v=/O:}GRRIIIw}:u#`?>:us,XE[ttվ}{^N8QgKҥKcذau֫*CmNlBwO۶m'N$!!.]0sLJKKWKLN?vzk7%11>}_ߴVǎ}oߞx_< /AD`tMgρ=DM6tӕ];P[CǑevP_D6Ĵ[n$N/EqiƏϐ!C8~8gӦM .3}t޽{ٻw/z'pY4m֭[ٵkk׮mY瓟޽{0`3gHWUV1o^{Eݾ}?O~|8q"/U- 7I~|5a$wOctёImq9].UU1ט ktۍ& 6 kGz=L&ee-Μ9L0GrQƏϓO>Nl6ߢu瓗OBBǥUVQ^^Nbb"$&&R^^ΪU3a8g}Fff&Ǐorԛ?0e-[FbbbJ/KdYn4l ͛7HM7Us~S~PL&JJJL/))!88EXzaahzc ==qƑDtt4IIITTTxsH\\W Ds'8&xHN |Y|bc$KlB,qxW8_2 <;{nfϞ1hd<~qSsIDvXh?<555l6֯_OZZe]vn:l6GzGyٳg3uTz}ѣ3}ӦM̜9+VЫW/J[%h3jٷo_Y 27֙qF|={<@^^^6m?0#//cǎչS277ٳg=zĮV9AI#ÁfESc UUiߥ=YG%h4p&w<,^5kPQQng< .ӡC/^Lee%,ZK|RXXțoĉh4WTTcƍlڴbcc뜹3g$77_#F˙?>֭ m_ }&~͌13g˖-cTWWS]]͚5kXls̹j4i>,ٸ\.233>}zlͭwLۼy(++szZ& jun3-d?1 ׇ؄X?Jeyef; $$$~zmINN^`ر xbHII!%%t'O4~q-p-п>wzzzz~>CV\ɓwvK3t[_y6lG^6_i/eѢE%>}={0jԨ*))u_ҫW/zŖ-[裏<.^3gү_?&NHbb"3f̸:_p!s%)) &{^hd23\rrҬ'KQ^VŦ<8;wԷ0qhOGT)"#y>MrdE!'+s||V[6`3*v؄ x'4hu[E2 Y5eRRRs~IӫWst,sw27x͗= 2_Ehp(ohM Њ}dH}+czr<`#j3)3}UAn5ӭ{thf/;4͍XQ$E$P]J\Ho6s  ܼn c9b l EAAF  ӧaBv,Dp:edYp *ˆ lERtrɏ=( B O`3OVUӅUt!.TىKt9PUՆrc`}]=) B LU0;WFh4P`&+ UQQYXUQN'Sz2c#( B Z/ )**)())baq؝TUPcap8p2Z)(HRmu!yX'AAh]F$ :/-YrJPUh48dWm@$2*.\.TUG*I8$  W'V+;e.NqYvB)//fq Bv2d7nlr?}vxo߾̙3sΉ( 7[`rp:e|}ٻgÇO?ٳ  y7III/ 6PdY&mC%::mۢH؝iyK;oCnٳ:t( :Yfcǎ<8p &N2eh ;v IR_?{wE}SU餳/aЫ(6 22\xT*HTq. <\QʌF@%%@BBٺKU? -! czST/uN F\.*.JJJ8z(֭#$$"V+EEE4mkfʕ~ CK._$<SBBB ''>}, nAd 0 JKObU^깐/33ѣGcXxw޽{+ giiU㏒?~B!%cG^7񻍄r|@dd$>(>,Ç'66͛7{n-]F.Yp!Gb?56l3g 0 ?OPyyyٳqqaF-gBє /аP^t4ƶ[yᇹXd q-( [i&;v,k֬f3Mysݻy衇b 8+K.ٯ_PF {]rB!h E@W|x]xub!Eq- TUEu|,V ap8 f:Q= 2RL½oUc={gCQFѠrz!֯_餼9spW˙(B\.h޽{JCc`:z}_իg4 UQ14p:(T?f&rz\P&OɓYc5kt6gټk,Z$222ӧOx3fe 11Ç3vX9B =NyE% (&*2 CII C ix=@!"*T`Im ]ȶfV9 `r ![0&248׃aㅪܨ UNi n SpLLӃ W sFB!v0YJt=vp8pW.)wft3LSv4-NMYjn<}t8BoeM6h6kP a x"("-۰Z5t>NI8M2B!~>iO-_AHX$ šp=ʑGzuc1yHj@\KbJ"W\uMUc撓þ}سg;v`ۗ3g((~^.yB!$Rvٍf^XIN\Bۿߎ?FnN.?DQ !f{[7&MC <|G?8?~<~a8p ᄄ0bv(;c F?LTT6nݺ1^ 33'x9so2zhB!*^p;m6bǐ:-, -kC:ԩSfذa zYYYtsΝʺp8X`={l]n j>5}g-o)))okj{|v%%%DGG=/rnUeȑ̙3 o0j(AB!ą/ /@}wwGrbbikqwGꨚJeE%񱤶M;++F7zV͟?^{ zTVV Tϫ /ry???|A"##)..y i!!!\+lsw3c >cv… 7Y!/fsc0z//+cE_0znsD%Fa .YwgᬅtpMk|Ebb0 ^z%]HdDdZd 6l߮˨>ٺuk۶m_PY9F۞={jժ: l6Æ c̘1?&B!~Qa`? 4 \.9$4n7*g`X0M6۰o>t]?T@+V'0g, ϑfڴiPPPiӸ{1cr1MF~oxbJJJp\l޼Ç_PyO>$AB!.yMQ@@axG};GhD(^[@{ Iصyɭ ~4WVj|}0djn`ԨQݻ[o(۪U+>C^~eNC<#Bѥh̨1*q*ӱؿ{?-Z` Ct֑Cqcq;}Qq>\T[ג(L4I&]vvW}֦M,XpBxJz^wg%%%_7T2A={$ ۷]vmNey%!a!m(ʅM}X*`=BxB ĉ'|{_ZS2s-  Y\3Fy93:u2vi1cyls9BNΝׯWni :vdڴW~j<iEyE$%n-}}t`؈o/gBqPU7xkѣ3fLoyM~W^xpk8 c@9H^Dx7<  `˳,B!.p9̚9 [z|>ibs$QTWqF=6J!2GCcԠ}/ Q_}n8sd2^͐B!.n>^ɚ-ke3ɱr!)wg׮XkYn!Iٸa{znkƛn>v1wK !OkY'5~iMk%>!B!%-%%_xm&%[q8QTDEH)Ѹmfi FBqVVy-cø+ S J';>^Ni\d)ҥ#`ٗp^4:xu[>~#!c|ÆCuUX*Tg;ʱډ#u!g^ҙ.L#mH@Qw f.[ϋ#hC7&9׻+H!įl^v+;%,%^LG X4MAQW)C71,AmGLh~E &"9si*@2m(wM3(H!iuC1 CZj,QBjZTMA=PЫ2N]?J.)|?)GP|],-B1 TT 4v:( )` 8FrB$=$w/0w&f-Nיy:&x  'K&H!~eŎ)SHo~x\Cd,y_{i6[)Zǚ>}:6ӧK_Ug_TdaȭCye)15O IDATcnV"""[oe~|2۷̙3TIWB4kn)ٶ; #YXWc\q-Ee*Ԗm1| fGQavoHLϞ0`޼y̘1 Ǝ׺>Ůܶ2v/z+Yi 7\Ն xi9o> )SXd |7x#^7nd 2Iu#!#vÁi[J`jJ[l?Û,*=aPx/HFMTTW>gӧ@xx8Çr{je٤Suy 識LwgE4k֌Yf&-- UW]Ŗ-[|*jֺhӮ\~ivukKv~&{7^Me+ڹ3yX?*.t@Uz;v,Ç',,0رcy饗y_~%w}72dHC FB+;nv^Q^p C7ы (6dBQňǎa` !vNcy뭷5j#GdܹlvZ6oLvv6L2A7mĦMp_~e~'6mD^^AAAV+;<_ao#!hl=XETpnV? 1qN_ EJi8M腅w;LFEi9amvw͙3"BCCy}3! })((+11~?ѩS'+o|yY,^s]e׵hۋ ubuJ+(XT BU!Ъ4LP!fq~uEn pQ39r$aa[S ]iBL ݚݩڪ'nԫDXZݟE]=*_`FV)V#A:q_N%Ks**}ˎYx1Nwrrr`\8;nyyX/5wku]-T^F|i&V$G۩pWQZm9k1 պa`e_ٽ{aٲesٲeǯ|AΝ} aժUD4m% !DGZ]W*J˪ưb漏u:}YoU;sllӦM|ɓ'3qq +W~LZZGZ)w5Njӟd~_eB4t|ϩIϧ";}| Vg9TfV=,d1 @'P!m_$?T*ނw5>mk0i׸ ;wy+|!iZV_ !ŻgT]4LOk,PKQ0TGTvXwBs'Ӌ8l'OH35R6 G筏b0vcEUsέ;#H!i֯&'b5Y;wL`l _((/ŠjQVSY0%^/[RrєjĶX :^z"O)..m(*iaX4 7z}Ν`$u\8<ǎ#(]>8{"c,*xܘn7ՊjaPRVAwG)9s~ZhAHHT%Ҷ?wIf:Pra*łT:=ju ׿%"V0\.\z^Gqf/^ќ#([,iIǃPľڅ憎B9hۋ.wąb+MU5_7ϷUU7}H0Bƿvy $!>i*6&S|X^P@EX&%bYD8DӲe qq `t Fw~ ÷x^t]G׫3MP5 T:݅[?w$ !Dc_<9@jHbb"nJUUUT\].Ejbٰ nU.lf^lgύC7\=|ѱZDDD!ˬm#!MRMSOMhVcҶoJ0B F@xx$G&yTHqȨڃe۶ѱsG[kiWT^w /7ѵZmm+H!%f͔T%J4"#ر#1͢ ٤mm+H!(XVR["!!ItKQ, m;m+H!;YX,V i[HB!#!B FB!51="!B4'Fz!BlݏIENDB`KCemu-0.5.1/doc/window-savemem_small.png0000644001050700006200000042070411131675406017625 0ustar glaubitzfbedvPNG  IHDRXK}sRGB IDATxw]U^$Bz B(M4E6QI *E@ ZB$ޓ)~{=dfrLy~ιgkגqoM!'HCB$P"E` GGym X")&z9ם5t쌛1PZ"E"rwu-[VddE[0t) +&$I@ =$)?Ϻv+NQ8I8id:fy?uR[.x?]q߾ M(E; U3V1zD=C+A[{cF5ti$CPr`,KH  C Dɲ.ƌw0SYF@+a@QEôiO0jaaK"0t}u=c0߲.Ǝ!UVJ(a˜ᔗu#Aƨ(JI=08A0 nZ.I;IB58ZrcRe$IJHVdy/~RsoRHk +5 p,(ĺ,b2]v;.mUq٭DQ>Y@(җ e'j6cHlN4`˰mL7!+m% ':n=&6M! UM1uHoB9bގY+u8W{$(EA[W70fMriT9xmv<~(/s "PSQjaD)q0[(u* ?haC*5C}M9vn?HJxz!<\Aۆ'ovtCQdLJ}u)Xv uB7@ aؐ Z;<1V35%hd +2[v43gZ'c[ן3*aHLRU vtbR⚎"K6<0*wc5ҧe.dI0 t]aH%$ F)GNtUYy;~g6v/.ͻ{Xa7cF`Gs;r7`= BǏ7j6(sۉ4(%.en,I3p$NMՌnHEGF,%̑rݑ M r1"$I,*{C%%J0>,Y)?8q]Aێ,K1|sq0n`R$t!Hy,] #x=nh/#+ ULfJ+?aǟaE;$1ډlfG3g60*ψ*3:9QRF-ŽLXE9he]TXil0 d)360GPv`F4ԡi$`??75V D2"nu9{n`2)40̈́?+a4]gsk'Ri!hmiqt9n]Av7X-4㨪٤*!J*Q (JSe , |PMyyZI76Q S,tN/VmlmC4Qkb&Tn[K[-M#Rʆ)Гj.Ffltx|l+6X\c:*ʜ5#`$IXr>YgJ(Hg;^r"xC8'CJ5QꦞY?@H*%n`]ls#1ى 90>HPD2;ya%ո-g;VƌcPe؜e4up(;?VFen8o۶ogDN/A\s/;Z9uA>t;۱q=a1ۺP©GEIc"%t90fGqZ& k孥;1OoLGa3-v3R0>k,sWuW+$m,YWknb*N;*7k Dvs W5󃓧8۹FfMFkW˿Yo9;uw/ΙNg;9oDP [ѷgoLǮذy;W65$$R!TXPdsNwHf]5=\xtFֺض{k3{ w7q!|4y3PT<ZZoLSfWR?r~_idEA~dEIF |E/sM7TVlhbծmA;%[ )1ҨҤH4ΐ } >L&q_W$(1HDc̰΅\}b)FozC\4S8p3M +*[;;ymI Ye3';a?k%ۺ%*ݼYL]G5zK[Bz1LWG(;đSƠebXM j`t})K5 iTT&uM4Ԗa(Ckhmb{ssI,d][m#'=bZZф3&߿ͤQU̖шى"K pMmaf[EaʨJv$J fʪmH(LSM8C*$׊lÓ$I0ı3FEakLHii{R+.vm%8UQXBT@YUU [9kC9}XbdI jĿbш! VNIB!0Q7G9 2C5*'Wݭ:t!0/. Mk(.~`8JMfʯ_ȅߘUM`G%q&[#t ں4 l#܅YԔXsȘj(YI0c 刱=}8pj3ʆ A]&ՙ%Gp f76E[8d\=N`$ai3lc+6n` oeehIh-%MIՓclف]me\C65>*KBÐ2Z{+aa{+_?d80]nD{5|ɣj29f$=O[娪JKWIb6qw%vj<;#C몉Dcɫ:cjV3>L/k$#̚\kRb(qZl*lm67y&#7Z2so5^Y]$Dq9GNZu=a4 u#IZc>iHHE"QK'rBcg=kظ UӇ5))&(r<<ҧťIgZi~Jt;^f*5RΚr/g}̼NBTU&b ?0џ(ubDz`vZ =>LFjlmc4QYb%ibvʼnzWlRh ,HԻ4=$vyB%BD3B#H}_@A@80C܂] %a%Hm IE I6TԸea4y L67rOvuk8K*0TwQ l*M˲g[G2zCKbgDyy{3LF #.evꌮR D4‰sAyy%mԺ`X@!1~VJEy#٬c{kC}mEzsH^Vլl 2<=Tt*Kmt4,NO%FUJlnqZeSADp-z׸#$T3^*!uf&͘Ů:jD"sۅ)IH4&{P=!0dH-hΝfCV"C-BP"76 ¡a`Z=Q9q>Ʊl۶ݻP RP"E8!1jJJJ0"qbqU~&DKsCp E(BP" y=WT$3?_]UUN'N3J_"E(W>oOV ݁k}EFZ"EKB`ۑ%9 PTX4g0xӯ7͡S{v"^wmd*ӿlmgKHƘ?$W?!ߜ Dw9ɇLF/p"A+ "i@QMxoYY/uR1DJQ2:nAafZmRr}FŞ!B4|d,e"ls׿dZ6B 5k)d39<8 +"8HE=PiTUU8yIFeue">B@t#eYΞqHص}',s'iH,w` =U[`ONS$l>i2rjsʷsͶdsIA52#X+i϶7a ߤJkQ"@4HJ!0i$6 (AJD(bͲ5C0)8/UA$`:,~1BNKNJ_.D!mJ-]>[ݹ?l_\ DV5T.T&\;ikh>M7\t1 >4ZtMoxx<-fvmۅȲLsS3Ǝ2i $nd%Q4 u\>K6e p`w8I#A$c$KJጡ dId3 _a`Xp} BȲYNsP5mF>;V峣 aaE٘E!8OсH~/h'"Y, $IBeUI8 t(PFfMѳf 5 u?lNNTxNԩVu??l&)3uT}iN$IeɦR5\x RCnʵrPI+W\ P:GWH_$J^Jߊ4yw$39 0[j7+`ر<_Mu1cpu%s)O?Ü9'0n88}Yl6nCصk&)K/ӧIii){.cIL>_:0e)d\/b֬[`Xg߰/EvqDŽ 9z,^y8N*++9O?ȼy󨨬/yS2s,Zݎ(_☣fX`!'_@KK MuU˖/䓿mݎjM3.>z>JKK̨$]I{{;` *Yy(//gϞ= : 6`X}஻㎣;ٳggu&o ͖[={'N{d2PQ^0~<0ax.2^ozK >3{T&U_v{dbe+m𗫭BoH3;P!x̴r1l͵^r=(UN d7Ni᠆4OVf*3R]{-/fmHD4Mok׮/' RSSK/{EY|}in7( 'ł 8q2oϟOyy9￟c:wI?":r&ee0[sϽ1=4mV0DVks;GUe]ݜw}=XV$Ya w\{.vE?.;3JV\YgƍZX,OEEMm-k>N&zQv;y}Y8L:r&LwIOO`w8xWXC9昼]UUQUY4N>zSLaܹHB8ߟ')*7ldf3ƍ9e׮].~+̹K(DUUn{1lAmmlظo mFUU~ =P(T'`9OubN!N^W鿁b+Go i%@X޳{6qF6?Oi ꡶autwvk;7#Bأsڟ2{ yQsyq:ƎU+Yx1 ,dݺxidQGګIII /fǎ*W^u-6_ς Yh1kVf֭<)--M6g:A 19Ƽyl޼yo㤓N!a2[x{yl2,\ڵk;hiiM0% = .da^{5{w}o.aW\Krrf:_VvNؔf3?Xr+V`ʔ)}%@Q6Lwg7`?cMh4#BDh6^z۷k_Ygܹsq8^*}rBu(p߰~Go}[l߶?J1y `͚5Ȋz=7.%r`6 }[#3H7|3]]]IgFf}4۷mefN8D&Oʮ;hllL&^VZ M7H8wMOOMMB!imin9sxGF",X-[~I<+g:%j(X/Q{3FHG{$1eimp2qDMKs{.CjkYh1&^nl.O!L\D&)1_,j+tK{~g+D _+@B1dr\w#2]|}lsOw |p r:%rD&TEl63~xg6*qp:hmjMkXd#I"SRR±)7#g? > ~z(i<*++^CfޛorI'QU]Cww7\p>OH;X?p((YuQtA,]3fp衇c }7p(!!J3\L&H:Ӥl&)S}'I94Ml6#v%lI{.B`24zދ5 os1iD?0<$I;wn:<>j'g1fSBqɲGl)uX-VdIFQTI<|*)Ӱ 9aQj _ u6(@q;|?P|^/o/6SsG4lfƭAUM&c{<***p8iQ+\Cp zt]K/pGUW]I0ৼ </]>}t қw6W_e]5_c>eM ɓ8-G,YGO?͏*ă=vbJUݻ)x 5رcwutvvjɿ555Hriq|>_~K.X4`u5h6;-M|G8}Z2~q|A~|,cZZZ7|Y6[>-dB&[6Gly>>5SB*WϦ6̴:5 Xh"BŅ7,蚞 uj x//a2yc H c3g'L`0 /Hkk+y<#fJKKp"> %%@uN>$2ѣGF)--~_19p9x<9s&/{Z[0L ے$8E b{CcuY)rꩧ2mT$YiwO/,p!3+u5)愑u!͙=c=+W0rH|W_{+1c$7D@$( 7p=]v9UU|{2ojRwu7" Ghjn⥿=ԩSBTWWȏ~t۷l6ذq#ؗe^#@j+U쮻bgQ[[ r~ד>3Pg\OmMM- `._*4!y Ʊ&@se `B,ThNBcf[C Q'v F2i435[(lbeT溻yӼ95DHV+s7/z?ș sq5ࢋ.{E?8}5"}3`wt|xg|~}]էfK/!ـ{_gh4^{$UaO>C=kaW3|p,fs)ulƤ( dYg{G%R^^Ɲwx9X `2GّGΣǓfBdIrSN>.C=4VZ鑇ڟrp1mT'3#Ȋe$^wjbPG.u'MeС0 6 \e39;亚I3B,_T"E$jmْd`Ҩ@=H AI?ȗ˒H,i 145 ߐeX,F$nX%84qoښZbNeK>ahC.d۳x HZJ1"cDRT]L(i5lXBVkV'n˒izK#rG6BQ> %Ijf$H$a{mjLDadoF0ށ& HAwrM7f* /ObK q{3 #0wS޵rB=jSuNPR**sɥݵ膑O@ FUh 9P`l6D6yEk'/G0/ 7,>xEWi}4ߺSVQFiy)>O"J&v,E7Dl'$ĐIJyf: ./Vf~uSU(fm\x|M9gc>UWsݧ>mHzCר.z7͌ dT̟&e/_a]_3ZRV_I~wn3Ď/F:Г$ BT=WB2llO<@ z}i0_B=sپ{ww7șy0BxsK#v^Kb"~4:WF"&$B*{u"GQ@BQ$Yh4ۉ/[@\D\h||c&j0 ĝiґ-w,(%Qses\{KH?lr0'|8h;_L[R6|w$s]q\/F*Ei4W`s4ʒLKSK,twNR"t{rR SP5[Jrtw,3C.)b1rICx+T:fRuƐK2oKO2+4#@< Ǚ-x htUχF MBU|eШm6Ә\=عhЙ4f"ut^dO}-kB>>Br9=WfqO!|@5eRHsrrmvR;~ȷV Q{^)(3oiH4F99|a Ʒ>VB+Gs2ҁ^\fjm _,}Qzf*)E<^"i@Q G"kxn"仪{/ѫO "E(Bd0(G3Ҕ FkPpE(BP"4hoCYyy>4QW?v~_sE(BP"7noEe%_uX+BP"7X>FIL)S"E(*#kjE(BP"|A c;SsSt]'C{0R!cvBE(BPT),3tXEVlۺ5zqQdzY"M[ڰn-zX,㒤Hk H(8v%ёX $2 IV-2NxJg&KFr\b1BPvxÆrT>b6aHGg~شiy=yl}>ZJ̝;Wtww](/^,֯Y$s.xAuۢϳ={ěoYPp8,}]huG\P{ěo-7m*֮>z-UP-6o, s_aTǛoϚhnnovA;uѿkֈ%K-DKKKk(s_իҥTݻy`Bm۶Xre}By [P ,؇N}>7 C1o|}ܹS[|XbEAuرC@ܹ:-[.V\癦7@@!3ܵ?z|7˗~"tM/X4&bш.f '<=ݢMtv +5Od 9N;w䦛nJ_UV֖(۫"gP @:g@>:oٽ{s pm1 SI$snV|t{k׮[oe 9fIinj[ǚ5k[ٴqcBҏ&.w}Woꕗ'ݝEWW7x#˖.gmenNb v6oڔK|$r[G|33?`ٲeylٲ9o{x,_<=>_|z֖Xt)wy[n3s/===yO?nf{]" rw7<Ox㍬\"8tM{}Guׯٶuk^|677s7j>xGD[۞Xhw}۷mϻ_~99ȁc~zi'1{sN5xqS455O7UUٲe wM4b0P@ @mm-7tX,}G?Gl~&ؼy3\=N=T"fs"h%Kx-[<׏>~۝3@[[O=>sҥ<} >|8pCY6\tttO K9⳷O}O<ѧu;.z;g˸q/~_j3ꩧP%:Jcڵ\uUs1D"t{˗/_CcƽhѢZg?dd̼Ŋ+x饗SDWWӦM?i޵0իW?<줱k8-^LC$VZ_Occca5g!ɝ޹g}uϪRQQv>ϱ+{}f-[jɁ&OYZ<q\.xUUikk{EumoTқc5FsM35[4j{CPbF0ԡ s?t3 wkk[qMt* /B-[CÇa4q5tH$8p߿.]QlZ*b8s nܸZ@!,, III@׮]jz=dyx"֭[$êUL ɄP T/bHLLDYYT7"** ׯ_VE8 uIR8p@\\WRRHMME-C mذΝCLL j5:t耤$|HJJBvv6uZ-df -- -[i&$$$@a6R)rJ$''#;;AAAj@dd$`6"86H]yyyHII#8 _^NNhw^>|`ݻw69s7oFbb"ѿ0 uŋ3ڶmkfq޽GEll,{w}8cY"`ڵt^||Dvfw`kyk?[bZ񭬬ą 0qDM)My)㿤CJrڶmZ R _-\;wb /C̓ع3]r9rsa?8;; F'vaÆ!$$ X|9@\(((ԩS1i$8::Rk닇~47n܈pI-ر# Vȑ#*4  ggg <^^^6lUmOh!!!h߾=ڵk^zY 'ޠA^z}VYHHڵkǡÇCbȐ! 4իڵkA#FГPqppaO!CPm۶ 7J7Q၁Z E@@:t=z {@3z tԉn߾=w 2N{EC6mZưaàj1l0zsȐ!pssC>}ЦM f͚aȑARaذah4>|8שS'=x{{pvvƈ#(޽{UVҥ uF)K`` мys 8>;tPo߾hժ g޽ѲeKtVCRm.b6uRm2In+==`bmx& kal՞ DaXd =~B5 o6 FU |ݒܹs6l}zh0I<`0QV '''@zz:|}}=dddॗ^lFmm-V^' VXK.a„ s=>vJO$^tD:HR466l6ӓ,9OnllDmm-~:_3ғɤ5Lzu' F h4Rie#uSgL '}70 z<9Mz34lD'8Y^-jen2(=U0cgBMihq+qNH ԙ?ud2&OM_BPUľgZ/?gE7çNG!=za44< 7$דdds#DYYN:˗Ss!$$$ 3a{9CHH/`̙2dp%j{.5ܹ2!%vg/8/8|oHv1L6!z/P!ӆ=RB抺:O,12{M<+&O"&O u c91Zqr`o:,ƱO|ϗ'gv*Yq셟x a|`+L Èʓx2YOlm|P23 i&A‘H$pssٳ!Hwo߆D"AAA D4]'ZD"ϡG-|gzn݂D"Aqq8>!\]]_pEGGC"߈#Я_?zgϞ8\CsvvW_}šwuH$s : ,{h ˟)kuBBPQF#j޵lVѶm[ܾ}#FaIul~T{0|pL:nȡP*h4D 00Y[evj9E2ҳBs9h[X#wR-[ZsssC;,@d899G$6 =Z9%x{{ʓsx&jJn}J#л^kSNN0zh7R>>>h۶-3D=rppp@VвeKNyxx]vT&{>=2<BR)|}})b i3ZB-lWd2=<۶m WWWN2^-١C]=cf8 IkcVi4gϞ6bРAP(S+D";@ĠAY_u놞={r#}T*~YUVV"** 'O&xZ~cRW _~!&=44qh&=}SdShOxm~Z>U؝-y _[M[wvB}-9`O ,((ƍb zߔ9{z'))I044 [7\pF."  ĈQchsLMFR+[ {牦AeSwg9BGno*_: J!S#YkbߩY^yZgMb?1`$<4{ )CQ{)fgƓ='dbR'4~{b'$O;R:"v6Oǖ=9ճDe{鉭gXbf3u Y1HԳгp K+Q_R]OXȻm2ewf>AMNdbkL! L ϟТ6 wc@1Wu!M yN-|4Kmqa$wB'FOj@(U[P!?xWP:惘bՔO )Bk"1 Ph OCh`ӳ5ɦ$T{}kmMZ׋F@ڍl$6p4:Ky7Z<+<0})B`,ے.-s=s6qgے=l)ufY6"Ckʞqa :d[| {稽mg}vgz7)?O4G)x"m|Wb I&{Xy N!M&7D"!-ּf z XR5N6=6OBrt>=6g" ?b)y ZX'ߓV4/.o͑6Bg4EOtʧG =v(= ^,7B$T֜]  BO͟5ojqG2[BFL@[V+kf͢ |2Lӧ#>>>tRL:ϟ~ ނmnҠKRb̘1[ /uH$>}#Gĭ}_|^u FH۾};ƎK% JJJkQt>?9<5jŮoW_J5ɓ9r$<R)0vX)l޼ƍQ'0b$$$Ps[o%P"sb0 /cժUmB1~/X)}0a^~~>^z%qƱZ__O>.ǹ!..cƌ'bp^^L5kpȑ#9r$=M~ 6?R)bcc1zh/z}&Md% "##1rHlh|}\tzj⋜8lX~|ס{?͛=z4N>m4i6nȑ1rH #tjy8R[1bcHmYU^nn.fΜ  ^-x5+=֎?42xJJzz:ZnM]vZO /^Daa!;F'\.ٳgq1cܹd(,,СCE"##=zpW.^˗/۬"""pUrdee?URq%ʳL&իWE!%##FGdCaƍҥ(:)/_Ƙ1coPt$ؿ?Oт=187cǎy޸q/^*Ov׮]3332 gLL .\wL<MySzQQQxW+XB`o>hժ zΜ9iӦaʔ)0t >|ӖѾ}w^4oޜh4"11QQQWȑ#w=xxx`6eЀ={:IR:u 3fm֑ ___,Z#{"22 H_c̘1;&( A?ŮUmk\l]IYiVVDq~W444@֭[`555DPPbccLȑ#Xd R)6m rlFzz:'ysAA,&Ldff֭[ɡY*^Jܾ}UUU#h4"55eeeBQQfl\zHLpTVVΝ;L&Cnn.Cddd@Pp=B^^_<vsrr4JwޅNw5APϟGEEQ__/*^;w׮]CYYr9<|n^BɒJ/%%uuuTCJJ <&??111Ç>Daa!\|vrNNӑDUUU!>>y&t:-gLbg]O]W=co;~lnn)SѷWy)9U-]۷obtطo^ DWݻHLLľ}PPPF/?>^#F'q ̝;6Q3g ##Y(77CO:w"66s2eb3aB{:u X6[nx=J=/ߏ\HKK54117n+W4_lFDDq :ǯ㧟~bΞ=kQ/l|ٓg?CF[ߛoɑ,K/d)))̪UOh>}ۙ˗/s#!!Yz5k}M~˖--`ǖ\^OWbc&dgg3o8%1x&3{e`MB%'&0o2CusE&59IMNdR8Ļ̽]Y)SZRĔ3U̹'Ҽ<0 cǎPTT 'PmD/,,Dee% QzY͖ 9`^mm-rssE`Ǻ鑻M"O*v&dII sV(LL*Rz p -r%QKŢ>lyQi6:%JJOP9JdA{4}<ԃ+u6 f+PPD(zMv%{V/ 13ZĦǧ_#U*ͅl͛QSSCĿdR444͍6GCC6mɄnݺի3-- ;w&5H[̋]\r9z]yd`y13SH1Ltq&c/&Bfh[ 3Y6֠BWXr`؊E?_pa+bކ|zl`x1e[5FLf=krcCƀ5z|y ^[[kd2 nCS{*6bɭɓo7BpB2Q@E{B&l<  2.DyuVd2Çѽ{wt:x… C&Q/cш>}͛HCW__^z!>>1bPDM8?^rr2BBBP]]͡gaΜ9ku7nx kG# ޠ &:|p_GPP6o |.]-Z|xkBӧfmi^{Xѽ{w:D"A޽9ڳD"A֭9< =r*g?IliӆvӇsJVuIxLx'5e:6leӐd4[D4gklr md;M'$$D0PW4 TBCC-)JbdZ+GNm߾=|Ik={V1[;v٧7!NjM"v%K6 ~!!\B6гZ#',"TP![Ӏ Z/dfcӳ&LlF ={iXc<Ő$ n޼cƍP k8l ZϯV6m:/B+B!h=k`K@뭭CbgKvbsfu)Ϳ,|8p  9g'G@vCV])W(!Þ lDv#` däLFH.8(JZ h?)"EOydcZ[4B!zC}$<+OkgϞh@buO _|z|Tkӳ5Nq|y2+Y?ky6]R^ٍF#J%INf@XiѢmFmw@u[*?a߳v1 bΞ… ?~aĠ!!!puuP'0 h#((z?~JAAApuu;!544`ѢE?_z%;z\ )l\cX^^$LJ})|P(P^^_*С `0[B k +&lsJEe/a/Ok^HMM{LXb4<}gMMlmSct©S|rt:|HMM|gtd@JJ fϞ"ܹxDpp04D#MTP@Z{nqI899Y":hٲ%[t)N8\|*Ldttdg}{aݺuؿ?ȅ!j5P((xΝ;jl۶ _|,KTB*o3phZ( t:xzzE ([PTptt'LM6!<<8{,pZMOZQQQ8ujjjwynr_*bÆ عs'***pi4k {All,jkkq1̚5狥cŰHiё[.#//CRR GGGAˌT*T*|ccÆ Xp!'RcYpND*J0Q7]$ ֮]ݻwCܹs~۶mCRR̙J;v sAII o";;yv8J@@@ݴT*/qJh4t>;v 33:}-[F)!hDaa!ˑ?;v@f,Prl -9j.3hhhep)8q+Vm#ؼy3Ə{~@\\-ZDAy899رc-ZSRR[x7кuk̝;EEE(--ř3gO` 7oP^^ӧc͚58{,ah4jVŭ[eT*;v ǚ5k|rhZ̝;'OĊ+0~x8;;[d2ك˗/ ǏG[od2fS*Xt) Z |稬DZZ|M%:88 ==7n^ǤI111ʕ+ѦMo\.Gbb"!ѵkW_B~0p@AT"::ZPWՈǑ#GߢUV_v vlzd2"""pY?F`` vD)S`0Sp w܉7o&MB^`0@!!!AФJ6t|@r9vލ`:t`Rk$%%ahhh/^z /^ĉ'fRG>Jسgзo_L:FVh(ĭ[OZ8wv WWWڵ Xp!vZf&$DݶmnݺOOOL2!!!5k9SCC֯_c̙œ9sjqI8;;c騪|,@Rw9\v OdĉCB0 6mڄ;w'OFpp0,sze]v-pQ`...HIIA6m0bܸqnBpp0ѢE 9rC nnnhժ222^z!&&'N$]T7ԩS9'B[naȐ!pttD@@7oN0w\޽سg\\\,NPTcX`6mڄk׮!!!؛hxuuu[\ϛ7v|rLMMz Ʉ>}PQFa޽x_rL J())̙3{"33555rM>غu+\]]c4 <<%%%8s 8b2 555qѻwo`X~=ك8jASd‡~pٳpttDpp0駟bٲeG{ӨyW((((^GXX222|z=:vcؽ{757%&&!!!^zQG &`׮]4h,X@m%Vj1t ^/ /_Ʈ]hO?K?f6ѢE |(++ɼ {nZ [nErr2c uOOO2燠 rуsʔ)гgO,\cekJJ 6l؀l6S`Zh$$$w(R{ Q :ټҍX&]ޓO~:::͍Cl6Ņspp;wкukt ޽;ŀKfkʹ"yzzZggg Rwwwl6Gf8;;"1WѩS'DDDĉXhPSSC3]\| * ѣhh޿ $%%a̘1uuȠ(4<Ν;Es?Ν;#&&&Wt())AZZL&JKKa28?Y؁r۷syy.iCyy96n܈۷cڵëJ|̜ O?{pssCII `28J ߽/_+!H<444 sM7o...zAee%z=JKK9^b~";R)}]:u |(wMM `ľf#ox!5rB/;r=pwwՔr95k`DDD~JBRa4kb~566 [Fjj*R)BiH= 0DEE͓*6F#:t耂dffB.#552 hhh@ee%>666BRaP*ꫯ8& [nŰaɯk+~ ERسgF||<}NÎ;8J¥Kouuuh߾= 222c( zHOO޽{-9rw܁#бcGГhZZoYVQT"22wWVV;vg ܮ]PXXHǎRRR-Q*8t8JJJN$޹sEvڶ1ahZ?Ǜo/탛V^ xW1vX888`̘1ׯp L2 YYYԣ… 5kyR2K[ӧOG1k,f?~ <?flNC駟o&zA5|[^fuuuxבiӦl6/FLcǎENN,X1ݺuCJJ ?Jc vmm-hbDAaX~=M///С>cY „ 8Jd₯HHH?>#z>|zOD3ͰSu}`00x`L4 ΝÞ={PSS ,_:=LףGxwW_=z@׮]1sL] *++h"hZNvDL27o|}} /K.HHHiҥK9XS__3gbժUشi]8fQ$%%Ѭ Bw$s,M IDAT͛1m4`ƌڵ+f͚e˖Gȑ#i|-_|كSNQWW ;={6ڷoo#ɓʙ3gbضm\{,VWW'1{lb„ ر#n߾cǎŋsZ#W^yN¶mۨLppp@MMU|i{~NNN~:0yd VdL8 ^#_cTIwrrO?L0 37l6FPPR)_SL* K.ŤIп7ހN͛c„ h׮ θ=s,Y/2K#_cذapcԑlɒ%زe ZjF/bӦMx饗£Rh"L:}Amm-j5233tR >hlloٌ^x4g3$'&"fW[[KOId@͆aH̷NNN߭EByy95)oIb P(L N(m S2?{z#ئ=zbԀaji X[(W!?1T)\Fzz3ՐI$tJH8Ϯq'Nf6"CSJ:u =-$ɉLGLOP[h\Kی'dd{ Jٲ'-$O!ٓ:  Z-M]E5LF/8ýXHH1Ѳɟ Eh2nNsh=e?^1cY6l IKVcqljܨrssn:礘2l=k?{uSNO"IJzTдLl2LЖOOCe3-;Ś遘h{1%^6 @&!FL )`1"Y ^g߳ h@Ⱦ3!ƚ ȂKkuףE7n9ʄxspp/-kn5힝nO(FW"#hD``(oHD.]d7~~~N=ndKLL˗ѲeK5 zަɚ}||ۺgiP[˱w^5Tr9r:u31`e Zj{5tTTT^ygWk25kGvaƍ+ϐ_'tp?BĀ8%TTTP2b^^^Ή:~8):XSVҥKXp!h'^uuuB ;Iquu5)p~)rssC;!UUU^jx1>( o-K5 v"Jл{$̣JRTKJ%jkka4: `0zuuudv+P\]]M%$Ad/1@:u|IJٳʉ}eobXh兕+WB*b…vܹFd2a,^;wFUU^}UCa̎P(Xhs ͛QFaƍXv-PSSzL6 =N߹s'֮]ŋcXjЯ_?]|QF-[Dii)+0 TVV2 3f@ǎ9d`HKKCTT***ft=;N<={ >>uuuEN;H;qBDTTG9s&*++J466bƌѣ`Ƞj0 sT*pss!blOZcǎΝ;q0rH!11 ‡~88L,4k RUUUy߾}x"f3{9[hR)`׮]ùsnEƠ\.޽{qefo$ \]]i Er($f8Llذa7o8D QRRRB$''ٳCBB^|Ey>)I1_1ECCF`899`0`ڴi`wn߾MT*ڶm>}`֭HOO :uߐؿ?._f͚ARaƌ𰘃q$6w악 z[noAaWj}H%Owc֬Y/Q]] ȑ#Ɓ䄍7R3"K.8t̙۷pA̙3T\d [($ |GtرcB;v k׮͒qjsNc…/22s΅;,X5kP4v (({Ν;CTbСXx1m777k8uC V۷oc۶mq ,\G`` ͛'7k ?3~T* Pq~2RVVI&a8|0ڵkF7ׯǢEׯ[ȓ|r H"<<sMICzaa![N_yzzbܹصk* ɳKmڴ ~)VZ"!!@VV7|֭[4]B@uu5֬Yٳg#**ZBycڴiD^^=5Zdl۶ Dzewl6cѢEغu+'Ƒg$^=::_M׆5kGmm-nAaCUgggTqx"NjH Y[୙T |8qZnUVA";;ttl ,, ;wF˖-qQHR 6 vT*ťK}v;زe Nj bT[F-seԱ4$7^jqb3f ֮]Æ ]`n߾ >~#GD=PRRB]o߾ѣGwt߿GYB11c0 >3hZO?ŢE0}tb騨Ef1<.r ð k'}s2s+:Z,W:VBbfuʎV. 2,3?13 uszA")ԝoll]v:t1c0m4&::s2sLO Rvv6gϞ͍|HoƆ6lٳgQfVl߾*v%YM&O3/" Zl...=zǏũS(//g޽ӫW/8q"֭3)l6lFjkk %**Jz=uuu<899!XT*O?4 6*2226l#FB&\oߖ.P iQ?2̤޽D)s)̙CHH&MBPPUU?_5/۶m泦N:).\ 22ɓ'Lnn.NNN0tP\ƒ>@YYfO1'|G裏r~mhhHyXNdn h߾$Ėc1bhlFke֭ҫW/ CwvyPQQ>K||t8::R^^#3zhrrr mQjtO>dݱܳۚU&ʚ!ݽ{Wf&f *OΖ-[ѣ;w0vXFMaa!444ϲgΝ+T___i xyyQ__OTT^7woKAkUt|z^O̕RモP455QZZj|y"q~3vuWQPP]vLeee2f9<ɼk|$&&Jm4((~?;pEyT*Ǐg1{l>cΝkRA\TƬFʕ+ӓ &H\K755/{`bL/k$%%||pZ-/|||AIڹ|ׯ/{accÔ)ShߟvڡR(++}DwAղzjƍgΎD\]]h4$''[oq-K`` YYYtЁѣGKsS ޞN:M^^ ~G8vӦMsҵc@R֭>>>ڵ"##YrL<~8>}%DX,kkkѣ&L`899C 7d֬Yddd/lu'8i'MDff& , ,,`&M#<Ν;ȐV~P , ))_|O>j&O,g,5m矗 5eeexyyѻwoƌÊ+P(O'!ײc޼y|@i}駜>}K.c̭[3f F 6Evv6/L|r4 NbݺuL0ɓ'sUV\ILL waʔ)o߾EOK[9Ofĉ<3=zooofN*?2rHZ-/;;[*`Ջ~+WR\\ts )$ :h} ^Ǐc0իSSSɡo߾pJF׮]%u˗ԩdffJb][Ֆn߾MEEлwo!##zvJ@@ċ5$)))!''1+`jj*VݲDIҥK){.Ĵ$bz0 ( """HNNuoª:t=/^Hpuuȑ#HaÆYtt@0 pMڵ+6{{{4 ׮]#&&{{{$dnݚ[[nQYY)333 ]KT*9{,wޡ{ҥK444гgOj5EvҥK3@lwreի*:222pqqAҭ[73%4#-- ``j.]Z&,,,rmll_ϗ'.]`0гgOZb_\rB""",yiu RiB4F#y.]:BCCڇ#Llmmիrun߾MΝ KIOO}9'-- BBB0{[eP((**"??h祧!DyNVVQQQ2V???z!ݻ7MMMѾ}{HKKU={SNѮ];dhB/33b h > 11h܌ <==z+WгgO |G*r*iiitI*=i IDATRTTDttT$o``L={wBիt {{{- /i٩%%HklmaWh-۔ʺ?t 'bi/6܂ϯxH&sttlZ_"k^&XsZ6+d…%4-RWrqi=hyƶ8lT*> 7n --iӦQQQjv(eK-,D}`Z1 D|Ӛ7urrh4@BA}}6Qc;h45mQͧ[" O؊牳&kk\e>7FP(dwkgMpλpw='SG 84Yw}J/jzOKow̜9S)ZgccV/iΪ7 6lm>~gٙ.] {vm-M%U%K@K5-ok@eIIUU`n)kR[;P0^ctqx_y[ΫafJcܹ3FR[k,wq'϶[ߵuLϽw?}_[<GKY[[fz Y,`1Ӵ/Aλ迵Fܘ1c{iT*SNmVw>~rs9%KKaKe&nk< $?ZK Gw[[D***2 +oHjKbGKc.jh֛v=&%,Ҷs,{} c>3}yy9%%%-QPP S=MP,h4RYYz{]殢BW~VTTVey{L?XWW'k/̑h?/H-[[(Lm۶ J3>>R>5 *w}dfa*JJt:D^V&ʹpP(pssJ$P(to&...TWWS__TZEib.DHi uqpp{ZVvvvnݻ8::IJ{Rسg/2K, P(`޼y"t<))k׮aggĉ0`Uv.ZVBmܸe˖q J%UUU(<;vpix$d9GGGq-Xnpuu5VHzz:?2eeϞ= 0? .5'fCC*Tv܉^gҤI LYdq\\\4[ZGjNNNdgg/iϞ=9s&7oܹs8;;K!֭[aTf";!!k׮?L@@quu`0իqppʕ+|WTTTԩSeFϢ뷺۷mȑ#jui _qSHE/ʗ7o$%%jٳgwޥgϞR:t}o۷/k׮[nK+֖3gplmm4ErJV^Mmm-Bܹs|fL_ǏK@{WWW 筷bܸq,Xϛ}[Zׯ~ ##RIrr2J]vyf "6mDHH9998;;KdM6W_!nj'''e*Mnʼy4hK.mkڵk9x 888 ضm;vd̙fxK@K$a߹sŋ3dN˹q~-v{kʕЩL)++c߾}߿_|԰~233zKƎK||<^^^̚51 ܼyכKSA&رc|wBnn.K,ᡇc\rE"C̞:u/7oT*r }ᣏ>bĈ,XWT*"+V0g.\%_ɓ',Yl޽{恵ޞu֑ǚ5k8t۷oʋib$''˽ ҥKαLeyX+:ӧOK/Į]/AѰ~z-ZĻK`` ?FwߥKV)--!Y+GGGҨhc팶̵߭$k~枂TZ&N8۹y&zÇfzI^^:t`i444pEΝŋԩ'Oh?~*30w\1Ֆ,J9uDJ)Z%$$+pAz=> #F///ͰeMKyٴiJzJ%NNNdeeI Fa,h4|r eƌRݽن`qq1̛7???Y&Meْe̛7/NGdd$SNeٲeZC2a„fnbQg._+"]˿ NNN2tPrss%{g'?,s5k3f?mv/9Zwvv6NXp?3ҥK <'OJX<'// rq 8y$nnnlڴ.ESO=EY.RE)xD?|'ܹUVaggǕ+W$R.\ B=ƍY~=:N<裄1sLv?OΝJD!C2e .+V`ܸq?ÇpBn޼Izzp8u ,ܹs3g`kkˡC6lgϞO}WKJ;"vvvqF6n(Skyez,nZ?R8p >>>/ҵ+jbEVT2ӧ޽;T*>|̙#-~SٙoooMȑ#kۚ%˲/K9{,nFZіmgIj@ 5 [ӳgO?~N>ȑ#)//ʕ+ܼyS"̟?Ν;ӳgO;FDDxϟsܾ}HOδiӨܹs;vLwZyfK=%..^/ײƆŋxbƍٱc\ׯdѣtErqq믿fĈh4t:L0)HZH={ؽ{7k֬njE@gZ; ܹHHRREEE_ATm6,X̙3y% .$22sQYY "R_x#G2~xӹ{.7oSN,[g}V4Y^...ڵj֬Yó>Kll,555`㢏 &бcG;BIqYZs1^xUxGؿԐ}}}:u*uuu>}ԝhDV3}trsszh95kPWWtt:BBBzC9\IOOʕ+,ZӱcG9" Ν;eYkne|||=z4UUUHX.?lذk׮'c=&{ŀ8uꔙu'#88W^y˗ӭ[7z=SN>ԩSC222HJJbϞ=oߎ+1115WcvرcQljᇩ㣏>… OѣG:w}g0}!`xי1c*J W]]^A5jTVVҳgO݉mcȐ!\|/'''Ͼ}̔@ڵk־||gT*v9}4ȑ#deeWmm-Fݻ|ǜ;wGٷo;w̙3L4b).>}$+z#,o~޽{Zi`$1/ooovM߾} ,3gaYd :<?ΩS8{,:F2228z(yyyr^J\\qqq/\zD۱cGz=ܽ{;wpjkky'0{ܸqO?TZ-kߋ,#GyfV%cP*ܸqj"## Gѭ[7Ξ=+;}BY>|8[nөS'sexyyW]$n]R ᝻LΝIHHɓDDDNtt4W^~Go> QQQoߞFvE=ZVVƐ!Cdeƍk5_]]MAAL6@3EѧO lli 솆 ** 4h`4[aQ0|pN3eee;vf̘%IJţw8::RQQW_}E`` s̑8sa9t wwwΝ;ٳg gܹ,+SBn޼ɰa$s2зo_~˙={6'ѣ<,[JnHOOPу|h׮ 0Ŝ988qFff&}ATR[[KTTaaaV]F᧟~ߟ.]eeeIyS{S# gJ'///._̩Spwwgo^!@`` ={.ݙ3gһwot邿?OΎ~5?* k׮QZZʠAP*ٓF.\q7nĕ5]F{.+ x{{cooϬYj'{)$0t:pvv&::b 557orE"""pwwtuƜ9s(//Eޕ:N:ѭ[7Μ9CJJ khZ0` T +> yyy9sFQKe"՜?1cX˳|AAݺu#44Tzaj :TƁGf+Eͯ= YxpQTTD@@=z0+-)h4O[]MMMQZRBHh_wvzX^oFR+)@8@RK"Tڽnf!yzzRWW׌rNNN0R]]-KC"bAXJRp\\\$V`97feeeԤA&шM(8pqq1nMJ1+[iiʹִZ-kQMSZ*%:::ʑ#Gx7etrss"F5pAVVV3&Ka****5KG^ʶ+VXƹ[2^*uVk&,AGGGZ[멪Jh0BSS,SpuuёZ b\d4A ( P(f/gmԜPFh4ZgZ5^RV/r{WNy+ޫD֭['Nk ^^^t:IM'CwwwXjٶm0}e IDAT3glJ7aJ%Cm}Mr:;;ӵkW"kZ8,Q'~fp3 EqE'!˅ufe T{{ϛTjk_B#2ݲT(ZC\m)*6eZ4GmqK̴ -V4It|ΦsdJXlZaZX-20]!t-}X6)uoO=p/V˹Ж1wqMCB'kkms$,QbzYdK[~NKwM$kBl, :ӄ'J%C_hjӲ-qmaY+ҷY;>v:??;hkڄ{}Dilr|,5Zlۚjk3Hh4ZwC'`Ʌk-՛l-Y¢UqKc=k- i[ L>ow~K-AAݹsG[S`but"lmmqss,'=W[z"rϫT6;uuu-;ODVk+'fkkRֿ-,;"*\vԚ5ؒgoɓ'[MLjYT$#EEn@PABBzw}RBXZ*iP$q`777fϞ7˗/5"U[{;;;jT,jkkt(J*2bբGII Ǐg˖-tԉz8{,;v03}5TTT@'Z-k `3MZjf_˗/si^~e Zw^vM.]x7BVR0~,=駟W^EјYO(Rj.toܽ{;")EC."~t:?B]vSZZz_^:`VUUEǎ_ c4&O ZN:ŠA6lGɓۗQFIAzz:=!!!<\~}Zl-=???YYY9sz"##ӧOK񽋋 [l/BfUVV{nZ-#Gokk˗IIIݻR$--M?۷xKP^ ܬYe0ؿ?7n͍Ӯ];8qZPYRƫכE})bSQQ͛eQ >N׬%!Z^^W_}Ncذaprr"//#GЯ_? SgMt: aYȲw^^xׯ_رc$t)--/#GʌCqUzAX&HK:==c4ܹ3ok4h`Ȑ!￧aÆl·=N0t*J"--#GHnooOll,YYYH֖Ǜa l?;ÇGRQ՜?4Əߌ<HSmm- k׮Ͳ%"~>[yOk)--g~3;;;yݻ$-c OtϵR~\m(..Jn֭޽z]vqYnܸA^^cǎe֭=z;;;9B||< ŋرSϯF6 f.Ekqttd:tAq ^~e~N=:u^ Yq~IDUU .$??Ν;&LZ&33iӦ@xx8 .dϞ=ܸqEGRR7nl6Vkjjb.{ߟ /%i\]]YrJgOSTTD޽sa-e4[RiO;sDDDBBB-^kE ZɜXh ]t)k֬ŋD%ǽ`pRTTDCCMMMT*`ѢExzz(|'JKKyW$88 ؽ{77o&88~D:}H}}=s={AN3# 0ܹs׏$^yXd .\ ::K.P("WQ"I|^Jk/J2tBDDNNNst"kSSSYbE3T7nkRHNN&>>^gee`{nA?hATRYYk˗qsscҥKv?YX\k)ޥ%5!{5$ÉW^ͼ_m}hiN,aEFKl/M{MT,ZE1c N8AEE`ٲe1bΝ;GXXnnnܼy~.]ŋe={Ty8 /i @k{FRQTT#zÃ^zQSSFcǎTE+W;wzjJ%?#7oޤW^t:z F<== #22O?P|A&M7|#q[-"^x-Z$W_};J"::ۣG(.8&&777bbb0Gæ.oiӦ ơ7,iYnPшJbر?^^z% Xb* ,AHff&ϟGeܸqTVVrqYx1]tWX^NmA6T*^ʚ5kpvvСC$&&qssZ--/Zw}Gii) wNmm-~)Gf 2۷KSw#)))<ӒC466RVV?;w6ss >}H׼ZfС;wHUUzjf2; :fΜo!1vͷ̜0acǎFE=7n}ʕ+̟?L!ٙ}T*1b?8?%%%b ƌR4SLGP/6mD~~>w%999s0{l,K,k* ]mZ~m7nnnR{KVazݬ޼׻sϑ/^^^YG޷;-Zz5l߾͛7e;ƟgiǎЮ];N8A׮]{ܹs8o/LJJ| x[D֭yyy䐓CNߟWru.ASWZf׮]ҩS'vڅhZnܸCxkFaf0O> ,,\π_ y!jtOX_.ks- ӓP^JNNtjƍ?`lG᭷"88*Pa7ҧObcc/p|ݳ!7nT*jjjxwpqqaҥVK>}ϩ駟i2rssٶmoU0{{{JJJ֭[۷QRR' K+J>#tK/dV+b׮] ҵ۵kWnݺ۷'**JZdׯ_'99瓙)=,ڵEIHWWWXl4Sa1dddHhE???SOLLD1j(MRRףhXl'OGm1)P5kt$&&2gT*L:uI:hڒ3r9&8C] pJKK9yd3Seaח*%Қk ?.HKKK9~8'N`„ ѿe+##CСCܹs777#==xd&LRdM5tP `5e:AV⡇">>dzn:RSSٽ{7K,aժUsNZ"Kv|ܘ;w.˗/ڵktC8;;s.]ʪU(((/ bIP(f&d ԅ, -[ĉYfMM)wyybÆ ̛7+VᅬK3K~E 00P>_IK=DѣGf( ˩cd#bccy'h8Z8T*_5ſ\NG~~D*))Yݻw^cܹ8pYi?gٲe#XVXAUUV/СR6<5jtGV]ZI&|r̊+d6s=ʕ+ܹs< t:ڵB#$$OKoB>Juu5j<1b;w6cLXh4̚5Kq E̙3^WWWYb=n޼Ind ___֮]˱cO7lE7xzzw{3.cSuSET&X%󼼼PDDӧOܹs[B!y*W y0L8iggGxx8AAAbS???+ꮮlٲ~CUU:t@PtRmFϞ=i,44.^Hvv6z`.]JBB[lA0}tV(ŁS(ARRPP@FFVI뉊233QTx{{ӷo_N>Myy`&i׮dJs#F#7nܠ1ĕ+W}6׮]Ϗ\\\z*444kև%,mllDK]])))TUUF.77?ӧ.Oqq1O=VRQQHm۶yf,YBUUs_VVF~~>8;;ƍ1c 4,^4j-Y9...9s%K!qT*֬YÁ$R_~ VV-[ϊ俅 qT*RRRXtܿ 6:ƍ۷/666'֪)Z:?_BYf ٹfyZ͎;HLL4^gܸqCz>d^~e%)Ah , 33SNѡCcСD/\``ʔ)١jyGs̡_~r] ZJΰ>0RQQk4hKݨ$Fc=VDcD=j,#I-coh"tf`9k}{6{09y_uqÞڳzSTaV(Vnee%fϞ ???̝;?Ǝ;|iLo)S?ѣG~zi}d2>xyyᣏ>jzBЋ-^ɓ'ѦMR> ׯ[o7 U'7۷ .D"UЪU+|ouV̚5 C 9@-[b…PXXH4}mFU.H$ŋѱcG 2BLNJee%iӦaƍ}66l;;;CRA18,_ݻwDze?еl2lذ ,PUUe)˗x>q5C`9sHFݻwx|>>UUU*pܘT@ڵkHMMmP(Çq}:DQ8{,M"WFF.]DBwww888`􄷷7m/--ř3g\OB]0޿4KL͉5>*i ճzds!zr1)F7b"fc"Xl.QS`n$Bt95qIK"hș  f 5 7 ḻ'&!H{… صkrss0G/$'4fϔ*`kccOؓc)J Lr&|WB$&h)r@@e23e9dHRhZT0;?tgΔ-.{ѓ`F r9ʌ@I4666F\ۇ e+"77A/wªcԃ1s#{T*Eee% jTQVVfX4 /e-S ؠs"̍}ˌ\^Oyxd5% ‚hB6 ϬI+Z˕hqb?[[[ Vۤw0 673퉉549fb)cA?2Ǟ"2e FjN=J}zDJLLD||<␚/_r*+,#;;LfN"(=yyyHLL4b`o,ǃVǍ`?~HJJBFF's cEFF THHH0;={.M7P#ߏ?|N$(6O~~> *:ϟ?7sb-}BWwq4 MRSS1---Ge!sMb\~?3͹6! HMMEuu5=I`zzIz;"4UUUӧOǏ7ldH ..qqq4ל`|> D5jlm_ȑ#())9I )O)((H$ү7TREEbbb^ "ZCθ|2ܹz:r9^|pm$JH$1gh*n_`"$$-Z@YY֯_OOOXXX ,, +Vŋ ;N< oooN^"$JINƳFoըFzz:&NaÆA,~ŋѾ}{/PT d#$$bX"@P@PI D̙3H$4h-+((?#v؁q5#",RI6m@Vcf\Oׯ_Z`)o۷T*aoo\LƩ֫5ꊼ&O$&&ڵÇl28p#v49=LO<;w#GD=h{^~/^io6mBRR~'<}R.5!S |V|tѣy֭pvvƺuW_]vspB8q>C8;;֮]qaHHHЧOdddСCx)6mڄSNT*<۶mC^^LላCyy9e0ƍÛoIy Iʕ+QZZ+Wrj$066Ǐ%Ν ___޽8v"""w^Hc&WUUQ+WB(bmiĈx8zݻwG@@ZnӧOcxjq!h4L:~~~z`ڴi ’%K{n ;:1 9Sp&vq`ƌڵ+y?Xr%|||P@N0h \|ZGGGDFFM3ͅXbccq1a0aa̙pwwٳvڡgϞhӦ ѿ9{իfoe9x<>s̡dggcΜ9ԩ'Bmm-F:K,_~@ܺu | ZE  ++ VE߾}2VRRE˗/79zlC۶mQYYnݺk׮Xt)VX,3߿/_RĜ9s0fL25556lƍGV |hZ,]njɓq,--9Y_L多S*S=sdoh4شi _`ɜά^}J!={ŋcȐ!uzxxP8-[@,cѢEX~=}aĈR[[vܹs>}:&M/^P{;#$=zԤil;wL&֭[!ˑ;b۶mF^^^sSwy񈌌\.Gvv6JKKw^cĉE֭aee,6mQUUիWcРAXz5޹@'HMMҥKѹsglٲ,ZtڵÖ-[(=\II ~79r$\]]ܮطl,Yb,//GMM )VkS\D_/_lڴȔ-H0f;v <0eŇ СCѩS'vBEE%v`Գo>:u WѣQVVFoݺuCVxr-z+++nx!ա}OѱcG|gԢ@\Jf}JfJR)r̝;É'dDuuuj4hBCC鉘,X4`+++Ht)))X`]F Qx/#-**;O>#GPTT R\QQj,^+V۷QXXH N:'nݢhGR*;v 777XXX@ Z2k >OW!AnFDfCUVaҤIر#a0бcGdee puu5 LI@s8s 0qDN,"$UUU 5;}|M 4ӯBW]]~غu+{{{|<{ Jϟ?oǾ2sssqI̚53 d2(Jz`Νػw/:t777FVVVHMM=CUUd+ ==QQQh׮,,,+WbƌILֻŋ>1??*=wCH333n:L0[lVѣq),Z:t@˖-1h &T*Ebb"J%222h`@nn.4c#22gϞEDDz-h4c裏PUU1c4?)s$&R@H/JtL>@px>F{qe0rx-#C>T$%%H7xvvvXlx<w x?~lDHkR0lHuŬYpuQ Prr2|>d2Ξ= SNEff&`mm\ %K'ͅIs8|0֭[Pӧ}ݻ7֮]2 'P[[K7%KGII 6mڄb,]erMM =pN8Dt:t:z:u*T*-Z\Nuvuu5T*6l؀M8p 9Hʒ%KpYL8k׮NٳѣG?Bq FG%%%Xf \]]b֭>}ѡHJJ”)S`ee>Çaȑ 3BKDFF"33CYY; x+WH$@nYpv 3g͛Ѿ}{(є|gh߾=`?={w_|J3fLJl%Jaҥ ܹs{ԩS՘WWWCχT*Œ%K`ii jmmMH#/_#G޽{P(Xz5z= fXZZbСFAb ϟڵk1p@|w(,,1x`RQQa<fM/&5[ee% R(7-B o???h4aظq#% 3[[[b׮]HNN $Iyq%8;;vvv5k pm6Y;2 ƞ={S P(0i$L0;wD~~>r9-[ܸq>\\\ JĠ2 w^J?x x<8x eƷ~/"##vvvxP__|ᇸ~:u\gDBq(h=T C*R-[X,PTP*FdYYYpvvrP(ϓ+|yy92geeP*FQ%%%ԼѢE 7J@ Rj.+++JsL `R\999R4Ja7Lj5hmeeE1e5 ݈KJ~~>QSS-Z嶰JByy9\\\ȟ P^^777NkR'I!3yoQQB!a4/!77ts s\n]p!!!4B>/((@EE\]]! Q\\LYQH'SWcD:;;S3`@QQJe6BHb1P]] ZMdze˖fLjYYrZVVZs^U*JJJвeKd2^@@}`ly$k]AS[)K6BsU*ZhASjjjhj#y} T*( z[YY [$Q. {SmNr|GPT9r$i% H2imDee%lmmyKƓ]5={ȑ#Fe^KH D"jjj駟"00}wM8uI>pHHlll0o<*kUUUF#{ٳgqmرXmm-YK+W`IпXXXPƱ@d%SlM WP4Sn(**ys3gFnT(aSA wcF)&6?>pҘɅ;ӡOr֘wcZňH͆I<ʊH_fIƙ̓x< 55Æ 34eb$}3oGc3jjjc ݜ,OSfOOf;M"SL!07L$Ǭ JИ,2-ߍflp;&rgS3Ngn5&d4 ݻ1cP+XcDLd϶Att4uFy٤'Ykkkܿ:uIy !55CEii)m$%UUUbiA8QiJ3M5/Tf t2Z>Sw7S1|)H{ 8 Mp{4e,!5v SWW777xyyQSSc65) {kexA.ڬ_e,2?tl$nJ;izxYsiL&zyj bܸqh4 ȦFQFBNC=('1nsmm-rt Ί)!BLi\H%\Ϲ .T?Zo.)$:^QQEE$*;[ABH  ,DSfdV,nnb1mnTY$Q?lsZD"$"$y puuq#ezL_ 9И.o&naa!7#eZQ0Sf1M̱0 5,;Iﰰ@zz:ѳgOI7&ϖM~n|j(DhժYX=VE||<,--ѻwo#W P.x6eon^ޫ^<~YYYC6mLmδi67&?zjt]X;lYH$K[_FfΞ.< `|P(9s&/\%@hNƁ#G6kˆ@b'$n|ϧ{PA6rPHA M$ɳ3 pf"믿b׮]2dmmjqYXXHLW[[j9^UUvvf}L>oz o6j]ߪUPRRj (//F{ɍژ;H\UUIH$8u8aÆgϞ)E$Hy?b2t:AKlg! cް3WW:  Cdd$nVclܸrdE 8x BCClڿNba3 ߥPQ`dtAAAt?>PWW@̜9m6ܾ}vvv 4 ƌC'h[;t:߿IIIpuużyh9///7ndii ܾ};vݻ X kkkTVVR Z ?3^xV ___̞=8z(8{ &4 <{ OFvv6 |}}1}tt:@nn.0UWW$$$@.cŋ/pA F0\L򮮮HNN@ Cx1QSSbFs=L% Gg17G!""߿?f͚#++ 1 IDATzϟ?Gxx8[l61_3gػw/V7f[IHjOUU\|9Ua0pر7dG&PĥK?B g6e 8/^e˖aĈQѣHLLDuu5 ,X׮]mKNNƗ_~Im 4$yyyسgʠP(0{lxzz6P B!;wyyy{=:d]3cA0[FB9sUV4eee&`MUZ- Ν;kµXYYӐhٲ%U333)c;>c#os4"z<{_$)a|S7uQ]EE pq#?>\qO&›zJHH@PP8@y᭷ŋѢE :u * m۶qEz޿hL<{ܽٳTkď? 9( f1̟?j:رc|:+V@ii)ӱpBzd2cǎzQ>%;q>>>/m6?~OFDD^xǏcȑl(aÆG}{")) aaa(..Ɖ'VgϞ㈉AXX<==}vhZlٲvvv°aD22M6?@uu5>CAVc͚5:t({p.¦w}ѣG>|AAA7n)5s,˺u0b|EYYVX 44NNNF.\ AYf r9:lٲ'OFJJJ a۷ŋ"W_صkL/?EEEXng\vr]3c޼yHKKC~} ǯJ*xyyaZX,+ݜG0l۶ -[4s$G֭ 6`ܹի.\~СCׯ~wt$@[nG8q:t耧O"##)))h4 ď?HMNYWW(JXZZo߾ӧOVܻwF9`ؾ};> &@.c͸v<<jjj3cԨQh۶mgP|,[ )))  s8;;e˖С89iu:FI}wڅe˖K.ȀL&9L-(==...pttD표b_=BHH {aWZ)c~ŋJZee%߿=z 44}ELL x<\s W=LĎ;pu7sc|z/8\r׮]ܹs>Q鬩?}zA,#11555u߿>}@(m۶HII3\]]qeDEE!66=Bzz:Zn ;;;tOŒ3pY~4S6Q[[ WWWjCyy9:t`<|_}e`4NNN# P]]r 8k׮Ehh(5K1ǃxwk.!::|!i[rkkkQ^^Aa͚58ragg@nݚr2`sAkjjCKXEɇHHHx ѣѮ];#r Bk׮3gƎ oooX[[cؾ};v܉4icxT*!0b muڵk<\p2 gΜ`o4HRlj'LR𙺅5vc17?K tV(\-$ׯK.K*֛aregpk3;oȑ#ݻ7zBhЭ[7<{«H2. :t(B!B!+APWFll,///@ P|HRlٲ׮]ûヒgϞK&D"|||йsgdffҿÓ9:m1w\C9Ah՘0a>SnѢ|}}ѳgO$''lHaÆ!77pssC~~>̙B WpttDNN&OLノ;YYYF)CLjߒ t b -99888͛pvvJ[oE9jT^(pkkkBt ]vH$BAAܒlߨ9K&7c9Y#’d8qVZE/\ . ?? nL&Caa!~G;hժjjjL*$'OFpp0|||\n2ٟÇS ~<\1 N2[nZjE#cǎ|Ǧn\&s&QZH|sLk[ZsT*QVV>999hٲBt0 ? Eb#B5Fjɮfwee2ܹ8?gG@ʔ#RY=HѦMppp@޽SNaXlΟ?7"::[nx:u sׯtpk&3f͛7{n9scǎEoc֭Ɖ'!7BriZߟz# H$HKK{D777ѣG>}:ÇcȐ!3:؉2p _͛ѽ{w 00o͛q ̚5F\__N)S6m1qDxxx`ĉ8z(k! t0 N1ِ:tcعs'$ ߀[0 :ݻÇ_~pttDpp0k 4F&bv}}kkkeee8rb1Ǝ AcgIiP(ĕ+Wp NիW63o~!>}={ ** ɐdHNNFAJJ }ξj(--/_?*ܾ}W^:6[QQۇ~ ;wDqq1Ǝ ^6mZ?BԣG7oFtt4N> D$$$@Ç3gQV믿"""ΝCpp0wwwƆTqeeeHLL^Gll,fΜ6m`РAx9>ݜL&.ヰ0DEE!//A_RbKKK1$1sLDGG#88)))>}:%ijB@dd$|}}!( ]vxR(6-)7R`\.Gg?\xJÌ3T*iDuee%|}}qJaYQQUV2dd۷/GSߥK#bB ?k,Z{C6nFv ǝ;w} 0 HMMŴio EEĒ 4rttD˖-c@ \.4jEjGjpuuEzz: &@$O>G>})T-^O@^|j۷VCLХjH$5 ZBvv6:uꄙ3gRM V xzzb֬Yppp'}ǘ1c0h N777"++ o`aa D>~x 4Ȉ8ѥKQ)ѻwo=c tԩ%1Ӈ8&NC"gϞ((('O9$P7ޠ͜9h4o!C1Q8::ߟF޼yBFBVV}񁳳3t:뇞={e˖t0aaズ4 4;;IRR sqq1vB6]UVt&OLsj0vXmd` Zj&&&" 6`VZAV#33:t|R^zQ6 P`h+**qao N/_wް7ӭP(DϞ=QSS\jՊn-Z5׮]CΝ9J D=P]] KKKhݺu.&[AnxJݺuRDUU R[n]vׯg.wFŹv؅GD&Ν;edrtF?@H@( &2H}:uŅ#`0eKdfdC,6gjieBxxӊ8h=gLx<=f+YfN;s.BQQr9EabZZ[[\Cssd!6$/4ogj4N̅r\J6:BK%L 5i a`\,x1b1|>4  +++-JAOR;1ٓ,//7Kj`>LFYE̥)$%%Ν;XhT*޽7o[n8pYvB#0p}X?L}DI!8V<ʕ(n텙\($#fuiB.B.]0oSN56v;@ӻwo̞=s΅Z L!3.HTJylmm1i$(((0BL&I&A>$1-{=8::b޽Pհ$~'w^S3E (`ø|2j*'K@ @NN۷`$"\JD"5 "ׯ/_@|RB!?~WbÆ 4 P^^^Oyyyy6&f)7X/ -[P:=JJ+WDJJ ~A$ 1ZׯZ{,HDD"^7 87OLh !hΜH$1|e899÷~7J% @"[43)/lk%ɩ;J\qu[6m{Jŋ+++\x Zn˗SAQMZ1x`k׎d L% :wcƌIhh(-[ŋ<;) )/7n@"{;v4xSye<~j;&Z;9'\8lO$Qt5jK.!''-Udb&~WWWӨoܹ3}]*KlQPҥKy&a0p#UVq*]I`0+B.>CN жm[XBSNZ%*> |JBbbf,]|MSx1T*U%YHl:u | L{᫯j1͛>裏PYY%K 66-2Ba+x IDAT *++?YkoxP(BB0BjJ!{YhQkrs IG<}4"##) :gl߾ǎ… ѪU+L>4)";;GF^3l߾nB>}AUΜ9]bСĹsi&\zƷ~ {.pUL:BPbdBBXp!ѢE B`СѣI$cйsgJB1p@;w;v@>}8)`ĉ!W_ڵkXp!j5표_s#l%[n^'rss1j(\z:t(~w>}om&pmJawRs=zãJ}<f͂`e4_\ܹshѢz ///<۶mD"AYY֭[77z<ZPT7ozF`,^bXQQ@PT&M?S1f# q=jVT|52UH ڵk'''G˖-1gΜ4)i4xyyA*+..FUU-~5lڴ +V0Bcf:4_QQQ VEHHΜ9/"%%`(JO4hr9֬YVZAR!22P՘1cΝ;WH: -[nݺ!&&cƌ;ݻLۻ_% )ST1cn޼'O˗Xh=zC(Z@.[nҥK={6aHRW\ 8YSNt(--1R\@.s0qFxyya֬Y8v)!C`Ϟ=%\t,--Ǐرc?pmN)HGcǎP*U>pm>|Ǐ؂ڢ:{6e=<2n8b|W@xx8!!!CW_}={ 66p]d2T*H$ԭ[wرc?֭[Ooժ]Tooov}ق >  8Ј1ZIⱿ?:u۷ocϞ=ܹ34 \\\8MLiYfذaN>j888@"@$ pssÀ0~xԫWFAbr:;;Sߒ`M?"22Xz55D"'7oWWW 4GƦMPYYI@ݴZ-,YÇԩS T* P^^^dmKpΈ444]tA||<.\@n\\\L6g"cP(k… tqI,ZSNExx8F(ppp@qq1\b>ӧONNNAIEEEjhܸ1Vѽ{wܽ{ P#xNף7FYY!HP]] F'''ZW"#4}8qT*i& mڴ1*p___TUUضm H8/;rmmmGiӦҥ ˗cԨQHMMƍ1|pTVVaabϞ=:t(֭K5'''>GS&I{{{RyQe@ӓ"թS2H qrr@ xT#hE1@:uRP(T*ښ S}W&JD"\\\ȳ$ԟ&rhM65pssCUUJ%k.8::bܸq B޽1zhA,SH6TףqXh0h 4NNNwJ%M-[ҍ­[p=tvvvx 믿BףUVv6m HOOGPP5+uЁSg_* 8}4A<}vl lw^d2ܺu :ǎC^^Ǭf?"00B~)-+?~>>>ÜFAÆ Rp1yjB!!!~:P^_T4ɓ>|8ڴiCa$lF>ǏǛ7oA+L @ 117oބ/~bb"._q"c£8}4Z-|}}\>}UUUF%|$"TDEEqưC=p!̚5 ֭!gUUU;B&ɓX=ab~)ƌ<|g@kkkj>>G{ݻ75%*"999aݺuPT0` P/ h۶-7nldFbJD2\t) VX___( 9so޼+֯_'''#nߌ@nn.._vڡI&P*Xd ۇ%KPwN>}puuŚ5kرcWwnppp#G~a4[n_>ouEEE(**‚ (LOOw}UHXbz=Νpaƍswnd6\)ӧpBB,]~~~۷o#11`3ҏ?zgϞD"!ChUݻw˗B-Z5 3[%2 Wش͚3Ú3qY+**0fH$_֭> 9w7%X+e^h$uœ@! Fee%ZlmmQ^^ΙlbvvvT!II I`''9jޞjL z.qttV\.5HBHV5D())1I}d=ԩR9;;d-beer2@@d">Y"D"cHNNƹsrJyF)0t*2i3\Y2o^O.z&~dIG"o{ h=zbNZfHn6I D"siD;'\OMR0DrI~8!B5,DeMqD"\]]9M\]RX#L\VK_oXS]N.¤Acl+^72>y$͋/֮z))B±I9aNI$$EmI|o7w8H~[feV!D>wHAs2ukA{} HbҐK'Lcmj,Z2ٗLm[Os}0G?6 \#RBGd_͝Lf̃o=MdOإŁ]6󨪪25<}+6tˤ&":A [rdVfgM0 yV(ָϬN9s+>h}hڇ1D3K[kKg2pL]77?C>6̒,mֵy9 a֎*kNZAaa{m#NNN}JBt:]&ϐIS8ğ?f_ 4u?oB!96Mq`".\V΢%N|յF 4H%K#ݻu_n \>+++83t~$pf̘1߿?>q Wߺu ϟOFp] VWWCR`_Gѽ{O<7 .ױm6oFHZGO,SZζԟej-b1TWWC(Ip+o]$ݡiI }TWWFl'c f;S*\~MH.,D3@X,H$NCUU f<}hw QRR.)jyFk3n%;3隼(33)))FPPN>M/j@߼yDԯ_:uܻwJ26*aLIIID-jTg#&IdraÆt#`~7oޤrW^eb1llllJÌ} ?~ P-Znݺ(++ÇQQQOOOl$5^0hZ\z"z|ǜAgggzDGGgϞ0aBˏThZx{{yFV|Çhݺ5$+WХK$|\ˑMsҨD" heggK.VAVD"222SX[[#88t񁿿(rܹW^ P8y$ebnnnZ6b$r=)) @۶mnoooo(GćTZZ >>>4˗DDC@@gn7omڴ b1.\m۶zUVгgϐ y5 E ={4x{{# %&& Z'ເ33L/ks|`/rLcuu52229jj昐)7\9(,,ăдiSԯ_FzVmAky@DO:v裏舿| `ft:#==Ÿx"9B1cƠ]vF7Qe2ۇݻwsƍشi]:u>C׮]k$dccS/bH_-PXXWBc̘1(++Cjj*JKK99|tRҰzެY3ˋKХR)Ѷm[888.]¶m HǏcܹFHIXT*Ō3PZZb$$$P?;p aƌ[n UXTܸqo߆+uDof͢M\ҪȗMU(4o @ :T:u8͙vb˖-[nF Hٌ!!!G^^\]]1eH$\pvvv5jEa 4@HH-@HR[M4A>}_>lll`9s޽;1cƠk׮hѢE D"իWq)YܼpB<|1zhtH8!ݺuC߾}T Ǐǖ-[кukt *PG4Blݺ6mP8pk׮Ehh(+9r?S6˥թS۷oիqZԁ]AnTNgggt3gh9RpքoPU"±c J1ydP8M}w IDATƍO>][uBTL%G+߸++`]ZE^z5<<<b֭X~=#-- ͚5B#ѩS'899hܸ1ׯOOOƨQpY#GbȐ!FR.WNdeeaϞ={. hРv؁@^@!$' J.]ƍ1m4,Yj5 ____jj@jj*WCJ$Gxx8ׯ}!>>۷GӦM!Jݻw0`F" 66¸^R]v+0|pQ;T߰adڷo@P`ذaXz5'!6gggܸqwB@^T*Ѿ}{x:Dْ.bWP^^R[B*bȑ5ЕS2ߴZ-+xxx`͐H$())Oo߾FiZUVV{prr޽{shܸ1N\z.]¼y󨯏G @Vc(**®]p 0jذa7omA2  Brr2݋'O/RRģG_Eb2sRO?ũSw^ DDDjgΜ>}P. W^/s"55ׯUߏvj0S⫗dXjk!77999ؿ?&OǏS=[(y9 WWWyCVn¥=2VUUZqόZ:T:l0m(\hm4VSk6Ϧ¦E,#''VԩS%KޞCjRR^xa7^ >3S~Lghq.CUH|i  it &iiiAϞ=q-ܹs[:x`TkIIIw0aÆ!qIL:=zP3s0zh$%%Q [jpvvFtt4N8磴HOOD"AhfT6 nUVu mllP]]xj ;vU-={ %%۷oڵkw^ܼyvvvٳ'vލ> s 2x5ѦMz9{zz"66?#v D_֯_YfaӦMѣ!(bEiHzÆ (++ÁB&( i&M˱i&\_ziӆNm777~3P(GXXBCCi ŋعs'bbbm65kkI1Ǣ`oosGdd$Ν2888 99wѣycjڵ ;vDTTlmmU#F/ `ΝtXv-ܠpxyy!""9m4lݺO>ŵkנji`R 3f^zaƍ֭r9,X@hQFP\\jVVTT ,, +V0$Ћ V˘췛[}9WUUaF8?`kzՋ=?v8GGG899;ZbԩS(FVVaTUUaXnΞ=KT;ڵGpG`@s4m~iz |߼9$6 ػw/N8 `ʕP*^&aϞ=Xpy TDDD 99ϟSmLjf_III\.U7믿"** pOHHv܉!!!hذ!J% Hp}#kS?~t7n %%cƌ}4 zow-ʼH> I Ƞquu5?~ NB͍1 ̄J\.GAAݩI_P(Dyy9޽ F(JԫWUVQa@| 1|pڢe˖JP(HOO1ڂͽX,FBB?~ѣGS kHy"SȤ$Ϙ1c~O Q^^B*ҋjG6mxL L&dعs'kxzz#(..Fee%ٳg1aޢjސJ(**Baa%alސχ vEWTTT@&ѳƾu:ڷo4"%%AAAW6lHz~uk=C5\wA$'';$n˖-FZ9SNg l߾F=Y{7oիW)󶱱Aqq1lbdrKi@[l2 .̙347[npLMMݻ)쩣#R)...q=iӦ8<Ξ=Y Y*T(QzSYſU l닮]o߾6l6zb?~>>=z4***w^"<<M7n1uT={LSjNNNQ\\H 2W_s̩H!ǣN:2d?~iӦfŸHt}MMh"#FjooŋԩSԝagg<,Y(wƍ鳄,Z>b,_P Xd \ߥ S Xx1Ν;G!b1^|%KG4 :?{{{\r̓-*++I&ѵ={6?@,M^GGGl߾۶m3 㾿X ;Jg .1B@ Y&Y <7`g^ڹ(++yFUUUT`* ArIϵZ-yr)%3O4BtDC% aCŗChFEXTR0B ;h<&Cb!54Ղ j˟ӧOcڵ42Tx>f-Z{JVKGr!zsC&mEl0wJEs% v5^'_PTh4{G.#FUUh\*3EZ"UUU4 <MT*iN+&eKLL&<̱P(4&2St:8::ҳL&W^aݺu3 Z|L5TgΨyg6h}Vp$M`ckV NZVNF /ahYKAc`R1Yg$10nN@ 4bb,6A\_|jDgY~\.!Xf4$a<"Јɏ:dT$BD`gi}̵ =!&{5?V]] o߾4(h}Йklj@͍\8LeӳFH$Q:В }a%}:b2J FY2R}"+1s=|%yV*?5o h4;wgMCfṶ'- 9L!GÌhfiNbcN6 |_*|h7oooȒ}h>#k׮F )UOT*E,1qQ-h%Bգ ߁S?wpmnݺ[}hڇcde%NF0 *6ĩ 03FʧaZ=JK -ӧ.~y/w}izj`JtfZ7JbW>?sW۹1~{>tGK35zh4ZXl`e]Z\F=6am5P'O@ 00V /SvlflҜbRq\UNw  3 2\8&qu h֬gkZXXϟ#,,3;tz= F`LfhٳgP*hٲѥknωl˖- Exx83, k\߫y`~/!!=ɓM07~[z,YxD"'p%t3&#жm[LjY挲P(p]_2]׻)N|/W&5=+ o#ׅi+W&]T*ʨ$oFypǎý{滸/sZ-d2QTTTHUl+ɌRõA())nscKJJP(jJUUd2okk׮9l͞\EEE())AQQ… tN˗!Ϟ=c#ط2 rFkH} vE)//}3K]|/^Dƍk|^\\ RYc*++!x+pYznܸ'NxNOLM@QRRBs.Y6s?]TUUU@aaQ3/L_hkM-׳|{bnG[[?'gg8::"-^\,\ uU2ŋN:ܹs ,\a'QVLs, ѩS'CբVB`` ԩSqՐIWtt4rssiyI&sAqq1G8œYeeePVV`?҅P(ի"..ނ]>}:ys#ݽtI"+++!88:ػw/\\\躱&sgggZݜ'JL/OoWǏaoo*vycbbO!WSOеkW/b E3f `HLLDΝk 1rHmۖjٛ7oFII &Nv`0` BݺukTXl4h@/P^_{D"` ˗/5oݺAdrJ/뜒4B̟?39nذϞ=CDD =z EddQ1D"ܾ})))xb瑑WWW^f軩 F/[ O`_|iӦQldVZ777WUUa֭5rssK ˗/uO>?g'N͛7ǣ_~PմBZZYeaa!6lLFرc1vXov؁VZ`dO333m6( 9:u… vZ4jUUUFPPj;wb߾}@^^VZ<`ǎ\غup]1zBqq1bccINeee*t: aÆaÆ h۶--I;ƍ ԯ_^;` ևlʬjy>KK\z J6V̴keex$''~C>}/֭[ `@n Jaoo///8pǎCѻwo@(gϞhݺ5 i{gnݺF ٳg1i'E~ bԩx)B!7W:T*E׮]ѣGh۶-J%tyO>!z4hm۶לi aee/_1u8eTRRb  ZyzzѣG5i>Dسgp5t:,[ =Zl!PIq!C`>}:J%R)޽~uˍ̥qϠ ,] ŋ ݻF5wŤI+V"j%%%رcFeQ)c-oaȐ!1bm1c>S 2Ǐ7%ng$0^///|8-Z˗LR;tܹF deeaŊ6l&OǏpww0#;;ȕlCѣŋ`0rCŐ!C0k,:'^\f 4h]v!11YYYx5paSL Te&'$.&%g7??Sr,g5'Ycjm,Գ\&ZKWs]K@V?(-[:(ET_~A6m Vϟ !!!hԨ&L4YYY?ܿިW@ۭ[7 $ϔIQ@@0n8,[ ͚5ШQ#<5BǎkP|g(--ł ЫW/z黺"++ {g9СC8z(]\,\nnn HOOkʵ&'OF||{HOOw}=z ** uօ@ @ZZ7s=ӧOG6mpA9F߿7o֭[i"ˍP(ĩS HR|50fkk3g@  ??w͚5›fA̲âE ɓ'_~KFFjq@jߗ-[wwwbSs=&Mɓ'닧OB,#$$ 3gh >Z?OPh]yZ۰Aݺu֠O>x5>} FT*xzz4ht:0nnn7n6oLs:u7od$tT@ CVJ8qCyŊԴOZ2iӦ_~VH$ѽ{wd2*̒_ÇFU6ZOWBբu֨_>Q999h۶-4(QFy9/j5.]52{!)) * M4A`` ʟ>} <ŗv@耔ʣGf͚qYYY!??JO>+5j<}ݸqƍLk\ ZyC4˜v{xxjdN> [[[TTTaÆhӦ ޼y۷o;v1cݻ4ovvvW233777|ʂ7ǷBbb"r9-֣G ` A$!-- fs vpUTWWsprrBEEЮ];*T飴r5dHNNV?6mK S`kPRR@#Z(ӄe"77uԡ:qd*XYYΝ; 5YYYPhٲ%^͛7ƍvZL:'NݻwoooڇB{бcGNw\x3gġC8-V(HIIAh :6N7oEFj^^^|IqȻ兆 g+**p}tؑZH;e2OzogJBpx&1qٹ}nJa`Na9f.p}KqL.%̕x'A:Dךr{n|͞۷Ǐ8a?jl%4>@|׏u57ES=o.Z%Pkjs>R/g7OLc4k"C:t4E%>R>yL:b3R{?lhտej:*R{1^?/`yDвgϚB2UVq%[dfr3uɑurss4\>>s|=fX"f͚Yf&/lXo|Lٷ%:rPG8hϰ .>.Fp l ߙb_{o KLkod`"2>spssɓi=P(j0RP|߻̏{Ώ]Sp+ZoX|. a-Bݵkr%!:.wa S%q\!|Q}\!T|׺.4Zo zYO{[73ׇ.`Kޜ<-Mi[K6-kM8b>2g4;\g.2) ]%q39&>IZ+b;k|47?sZyG;$Q*Ao!߷ `gtga'ns㻎ϜkB.`pzZwYڸ$-鷶~>:Y(3%М iƣ ة zŭgZxpt+yK7/gr-WWWCPpH`pi09ߡV*x!/Zpi) =17ʽSkej=cjmLǞFAEEɵNLHәOKuɓ'(((u=XrF)++CZZ皚;z ϟ?g6gǏ,:Y55GsthfQ yT+ cj]5WV0@BJ EjOUZH0p>'bΝ;;w.? xz2g lٲs7oΞ=St|f/>梛RL6 ;w4:|9~RSS1a?ވLs\wIL6 >G|`\))s J|gDeJ7wGC҂H!.nE;b O8-@(P`@@ WjH <@ҥKѷo_ M H)Pرɓ))++;$8+ڠbԨQ׏6mpY1ö7o߾޽Jҥ {tؑtYZ,[̙3 4}gT*cǎk׮b{oƖyzzRX1=)7k֌c/`!m۶}:M4!::МݻwE+Є|*U0gq8qЯ_?:$ ƏϰatVCo7nw޼b*?a|w&22^_r8K_~ 2[уzcn޼O޽Ek[AM*xQ&^*RJ?rBɓ'3^zj rarIrHњXgW:SB 99׋H'ݻaݬX///˥K8|pMvAÆ ;w.?&>>={aJSNY1Z{6K.rJN:=z4˗/g׮]8q ӶvMڵk,_ׯcY$RIbb"/&99k׊Jm۶%~&qJ%.]"**k׮믿زZm۶m6:$t/^ȪU}W_}ׯњN=l߾%J_ӨQ#v-ҰaBA?c uƖ-[y&[ngǎlذYf/?2i$~go3g6mb֭ <+oj+a;J$.駟2e ,`۶m\xsqFnTxMj\~ 6DժUf1]a*V(b;Yd/^,f)wE\\s` *kYdzgϘ1co66l?$66ug\]]%VPϢE1cses =͛9vT*9x 111]C2k,233ٽ{7of\r~@>(իx_qT\M67߈P:dϙ3O> 6pE'řzkt&o^β`ݷ~K֭ٶmKJGQetdg4gRZͥKoQT:u+WrF#̜95kr=.\ l… >'*;v 6mĚ5kv{=F);wdѢE(JvǏ9<ԪU >#+i>&iĉL8J*a41hZFc!2LbnL?jY0x{> 'RHHH` 2+WJF Ú5kpwwgܿD b4t!y'իW y渺g~\]]`0Xŕ?Ν;Bҥӧ N^/Ĥmسg#GÃFQjUΜ9#Z,g[@f.ʕ+撐y7 erwO^|qqqaĈ߿IQ<6rtg|r# '%%KΝ1 ?'O G.mhJ*Qzu5k޽{9qڵ#338 CVzj.jժ|HXX AtNg,ooo>|ȭ[ѣGDDDвeKGV/zrrr ĉ \]]ˣs΄駟RV- iԨ5"++PxqΜ9C˖-={hPV~t{&]{l60'~d "`)hu I- †esK~.C̵'{WU\d۾Y ] x+pY΅5 |Bs$e;?&''7{ٳL08`/$++*VHRReN8Aǎ9{,͛7a?"I"0E!I||֣={6L<'O@)))F fYAB6T* ]G`iiitҔ)S#FRS^^l۶ uFjj*ݺu~*Us+)P_!9 <==ZH/h<==EΝ;sm+PUV)lK(AJJ ~~~Ԯ]q233ٿa^Ԩ?$PfMӢ8p@VxlK8R)ӳ% /`ɒ%YFlg,5x9VՊ,2ܜ (@퉋dffO r>(]4+W޽{i41-ڏqm6mZ&33Smt<~XpmnJՉɓ'ߟ_ҥK3zh/'{Q"C~K Jt1q ...!eRm,sZ-Yٶ'Wю؝iO-3 eeeQxq.΅\\\7kTP&M0dBCC_>aaa߿+W0`:w)))Ӈ'Om˔)˗z*&L|TTÇ>/vׯ_/:cjܸ1_~%qqqDEEq=ڵkǍ7ضm˗/w"Z}PP111ߟ>???6m*_ЄE (p]Μ9S(0F ̲=B9r̙3ի[ tڕ2eGQZ5RSS l6i&nܸ)Su5˪j"""Ϲ}6&Mq(JΟ?ϥK8p\8V K,!663fذ %Jnݺ9Uzڶmݻ9~87nS}wtԉŋF|:m5v_g;Ɩ-[fϞM׮]%-F֭[,Xۋ_tGnnn!bM61e Dz^(Xإe+*. BAzz:W\b )-vj*._̬Y Ar:u8pÇoѭ[7puۗ r֭[Grr25Hѥ`ڵkWʗ/éP=~k.bccꫯl0w 6RdŊիWǏuV^? fY^SR* 0vd IDATڡT*EWX!%-[ Q+-ժUV/?RH/ UR3gZw9qA~>ޠ ϟO||<_|H'yyyp+!a_XXXhO0[*JzA׮]'z*_iێbŊY1I\OO/TBTT'NzꄅN\\k׮ۗlϟѣGGfej׮EмysʢE9Q H{5M4ÇlٲELJF8pݡvڒJJ*7DFFUP=4H:uD2L|焆rYTl6%'dػw/N"44cʆ׮]7ob iӦ nnnԭ[#GRjU1%~As̡nݺٳf͚YI7OʕŤz lj֬) +W$11QLݼyBz"oӲeK1VbŨ[.;w͛=P0 L2at:&LsF^B~gK ;{,W&00-ZJڵٿ?GaÆ h4R28{ ){FR85 v@iY XYб\H$]mr`[i{``[jm͛ԥrGk o/Q YcQ H Ⱥ#gϲcB),-j{:l_jO[coR}Ѧ[?{ ͧ|aڛS|j;>y E[e7JXfɗ]rYnl<`,[L"7ζ'upKݕgo>ks4:]\zVm0UB3-т&dU2`L%58)'ag3Gi*JTt/,8a>IQ]َrW=,&cg)8ĥH=Dr@ ԯ__Lf鷒:Ҟ-U m)Y5-}8rF>k,ЎeRuYJߖg9>{s/7mT8t 5)zpHJ豝{~ړB0g鏷 Qb|r[;-yT{R9^lfYrk.מ-a92g۞|1ٌ֮ơ-tr3[3J1gKb>f0,$cAi-:"ͲEnrRڪS.k_)IQ*.[_Poaiʵ K%q8\-9BnRY j,GJ*439.^RȒшڒ v>mJ Er¤Jj/(%%DHeL`&5Z;5)UGQhGnRAl Be}E.N 9 D{./82XBp^t.k68(r(Hreݷdl!Şr-јIco-0ϳyQ^F~ށ8^(Y?NW(Q'H|6rdŎ/˝i 6IrnM8J ÔVnOJR1:nIu mјrkOҨFxFO/leӨܲ (*Yˏmp ixR,Rp[la۶mVY"Hi]&R cڴiVK.^ng:i*-T*9z( .tb쁫ۮ|LL ͚5ٳeyI]6ew BD'_*! RdbF)xۺR^K J%+Wal/rYulIQ9cO˴}T*Oyä3Iht,9r=+\ A(럜g}&EfѨ#&pڵڠd2R="55TcQ8Hd|ͨR8tǏYfnZry%KHH !!nIzԩSԯ_N:qmV\ѨQ#Zliu/[^6J&--?P 9mAٻw/ϟB 777R%"99JENN1e˖u+I5k8nNǤI %a{.֭CV ? 2޽___ ^h4DDDн{wH:~;vӧOJe#J^^L`/SRq-v@ u5mYRSSPj2k,1;{u7G}$ǏqF={Fdd$ 4()Ӽ233+7[bW:t^O {sE2|p]!%%۷Mddx%=*tfQpss#00P"%oڴ84h999x{{)jբcǎVKN˳a> 9Mw,>LxxHrue˖\r-{ٿ(UJ21*3Lj4INyRizȿ#,[;vо}{l"fIII!++jB={6ZҥKb J,ɳgϬ^Lc9lŽ;d޽_%KR~}j֬Idd$;w7 ڲeK.]$2t-󓞞NrrU?&M%7Ch4j*KV`yj4 p @˖-i޼SjnZ-III"IOOw޴nZ++h4h"++Kl2*VHΝi۶xKJ>}4۶m#,,5jvZ~wT*:$1ܖIYj7n`ƌ/_P-ZdrBk/ <~JSuԡu$&&#;*:j*1Goff&&MӓuaΝ;'] }YT޽{,]rΟITTZ2M[B [n1uTjԨAVؿ_նF#=|[.uԡM6NjXIHJJI&xxx0j(F#5"<<\̰s]x 9)(={Zhݾ};ׯ_gƍERR]En܎9+֭[ 7)/r`.]F':uB7.Ё6mH:t@ޒIjjtfϞ͓'ObȑԪUh"={F6mvZ7ʨQhݺ5F(&OB`,Zs<==9~8cƌ/׫W;NҠ,'̛7ŋӰaC>/ҤIz-y'ۛӧO3qDnݺ[oE޽K푑NWX'0LԪUcDzk.v؁Ju̜9XpRjL2ElfΜIHHFDiԨ}D 6m|ȴiӨQ伕/_^̇ ΄ x[&6naذanݚKo6mՕӧQg x`ڵ|7S'66[c߾}jt" UV壏>G*0MiϞ=Yp!Ν;,X2eOTI]^OX4;;;_,H'i4CR+Μ9իb -ZĒ%K8r=ztڕTUQQQ̜9-[9V:tٳ)SL&SN¼Xh"a*v؁V@seo:ooof͚Ŏ;رcpG하.^ʕ+YzTre֮]l&!!;w^CYd !!!Y!C W5 =k֬3Yhu%''RJ1tPݻGjj*ƍ#&&F6=ܹsXlSN%//N:ѲeK߿㏹sN:f3/TZ;wh ?+U7o:CRURcǎFazkuʕ+7o+hrssi۶-QQQt҅ =@TT*U"88X677Hbb"ZVD(Veٲe,Z7rY-Pzu͛W_}%bI[Sq6l%mIAmDD+Wd|.]DNNm-L$d Yj[fVs?SF ͧ@c_~%:t`_s"j? С~*VH0`)))v>8ek NO!|||rJA]5r2C?~lvAbhܸ17o$""֭[se F矹y&IIIVe˖%11QLz){X͚5+i( 0amڴMN7ʔ)믿. P(͵jۛAM*U0|L>޽{ӬY3sƹs8rZVO׮]g B=߿䁜IڵE3ܱcx뭷gz'|B-D0B^{L|X ˖-Zvlnnx9zVyسgoL0ٰa٤o˚BmڴA1l0LJ[n_hM9#@EDDᅨL=##ÇB}Z)@*VȄ Dvxx"/sMƏOFFfrrrDjժY|L.߿?74JͫRÇ^X'(j+WN < ""'NGq)~Y JƍϨSIII,_nݺQxqbbbP(Vq/Zl;GHCϤ,#名,͜B[Ν;nݚ%K:ko||Sj|͚5a2mx烔yPEi> g(bbbXdqAϧ>{!44˗o1n8F Js̡J*oqFjԨAXXᖔDӦM9}xmUSlrl}ŊYv-lٲ <<:uMZZ}uV6o,`mذAk8q//B3k׮ C޽{Ee thJ?_UD?R*#G=Fb̚5ٳgR VZ ۗݻsyGlyM&Qح[7{=< F^DX9cԩ 0bŊȄ[oŽ{D@J/9|0zbxxxáCݻ7t|/%\/_ުo,]={2buFӦM%%SN|rxdL:P($Mٖ%JpBuĉ)U&L ===z? RbŊdggӫW/>|8qqq=q FC׮]IOOC=z ǛoСwcǏ{ٳOk˻Ν;4i Բܽ{gϞ1i$ڴiԩSQ( ;2#8S:W5s6*:۷=߰Q#^+pX9s̙u*^vv^~\:|c7(ߑiR̖;?:ZY avb|RϾ+Zm^~ļZM|-4j3Ln;fݽK^nx|QA޵,nBӡPgC_W克9J&qja_˫8%,(qqQs=J`i44iތcG[ ^dFA>BV${ PdA_Wfx_WX -@KBI{7VUjPBaF;4J IDATf]KwZJ7L-WRJU^WUyUtn\qG;SVm; zv5RK>пWUyU^WHbv(^swEWMr8ӞEyeioEevf8Nj7=u}[/tvEA}c /cMPQO.qwai[WQ'71ζPȯ ngR@#/U0@W4FӨu(e*ʗRķ%LuQ&YIW*\^`g+ؠul/{þ,Iy$^GLܙ^&>l;EJݏtڇyd:L^e,a:r]P .'--RHIqԩ`##ռ*D> pSJxIQ8RHk4lۋ iZBRZWdǩݧ6cA** ZR).O *VCWtR nNjgM-Κ`WҖ=IDy36֫V*HL~cx K9b0)(筣\\FJ, Lu;CEQ[>>¢RTz="Qh99 UT([ iP!LŐR="#3?_BPjGD'eVuDσ:b/٭mlې3etwJɓ,6Dߢax5t_WřYs CuфBQ(4cѨq|Y) *Jyy!d0Z рծ~UP<=>Z%Kb4VH(o29unݠnq_l)~/(I)L[oЃBJwrл*J0|wQh**^߻(9~%,*U҂TF(hDTҼEKn(+eѨR$%%tjq^.%|}quq Ph_mڱyzFԷ/} M&L":NaɄJF\ 6$(2_WER(0?DMF#m۶eСm^n),Gٌ&|:cz_&)e4RyкMKڵo3O//_233_,GLfdį0̘lJ @{RçVQk&J*ߟKg*jj<<< xzzry?.29;a)ծęe˙콜yeiEәu\/crK r%ruX~srrջ7>%|i|6nhuZҖBXbpE<<< ӎM2{H *lhu8لR$--zQL}9{ᑟ ytYV̟*un8 хJ*|_qW=ըUJt)'4Rz]yZ BӡhpwwM[ƴ$..MRRST*^^#2y֭KR mB1jZ.{ ^ =I 3fSaMMJZ1WSNրB!A^toV%5@vJvj5Z9? sjՊ1cҴiSN8ǩ ̌t F.^G8qRl6N<䐛lx⸹{`4WvJA###C|i.n`6Qm @VV!{dR\\=-^9K1GLCn^jy{䶿4h&%JE~޽;v_~AVӧOud?'%%̜9s ʕ+̜9RIÆ 5jTaFk2c?n<<ʢd`IlތVSOQxOx׷($ WBD(Ujy<}rsstӧOfY{o/ } 4 uV;ZhArr2ϧdɒ\[nιs8q"zb̘1<{ DF:t8s2o<0LT*i߾=ڵc̙ jU2m^3O͍,BټiyyR1Lx{{Z_P}FNN(x+d$##P/|) {N4e'С}{T*k׮eujAԬY)_|9v8ݺvaĈf:oXOU٧3ڵu2nXʕQ#p0J.-;!9sCY^=wF#u(5O=/||8fT*6m+==ݻwqFJ.]عs'>>>̚5;wtRLŋ6mժUc\p:uX[{F#:7{vF1_Սc8z4ǏorߟC2wmۖ:uy:;vС@S`%x cƌwc0R^OJxzz2e,Y۷o^>}zرc;+VСhߏW76oނ7۶m坷ӷO;< ͑#GXj֭c֭$''sQQ(vwP0eT~5f}-.]W123شy3M#>ahR?fǎ_yy?c-ѝ4_֭طw/͛5'99`tN5w/ {)ڞ+u_Qr~m9^(~D2|rs+_q:J%<==h4ܺuƍЪU+nݺ%U@ʕ ̸w;$܉8&Nt׮бc-gϜaƌ[QG:J G4 Ά 0`C !>>ZN`.]WWWݩ]6GeԫW֬YСC9}4J&Mh$Pw& wq7o *05x{}?U}&ZNfΜIV->| .r]~_M𞨫Z'9Nff&:>}zSn=ŋ\vL~}iִ)u|чܿիѷo?wFvmII~KLf/Z1=8ro&|x={ot$11:oЀ5kE^m+ zJ7%q38s3zU#7J-4,Pa`0a2ZTdB ##FN3zX}aer%A\t?|Lfn>T.{t|}Kptz=~ܽw*nߎG_<=_$->}GY^IHH׮]e˖\p+@JJ iz_Ϲhh4Fݣ n<Аl2SCAnnJJru\KŬPQ&7%$ X"W_MRɃ 0*D^?'*ẂR) Ǎeu:uGR6~+*T`)̙=_LƌjE'$&{(FӨ`MYb\vA~O?T|6''Yfɓ'Oh޼9&c2vXڵkǸq0 Y'se(W[HT 4iLŊce_.U*334p nj% '&+V\>zĈ#h:Z (^Aj=y:#=prF:#ޞ}ͱ "(z0(]S6$P\eΰz8TwN+W0PjUt:iiu/Z4o/W\^=jTNr׸~a]t&-ZjQ*T*2228s,A+J;Gʕ1LTTڅ /FP ##ˣݻ\zRJQfMJ%III\|0T`޽{\q5jPBf{dzy2_ g`$`g|` 9<r9: lNLLNGXX*UܹsԫWO#;;kQL7oJF Y5dɒT {X<~7n`xyyg.-_3-j5>L&w$+qqqܸqSZ5EMYP!*Gͨ.$܉|8|D!@GCQbGk̚:k4*Ͻ{PWC*T`lJJ cVIHHB jt3DmTþy-5J*ņYj5?/ϲQdggpuue߾=Շl6AÇ\pU`4 Rƍ܎',40 yyy>}@Ufu6Νڵ( LTRa]É\HVɣJû T2^huF<<- MTEEF@`L1&"Pc}g}S b=*XQ^23sٝfwg>s>9dfE$ ϧ#$ ijjBQ=(0Myј~Qr>Sr<Zt :$X,$T(0׋#n7>h4Uy<^oRyzځ Fj%Uv5ʌqZmbvͩ V㲓sTurhꯑio(-FyY9y:38gz EUx<iJm{x<:]x^^m'vSzffJ{7ht #\4vBS)x8` y̙"?b~Ѓ҂㭷sϧUijnnOX,&`YV$!q-#@"]ʧʼn2 gR)Mϊb֯pL%QL,_&حR(444R̩yh,;mP]~(펧b6LY6U:W,7xZ?0΄EB0Z9 J*Zn'Θ -Fb7GVSH)\m{nS="QdM ~UU+ xJ Tjp9aKv&]!aln.seFTtK['eLU4}s1o\ OK$PxLK>L}&ޢiMMͶUSEQ47 "rJxcE{s>b=h._h &>R;ґk'fie18jl$U}M;͙6";5cM ; PUUog~bq)j$Jz;3i*JJ㵢3 ˦%q9iygͩ`\9}b)L"e2xAK2D$^4 O;Pߚ5U$R`QT$r~nₓUU$CFtSi7u:3&Q1Y~|u|.zS9 } 1p8r4E aD/Wen\GiT4JKE>gQCs@HKVxѕ(QbrafajI&2q7#'oPb[WUKv"5ȲwWsJ"~<~~hb=s$h"z=l޲(UZVFFΉsAOҥKㅹEAV\4~Sk32YQ)(c U%8%ûW4"1Q\,jkTH5[}/ƪe&(J1W2*FsEEE4et,ܜBphKPT\̤Xj9ȁ!&"11w$EJD|;l[1A@2 Ѭ*C IDATNGls:R]$-c9p.!ADx͖FSeڌN9ȁݽ9BGQdT|>_oN(DVyDIbt+Xh.Z76Eʶ ` QŜ䞃o0Π \:$^;IxlXj䞝mg^YU)-+#5Hj3⶚,;=׷Zi YUSoGcϦUbv"=N;}uvӄΰeFvSNŤ~7iԬ݈kvs̰].vܶ_9O+v,YkVD#m; b&;Hk4l'V-Ico;qRVYOH'v*uVr44wZL.SӮӜJURШOcMv$/#mJs1c VmIb'eG[uMՎnԢIL8oh4G9Ms~WmvQ͘wU۪oڷM hLv\f*OЪŖ󌸽]U=Om̞mkǤdLfNJfkkv7jvN zd]F&^hFs4Ht3ӻeQ)+ߕ@'&Jʟ);ftm eN"v\9}yɦ[tF[?SNiw;R.hA%++ٷo/+}NMMmDxFaaG =rdYv#uRk'U+GiL%ȅA1{i[vj uJBRHE1M@A:j"v}m$Ɔ/uK $Q/X 'g]8B's^#";wlg'rs`TU%" j:eC59ȡF!59JD]m- |Į:Ar |m׉2(#|oWbYV:tѧw{vbi[9*z1V g3$裏~HWto &; 9(ןxޠzqoQ%XzǍEKKKmvzzZhjÉ|Yɸ &J*7_g̘(-/GI,hƢY~-G;fGULeYNt{q&ق Jvp#vD^fh:Yѽ{uAPTT(Je.[MQDA`x_TP (gnZaM8989 %$Ar89fhAkN \ѝ, 2d,ZUU FiM(uֶeFIN"3r~8j!!j _&q1\u\tD#>_ NAU%١є|[9AZPEC}=O<y&-\.˂ {E@Z3QUE#gTMҘH*0㢙xpݸn<ag n(((_bMx3Q6Z///O?%ئlsR4 j6N6\!Ш]5=2~G@TDIdL9 9?s/>?a^0D4bO<yyy(b4[{5mx4 (J=]_Klw~:tI6mI >`Kx}LǡkVxŗ]cI^bn'6m 3{m0٤|ےaGMW&ga`fgܩ޷oHD<o߾mÆ RXX lݺp8 ~JKKl߾&TUwt/̇zqq 7kNnᗌ}}̛7={r'ӮÎiԉFA@QmF,CUUa۶m:~u&ٳ\.{Qx<QXXHKK 7oW^_[7z}qpeazne:7{ dh'z_\= %.$̱iؾlc X".wYOQZyH }?I'RW_ 8=^TeC~A!JJp=i("J.TEUUӮ+VND8xxn%%(Bqq1(r{޿O 4x^ hinG0@Scpߏ륮.3)芦y~6~iݕUC[UUƎ'L43gңGnvk4hٲe ^Eqw3h N9&O̶mۘ>}:vXXTx,7݄륡"fD"  )*,A[i) b1Ai+ H~~>HX,"ؘZ8-'hV*nV;x͸4?N:]vqRZZٳٰa~ŋs7r +Wdܸq0s}H? >C͛[o#lLB]k˸{*hjnfם}6hŋpgҫW/:|-zq%xشi3 ꫧnϗW^u%׿xW>}:hk]2f6s≜vݳWl%)+4aGɬY-)NKDfNGQˡIg%]Aƾ@?x AL.H:jkk5eH%H*HdEE:Kѽ;gy&<se,_JΜ8F{{vv;*f`6efհnivU#F+j*Nx裏9s&wf<<3:#J[L8ѶFekጾG3uTTT_O~ ;C}C==%K3믷38b ,˺{(2r<شOp@ߜwDKWqZZD*J Yi7TⲊ%*acSCncSg5_"*h ۅAe"|ׯOnL:駟'/!q0^)VM%k֬!&6;A$#I>c c֬D"QvNC}=FdI,Z+ 0f.EyExM6nXO4W^Sf6fT i/;crZ]lzi1J.] ʕ+ٳۜ9s:t(yyy)jر'?IJ AA} _O$FDxKD,CQU(nw|+**袋98lBII p f>^1w'08ofH/Sή}QIrG>}=W_efa.b6oތ(?EE6l@8f:ЅU5r 'p8?ƦFDQԏR֭_d/Vԟ[U՛_qf 0 } (J{.yQEQ G{X!LHq쩋U|F4%%LpOVB$zy$dYN v?5 s]UUEr938qᇳhѢEW8{ ϛW[b/),(risg$[LCc#{.W^ySOKK}Ahjjbܸq,])7oz<31<ì[h,q#Fo~5ry?yEޕD}l1 pmBCCwq~:~!7pwwn}[|Rv z DQga9!D"q?~7z(,( pon'?ښZf/077>3fN`;2)Y8]Τѝ;wSXXƍu<|u_Ջ>zJӔNӟ'I6m>noUFx5j$|0<Ü|޽4.bᗬ\{R_kG)/o%ƍ㭷sA$O64}"1bw_v-h\!/fjj[>{bhJeb̼r(`?#LysCQT&uv2ʸU pI9iedֵ;;JQV5k}4eСAb˗/GTVVR޽>p81[VVqlKYi}?wG9*_Gy@ 믿ʙ'tFrطo.BTUeTUUvٺu+6ngOϖ[ UU$۶ѳGVsM,^1WMViyef zؙiG4 m6vAee%zJ7K=ҮIYAVwA=渱e˖Q^^Ξ={8Һ|5@EEs^|{??O=4"3kLn7o:S9&ݜ*>{j՗UUDD_}>}лwN{bDn76ndgK9|8yEՐDj(}"s>'_xA4ѣmURQ W,sN2EEEd_4Mv3jȤv777SUU, ЫW/" 0lرzCUUӪȲСCEQwG"uҮ 3axT^_<Y 0bĈ?7h#;N7iѣQUH$@0 //D#fk 6GӮ(qẐKJtGhf4C99aÆjnw4 ߟV4*iF0d܄ L4|X,1 =֭ӧxY#>bqD<̭߭N\j>hUUUUUixrҘhkPRRv={L=z4^K Sf.:` GsЃ3~(D(..b„ i8蠃8p)'( h4s,' Ljqb18{Xyu P˗6ӑt/#B<փ ~KqiWCU㺔bb<2]'"yCݖZ_ktLUU=xG$x9A0gV}Y$pʉnFNȚP/Y3zUcc ԨLM/Tpa,x!=z &rܐ8t~}Nx<ןb+"$Ys|fѹf!#QQێ ?v,vvs}3nx̟O>ijn[ь~Xi͙iF"nT#'wRP؛;2vNSDF>ZFñ#`b4$%ڊ|.+In{TYV ӎhN:RqӪffYd3)N<:UUV#"!R:Nܖim9VcNJNv XKA-}C,)إ"MS3uTQJ޴{L;ό?Q@iղl,#MC<g@;l57oTU UQAHI˂+ӭ$YU(++%ӥ}̱9AV -M͉^INAYh# :@ULu ϊd*p]J0OMMvuWfǧM?R;fgE[Y'ޣ)G=9pw;d>bOʏ`bΆF5U0Yt K?YBwkMsS7m̈ע(ҽ;G}4T"t;Za[ٙqH qE#W2tօwly΍4=+?`B9Aۍ"Q[@^w~x9~lڸ<.wܽG) >x2Lp6Y'Npۍ'SxggU+l|i}Z;yGiG a)r4(zzYg6ir15:R tؑ 3U^1DiNJFo;ZUY@tQo8fG3BN!񌛢 3+ƐhԜF".kԎmUn+)iO+Ͷ@ޝUXn2E<9N#s1 N,,vMevq+uqBON&G" :37lTHdM@mDŽ`W er9ETD)t^P3i- S9Axi:K&`lxS~`Y${[qdOVf"+BXcs4RT\AiPP1G#/?EQ,T];쯮N$tD^faa3V gjͲftіee0ad7bHF2bbf̯]6%mٹO?92(6!7^eȑGQY˗j՗>q ---fGi4!456pu4 >Oj*++{p\H5--mFUUB>/q40|) 5McX<^/۶m'x۝m PTT/of2fFҫ$Ix^h02fe>IFnn@ gXD f`vq,j )<ӎQ3d6~1ىn3Ncmxqj_}&O_ p]wyqx7oyy!CKv׺#kԑ뭢:^~h4ږIT-~j>Ѫ Άaf̸v 8pjvx=[k)mJD]]7nLc؊I &x<eu먮 {"DQ]3MB62-Yuⅈv rlDVL!ofs)܊}]6轶o;CmmmڹK,aɒ%ioݺwy+W_z5>X,s ^9s[={6gӦMso./V~ D)wI3Z{ 5Ůb &]hqQٲe ٶm(zjy6oޜ̛7zX+9qٳY~=wNh,Fywp=:e]Y 'B]!!b6./2?ٳ{. A(1nDV8&qI.U ;^~ӟp駳~ (,,܌h(aXMZ+5UGu!8I^۾QVWs:ݺu+r }eΜ9B!}Y-ZfŊ?gKݙ;w.wuW{F׿BU5q\<D٦YZKA~.BdY!v|ZZZhZBXz=tiw=*uRJN g̙?s=(|sqE1n8~@^^g{[niEHn Ei'/U 5RAO.! %Uii  EQ` b-щht#KAAnL1q3SYn=e\ru wߝˈWsgopWqwгgOlu^ˈ{AEqiӔm: JTgL12muY+Sa x/m+ȷLҘQtLc4h#NLFK'g?wq#F^@4ϟO<>ҥKx78[x衇xx5kp} ~X,(A<hۥWHT/+/sYg1j ,^@ @ss3\r)G஻& 1s,^n\%~8iR۠LN2|pt '<ӹ[ygXh<wy'P+V̢E#J0vFx< IUU>ӧQs~kw2|z|>^''E_L]]Rޙ(hϰ"Ұ j̴F0d…,\kVsͿ^c͚\rE<#zŴdY[ngs᪫I"H%/̸x}v|qq1O<$,d fb͚5qp{_~ ~LqqsW_eD"DQ KQg#wT ]sNΛ)JKK]R>hinfaۺٶ_tI444$Hh4aG T{ 456p&4A"fEL!))hULJ246#J074YFg633bv]^/[l!??c=Mظq#cǎMm (r"(.YNSjnnsAE=XOOصkw;w~t+eʔ9<~vډUiJ79mmysw 8q";v`СPSSCӮU5P^~9IɈPڼrϙ4y,~ R_W[gm6=\֬]УRZVΰPEQT-i7fi66)<dP5ĔW$&-?/N3O?iK"=ȢZh+VP`0?BUՄdIdYAD oVxfMQ3xڲ[Ӫ݊vkͣU O#/,f\Sk8C;w.{.}A<H=zsqq3dMW\Aii)Vc9 60zTVㄓu~~>---H,9 BrsJӿZN=4VE]m /2>0o'|2`v*B~oFh4(TTTuQLXK>@8O>;`ܹY#$^DQ((O}C.IBQD-E޽Yh1g9_~h4a5|a̘0X2Xut/IRZL;>z })'dʔ)L0SO=ѣOAљ|߯ꓝ" Uhni?}"]w=4551a8~񋫹w,iini<7D_״t(8Ndžo LhWw^NaڴiL:{2e=\?|.B&M%\«OSM/K~;{.㨣!Z3SÃ>OIq1rmOFA"*@d{6VG9S77SSS'i0qDά]&E]WE~O?>. }w4i=~'rgs qYr?,p8~w {v6pe~N:i,_u͝w)Œ~Ϯ]sߏ1cn"ZwL3sb4\]]T*{@\޽Yuϗ AE~??Oի;wr%iK @MӈF\.ݗ`%;4X|>澇L:l4MMæNƐ;;%zc8梨"jkk4b}M(呗O )_ikm`w)+-e˖qonʟyO^^wq;n7x3'NNѦ);ntwJAA $v444#W7x\5 ?96h4[Ҩ 455@0={҂,zD kVWW#2eeeo  rwp/1pnEz)GSS 21qޭG{^\.TWWSRRB(BQ$Ib]~ >^/K/\"0uRiiNxNUSVV{~*vZ~jkjq*++Fm~_-ytUUa+;pkㇵq38":4̟M`>RQ`n7ݻwog Lm&zѣG``0hPZL@C#pС<#9.Y3DCC"֩X,륪*.I H<dwCiyiic2jF(SK ǔ5XKJJLÙ43v?'on[BmM @ dYFEzMӒ)BP޽MPTrmJ2Etn*)`ıKaa~}! "3?}]'%[׃TnoFo?3^k쯮Yv ւ A&mm_=NuGr"9-+v(^,,FD4X\.xĖdc씐iI'c,;9-Ug@< &4 x%p6%XaudF;FnhAA  r4ڱ)'Vɻ;W,5L&11RSmĬL!6lBS4z V}^UQUZA ijl"%g6# "6-geeڦc\-JEE@1GQN^B455Q"S=BDIqP~|Vy]n0,5RKMrf׬Ր(rƙgOXxQ9ȁ1?'Xfu;Ғazta'XJҨx9SYslô=ϩjvڊt_Y޿]hӧ2ڡli4u}IsmߜhVFN3d3D*ٸTt]hf^ ҺYGUnkrЙˎh&$9&N!3kӴˣ2;uyqӖA9)eVoc5!vme%NzXG ȶ ެΜ2aw~;Fz: &]wFiiH)#j1{+݆v.mQl~!r.olyw&_^hh#MHSs 9AbDQēƧ3RQinnX89Ar$@UU^/yyթdY;.Ʌ%Ar #Rii[qH 9ArLK4i 9A,nGю33}z:4wr:vɥO~Jӂڋ?E&נG[i .X Xݫ+$U"Yg4O4Θ[=dj7j2PQdim[I@8Qd9O@.;+ (?,ACUh\}PDں !#5͸yvru4 6bFg*4r5>:evfe*uXl:4؊̓3+VmvZ+YB[p\466b2b8(<^/Z "1xvmٍ$0*ed̑x%-M3$H$ٷGipQG鍵[Ӝ$Iܱ_~I4Ӎ|޽p𡇶+wF0b diEX,Ɗ 1UQH,Z+VpǶEYzTsO(?=//eE~c8*_\I~a!O=.~?q$eu[3/#Cr$ښVY cPV^񽦛[ZxwmA!+6Feښ2J0Zovjl6G[Xf$jN,12Zb~V 'Ow]m- 0!Ȳw s_Bx4MEh} 9$ZjƨFSSSM$>i$53y凐EEѾn6ظ]=h$B}]ÏƬ}?xQG( uui.[bW$򽝓97 2شicRhv̪vqvLVf;m%262[}73uw|v~3+Ĵkd#SNZ+3gAAC%"[i'eÀfHNkRP>MоŦ) @մ$co۝x15k`^m}pQUM kZb^ۚۢշgGбڝY̸u0-߹9$WBh֙Sa]mNhΚп Ӷ}ٯ%2Ҹ1nn^{&55en" 'X47z= BӔBȸ9]kQVֺV߿FMVC:J[3y< (>gM3 YΈQpInwk܎K$pquluek3N }MN7;vpIf.$qۋ6brfa6.*03Fw~%uS+®u`_!LDD_o|*~>Gڍm~G( ƣQN,ٝ[ˣx<$Iz,lݶr^M( UUGbp8 IDATR[r|FT&UYάGv|5̴>v_̞cgqbµǖVM.Z?~qhYw!j2瞃(nC' ^ۿVT Hs3~_O-Pp8k :zbȐ!H@ 5k>}: xoES |i]4lpVZM>Uza̙/XR l5@t )i|GxQU=CQQx<4M$r2uzndY 5."[vTꇫV࣬{?Fu]//[ JŅ!>jP=.VbԨQL<;v0|pnvTUϊFɼF.v{V4MÙLnݺɖeOb]'M G\h(Hc1"7"L\ʞ7^z%\tAq]w!r;e I m58dUD~[=ÎlVȤ @yV5+'a[iǯi6FZL;=Zh"G"^k~w#Cpòk]{-/N>c4/2 &=<@4BtbK/SO>7oo/Lrrr_~%vwu'N@SWWOpڬ._{xQE񐑗G᫯ͳ1.]1+}jZEywغu+o&z3c?_˅d`0P]]G^|ELʕ+4jLaȆMǏ(¿GQ]Ue̘1X-8ڜTUKva/$I>}HJJ իWzj,Yʕ+Xn6Rt:(qF}7b4y8yQ[[xANP~P^^N||?dڵ<_^%bgXh%%%ܹSɔ+.3q#bٜ/eD1)t!“ۻC:ђzs,XH-H'(ޒzT^k^Qg!h|fC z9-QD5ЙH,{immaB~kWVVt2rss))y >x<%W_ @ڭ2S9|rXFQ|>_ԯ[ZZx?MQ`dً,龏9%9y$?1cLf3 zDџh4hii p8P6n?TVVrp!lx&O… `0#|"oB8H/LFbA8=^=2UUu'a'vx}6 "2-x,_˗3w\zA6m*K,EQhkkh`ve&$$0~80L.|r9)))Z_%gF]EQ.UC2:֑'G;hlj$-5t&qt,cӞ,~8Íe ҂o܌Ae***{{caa!>,ܹd~_fѧO|M?Ə~]>%%#omL}9-߰ y ϟW[[ @SS#VJ= PUUq:8Nٽ{7O?4I~=IZ@^ :Сзo_22ׯ/_HĐ!Cp>>ŋihh䩧VuuuSXXȝwމ(?lG{x,_s9>}EEE5:xa9h~)|}YԜfB]Eˉ*8\V{7-{ޫP Ca[,[_|6#G VV\ 8u̜9<֬YKrrU~t1LzdƲ"n @9|y )))dfؙ^pg{S34ikuPYUɰ!8s `4y~7P[[ˢE6l|!Ng psY@ĠA !7}X:DC G ,VyƓmwhhHAR#ҽDQtPO^@rL8>qe:w^. Ne|}gm=[oQ4ɟ2V6r* 7 2yyydffR\<7o\wuo>ᮻdq|xޘӧO#!!$&LjEe5j &0iD4McԨQzΝ˘1c0ML?0q233/^#ddd`ZFN9Դ4|U(/>g4F}CnI\ H[{3.W{𜢢a|y? #4i"mmm̙s+)0a, v)S&3eʔ` ͸qcIII%##`V%*ֻ 9w,y(Eyyڨv wL5os(&]$Ru)u[*{=v;7h<%|:}=SM;AXQP/~ Bdrr-y^/G7͞t l1Cc2(Z0nvE99!++ IPn{AnN.,\ zv[~OYpP\NgĀӱB5͞鸎JlzI`?{# hStl d3HIQkvq)m=zj0iӦP$v' EA TT5ܻ<4 O@ =7dRgdc?d2!>=qf3:I$==5hTmm=}ϹݴnݺOQQs\.VF>%]+Gm=]<"V/Rԛ~і0/ľ"Y᲻T9YyvItKRґ&PS%~2CMjNm5G[ Nv@,q۷oPɊM4<i7ED  &MТ!lh4b2QTȂt80͘fLF# vqዡE}knoϵ2 ΄NRU.E TUkJj(K|}}GOX<5Y7v09 P[Sޠ뻮s)--2{8#4;F2@/u͘L6'H`aM8_^MUM[S]ݣ'J?ۻi~Ă;7jEznlX!Hz/mA9DSV1l`cJABQ_vr$>T1E(6{HZzKAaʼ׈(} Vx[ؠ,}h$11 Ue"{e:tZ˝)0YrDO5ۛ(bH#8z0>yW"nͷ5s5$Q`hb:^!DI`A ̶ ! \M(\ĉcGgF<eOPUK|<ţ9r0'ON^:=a ,fK4^[4n8 $M3HFB%U0Pmv^O_%Ĩ7|˩=lTU5 $P< ԫ+ H =Eu:C c\-CQ`,"DLQHJNfiW<ݟ|iqIDATާnERbƿŲ IM]]#FAF{\3yDz)ϿϹUx5`[4MC@͇xl~C ޻UFB(ޫO&=+:MS1ƫ"6kڸ6KFCg29s4N _Ƶqm\Ƶ~t:_{QIENDB`KCemu-0.5.1/doc/window-profile-5.png0000644001050700006200000021774311131675406016611 0ustar glaubitzfbedvPNG  IHDR(jJsRGB IDATxw|elMv7'@!t&≠gWl9N콝`׳ (U$Czlli$! |߼Evfgyf}f*jy7=#B!7P3kX1&9ZB!BN5u^(pʵO]5EUrB!M*,«jZd4f :4yRm۶q#]5rB!-'Ee_}8"C  _^U1YV]'B!B9)( k0L2{Gi|'q<ޣLv~R4NNa9&ժL!BqhWTdӉtkk6%kw2q߿{S팖Oj8"yo89Z!Jn QTR׫`|p)%+1; E&Q{tj*62m5 POMϷ5ކv1!hVa67f^ʟ6QRZtb"pVٹRn (ۂFhG]XidmS2o 3vq˜~D3sp7f)B z'K^8cm5368y泭;v3mpN72s)t1_3lp6do005>"^/%EmȈ'*4r COt6,]N\bo R7pɔ!܋y Vů 5>FI{.n#?[BJ2?i^5`؅bJ*vnklD30<f~[>9ʜ2$$&9<0s2 yE ̠WJ:Uj^zɽX-<\GqCt,_%--YY\TUcbdp߆'?m`\b#ɪYreCWQ撇>㘣deOw̨󝵣>INeQćQQYŪ?Ҫz;$;^[AQ9s|4`ʝn?d1h@&V< {7=Uӹ/T\0S+*IO]p۲ʪ?5{ ː E!jԿ?1xb? ixb(~Pׂr>&E!GٹxPVmg ޼& j6H7V-8|k,f]#,cF$s#q, 󝽽GՄ}W\lKAQ7T{hy  w<&Jӎ$$kf܏q؞[ʍOd- j߂ew1eN/?c8?<0C B| NN8&[[Q[LL嵯0䖿mBq4jғ"x5&NeGHNhQ)..㈌8n'_&ϩ9;wsL߷_kɰqUV25fԑZ?ߺqg!Uչ؃\y6O~",<(?pg4?rֱ)$ń']e|zE!Q^YEzR8&~XxfB߷2e RSzeێZ[TU#}= Z~]0\.7ܚUTMEc8tmY!j(Mb՚a' eđCkmRx44fBq(ON`Ӯbbc"])_}< >q75k3/%'g\xB&_.ێMc؂DZG$'qI W=o-|Ror=Ąno1iT #[VA~-{R{"0Xu1C{3qT[ŐM}eys6eq u-( 12!cI~%3XÆ4ŋ('6i쏜ӅNeU}ZP"c`\yc1w^| 3oYy[_e2)9ٴ}M&OoJU8}\&NBIU7K$[%*py ]EBIJB8kAIbB~s"Y{Q5Aaoa}Zuޯ텄7>Wֽ۟Ƣܻ/ &抩GRP߶l$b4q{Ą׵G4fAOC-B:M=eVaCw~m5uU&NG?kٱkpVmҰ[) !D=kgv{4V?|HӋpK+Y] ln &5=իk^^L&3!D?UUhbʐA1:s1d&ߵ}j* u6x F`CT/ OT7ޓKii^Ub6F|\(w`&V%`smo]ZZs Bك拏9 ټ]p[L>oVV{~랃T JS) oNBh&ϑ!!! :(`YxxaQ=hw&U =C l4/66m&%%4z\D^+~nsР !9״U4yWk8+˹r^sq{j_4˹t؅B!8TT{T&7cԮmdj>( ~r B!jlANr&Iq”3qT5|V?I^!B!*."s۵jb"B! K*:|[LC _( !B!!KQa!B!A{N9B!B#DB!UT=@ !B!:܉=@iiE!B!h+#ņ"B!6$@B!BH"B!!B!:h֡4aB!B}/K(Fp#|$"$@B!Bt"zaJJKc`@, ,Zo~k/1E!ByUɗ_}żyk鲃¿_믻p)YB!BnYa LHh\@,[m;r0Lx<JJ۵NiA1LpG?҃~z>sfर _nB! %?7ê?W(^БC:xh Pۙgy.=UUU5ў]JB!`0O*SpqG3f2fζM>HRz'k_mѿ{^{uV\AAA!|^x|wر>}0y$ZnsI%.7zO?l***昱c:t^!Bqi&cYt0lYdKP᲋.m:=@Yf3g&Z;YYYdee{޻2lNPy_ڵkt|~I.)B!28DR߲rJb@u**ͣWb/y=DG{rSOs]wpYg79s2n8̟m!Lv1 6>sر=?x!CǴ/̿Kj_HEMcڵ?O>[6/w/˗>Mͷ4 `B!-]̛_N 3( ?7rȱX;W|RkI\uՕM.w|чN~ػw/|`A@_?ѣGsIlڴ^g>dpꩧګ<%55{﹇pf͚ ~+Y!Bh+X?F3!ÇP^V|NZr*μ)Qbbb0a/. 60Yp!TVVO?1&!!K/Sr蛞NVVO)((@UUXz5?ǟpz!B-emcȈ!Ih1QUksU70h.Og+<<7xοUVqjh| BCC;5-6w}Ͽ,.~p!Bѣ$$%NA^ سsa#F`/? cN_'޽{3y$f;w4~xM>3)//p1crgHB!N-۶3|葬\ g`[08V^Er>=/@iOZ^\\gbY.l\s\sRʅB!DQX̌~{6P4M\Ga^!Rz{6KJZMq !Bqhyo6o0qpf PTMEQNwu|\B!B~4Mc,(*(?p\S5KݫAI!Bqx PB!8 )BTdQQ*]E!B!B!BH"B!$B!8JEE9~%!B! PN@0ߟ#%&(B!8Tem/൯`_ޱ FnFUؾ;WXv2rp|pBES] EQ0 M$Mqx<4M Lf3VmX1cF=W,G45 $-)E|-'ۦ95!_C2@T˰;BkP*+*<3h0^!D Pt]>}R%@PQUڡz>[=;?"bE hBRh``+`e4PRS((뾇)JqFG||& oI)))&$$)(( )) WvfHXXX3@tL4>5Gy }DEEQXTd$ VUU4W }63'77ѣi3v35=m[6cBOpۭpՕWtYmԩMm;5=}/?:N[3jK$;Ff˸i7AzY4mʹgMǟ|κk sz/@L>i /{^|^Ǯ6WCF '::^ z _h(J)^A8=>45HGQb[]![('ķw`8~7ndРX,V<7^KeUEEvQQKIBBr$^yz|X,Vf^SЯD: }^[A=y)>E iT݉C 'rN Tn]ӑ-O̤aD7"#"|OY%mfA]F +11-8r6a6(P rTYQɖ-[ ;4j'j!ws|]S;U6.]mL^0 DFFp)֛ι_g}ݻ3/O <2 &:i}ַi}z<=2c)///Oۏ~&O<-[G}'N"s Nz:YYY橥p!aa\<"#Yi};pq N=u,o8ukv:|m 2cڴ+ŗ^K/sUWW]]͝w#3u=TWW\.n_7/`oj^om_k>Qd`FWq,_BM[;M4{ʲ2*JKyg8q⤀} L'%)qGgUmv{҂"!OL*Lb (J˛.4ԋP*߭aԤ:%7 Pu:y`4h@u,V+6QQ$$ 4,h ffStr,kC"k&lv;<^/xp{=rvs[Z3'߳Pʕ+q:_{5̙h]yn\r4z3oիVojjt]g,ۍYlXLYv?.&jǟp.^wz紩2+qB|UV.)SN{ٮ孷aE:^povu.{U+1q}ټ1'o,~[ۣ=dzY|-_|jK~bʚ7K4Ā|i~={xg\TTO?%Ko* -?>ے|-E 4j:=0Îhyqq111QM[;=#BfF*?/"6nŽ]{W^?q6=K4u"_;]MJ:W=6'{jit>HL3ADx)2"JAhAif|؂mv,f `A "#!6&p,& R^Vd4vzmimȶ:bPlؐMpP0& [AUU6;[PVZܦEеQFߚ;e9ϑ]ˈQG1n<Ô:l6m6~eo "//BxZT~G{a۸ͷ'((K.FEe%/`ڵk\ݾckSO9]9)OvY$66 _~yW/y >#y=aٸoL_|]wNDDuTEau_z+O٨}gwIdd$QQ{|V΂>s]PF϶5ukQ ɧ7K4ZIQQQN7p={yks.3L&ywiv{҂"Du@=}WIuttL5 RQ,oE16U,{0^3bBQ":.2(RGQ"##oh}q]AǓ/ȈN'ffx0;UuzUErQ\\L|BCdeol`kZNbZnŌncGѪg7^4 `f87Ψ @rxי1߼+x駙8Dy9.RL&g~_|%;ncw߾<&O9Q_L&yf\~zm1qq[~ssdeg3gxx ~JCSF϶5_9W(i&^xQQQ\'4ſlqX0SfےKxX}}PnRSݟѠiz,}P8DtWA׍h k0*Gq:ZB; M\^*o65,-;ytŦMX~ 񄅅vu W%((rn7f UP5Ҳ2THIN>oq%ō׌,( aa\py~ #"" ]:gkg]qtn222عs'wq;vz!EGG)(Ț]wR櫨`4TQ 4,7zaRQ||-'J@ ?Ş={رcfCZ~?!88ūu]GW?d`X6FWu]gs:==ʚ]wܲunh@}*1((`ʆM 鯬x]W`0fR{up{x2XpR˯saDkΰCֹ+۹}L&[ok>}i @hH[m#5%ſs>Y;n'!!۶cvjW_3dI 4O}0c&W\1#}sf;n'11[R3yrI<̚u>Dl-x_/k"}CP%Y+4ASC|B6 TWU&uWk?QKQQ!FS(ͥ6:aT\tV*Ng8Bpxm֕ΦfCݻǿյkimE7t՞tTyػ7"tUN_^pT/(P5#FF=m"3ogRb-[)/+'V$?zzɄi].gf*wW_}%>? DGG3yG1 $'aSO3o]v#?_~%syPUUşW"_y5_yyypՕWtz ʻ]:s/4Ӧ}f Y_V/WxW\E^~>)))\}Uy}8q2v.Ef[mogC)I'2|u8$v;^r1?ȿ|}r}y񥗉/k2#>@Q k$Aٰ!+`^~[_L,g$Js|j3PjՃF']CR[ x0$Fhza$th'&ֈ,J79O`4ZnfN'&Рv%[BCB;?}(3F'u{Z λhbS( $4SbXYuGt g -M\FTM]"_ii7z(Fu>sFc&Oɓ\+s:4]nΚ+Z P~pܸq7nw_kVlv_mɛj`۶>俭Vk?- gٳv-3>p?>p٥\_?3{'0;&0}/mV[ʬJxu A( 47<(ѼtУQ5 &_P е`̖T6m3f0md iXh[6) EEoA?á3+z WϐZz1L8vN'o|Zf.^t-)?ÿBeU%v]=lszjn5pW1#u+inEzwZWѩ7"`@SU].22 h?;|#vngCu&}]שv謖]of4VzSGz5@Ekc6ef!(IMNw^쀷qPHHa(JJ( +=Eջ6oSYYTu-IAf>XcS| Jxkd2Ź].hNFc'+5W;G0kAigd%=5-[skP]z=ՋI~%χSb !,@ DSvpKDRRwAh8GtTP*Y=E+~G\O!BuŤbC` SגR[Ī*+1LOb 22`pcNbbb| +t:h4RQᦪ sQגxg4pߑhCGNIbk(Rw`4>h!ۗOlLa5(VʎM(gɟBJ+[;Lf\Om~M0$$ij//< ejn0v{pVz=lcZ1LI=#Ey}we2pUW7e6Zv-S^dD8AV 6elX:In=|(QR HIttLū=^ xW(aM6WVzKOhX~aع_Q ޤDJK(+/WEUh40[,DDh Udz -DY7p2w+)fHiʅ\.gv!N9qJ޾\,aGٶjǟ@yETU9q]ESUеQY!l6[OH!!5JQL&Ʉ5(ظXMgoGvgK\fC|ۡh4С<{zxe݅BnlܰӶ+fȈ"#":ٖ+=BR}OoYU:th.ϐ3BC}>RRRhY`@ӵ.dE$nXtm}'v}y~EP(=%Bh4d!B!DѨ%2*Z] ^oa嵸h$2*G"R!%-x!̞{Xd1'N<>Ftf4@toM! իm6~]BbB@!0%x !:7_~ɘ1cIMKCQT׋vS]鬢j'qq͗_B!cMtCڴAYrB P$@Bߊe1f챍#Mϧ1rB!$@i2B##{Nbb`!uJg_EL vEUeE2h N\];'%Դt9(B!d'yz vYW_&dةɚ?VQ\TH态m▮c:}6|;nȳBtDnwD.hin:&N]QQeI?ƚU+(/+儉я۶v-7w.TbbH ߆HMؽ{7~‚.;NYYY :ظx͛t:yg?a$ϠC8sZGNN^v92'_&^v9۷ooSS=˗sͷ0HHLwdOsz>IBtXM@EyezVg6N՘M7ܿL2VKHd܄PU M0 v$ IXzbqLK^|ڹ?>}ډ *Βط w>,YɧJYYW^y%ee}GQ nM! ! C)JQ "DQ) Et_W@JUOTw lJH55̙93;{fsΤ\6|8u*:xgN3{v n\k={n:F39r֭z=}l6~h۶ Æ z(K,3ؾ5k2fX:B;(w0񧟜 y0} *W/c6ۯ?ŊPxl6;(C!op85z4eʖ#0(IMM+2P-VM2o41Lجp-[PV-L&j=/Ue˗S(VKu(Z8O>Ոe˗gY֟mONW˛i|'Ԫ]xVm>4M2yUrcݺut|% h™)8pÇѣ{w|}}qF,Y={ : KOo 66ڶiˏz|r&W_?!!DPo.ǏgРδy1|jTΡXf5֮t?~4&Lsiڵ gĉ|:mZe=zm[p51OsZ^TV6~Oj ^|ܶje˗c6Yb>*˼%Khԫ_?nϔ~J,IZph;ŋ˿?˃BkW2lp5kiIpZ&O`` AAA|8VZ-\N!xq *1cXn|kBT2+f\ve˖17]_~$˼Ǝߟ"E0vh m/`țoybn?qg3rʸө+yδ4L&ŋ`0 YdI_FBh*ٳgioݕ?~0~ի[C)Qo5ի3hќOg݄Vg0ry4M7Ҧsٮٳ3l81c9ɃB܏ll}|3Fz{{4,~i")^sZIHH4.}L)Bq&Mݼ8L0ׯ3~vi%JdyEK.D>w8J*m߾&r!n޼ ]1|8'LyFj֨{KXXX_ݺzŝ,Y9-}gۓWn1(z|rys&ϰ#ٳ~F6m2GbbsV(:ԩ/bJ y>QQ,[˖eS?ڵkYjS|;ILLmY 5jO?>}<!D(w_LLۓAAA\tDIL)zoןdismۆ9s>㫯_߾yZvl/@F^~% y_~ْg !oXO`` ׻#`gࠁOԮ]5jȗ7<!}+9(7۷gHbb"#FK矿gGFF!9sΑ#GxR_ @cTkMgԢMf):ş|b {T;OJ_ůN7 1?1];f5 l6= @lď=$]1c3(~?ͽ{0vxIMKelTS#GKBBׯ_Qr̟z '|5;Gz4n=&>>> Iwi_IJJFy{W21&f6Yfe[ޞ:vd…ѷo?/XL{ ' IMMhom;]Fs۳X̪U_;HZZׯ_[sNy6l֭u|FcNޟ46~mp]gMM~ʟ]ջ;}a >z.G괷4ի1+&B)S41ޞxT+W2+&E2|0 /X˖ϰr tСo %&f6ϟwfQHLFv>Q0aD:… Ӯ]Lm(f{bPL}w$`}\xwT=u<|iyn,Bq}i3cq Wd!rhdco\wN<^oEJ=Oʎx@lt|Ҷ}ɓߠ+T`ǎC ?'sBkyVlGZm@ AB!Gd 4j\tyAsц ҪeK N(B!/!C8|~>nj3(RM>n߾p%{y!!!!B!$@vl6| 4 o(yΞ8 N,F͜i!ЂFqF *@;~x&L@VBhjh,.!р`PZFD̒ve#'cώY+U*f7]OHHt҄ѧOscǎO?}!wS"kp:\p#s5)BF>޾TZҥZ μΣiYҒX5Q#TY%e=1~b2tN>ygXf %KUV+rT !@4$\a=5}2ea4e!}RUS~gKf.FJ,˿>6߼ys-\7oqjRT,iRZ*FQFԛY ׇm;yzzRzuƏOΝ2eJ/kҤIԨQEZZ]sѽ{w*VHٲeڵ+W@^\B}d§Nʐ!CO(Z(}eÆ .O>nݚti"w K3]TBGL\fqnŅ yg!spr;/2{v!MV=w=xxy}pwg~مh3v7 ߟj9>,>li}ٸqcl7p{CBD!mDEEC=Hy:;oe̸Iݳƍ^Ν:1~{<ۺM(c'ћs'qeL&q\}O!*׬s<20Z !? @(SM5cܸ_t;vW|?!?K-))? Pv~>h߾}P1!;SV-ς r]敪9'.\ <<#Gg|o P|||H6Hd4k_ve:ĥsPog`O;ۻ/Ŋ#S񧒮&r51Ç2i-fš6yXm۷ul-[xNУGwvիWgz֝i2 pwx0|ΦMؾ};6mb̟??,OSjj*9s#GҰa|]:<9^~eV}x^|Ejٮ_?cӧС~~~*Tmے ;MгX,,X 6PnFueÆ ,XŒ4/n޼i|Áageج*߱cUE2BtQeWUn>|Idd$K~ۊCthAB!hLR {Iۿ*U:ȑ#iNr/t^z+WdJn5j$&MEJHH gB<,., |Ժ}:t(֭R+~aÆлww⡖ɓX|k֬ox+̤ISqAE&Mz]:@$D<(zYbygnfL&&3g0nܸLB0w2Lt֍W_}E:ٳg//"ƍd2eLv)WL2!D^( ^)[5cG`jusg_y˗/D=c ADD< IDAT7/Nꫯ%@B< @DDUrQNzkz+Oh4bXB֭Z2bh4>G)(@ÀA5cSujafAB]Erl]^%GޱP1cF3f返ݓc""8i^)B'b¸Q8{..4|ѣ={>$&^#9ݘJՆUUawPu͎:U;v Tap`Mwa._~B8g;u̲eKQUEQfM @ܡk׮4lؐrs_AЪu\V PxQCq6QO54M?>O3==R8>r !Ŀt,]] RJ̒E!]ʖ-.O ٌl۷(F Νߏ_쀪j躎`X3n=ycZsϏ'`g|"!Ŀd:]taɒ%$&&D-Zӂ(cpqEU5.]̾}0L]ۻcZ"$$ C/Wup3q!9_s2(K HR&C9XP +/3(͊;.  BCC G4 A 3gS &B/PtMkD_.^,Chv(婡da7ҥ8v޾xףV hƮ]5jرcO|DEGeRP4FCBBB2=zڵk3{l紓'OҫW/BCC)S [f9ԩStܙ *PB:w̩S2nǏw>!DA( FUSuŋѵkF**񓸖t5_x"t]p`4sl;/OõWf4%,9{c'd|\|SR&yO(&F#...(BjZ*6Vr3&=zplF}3gfk.zɘ1c!O^`Çaܹe˖jՊ^273g?7n̲Μ̝;SN1y+?v90xފt;iڭẂY6c6>2~-]#_cmAvCa?Pvd!D>Ⱦ{ySx+~74oيM?Hx}Vpx VҥJRF -L(n=֌?ɓ'IIInӰ~Cp7eTGpp0zu2`ON&M?#KddsZ:ur N ˺u0L 09siҹsg !*HhPvh#IU5^MdoRVm\] FH^lv;;%:Ձ +l޼˗Ǟ={Qq = mذ1cưh"jԨ)m˖-5*OoѢ3gΤW^μyh޼yyBCCIKKTRDGG;i_1cڄ@!تؿw/))ϹBq_F#} J@?n.KO̪nw>!(( X,L&݃ʳuV&]š~J={vy~رci߾=}Q-kڵUTU=W2vXvMŊ_⡢( .-WTUuv9,WEQpqq( P򁮩(1뙂Fڵ)_<ǏLJrQ4(ج6:v|sAA'ߔ)S:t(EAHJJrVˍK/ѻwo ʠAXlYHZj̜90gBdf̘ŋ~:V{縬J*1c INNfT\ٙͱcp8={Ӷm[nܸS[B!V`xT+`PBYh3* ƽPQ?z{ ՛ׯϊ+ ))hʕ+NJ+TZK&AWϵ}o]ʳmfclŘ@Z` 9 \L(ho6P:\[:sb۷o.0!CK4$\a=5}2e9%SU3~g]*UC(_] Nnժ b$4n&Bž}/Qkf< 7 F4ʗ_%-َuf]'5% *GBtU4mւrB|b4P FWoBpP0^^| NR6|¾X6Μbp2qĝ;C`2`W\ONZ9]A'$w!@ܸqeBDRH(u)h;xI\ tUU2ڒh. ݁h:V+kv#-=#NPDij֬B:@uTUh4[cid;sK]\PU ]$@y6t0L|x11cr%+twn:ԬQ7WStiIQ!B!_fr39wkD_^V~FB!BG0@B!BM6Qn]vM۶m޽ߖT"""8s #GaÆfe->Gri]FZjg\b֛4YʱyV_\vLƁhӲeKMNJJ |:m3^sX^1˼/u͙sjzٖ[~s:t`\t8*UСCe!zRvLk׮Mll,9Tź_-y\p;wdׯYges(:@B|f9/ʨy?|PFhi?]ӯi tMaMv!Rw߁]Mk ~ ?%KwzYE3͟D``ֻ$%]4`07/ӦMgE|4ZG=<<0aF!\x;rJFd`+0nƠP5݁bT0(TMEQEAGǡj抪 Š(; ?1$$8ѣGҥ o}2vMǎiܸ1 ǏgĉY&DEE㏳{nvMڵً4-660>3ټy3>>>;vڠرO?( e˖evL C~Դ44nUYVѤq,M&~}FoL&|)hzpj${c$w]s2 qf3O7o2M߳wO7oAٜ ;&{~sPP5p8nӕ+& 94ѕA)Z:^H|eիIIUHKM:ccc0`ӧOI?h|GۗH:u0V>9y$֭s0`s>s,]9ˋ{/SBU\O>>oV/^W_=2omp|||xo9s֯vd\@#W+7xfL&&3g0nܸLB0w_zn<|WԮ]{ /2nXL&- oIYz5eʔy^pɫ6EQHͮ2?my\O6c0(\\P<=mU ? yv3Ot= 60d-Z)8زe ڵS[h̙3 sgΜI3Jҥiܸ1ӧOԟf_婧1xݣ"gsffVAhWfϙe- 3fUPZŷ~\ j"r:9̘1GPh1ڶ ~eA pE;ƎKV֔VeرDDDzya4;Xn݈2bh4AQUv;vkT(ǜD4$\9Tdt;.^I#m!܍g!o7942G(fϞM5]~=x;v,۷磏>2ڜ]֙~J?~ѣGsUƎ ݻX"Y}!F͗_~)p +Uײ5kFf2]\X|_Svf#'Ѵ4۴y6m4O޽!h}4h0|1]H( | Fr]\\hdG/@5j1dSԫRtt6cY{7#T `q6(K_ut]C'/sʔ) :"EРALi~~~$%%<^zYgoΜ9 4e˖eTU̙3 s(Yl۶A1gg{!(''dUUYh5k֔D!vJÆ )W+=<=hZnBj>Zbcs])Id\\ f3kҟ!5y7>)^n~feҭNErzMװmp/SNk'?7jԈӳgsNLmPVMӜ㱱{Yf cǎe+V ""$)W+V`L8Lj31bfnݺ̘1Ù޺uklj' $<\bŊ\2póMˮIvIBwTmBGH|p_oo>9S8th*ffQDSPUj]QU;TŋbYЕ橽B$`4P5U!y*WZ|]i (<n-J&,v7o`1[1$$rVo/0P\XBj2}Nqu_piom߾}Zoqyd!D>t?"9>lن}@1Z W7!ŋqa(=v$݃ՈfSYl/iv 1:)iwWBHhPvh#It&&ۯ;Unn7H 曵ق¹3U.]&fϝEAKbzri)p%%5 ˓܅B ŋ`nc޽$!ȇ΅} Z:{xH L: n]: :ZF[];9MǪa_yn's (M͚5J wn?)^סfXVYҥKߚ.'?!).BG\ PLn&tB!CZ! !B!$@B!B*^OD:; T36UǡPlvT0 X-5\t+^ !Ŀl6TM !D1 b2$@ogϞ)iaEcSaCUvՎC]۱Yqs`yl9rN,f3ׯ_'%Rou////wq(AEHJJųI( `05MCCCs h:6ڵ0Ow|}Bn'55Z5e!}4q=zoo|htK$$\GHIKnfJ4f3n%lnt ӷy IDATg|"9zٸw5# (MSq8c"`0iT(IQt ]ӧϠ:W⯠( Fƅ |7;g3oH>3l䆛]8pBt4QU?B|GZj*Ces(:@B|/jbX~΂1]5\]ђ6e ҔV$jEUUv0Bh"⑷o.=uFM >(0nƠP5݁bT0(A!㽢(8T ^\QuUbUW3N~:;FCj 4~Qj׮ٳN}pi:vHƍ_8~8'Nd͚59.'**ݻw{nj׮Mttty2 w%,, ٳg믳o>vI*Ux7(2 ÂA1;T )))[t%%Ŋ䂢(h{tFPq֨Áb4w&ejR3+X iҤsG}D߾}tNSsqY'Odݺu> 9sbccܹ3+Wֻ̔wo>Sw#(I'L٬Vl6[*..^F fGQRob̜՞3c6<ݖov [JNOK蚎߰acƌaѢEԨQ#Sږ-[5jTߢE fΜI^uyѼyL󄆆FRx嗉vvi_1cFe3|5j$?f!Dt5q.]BY&K͛xzy?{E?p3lz!@&4T) DΆ! =OgAл !@*e%Š |߼3ϔw(ݻ}/6t>}r:.ũhM(^}q apYl)yԕ"Ã_ RJ7%mOA!eAx7nJx9s& b޼y@yUVyҥ:bƌ2sL'<<'mU"##b&uw|bŚUxg!DNıcݳ+DL%M6oȌY$ ڴ.3}u iXL Keꤿ߷>*BP^*pzj֬9oC9pC Y4k֜Æ tK irm W">db*nٌa.iBhXqI&tǎ""gN26(bpTR= $m;FElVb'=ClK?Lkޛ;$:"2wiFÆ #""ӯ_?ݻf-[x}ڠ\~UGOwpL>Ҵ; T\\kCcDznZcOGqC5lқOP` _}57_$'Q^ "+3S\TX-4B_O?(,,6Ӹsui ͏Oè'jaM},{/GHHe[V].1~S3@~x7:u*|wԩSYh˖-͎;xK/eѢEQTT… iݺw9x qQL(,,$%%Ν;{O4~ Maܹ>˅o^Ø8qΛ;ƏǽFJhh(xY`ϼ 2i>ҽ1c'ygYst iGeĈ4k֜Mbs0NK[_FVq$$,ͷʎiLcϞ=e쳳i}^Ҕ1<@Ii>T~U^MRSNWwHO*4_/?g7헟y},(k/>cDL2TkKP4 qz^ݎsUn?b\0x՝nu7@TBh?XM #(NX`s2nfrsO?ƍ{ x2Lc;iGSYzےU?KvrO4N>b$}p~Z1}z;n;nw؞DFfϺ7n?#%'4)N.?%v2knO ~.kӖۓ/ 5'u}n<RS}҆.))[t4m֜CaXd dVb(t?tM k]Pԙ*^n! $ JJ(G?AHPNz4EجtM-`+5+q$mڴa>S57A7|s*kR]z!SF򈊪T?**|߇# O`,[/&b~M^^K紿?l:00|j^*Z?`O9%"" Sy,[+Wx}zS}/0FVGW>iGSiּEǏӥ{BqҼy 6=W\ g%t,AtL !0(ҒbBJU>HrO#<4 HOOA3-`m(ra(V,rTL'Ubиq4.Յԍh211ڻ!oMѣ<2y2{iӦntsIbbb|9y$+5lPΝc;W![oɼ_s_ ,,9sf[%?#3gbϞ}TuΦyfU{:ygffҵ>ޯ?QV\UUb/iʮۉpSUU\n7k6??"'-n'd40 Vk (7 _BWJޫ'˃Ӎ%$ M V;J \Q.JNa K!wg'rKw2G8M6_(hтW,_J^ gC&=ێdҳGv;<'L'vvqN;|2Loɏp}5ófѧRZZJ?7ַl8N5ϯ5jѣiŵ:sبQ# 4zk&֗o.:]g7=Gg[ʞF2X80 vmO6 /))!!|5hR70G1j|;8 I;sCKMe2{O,}M!WY^"5nܘ.]iFBbzmJJJ())o4ɏ~W2?F%M1s,^Yʴ'Lo>7/ӧ?%M1tuϟ_|Nz^}4.4zөU6q=$tn'Y6233bQddSZZQQ*%%%t:QLRR iU?j`wMPh(~GZ!3hRRӢE+CQi")iB+vKr>)baZ18r$4BQ+rx6_,˖ظ'o{"ra*w+W!d~~~׫ǥ/JKK1S>!, !!!\ަ#RVZR'٨3)d琓m@d›ό׿֞m1t_a|!M:ih+̻ 91?aa\rIS!bnU3I P4&GC*X ( `b&1 ±( 4&I&{8pÇC1vXyٴieee\~L0+m3%%z[pW3{lZjCqi&|GFFFB61 0qa<)@yCyˍ喓!l]QgSY (p:0 գy;}1 4y`{aa+ .kKV}a&ݶmÆ 駟'GaȐ!у 6p!̙ç~Ze>ƍ㪫"))$:v+$gNgKLLW^>s=_B! ԙi8.(.vcPC3z ݾbI'd4:TD&M… ٳwy0aFԩZy%''zjv;&MW_=s]w}O?n:;yE'UBq(Eգx7cQDF͆0˅nG-xr1Aed`&V;g}3<;C}}<}%!!1c`&:}IӶm[JKKiڴ)wy'Ǐj*?#-5kӦM# @dQ'H/!B\0S<ELLLdd>T*'Xn-}ڏK.iEBJ;LXNJJ2z ]k;U ]saɗ{XnԎb_~yVdϻc&69 &¿fIuUǛoOaa!C`ԩ~v @PPgU6KYhcƌ`ҥnڻ|L48N8ӽ]BΝD$8BU\sVBդ$b)670l P'hJ`?F՝TBCjg'ꇦiq0 {5`tŠ+9r$yyy?-[b y̙M6 >ӢEx'Xx1;wi޿&NÇo7nkO0$qc9BQĬiloƒ[gJ@()qS,!A8n""\aZ5??躎GWL(HgDiӆ۷̋?O?>>+WVootOjBu֯_8e¥TBG(رwߥcǎ76יë3i4a)h M\2 Ŋգ\n7 D=J 7ƥ0N{bb9wBpf@"B341PvM7D~~>7^!H9WۍvSӻeEQ  Pn8/XнWOTwY!.KIJ4@9;4vbq]8D5/BNe:q6mDqq8*}}lE^IBԀi 8z{wzf:v(=}/6]F>t^< 7 `׾yޱXiR4iiIPHrvlgPuE,~p&%ť+BZb%AB_?7>}:sfԨQ@X~AAAL>իWml޴gf{'pװa<;s:7p(V:ǫ=^\N iGP=:98T7)H;A=bMAQ%X𣸤HBTl><[9B!jK2vXt_dX*^VLU?JJJ9r$<\{xLI0n|2lN}bg|xޘ&thǟ|}ZFbux)BTT:ŋxWV ro$%%h>(w=[:s#D1gYd AuX|9eeexc?ϟOhHH`B/^BYY:wpךu:N!{}iӦM똘}lYY>,<kչ>v#$''SRRZ>;E !jًWnn._z\uOc;iGSYzے$y'+'mObwz_b][O@@ fΪr6mbCz'mɓZA<ߴ_'N`Ȑ!\3f`y~P!@yru!~I~k3o yy'j[oɼ_s_ ,,9sfsc~ծ>33]W]%͚5%'':{B!M6#tRZlYmZͣ1p =}<\{mШQK35Pjsm=\ߨph,U7t ۅBGw`+vQ1Pti28d& Bb糊Wz4a^z埿l6AAAөcG/_i|ͷ<2nܷۨQ# bbbj>--t1oiʯK!Dݱj*y|M_Lob#ßR{1|u{6M0KIXFٙddfCNF&'xI23%#'Yd%d6U]\kWɿ|r8ʼU|k8vmےAff&S6g|Cx0MM <<qw)>Jjj*~<@O\rssy _igWuBQ,]ٳg(89um[rw#Hyڵ+͛7]I%%(k!dg:EkX, ˏ0 bU0Q=*;v⑱RS~k3õҥ wyd#{25w{w{pm0{hV}@aqmgR;#E1Q6,V+Gb&YY(bEUUcٲbUvz]Dn@?v? O2oK!PYҮ];[w өW.ڵMA\?;evՙETursv o>3_[{e ~){폇60{jEZ| (B\p{ޮ];]Ǝ+k/N\N~|ZAh']E7L4bU(tCGQED "cC7MtbcQtS/L05ϩu*znT{}zCK6;Ɇ}%1!,dX'iE0nK=qj rU6v>4gg-xᣃ5J/D]v>{B!.m[l6[euM)AAQt`Gâ((Jyxfǝv>tC粦l TgYJ|Pl{i$gx2ut0;2.o]э}+l}|iB&U.232iS9!B J)}aA! ̃:ӋhFyTNAltE ?6JPZBx<.68EFRiz_ʷ׮Y87w卯SH{ʚ-t/wF|/m8p'c_|.Z7 uiyե*^???ҽ_}"*.N=B?ZMRI~~>[Bn@u՝]GxhE%EG[0 bH#4؏G\meRy/i{ (C @xG\ׂwKD²N9n:ě/N,Z}ػiQ)]/[+w=4*BNVBuRos%Mi@֬?td!KcbXZԯ_{{ {j3c15.55 av潕Ȳ~ O5' >=PHίtY0/ q!*^B!(J-K>xᡡh)h M\2 Ŋգ\n7 D=J 7ƥ0.$uľ qH/!B֜Apm誆Ӎ%$ M V;J \Q.JNa K!wg'rKw2G5㝝rTB!$@9;T=^~[oIMX4ji80\*݂MQPUm۶uVl~HǭYf vCjX&MHOO?pÇ硇bر$''ϳi&ʸ˙0aV~#SO=֭[꫙={6Znl!!!:tHRqQ*^B!RgvԀRv塇"8(gn!. ]ױll2^}UFň#oXp!P #3m6 O? N9!Cѣ6lСC̙3O?|ƍUW]ERRIIItؑ{L3f`ȑrֆk Z!ߵeݻ׭[G^*]ܪFо}{u+㫯&99b<v_z{yt5ja(T?L4 ҳgOy1aFשS'^{*JNNfv&MīZiZUUy7 -%B\~^zn:4hu0MtEWM p`Z Vn :ݻSRRB`` ۷o}Ѭy3uƝwމYӀl}SNw N{ns:}%!!bHHHO>֭111rQuk!BH򛃔?!C~zeׯgȐ!|'N]x=9t( %%%(BF0 { *ڷcРA4lTnܸq̜9WXVPPp<Μ9/6m0k֬ `ɒ%7NNqQ*^B!(hr. i(yFLa&xUUر#cƌC˖-iצ11n!Cn?u &U̝;iӦy """;s0e2d'OnմjՊx:EMx !aAʬY)8PT3b EQ|)z sΜɡSp8p:.װaxꫯ|u#XMmٲI&Nxx8&Mb˖-%$$0a2EOx !?AJ޽ٜ*y.=9=Iؘʖę&VSEdZ줺*^7藺C0uTnvv; ((x*_z,Z1ctRZno%00ZL!B!8i=FSu, !!!>0@y;ta0!(V+&fy O'W.]Xb#G$//ӲeKVX?Ϝ9sp:iƧ-Z'xŋйsg-Zf…!B!(s N4BhzztMD <E4L aXou.{@Z b jt mڴa>SgʕզOB!G(*{L aXo{ZJKKyW lH IJoOM!B!$@9?<'aPp㖍ٱg[9ꡨf5jNQiyyr !B!oh3?6.|?%mϧ4Me223dG!B!$@m5_Lyr Ay}Q\X 8N4V rsxanۋ__͸0 4iر#w^rr2cƌm۶4oޜf͚*=%%8뮻HIIS֭oڵy睴lْm2qDrss+\:M4w>4իׯtygС>|'9r$3rH8PS!B?PzF:vn#y41bhwU;.mw)29Ӥy2eM%1H=὇mK24UĚ/vmưax;v,GaȐ!у 6p!̙ç~Ze>ƍ㪫"))$:v>tiƌ9.]رcٳgׯ',,'3#gW_}EPPP~N$Z&N]ʝwI~ؾ};۷o_~ ::uB!At]'۷UV7Rr#>-Z0bĈ %G cܸq>%(cر}݄U IDATwرcyq !BHrk٢%^yК?A4mՔvEfWqhsy*g1uTyz[n9۷/ STTDBB}4~Hn݈qtO| @nn7H(((ছnI`W_}Ů]`Μ9/%%%lٲgQF1fvͮ]hժS>#1cOuy_s5ל5lUa(q !BHrv0lBIa *EQo2Or ]ӱX-ѰqCZ\(o,sWΝ˴iӨ_>]vYA^^5O2;|W_}ɓ'[z5Z">>FLgL$9=0kȎ_$w罋Fbrߗ`sĔDz$1sLV = cƌO>K4hygjΖ-[e˖&ǵeyf222`֭d̘1Ɛ!C~͹\$55'rwҟ~i, dȐ!ddd]ƹs?4Fb0w!?oNZZ+VׯcڵnsB!W yrtQѿBoܴ9`hrSUY` 9=StD`P eߔ;M8Zr{(3:Cn+]II FbRѹos TMGӴt{407ͫw6{Ga[oRB!Ԛλc}ڎ}7޸:a<8^*:oxEQp9]M$wOFUUOUSyY3fѯo?iaW_|ɓ'v>}!Bqej4%B؎~Ql6"#|IIn!DHth""IZ,11onpz)!B+\Z@:Q{T٪HMݬ\!BL(40'- EVVTB!U*ܬZ<\w|'s;X;p}cp%A ^}Ui=B!B\bWs- ۧ: 3gOi^g/<1 !Bq )B|238Uv$͙ U%B! UДbard!B!~dX@!B!B!Btjd--!!!R1B!BH{jSTffro)#B!([8m;k:cKZJ6bb0:V굫`444У{[ !Bq ]cP^o'2!H7yɿZY"BCIH쟤!B!ʥx_q8v;.=`4FY҂B!8yUUz~8so2z-Ԩ: WGuiEB!BH~^&d΃۱ڳr Cݶ@f2Ih}8@~x}JJJʢW^tڕCf͚^ZZȑ#IKK#--#GRZZw[޺uxIIIW^pԩ&8js~^zO|LnfKˣdgg3`oׯ&L|6_dԨQ-^7`ٳw_rkm}ƍ 駟K߰am駟'`6@!Bց0~INl|,{AUUNVX1طcAޘCԚ*:=7l@VV<seĉ=HL&,^kjjKIIIǺnz-Z˹[X,DGGϳu֟ik}DGG3c ֯_ߤ_'L ?>'NO!B P~Z))jFV_MRj;7clG4iw-2e ߗf72lذ6ogRSSۚ=osέ ߿O޴>Ei_⦛n{9u/믩{O!B+UJJr  `ˎ-qtGKȑCG8Yq]ALxD8G#yݻwjڔӧ3|pΝ 4㏛i .䭷jˋ/{mnL]qi~۷o[nX߭Qc0?~< ,`ɒ%7B!'b-ԝ#:6P/gPzիb0ۉ!{28awpiT&00{͞=zH?/-""ӧOөSV}Ɍ1E1i$zjRSS֭[_3i$-ZDjjjG|||ǯ><׿f֬Yv:gĈ̝;>d/Bq*B~Irz2a0nB#Xޝ.2ɉtEQ0ILI$G3̤luC+0f>AwƮlٲ\1([lir\[XŋׯO> /..ftdbر撕dB!n7Sp_Pٳ8&''r/B!ʕ#((d{PbbFZع#`S_35M粻HIN}zV\ɬY|3JrJ֭[Ǎ7Hzz:=Ço:l޼ 222غu+~7*%3ff1d5Fv_@s.iz(ў뮻]B!ĕ˜ysvv`0'StNL`P eߔ;^8Zro|KTLfGNkfñ={dǎ~uV[nZ|GM~Z3>b@i]]B!0D}RIuRU{ݷz(.L&'*է?w76*W ՗_#B!%p5b0o<}c2sYVuvc ;+[ZB!A('#=SeHJbޜy RUB!B\nRMY,&LB!G&B!!B!x>|N4x TnUǫP\NN Tp {4tlY !B!JCX5סaDUUtՃ[:UWxhT^  ׃l (8Ρ%@!B P&&5~w&'OT*Ez1 hZtѸh:n~2kx!B!$@i;1Ž:]O)p_Qݨ0@_5v+-@՟H%! nNؽ =/= 7*G RQK \ŠxԂ$-@.vzK`PFmݲY*O!lzT7GYŠ JEь(w@q1u mckTh8? {̀1ECwz1f޼E^ڵ+Ce͚5-_ZZȑ#IKK#--#GRZZKu<zK/Kg!B!ʕQ jc=6/ԁnᬂ^[UPt#e ݨSпU^G?6dffr7_R\\L^^-̀ؾ};۷o_~L0l26o̺uٴi˗/)B!$@֯_(~_k9 ^~AzQ5C:hakKCnDG=}TWWyqӧ3|pΝ 4q}v ^ZB!(cPՖ@TեÎ ^< _U0t ;5?Dn A7z8poDAGjgՅN>ݦs&Ö#ؿ?'33I&- vݷ]__OhhN!B!ʏ̘1M q| Z`8: 6@a ޡ .kРA睱9[l!77o ʖ-[|ڵ˷{nӥu !BΏʹ eȐ!sCMES }s0@^Ch9 <p  #` {kʔ)wd2qb6ٿ? ,hq|)(( ++ 7x/d٤0{lz!iB!B#Hihh $$MTGucP C hh&]1QUՠƅA1i&#aP q7v:BlrJ^~ep8o*((geߟ_#[CрU 4訚C4f7/ݺuo[ޭ[7VZb(L6iӦIB!}{kXo/f+ūн^4݃Y`GSPq{Wut\+xuYDWdv!B!$@i{=ǨJӃ~Åd(eGqYhBwy/q^d">3M\Bx8YCͭQ_ SW[tE!Bq02k4֏?V+N#q:<^n2!⥺$gr,'=FCY܅B!?[__h|UUǒhNj h:. ^QΘG{Ѕ>}0ydiB!BH~sdeXB*+OpDe~nx]>{rҥ˿ y!B!$@ ãFZH B! b*B!BH"B!? UДd--!!!R1B!BH{jSTffro)#B!([8m;k:cKZJ6bb0:V굫`444У{[ !Bq ]cP^o'2!H7yɿZY"BCIH쟤!B!ʥx_qḔ8v;.=`4FY҂.y1f̘+&??=7m}cQPP K!\N>֭9tP,X@bb" ,hC ir_]Νĉ=z4L&222Xxq甔jjKII/}ժUL:Xbcc:u*+WlW= N3f [ɹ&LhteL8ܵk۷|rnV, زc @uv;X,F:Ɋ -f#<6磺63}tܹs_?c_nbCCCo=|LL=Ν;}Oy̙3)//'))黨``,X%KPPP@vvDu޽{yyZ]Mx饗h-;;^{풵3B!?rC{T;[GdHӣozA.x=^Tpmk=7Ήq68q9qmmxɌ1~2334i/b`}6cǎW_Uhҥ9sTIMM̙3,]uFΝ;裏8pwLL ͦ}׌3 2_l꜐TU=oW-iLq<?~B!(Wg $'f CQ_ZdHw罋Fbr/]Q̡fSI93>[< 43v5g˖-Aٲe/===]vwMzzz( ]v%??gyzN'+Wd~ݍ6mĊ+p:~0L;\0Lo߾}ٱcGxbv2_lz[+VKWaǎ?}B!$@i#ۍM@@ӭW7J4` 8,#eGڜ)SPPPe˨rQTTĸqZ<{PSSCMM ~_333={6TVV2{l|Ake8:>C 11$윜/88;u-ZD^^+V+2_lp2]W;OEEE[3f Mִ})}hl5n}h6k>cXB!ĕoMv]|1ƙmmǾeo\}OP0D}RIuRU{ݷz(.L&'*է5Ҋ^xbdgeKB!22HS9dgpIQI̛3oJb!B! UДbard!B!~dX@!B!B!Btjd--!!!R1B!BH{jSTffro)#B!([8m;k:cKZJ6bb0:V굫`444У{[ !Bq ]cP^o'2!H7yɿZY"BCIH쟤!B!ʥx_q8v;.=`4FY҂.y1f̘+&??=7m}cQPP K!\Nw},$$O?o'|l>?S7`ٳަ2_leis_|QF].naÆI"B PDh2 $O:ٺUU9Yqce `ߎ}(zcm7S;w.'NdDFFb2`-SRRBNNVJnn.%%%UV1uTbcceԩ\]Nvvv'(9:t`̘1DDDnݺ&N0ӕ3qs׮]o˹[X,DGGϳuVb.]u]G.];ٻw%knz,q%^nm322(**O6nȰat󩭭smҋ۷oO>jkkY`z;?ѣGo79{ԩS@믿{SN=fÆ ~A̅|8(pwO_s7ҹs㓺sJ|ۭc\\'NOdff^111TTT4_3f.\Hjjj|ޫsBBBPU_dդҭ[nljOC 11$윜[%;hrENJ+Ɗ~|g0pݯ^;C>BqŻƠa44oLD}%&! Nj)D9ĔD')% kz.\@`HIIaʕp8ٳ?TPP>!~+?#s-0j(FKߺuk?EQzfyGy.9ro-3f0dc:b`/6r?{})>|m۶1|B!Oyrx}9ݸ]dT/7mdμ9X;ZqTUVa0HNOl@);H7eNG4^g'*& Ō0?r1I&qM7]yϧ ƌCFFF5m.s#k ?wa4[}[6sMǚyxcBq[S!y_| qf[۱oYWA7 "1>s'"6kR}]TU^g( . SɨJj*V2k,_j'|R^b !p*;ERTX!BqyH4eX3Y*B!B<B!BH"B!?ut?"i+`0(x<*vQuUuz9z(~B}!B!$@iCt z;j:xupݠx=^TՋz<^7p8Q^CXl w FdT!B!$@ifN{29~`0(hh]4Uo\DtbbXB!B!JTTVrDcK혂LՂNɄF5TK%(8XZB!Wkٮ ESE̟?[ʶm|вe>|8UxͷzPX|9ӦMCU54 x5oJHHk׮ѣGZ~_ARR߱N^^\s ={䥗^u;k}oINNW^dggSQQ!V!BHr R/lfm~||PYYٳ^t$uIbӥK  Cǎ<޽{)**[nW^;faٚβeؼy3֭?gӦM,_7;wezOB!BKf R\.wǏqFBCC"00*N1br1JKK4 G[}iӦѳgO233[}ΪU:u*2uTV\٦j%44{JB!AUUسg>,_ll6*ǃlj:fÇӥKu놮_|T7׍`d̈́VXADDcƌᩧbܸqPTTāӧo,Y·Ct-[x1eee̘1]eX,vv}}=m_fqA{1?JB!X?דuQn/#wb@\\sO@@vɓ08Ny{M6oxltv떵{nu0Əϼy !B_ J{MSQ.1 αvET:t`@UUgu4BBB0L5Ғ>? .33ٳgSYYel|7x^N<ٳ߿Z!B?AiOpnT ^/( ^qxшA1)hp(JxsN4UL4 UUIMMm6s>#P^^-Q9rߵwwAvv6Cz뭼jB!(J{ƀHHhfz;(&2"Cuu5xL+F!攗:_-a( ӦMcڴi:7 o !B P./] oˉ cW9^q׃븝n 8 :=.tň˥\x*NTB!B\J{~35k Q ~=F\n pW[Z]W0?FM^CZ=ȩT= B!Z5ص_d\= vN)r!ʝ 4zX š+ B!sʬh䚴~zB#hp]=rIű|{8^#xntQ][Iu1N9Kѣثۥ!Bq e/l bC#jƹ4ǣkUSip:#s9ٻ{? IۗI&I B!B{)[ƢE")) hLB!BHn&jڻBB!0H!B!$@B!BYu:\بQ5p] ]TՉBWNjѣ<< yl**"B PʎCZQ1*׍Gmr@Nju^׍8NT/[]C%@d3ϡw/Mk/eޕB!$@u j'+qba ^j耢k:x<*-@L44qo߿u $M!gTTTr)Ǝy448q\8]nrqoaMm=IDATsn֮ʸߑV B!(mcPt0 $k`WP '*N!5Z[=n]cb@tU44lBW;?9l$ ,^[AޟꭶZmki**ۊ;`x ܪDBiA% ,&G`j$ A $}:/&3YIy(gB!?P4i*C<'Td!L_ &gӴ5gp;gQuIFım.zc2s}Pv ˲H&-^B!˗/' vz. /K!b%(6]{>jeTyxۨ{ʤ&oKkz `6*&mχz2z衃^+))9h9Ýw 'Qپɟ'fΚNRgaժR9B!x i92I mؠna,3Q]NfRAEUXMHp'y۶yǹy'[__i<԰zjVZڵkygkB $<ƍc)?f3!#Bto &K&23i%4ҳu G-L UUq,OUWqLᇻߪU\yzg->˼y(..yl29#űFUy83~}3 !B EU,DT;f+S_3 ۴6eh(&f"JquD5RX{1pWxʌ= :,,X&eƏyܸqlٲ3۾5Iy`^_s$'B!8Ȁ+cI+E{{;C-@sXq "1ɟC`TI`wsc9x82w T>n׮]lذGy /;ݻwS^^reY[lnoW吝~X,n_\ziu>(B! `mFWUv܃'M٬"F^UvhLR:8Q~rgt^(y["RpNPqZ[[JZ[[y*iF<.ZblBmJk˲+.+B!ı.{S +(F,lݦic.߅'ߍ؆c:8;Dž5X(x3$)Re~H$Xl555߽{7>v1=mȑ#y4i>#Ga&6ĥl޴'z߄KR KKs/-d!bF#7A,LbY658]QtAP-0hokǛ4;ۖmXfS /_'vJN?~^@!B!"B!E!B!$AB!BH"B!!B! ]@!J qpG*(RUQ\.\.2~mX6Į_OMEU5EE!$ i@4J9TU%33!m$9eֲ5*xiJvV#O8.$(B!D0 h4B]nFGAA!IEmwOfdyI%ݗݷw7S:8QfY۷M(+@u1?IPB>`R41vx aiJeEQnmX7)_J~@4F8bS\TmW7' Bl!m2%0B CJ3^aZ$(B!Dkj:iH#c!gYt \.eKv$AB!6U#t-J{0\.2ddf}|M1p"xE![*@>. 0Z./TӴ:nLq;'+:4BΒs 〳SGp~sS!}=X$Cn ֖&AsS3< XE*=: #.</y#  q=KgߜF׃(6DMH"B¢bZ[pݴ6E yI.TU1\jwğ?+֖&4+ aڳǟxX[)1u˿a=,y,se䈑R#ԵP9$UUݝr2ٰ4!i)LP筗*Bw#Xr2Rmh$L2b(`O]Dgg-MM(QH$mh$e]n,ͬ^Nͥs^//23xnˮYO'xu8im۶1i$|>r ۶m/w$W7aCt0,tH TE/' Bӧj$HaE"0S) |_$$F[8LaDa TU>ѱbynmYY8l=v,~.} `6pcpPjXiN=Tr})rr9ٳw+C&LuܷMM{ 0ml0mˆP8'IPBOx2immҡCi% cNvֲ;vD| b1847ڌϗibk3f^@VvNF)F~ֽ߻n8o Kaa!_Yjgfo_=>SO=A{/ۺ:Jyi;IIʂh['eЂ.i&fΜI  0sL6nc¹qFʸ{u]!S>@go^Yx0 K<]?ğEG=at9D¡.ᣯTf=)\.RTZZ}ĉ' u(~gP2g>)'B8ŸMMM s/cq;?ϔkw)Sz>>]I$dgg_+VhѢ~7v +MuK_YSGquLXqu*wï_@tpn|*A1ڶms?OxꩧXt)ӧOg͚5TUUۚ.b~_R]]ݯ_E!EAݔ(   iokcĉ\_P@vNv'+'ÐR'b:9eO?ga6lB}m-eR8crt,*I?xֽ|Ʉ#!Yn՗qک^{K(,,d̞=;]0 ~SOa&r 7pCE1|=z4<&L8h_nV}Qbf&+}r.lB^^^q d6qoV2}N8?4o)54<ŸAQ%܎e٨j~3nsW]up;ŋw*rJoc1mڴ~_gK!KΑH$q{\88<. {=TuP\:pXT֞͠xf0˙sdpDaΞ:Y]oIR{on`(Ȉ#8q‰!^^z3kxNY5ką^5\su]_uQ__?A ?'v5=! ö6.ֺ0ԇfk]-l޹-Q1jq8 W_}W]]ͫo~,_|@$'!2;JGFU),*vܼ<UQLq˞~?ACAjkwde琈3t0e8lxo^{PPwsYW9{g}rjo$ !{t;mcɍ7Ȇ G}4ͬ,N^xᅃ}?[oŲZ@qoVۙ;l \lw|:UEUo`Ys9J0t̠AAhnne]wĉLI/!T*1gEQmwwݵ4L,¶}ܜK/6q:sljds(r M,<Ѐؖn vw>nVnVa֭ν+:ٳRd3ӯ麆iv1ctTKp%sꪫxᅽ^Pu4i%R8`吲ltKIYLtR.5رPq%JEqSQWWː!C:;]~jrr4i$(B!8Bu ۶w ~llMMI^LB׵nӴ39^gGFFb8l[os2j8P!PQQښ7 {;#F`_PZZ>b>Cm2s]=...fժWjwW|,\'Zt> ),~}XìiQ}m% <Se```6L _Ǵuzg=%Ktgd&Oܩ_N^^sV 93%Bq Hp$IpH&iF`׎qPy0%''D{;f*$ \nrǎ0d[W];ٻk}{ښ,}v)Æ%fN$7|p͘q.=Imm-z+rJ̥^wuuuA͛v?J:oߎalڴ+zemf#rbXn4_Yh´Ŝ=vgĩq"W1jh!Ue'L߾?>u||ww#}e;<,yk'xߨQ!>r0 q{< DQQ6l|ذ`k+w젴 M޽Eimm%8x&(= lܰxLii)dddR[[\'w\عk' %CJHI ;cS&ON/-our?yqѴ7YkE B1hijqH4Cqi)+"J&ilh-E4t +itf^S) q-֏k~UL4%#Gm.fL?4668̙=%KfbՕL>{':@7tP(9t8憄_4~a={~MG"JVXzc%!}<e׃?+֖Vr0 d"XE躎rğAX>2Czu,{4[;Aց@}q=3u4ijj4MTU!c YPTTD<'?'`k|?ѯ۶1 ˲0MgcpQZZZEEU4MCӴϦrPUW>Vb/ B1apaY6rrwaW|yyD#ZZZ$0Hj1xNI/z|i:aȅ.`ȐRdT2eٸ.ۡ9լ.8vy2qL0r(ضh?!q\躎¶,nwq!ϛA(L^~-Mfyinjƴm2x<iZ$IBH^ y͐,l&HLHtכ(hKͥLgNG/~}]>ލkhqmx񲪪~IPB>m }W _p`ف\\.a:nƸ8TϟA~Q9:&lƗ3EHu~?eoiYVƦi\8vw\ bfp'ݭK4TMCyy$(B!1@x3f,//SEPC'$AB!yds?l:vYXò,4Mq*^$(B!DPOӾ&22eyǟc7p\jwhPTZ?Bnn^ o@O!h.CJؾ}+ÆUDQTqlbmرqǓH&ojǍ歷/FAA!&;:n❷1a‰\n1?IPB>r 1xv~X,7頻Qc/-[\UUR\BjL}H$*X_=z4=c-E!ư&;'rU&J@bqQRRV3= :qD?IPB>L$I&R06).t%6@c,!B!$(B!B! B!JAB!BUu^-!B!H̞)IENDB`KCemu-0.5.1/doc/sys-z1013.jpg0000644001050700006200000005141710527416074015064 0ustar glaubitzfbedvJFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((,"M!1A"Qaq2#BR3Cbr$%4S6sDTc1!1AQ"2aRq#3B ?6JnybD*c-al'QORezRtRh9lh6ǟ׉fyjM/j2{G-["A3FE{̈́frr(ͨoG+IW]jtpzqa>a>X8娈Vճ": hTB\YFGYّ@Q s龍y69{o?7?_%dU-=m5"S ^&f_fN 1eon/ԛ+45͛;?~xڂN>`2Pb%Y#|rԙCU8R˦_lm~e~ʠ~xx/?:FPK%4H84[)ϖN_(Ϫ\|O7$>R<ʓ1Xfhk9' iEk7Pܛ2=3Hyz"=*&hfD*^9=[nw69k^>g?~ߔiOC*=EG+1O=*L'/HwIA-8%9ˊxX<]ɏ߭24hPP)ľe|_׀#TvUy{sy8>,Z8w27"ĩ(_*>cc`)\7FgE N[2c{svm0Ɗ+=4llY@̲62 -\9N/cA斒2*C_I|@Q B|mӯ!ՖwTxW{2Z5P*ߥ\.IL/#ጓ$G͝S}plK>jM#:EYm'/uvkMKUIK n6MņF{@Oe?1,*ab}F5Gt[%ʳptòk7UhJ 'jc (4s(:Kk[ikGŘskNMPgǝI|Hs?Fh_ƚѿ+]K^kax]T \/X)Fۦ0Ta: ylnlQ78~فP5I&؟t1'NomY#GeIZqm{?{+muIO#Ⱥ\ 3LU= 4 "/쑙E#; &ړ,1)R 3pHWLFSwYڛt.>ݕ͢]$fw}^OL岃LW\O%JTRm IPJ5iZyl:8-y# yKEC Un~?  i2-M,vJD@zo_(G2`akQصVސ6ӓ,9lHTmJH;LЁnxf-~}爔TnY8vqi S3lTqPݮ9rZ>3c ꧍6i9%KyՑM6LE5 CN&{r*!#IĄ$ۯ/ǓLԿkU~:+˧TKgPZx5W=?z`Ƚ>c&M2#<ǿwsMUM$ \幟 i|ls|έ*("2-K ǽ:`̜9HeJH{F؈PwSeSE % KH,<@<ʡ(wvf=bvLQ-Vp̔$ /{v3RƏ D!6\ͪ]=mOQU7 KIUܯ5I)5 hO0YRY1$\&zG@MCxs鎣zP.Klm`-췔U̓Ǚ<>ݷ o؆Xk$Aٴ2rGU*U5\mm br fZ("aZoyXkEU v'J@$7@e%rey5]ABCiv;bɵ-AJw _RH2m4OW!jr[0"6+rn<?,G();L}n0J< iq7k[*3h@f=L]Z`ԓ$F@tY/OW\`vqn7zڏ2N!" cGL鉾 t.p-{[jٹH?(mf錱pB<6CЌ[w-S KO# R_J-" ˚YXJ@-n^W/=gL'DvTWP N>WH ǯ]u6e3RJ^]!v|#i-wV6#_::G/;"TvM7e:qp96@Q<ܶ)H(9-T,f9 kFLXtۛ3ӪKz:T0#[㯭"sYXnt%F2VymltSB*_{_)jrI5oi >UFdZXe D|j+\eqk?XkĊ֋eVz؆es!hK0q{I3Œmb IQUgv}V1ܱ"$s3ww݆18Ht. 2ղ{vhIߩ[me?e(*ڂkźfu@mɭ]M#oh"g^K$2c,3S6  PFVH߻~g5tΆ)9xs =FiO_ED(8 'q޾'sjLF̌;ۺ?~8h˸zz:%$Q(dd}etӕui$bYZ5d<,\NXl9\p0!@=/J :JtR\$cl0X 2#]* abU2s۲h JoH~8U4O+6S動TOf[+_[&Tι/ ; qE)WTȣ!`7mӮ&(T%3*\2A4s^ ":1]RUe` 6}|Pz}>8/ch  {j&X጑f V7$W˥(j몥Mr a 0'\k$☄YLmv!7N78SVG]G ϩM逕rTv:;M!N@W4z=(,9Gϧ$:Ce5:Z-ZHl mnz6cnvGRZ,]PUݴo 4V ,Yy c1]KdzfG?|k\ U `y2}TAK_tۧMyVTqW<}CG P]@ؐqATE$.:u;ZGj؎} s72_Tu71'"76$A3?'Hs# mIZF{US54锤PIvY\Em 3iت~ ,{Թ$ _ŬN\cݕ.XyxÍfR{}3XT$i#_M}Em5(i2~*THz(U=&rEwy;EXم\ŀ;.X{E.O8Ӎ3c CkXt; IOrH0T jw-qE@z6fic#Q 䙴X(Mɷ߉+.x&A8RR@9ßI]TTNRUh 2n–a! !-g7e[0( -G㸘vFLq,a㝕OS}qY !ҙapvFRg%zxob)&1!ߦ"˻/ȹ" 1{&Z9w(΃b,8k8"(s˺ښI*d앍=pjTҚW.)[/{"K1۝-/^MCX gT: dCm[xaU"ԕj=ũi=@1~R[\X`ClMY\ϡpcOA|ujѤ $Lu-܏q cK>m_RAQ|Qi6o jc{Jڌ>?fE`QGUvAă٩#cmLrh%xu>cCeKY va{[%#X|]}>y./i6]J̗Oy]{~/djLVV/ZM=U\bUj}ɱ+u V(X_#&X;0!}>3LIG+@i}o\28($l<#jX([C;nq,ܚD0jIRꨢ45x9ES`9 /2vF̱46 Hk鉀euV*-{݊R3ig5``CbDfc(kf<Ϙaxn$woب'Xvq9@wm;zyyaME;*;dH/sM^WGLBw%v_T2#Χ}.$ eY>,UuJ zX l1*uēG=Gy{\X G21,n}, :q+hԷ½VT4m,+Zwҹp9zz|Q Hc"Lª1XZG9᳇*i+RcC0[f̞* no.Q_ M59b\ϞvR4#4:F8Uhd($PB9{YĜ,QZF7ulR^L5+!e:vHnd|2IT6Ӳ!+ RG?Ì8Y2ONi#1l\(OIcK LH.NjM.U$#`/7bHwB@t@"r+*M%H K#Q>7eUTiVPA:v}oU‚SY)zy2:xΉ#b:ZPX\)c^ʍ xy5aWD{Z䀞$!-lh)#h[[/7r|Yyz xSk>ï[彍QfŖ]!j4jw{e٩Hr$〓T/i)Ԫwwzb6afS"[Ftl04)K\͍O (2a4fT(ur~Ǡ76OBD;J4j[V^|p[>uk筷ƬεmxҸ(/O :}p$G, qL^M =ӾjAzԙtm3f*ly*yak(]gY?'KW5:,|pEi4ҞDb PBʟ{_x] #ܓ@nz:v02G @7j>sVٕ>^_SEN[IჄl I-EXڮAk%[$U&cm0 -R!b:z} xo{gI9Sf&Jc4o?" Y4#O~Q{l|<|Yv:B, 5uXoOt܂k/S^$:礝ǧ/ ŕoœf Rvg:t(nv?iyS:ir;THD6@1{:VEW23})ug^HLr(#^@7hK30Wx[nƿM8x*5T0 q%0XeTlmKrldsy8D+^a:܋.IIϙ[;x%)e[ÙyYt6.A>ǧ!F.se%5hGS,@6Sa*XOYb 'H8V_;.^sksUŊ&aM(RAۑ?bz)Hnܯ#1C(]-M3joB|o iCSMӵ쿎-OW$;KKZ篎5^.㭦JVn3IܛR785nKK,S"8#h]ϓ鿘u*IfB ZG.me>{yjk(\iZ@-EfAkƽۛ[Oȸ~z8j}#+{l,\r?4 :[s$dY}8 5+\}F ͳ j E \c ^g+~NyHKwU"%;X,?x(5rbR%I%XwxFX7aO3w_3QQȳ# Q{+޹^hlӸ w$ZmmJE0 YncߊVmOksNҺRX\>C TP"vw'{K E]w QVUS44R#'sh^rĕiAէC"&#^!L KH'nIȣ??v_lo?vx ]vh:yqQnx7yL;튤X#晔"ՎC/gJF <.X@,ʶ*I$nͨGAk*fYL>$4h;1%k+o\DY,REPƉH(>핰F1<irّ{78$RHr6mT1ÒVT!M,w{|rKج<*GE l֑h`U5Ǽokzg07Mi*ۻGmI 9}J{]}TU $(C굞22Ksg~DZgrͧQ#3*PhP=ECZf@I-טWRWґK#\۝-e{QB*Ww:OTփ"(eYck&AT^KS[GvRE/]J;FJtkzj#*#`TwU;0Z冯S S<Ӹ1y,0$ lOᎂ)S"׿x܋PJ$vmLۃ gcYbL}.̧vk,I Y6yXfGg$@Z87j4K?,2qviIC~ doeQEClqk +PG9*3LF׹lnyaMom?,0fT7k:D`yJ=QȍA(|6aN]j=ʑ&wb?UE_Uti׿ 'P1bVq sN_\yM2B팞 RD)xG%:_؏i֛і@ww=>L9'FYAxX~!Hg9=n]:wOc=M)M& .}z[|/_XQZ<~G&\EgJBQĴ|O$bQ@]×灒}6/{%*"V],喝Z(Oa\wXI .YQA> SqP#$N7G%E%DSi4l. )Q}_]2VЪ}iMv\ Tu R0;o-Iڎ2JT07#M󌧅髪$t$bv$vI)$`s'k1Pyt̽jO8NͩWƍTth {ڈ;-o2Q-K#:6 `[ߑ(Gg/#]ߴCuOth-}.OKv^vaqI]? ʿۖ9R@7zb@@N|ҹXP π#7i4*ą$nN>Wۗkgeq^&2RR"Ȩ ܋DRy^:* VF=;$$w")ڄ,T~DrC5jfAӱNMN'K5q<~w8 RGVC+)+ 8BZƞZ~.gjuH-R.aIMK3xi>쇖2.%ₜI*v ` }|fXU2]2Xr o3Ľ֎!P5:LbگGL&bx,{ VRg+T& ؞~%yW0i ,y < r Qr[5ye3`<\ϖAF{9?IX,꤄k3qM< ).]d6U~GҼ8MuckqJ!RACYq +4q#ebTc灕@g`~8cХlb=Y'c c{(| 8Pjmm#rZZ;8RCa,ʖ)l?v%CSMQDƨ/7RQ45e=JK"Yoo.2H̄iFVZK?۵l{NŁm4?Ϯ?37Fڍpkd*X"sVyRTC48o^p8~jzDU].zbz ifʳ1Y]X MV3c2ꋮIV90?.pO)*̶-RQOJ ݬ>{LOOqڡ5~U|# .VңPz|9$j9i'4u8#jypkI;1M+Ԭ?8eteTI?m9:;mᅇIKS*]w\D׳7krx9J T8)zاuP-ط[S[Q,\;!!j<̅pz:<ޚ*cSQ1TB ?'ۑȘfs"X.MӦ%5h K @H G9U-TC^z3Ԥ % #9@#|1dP=eER2BHz톜(-EM>.VeXeR+i#<EFJe1)r)QDeQҸn#Q\:U8Ltæyjg2F6ϩLr ]W >|?Ԓ1".gc8÷[5, $lYܾO$u_mG*7VLn?lj-!7B%-$e8V뉢꧱j rI8|H#=h4* ZE_l8)v'41*w!)t!AFk[roa \T01&sm17bd?7 ^ͪ4djǤ>):z;RX`F Q5lc>;lR Cb>!>0ccϔ!cAk+qN\!:V^+TΥ 2؋yĊ:7ً֥45nI;us#gCB.wb@[9EJ%Ohď&A\ 42{ut#,v:nCkuqiRGr$0r!-눪"yOK8k6+&YVi6B?+6a $Q \ܑe\P<ءCդݣF [,=L5M$.HV7Ĕ ydB@,A%(EGU3(RU>±'c3.+!!UCW˻vEÔ<3UGdV j&ƕ3B#vE+w^^Q/kb [yo/+}~Îseu nXH]2)kz[}_,';;mzIMd/"7 qcك³6sFO>E$-R2?'򯸵[_kq,YH* ddPa{C{Ѭ+ؕ t}+]=%xuL6ؖ&lmcQ vqH`B)q{Ҹ;WKLN5&Fjv`=2ʳ v8~/exx.g%A#\2p~pt\8aO{aoV}I ?݋ A&f S=1GGJQ 퀜rqU$ʷ6-N;N xj^$ ,q T) sb8I"E̟d2 FaͰds)8*$`unBU}Zةv-E@rΔX-"X]"Ӌ^|u2D;UTH du}z&yv[-%T3:q;kb(ifWI[WOS0Gj,[`e<9s-CȺYkjܼmRu5g9"K4A<'n-5jzy*j*I/6\(E VcWa=e [Y-a'E{|8=EX`Lӆ(aij.{ኔM=Mx[B<ύ Ԥcq?]tC|Jǰ9 Ra{~V+GPhOwH l>>X6/mK 0ѝ} S0fGHDEAc6dJ4{?=FK Zv)-#iJp=nwF{RP%mTVy#R6*m( V(2O5vM>riS s{UYe.QH Koqm2QY>{<Ӥ$yfkd=)!Ve}7 /NCLxf' WC7y $_fa"Fi,Se)eI.4QYUUpʡ<"vi/dlm_:tpM_t {BHX)c!ĀMybV՞7[$b"s|{S@3eU\u4XȶzIɇw{*hXzIX>v"H.e^~m!erNeI!Q@< CQ^?Kt} bt/#JžML}iw8#SU=>XI 7:I$1 Z|dqS ?'q̔Tn;tbcyc{U9e#n`cM q:6I@$?  0\Í:/,?xv4C#c}qԎÔ>~nm&Rv]ZofO9~.r8+V<3BLGCzuCrDhu^E|Op'8N5d ʸNd>/6Iz2K[4ܬ r”ַ`=8jAG$ܬxR&8JDm>?J 'N~ {~ёÛDwqޖ?'Q<F6=lWn^VMDߟ_ r3MYb\J&l,FLzGcIyD \qq7z#~_Y?,pJ9K7~Xz \l1Α&P43P,~X"ONX; :؈L28QG<{8lh6G z[P:KCemu-0.5.1/doc/window-savemem.png0000644001050700006200000021040411131675406016427 0ustar glaubitzfbedvPNG  IHDRr sRGB IDATxwxTeoڤF @@@:*R4REEҬ DWPdD(JT !$ZH/g23GȘ^'@ҳI!O >4 ~v'~=e[42m)3+,4>|r@J'Bq/HJ/8$N6@ԩ9pb4 W 1dܜ}+Vzk!B{ѭ[`Z8٠*-QbZM-ni MBSQmXWexğ2}Fdƿc;]/(gܤ@#,,o;[=%kd-Ձכ-`iaN^AqɩG^\ŀ5)6ִrQ^!_O**ǣ3rp:-U /BSWMaXRdg*+j'Ds0O[Cmbo۸ILIGѐ:Ծviu$~8`ۄsѱtfҤp\aHo\,;H^AHLBv3K)D~YBSWw#G/rR6ڴXF`Tpk`dddQU{s>r۟?ԷŭЬM>^y˾Tfԕ^3S0Wqe֖f!tVagW!jגr則;SV7EQ@qzɩ`llxcffHï'Ncdd3:\챶"9%LnoYT83w@]TbjfʀБxJZ|"}\xnd_),Ҿ#r#=k{n$w&ЮM+l8z "5낥e0_Dbr*Ύtj_c>j.nYq3;D~xaokӨVIMˠP)ΎkRՅԌL,U0}p1*qrk@jtt 61[:1klO~vl>FRJ:v5]BcwR2)h¿C[,$"%÷h6Od|".NDݚ/P wѣ[S{w7~>zRԯgz=>=E=F;;khZyGk'cߊ(_Xąkil3٬;G[Kf|>^C:}\<@]e>:th_iYzȤ5s'ȈK72hH4l-^f~{KW?Eѱ/űu BNdc## }ݻs*#{zK8s1l?C\iuKSYwz'wf17b^,̍9}UURE\B&˷ͣ%VRlآ[4)XuܒB"k;dPo|~aȠƭESh{IVV6hl3ûDwj1qL|s3>[ccS1+K :_!h=EiȊs4:͌=ROb 1q<+_NhZZs_/G??û?wbaiN[O[WVVR|gl,-k@A##XPNG'pZ:q)`ccMJZ&}Y3R062'MOYGANtjr*v*C^AkFQXPM>>FjC1/m051>?V}%+[F˽Q`k-9{)=1nZX_Piyy2YCб i EQ0zJi̱߯jK^A!:vPb]}œv^r`?{3st8AD"EMVq=QCcqLY"m+\~|Eqj hHF^(PkX$ޭ061C]%##}#.оCJ@G|[:qKq݃dҽ}%i _`/?fN)yTfܼCnd`eiINN>U*EZzF߿wn.k^| 3m<(z񉸹9}g(*Ҡ*tZ_c^x8٠x=u{йMvrcafj̡ӗSp*[Ekit䆺HV/`lm/LLLtzg&~6p@~ '}KGs3B4Ϳ uc'5ŭʏKī,nfe͝Og5Puaec6DG;/LMKa/ŇY3EZvi)`WcllRq Ֆږ1XY[ֳ*r *sK ՅzUpvv$69ދ [91kk[u'-ENV L8Y23-) JEt|[:1G[x:}5Vc@Pja2Kl|:Ibxo_:U;20'-rIqۣ)XY*֊0} 8c2ֆ<13ڸ22])}[yWגa1:E!3+ Wc055IjzwN^EX<=C_ʜ^x[S58t{BX94LܑL rb"뀹 vߢYj'2[%ϻ|n_ܮ]qv qxeq /IFDK/WoiV}%{h""Pܩ7W|wO8::Irr*ameI-o$Uܒdjj-.XX?FK@'LLL D3tt̴{dbR )huZTf*lIMKCQk?&}(O9 @*;--+˜XT*NbddDJjIh4T*$( ~T}.]JfMU*:ujqQv s s5vZ-7y3 V {Zar.G6%$&ʆz쏾ïcGK7AT&FaccK}6E];55ݘpgvΣhPt?Jв'*@Deom};$bҜ_ðc[$BMe~뼺ٕhVֺYt͕綶tҹ8{idbLV^~ q0 ^L_a nn.ebzyyT.k@ǭ#UBegg'ʌ(KA%}[wz.ۥDe9kӲ'-[z*vɰ(Z0@}s-<_Sj_u˴zzp炸Z4sxl}TV@G\pyM ~^rwJN(BQQXpl-IL}a$⮿&7@66>;gwGS 9_m4GgȱiOS[.t~F!Bq8}"U渹t h̥z!V*LM۝1i{^eS(_UhڼB!5LnmiH )7B!.-3瞏[6~B!BmjqO*B! k뗁B!0*{~JvB!Drr^hdO!BTa^hV7B!V0)}4B!DBS!BH)B!SIB!Dӡjt 趼m`l\I)4B!#%Ўo[_u.6B!h"N&%5V>-Ḁ\B6Rh !B4Gy89Trs8AaA!:O:oD_B!sgΡ2WߖBS!ɑBS!B(Rh !B7nz … bggG׏Νt]\7v,WZt/"wпNKM=90667WW:vȀ7n,...,!.ՠT?YI~(((`wxgѻ(!nWX _0fh\\\011Ύ=z+?7ӓش JL# @˄ fnX|9EJB*XY[QXXNk뻿ۻN>}7;} ݧ/!! (3<+{|Si={ŕ|̞3nݻ酷O ƚ5kh4ZQFHxx8g#"Ϟ%Y9rd1\.8RTT%K~}O~ @ZͻGAwڵeǟxIt{ :v㩧&qJ/YNڵ4<=pus`a8嗛+/6at>}G?NcWUj]O]n=zKQrB:u&7;T .]=gqqqoa߰ .PVSPPŋY<Ӗ~JcmrSr3 ̖-[zjN>ͼbq\bܸ[UǏ\r,ל9/d\r".\Sr1<;>ZF||Fu"EȰat:{9N>Ŧ/>'5"E0tEaժwÏ,[xi<}Ą>u3^>СC.Î;Xp"HMIUxp0o_~xxxأ| ʕk|g2.]r%-sss[v)g@!BNҍ$22p'~9Azj]hݛb„ pBCC=f,Aݺ/77{7v,^^^bmmM}|F8#Gزek8[lE1jHxJZ-6)SaccC=ȗZ+6:w&((LB߅ޭ[jo|jr-p)Çwwwyg!iiqh;t֭9s?_n 333[wڵ*]~Y3g^JbʔgXsħ`cjjj|!]?'?-<3y2o5.B!DChZ<'t {'{,,iۆN]:Mjr[hoߞURl ?|ի?eYtЁ7nߖ+7-[c L?iSl޼Yԫ( [l)3ر37掋.nt+W{KTۛ_0 IDAT\S6mYfxI!sS*}ӦpԩJǗtsS`ff[834 a"ߥ3agϞB|2;G8N.Nؖ31w%LLLܙqcDz`Aǎ7@Q|~~:CfӦ/%|?ŁҪU+._ѣG8r\uVe)Z-:N(e#4&c`iiɯʑ#G(U266q\I7ofQ{xzϬ9U\c>Faπ⾙0axeۻA"5dXVV BN#z<9ٯ'gLW qp#z_hW :*J?|j&Nȏ?|ϥIKM!F| il̓ONX,sg0VW_vvv'55U_oӧo_esrrnRq'!!#-vaX~qύ7ꥫ\ Mhml.\,!(({{{LLLUz{v{CC166橧,3]XǍK_*ͳ3orU{}Jǯ_^{IPPii<$rrr0`e}֮]{066fʳe/;9FEEWGe5s.BCQ###EU T5}gѻOPFϗ_nfӓxx`<^\;\v FCbb"WaUWVŗ x0p@ZlYfW_}333V^i8z7oDՒř3gX'<%o>>{8ZL6+Vp_z!! X'MZ[O}õfq%޶G3w޼[}NomW^}s"h4zow䐓×_n+U˒BPVVf@tD [o1j(z>> 8::h-OtЁ Bg͜yXf-k֔}3'_T'?T%10 uk0slv{ ~7,א9sXb] W*RͿ懐Jڠe̝wT^>}-6/2/rk+Bԕ\-yXXՆx&\4}]#.=ܝ汣Gؿ[?FTT4(#~~~1ɓ'cnngiذf153CLS}Bsȑ8::##FtQFѽ{wo~8򰱱]vۗ1cF~7,o_,}L6AE&?׷L>M4 addT8!77:v7n,...NߥK⟩\?FC}^h\vAbb-xr⓼KfB[|;r3t HaA!N9V Fsf,_QeyxpR֢VVVD&殤E1oBq|KOt"tvvpԔl«#z7IjU/_5k0M& %##wYq"S!@oRSɾN҂}7jKf )4AKinn" !066ƭn-n{K!w۳q u!B4=Ң) B J^BES!B4 iB!h"Tf*of5*fzB!MDP`W,ꆷB!͕K}@XDjMmyOKKKafj&B!Ds/6$UnB!Rh !B)4B!=>66{B!€fNN6w|-YB!+46\2$B!Eh !B)4B!B!B M!B!B!MD ݳK$Bь ]˗9u)gbb3uo"_7_/l}42E R^dT.DG+]IO=}4WZŌ3ѣ֌5 ___ѦMJ_b;w&$$WWW5k'Nȑ#1B?(Ѷm[!!!닍MoB!u4l0BGGmzα|_-s:;;BK.SwE||<۷o/3X Dwo gJ؏:B!Wtpp`Ĉ(uYB311772g龘%fIaX^RRXXXT:^`eeϞ={;w֏B!Ϊ-ZpAٸq#+SA΃O̤ӧOo@@@7o&??L”)Sh׮P0tR=䁮B!>Úxɯ(wG`ΝKIHHֶ3-+4/_Ι3gի~~~п|}}xؼy3~~~L:`͛34ES!d4gHOKt=x)!!^^^r3BO2*xOW; /Ψtxk]y"B!Ľ\{ KWT*LLLj=8WQᛨ!$ @ M!B!B!BS!BH)B!B!^*4*}hG}D׮]gϞu_F}ҩS*_x/rjWE̙(Rkĉ ۵k﯄W:OMsaeرJc2drȑz)GK|qWjI(k*zOPΆDF|gN+sfEl۶7xJnNcŊ ooo Fdd~|l /^x/r|9~$ĿsǏ͉A fXX#Gr/ZP6l@TT'NdܹV155x/r|9~$ėu$:t_ɓd,]> <;vw5aӦM>|OOO&M… + ">>3gkYƒ>u}?*Qx/rJ|9~eԵŋ=z('OTrrriӦ)ފZO 6ʾՍ_po*(Jppo^QE),,TZn̛7OR:k׮> QӼ #"%~S/_HM(}4WZŌ3ѣ֌5 ___ѦM*cT7ȑ#1BZQh۶-PwΎlmmƦBx&*Bqչ_6luvvv.]ǧՍ {nþ}0`P?T*Ơ~ԑB! fbb"nnne w_tk4ٳg'NgvY?><cٶmXcǎI$^-YYYM޽Yt)İi&>'&Mb… ŗ4h̜9^{2zyy{JBBL8!CxbtEEET*\\\uɷ۷( ӧOٳgy%caaApp0d 4ԩS| <NW"֬YÇtۗYfaaaa7v~jZ>C!z~xwr r%KpQ|||?]o777E(R޽{ٲe tЁ_~YYS(lݺ &}xρػw/}5{T}0fϏ?WW^믿f˖-=OOOq6l؀@ǫjbbbv:uiӦU(4k׮]]޽{dEa˖-'KNUH.\`DFFٳ< %7g}իW~seꫯV(4kZlڴ}ꫯRXx1VVV̘1 ovz~ׯ_OLL sAqJ Էlذ;ŋl2BBBk86wjs5͛ǧ~Z!o˗qsscDAIKnm? }ERK+Vs΄ꊵ5fĉ9rI@Qh۶A_x;;;BBB _={0}tqpp?ܹGy#Gi&l\֭[7n'N`9[ЧO^}U ߳СCӇ_*._c=׏W9]~-vuync秦믿L0;w2n8>_m_K/DEEU:ݖ-[7n+dln_qvbxyyڶmQ{nþ}0`AƟ?sQGiiifaaO?  %}Q .so(+++ QXZZINNdԨQ+c% 'L1c4X;?uY?{~ֶlmm_pKS]yرXXX0n8j;}wf͚Epp0F߉ٙC3A?%U4utDllXF%-{3H:w\!xLrr2)))^ +n(S< m۶={D|||HLLSR\}/Wto^f?3T;?u]>C=666dggX]AURT-j[׺m]l7odɒ%k׎cV%}3ǍoԸ?IIIx{{W4un O>!33BN>͛oILL l޼|"""2e SL?:qF.],cIKk}<dݺuܼyL}?'({cƍ 8 dذa@qiZPߎn{졠@-w:? Cm6 IHH?4X;?5-ߝSoՔǏs*;vNܒyt|ٱcl۶͠Nm_N}O8}4QQQ8::#ܑTMo%w.]}״}{~w}?I^(**"00iӦ {kƂ hѢ'Of̙:34 ݢ9fLMM 駟ٙ'|R?~ȑl۶(j5L04 1tP /ښ#G2uT4hYYYڵʌ3j}OCM<EQپ};[.sGiCitz~yO6<ߟ'baaׯjO?{,888SO=O???uqQrssqwwgԨQ<Ϳ!ˮ]H^= IDATIIՕѣGI q7Xwz5onTz%00SҢE _у yf9Bjj*cѽ{ϯ lٲ3gΐ'NdȐ!M.ΝcÆ ,]T]h.ZGaڵk֭[;w\j}PdfWjci'==8s !!!ƲiӦ/~2yuطo)m֭9_~JEhh(}hp κ@ݺu+#Fॗ^ҒǏd"##k}kZUV?0i$ƏYf VVV : 7?̪U6l/~)VΎA8N㧾35dۯΏwh8|0}gpY033?ߟ"""رcݻwp~.x^}UT*o$&&y&YhرcJ%Yz [oE.]hӦ O>`LL 6m># KKK&MqKU 6GFFɠA壏> //z}+]ĔV(Ea֭L0V7?u~)0n 8{{{,--- gΜ1Hƶxb ƨT*\\\ Ǐ 88Jc= .! `,,,.3mzxǘ:u*~\RR/,Y^ۿOQQ+Wd;KRPPP54? ?jZ濦7D~noe25eϟ??? 9~ɓ' [[[û[/at333Zj&ׯsuz- ͜?{VU7&WE(DL 7_QI|kRGx-2lyL{\R c8Q LW%8?|{9>^g]߽w]vP666>|BΫ @RR׏ɓ'3yd]&nh>ʗ؈F… dff@ttY_:]1cƠR`ʕ35k}#Gp9#u;w1c),Lbۋ~mj[ 8Xz5WN6?ެi?зo_^~e~arrjbbbpwwg׮][F#o߾FCxx8 2>-g߿?ODDDpaTjr9Mf9tɓRgn.裏Irr2.]2ې!Cj5t&1{Gs˖- 4J+=z`ѢE=zN#??V/̶:rϞ=K^PT8::IϞ=[SVVFYYBvv6aaaٳIII1$BBBZú%WT1H1f^~{9r$6m"%%X܈磏>j5سgǏ'''G񴳜zAccD՚U?TEI3}HOO`޼y899̂ 3g0j(|}}MK{W/#FJ>OLՏ!'TMۙ0a&Mbڵxyyl2)ԩS8880j( :o&Æ _~aΝ̝;UVQ]]辵m՜8qCfZ&--MvwwÃ=z77x{{w^ٿudԹ\b|}}%w1x:ΎIVc8vut>|I&bj9`XjÆ #22RZ'巗z'xkkkҥK?vvv̘1P>-'DDÇ'550iIMvIcc#r `bE{W*TzK1>3Ur򛪟;; ##KRRR"-?APWW?uuu={Vjׇ~w}D^y\]]Sĵk׺ϋ/h7UTTPZZz[߸qCrbzz:lќ5k dΜ9sWOׯTzvHfsb[N#СClڴ#Gl2J7'z;o0U޽{rJ)󄇇OXD?o*P^^΀(//+IŅJ._j>RR[[KmmϤ9WgggHKK3sJg~L9Lտn.5ׯt:Oٹs'DChh(~~~̚5`2dٜ>}SlkX(9d'OkIḩ~VYf1k֬VGn\b#qhF %5 ۬TJ8y$%%%<?2Z;w^6nѣY|yzh4455QYYILLAMRqiZ-uuu|=l2DGGSSSÕ+WʊP}7z=S__/M˥ˡߜիW&66VJφ呛 55.]|XTTo~:?ݩN5=NéoGU}pU6+];m4zIBBgΜ/{XG7++aÆag͛7o3Ԅ7sSz/]+Wҷo_fΜ… O?4?W_}`}\gh… '++4o3:+7bLK'&;; -##ݻ Lxwc픔п-Z$3qDRSS)))777˜:ut4`jxxxj*ɱݐNQSSZ&44WWW,X E/ {dff2c \\\ 6{lˉnhߙ3g8tiii<Ҏ绡SCN>S/'hؙ:VVV888ٳgKJkkk|I?kkkJzz:7n|cJ?9#qFNuutfW y4 uPu6 eGgě@ ɐ\ow9 Ϥ@X(.#J ! @ Ȱg@q?]@ DD3OOM@ XѼH ^GD4@ AD4oA:@pё3")@ M=/_7oǏ3g&NةNbӖBx'}QEpo.9u^TTWʐK’ Av4ٺu+v///6l }>#66R<==yxgoʻ5R쮟~ I-s/ԩS۷BZ-nnn2e쌺W||A/vرc8_#:W&77;v0p@y ??FC\\g߾},^cǎ)P\\ܮ*e믿f͚5!*=渏d&NȒ%K!33Dx7~b--\0aۓGTTEEE޽dcbbb鄆F\\;,7嫯"&&q1|mFLL zO6Qj>՟9g}X*T*C ӨT*JKK;}/8pz>s>jjj_ؿ8p7n멬dӦM455QPP@AAMMMX[[DzeB>s?HlllXlO=|],z2kfMM o>>>k׮1o<~i߿?˗/r/rE~ߊ;׮]#((>Laa!ÇW_ ))@ɓ}H/8+E?3|j5m.++ )S(*ܹs3H--„ zj|}}YfYojjj3ͪo*?}_6..Z&&&wwwvźuh4Rh43h ~M}wӟDDD&11QLՏvZƌJ" +W2f)W~S> ٳرӿȕy9tɓRgn.裏Irr2.]2ې!C|IV@nw4l APTңG-ZѣG1t:hU7N8+krϞ=K^PT8::IϞ=[]VVFYYIIJJ $$ec9r$6m"%%X܈磏>jǏǘ1c RTJbĈDFFsoi8={?~<999;  Z֬iRWW-:N'.Gzz: ggg,X 9sQFkR]cr|1BZXTHII!;;0CHH٤uo~ǨQ5jyWOZˁĭhL4kŲeˤSNQppp0h 6_~;w2w\VZEuu"kkk|gw%9qD̺MZMZZ45=zn.`޽~)D//dϞ=Hirw}g;FŨsr[<X[[ӯ_?.] ?j* Fdd`>|I&3--ͩ3fʧ䏈`ᤦ&- qtt4~#888Ν;ill^QW\ pz9::*i[~娪n.w^o}I[Z?ڇ~]ppp0vvvHG~S>ΐ>Ogb„ 'j q뿶,]iYMM :ٳ~a}]yWpuu%//OqD\k׮uyzbf JKKo7nH@YLOOτ޽{[lLy9s"'fHZK:t6mbȑ,[̨hjKrEwM-/cSݻ7+Wϟ?Oxx8Oe7oK>B`!CN#cƭK@'O|ǛU&*++10ݻ72zh/_n֗tU*OFRWW ѣ&Ctt4555\rx 5KwC~H ܜBoIHHիTWW+gCtJCC.]>P?Sc}觓?sHMM5.wS7U?Joo1s#rurttW^[nlذkssGߩw8uֿ[ח/_NNNW^QZVt=iٳ' 9s&.^خ{ҳ6lNNN)nw͛yyghjjۛs)ȗ.]ʕ+۷/3gd…,Xrl–-[/Zi>Y~))),ZH286țA-zS-46)W'JII ԩSf <<VV2n'AV+ ,rrѽ{w2331c...u={6DGG4K̙3t:t4}QDSc…ۓEZZ3k,E7U~S>Μ9Cnn.̞=F;w.b &`eeo::u kkk|I?kkkJzz:7n|cJ/y6nHrr2ߩ 477;#”F`xan2ռ4{}κ[ 興+AWOr:k۹#I}=oP\G ʹC@ aϞ=f;~P@ hf  l")@ "y 8&I ~ED4@ AD4oA:@pё3")@ M=/_&ǏgΜ9L8So, 斿-܋I :եKضm8JFp![ t5ɓ''elnnf֭ڵ ذa{Cqq1?0K.-?CiNJKKٹs'%%%\v={K/eӕO?7?ՒodJKKgL8,۷Z˗quu%00Pư:u}QPPVٙziӦ1`NiåQfwG۷]پ͡osGڷV%!!\_&Mbɢp0vXӅR:kGscHrr2:PXXHll,8q3ft4]1VŠ+BR1dN>Jݻw˦+_n~VYbC%!!ݻk.W_øq?>۶m#&&^z)^HNNf„ DDD`ooO^^QQQ)ҿhYf }5KJoK#}m~:ھM>}:cǎ= aF5u^SSo?8SN"ݻwyAA^^^[}ݻٿ?ذvZX`2ܹsN>!/Kٷ\nߦꧣۘoZM||dioLıch4nN%P]]\L4vgTTt}+M(r `V""">|8I'Stu?qbcc+U(G@aa!RPP@cccj FOWTTPZZ*9ĖܸqCrbzz:lϷZ['Ay~˥c=Fqqq,{xxPPP@yy9 \={J:D9/'i!!!Ҡٙ* ܘQگT; S[.WoS4ŅJ._޽{rJwTxx8O< )`L”)SR}yғO>i0"C !::j8y$駟j),,d֬Y̚5pB ijj%K0w\_s7w;w#ܜRihh 55\7`QQZ|zǜN}}T҈>ڜGnnntJӧj0zN9ҕpIJJJx?~A?@jj* \t>@q٦_Gc}m~:ھw}IJHHիTWWK@DGGSSSÕ+Wʊлz~GZoG;ハ| 3]C FG47oo3zĉ3gY󣦦ZMhh(,X@/gϦ68q"؈aaaL:S_N~tc=͜9NǡCHKKGU#јjr}o%iAAAtޝLf̘K0`hZ<<'|S7 uPu6.߈X|G to2 sG< z>Ocmc۶m#&&^z{-_f(rr2'Ndɒ%ؐIbb"eee&CVVӧO'444ppp`رwݍՏ>^]?K>/ur]O_+++OS{UVѷo_o~NFVS^^o}_@ѐHIIUjo:^5u^SSo?8SNFݻwgHxW7 C5P\"ӓ׷ݽUV MMMlݺPYnRzEEe" %KPYYiT}1m4Y|6l@@vvvq+Oӑ @XXr׮]ѣqrr^>}ZQ˓occ?_|Aߟ9sp!_{cY%k}+'Nm6^x!HKl[32oLaa!ÇW_ ))@ɓ|D)}h44hP?>jftooo9{ыG>CT*l۶MJ۷//2?u(ȑ#;w>})SO@-Ο?Z&&&wwwvźuh4F}cl,Rbws3f"##]L z[*\bee%uRuf> ?ЧO,Yey?)t-[4h* WWWzE8z(999#PNG~~>;԰qFh4Қ%Ϟ=K^PT8::IϞ=[YVVFYY /1b>$3g0j(|}}.ȑlڴbccqss#>>>wFbԨQ{FDDCIzՇEacc\g JKJJ $$D(ljc̘1)>>>ddd(-?==];99̂ n=4Jg}>T*#F 22RBw?guV޽;VXСC%L:?._ϢEpvvf˖-fa FTՔfp Rw^sͷ~KZZ֜:u OOOrn:H}Y: 2ѱ]k z-cҥL6o-#;v1/^[ׯ_~: ܹSZpk(ANcǎhpqqi6lҨZ~J:[l!55iS#W\F`i~FkrQYYÇ[tsc7T'zL]0]\\7o}zjnܸ?cǎ%55 VZYn,\wfEE|  "?t](*wt~=~;蹍!CMuu5 SZ-̚5Yf1p@N:%MiϦM())Ɲ#/MiF Tt|呛kt&*++1pz{*AVɉU>KSm.|'O|޽{ٸq#Gf学꧄hjjjr XYY M3$$$pU5ҏ4J^!ז\N3տ S7A; ?f֭/Gs !͛7o3Ԅ7sSrK.eʕۗ3gp6kud\gh;9sLt:"--G}`}ٔݮ#~߱}vi]aYhQ+9s xxx5%YxqQSSZ&44WWW,X`FwO-֨r&;; -##C~J0`hZ<<L ;V~sO%̶?Sk' ѣ/!==z4zZ0\yk UW~nj^}hx^C,tSOHH}u K_?GG0aݺuŅ@-r;w3) Р466<yrn.Y@ bhYL=1wV&LJ @ &VVV&ݣ󋎦@ @L߂97 @ @ "-]@ 5:rVD4@ KF4/_SXXeqmFyy9:NTzNЯЏgVLb6l /@t4//..]Dll,(/+#wL4N#&&Flnfnʮ]ˋ 6H(뭷HLL4iӦ)3o%99R>}:'N4=~'y{)Gaa!Z777|}}2e vvvsNJJJv={ˋ^zI j8;;SO1m4 }P\|WWW P \~sϝoJJk~$ߝ^Rw3p;3j$*d{iZ븹1i$&O)#|vv(/:3~-u2::W&77;v0p@yn~(^V3ϴ+qqžCϊ+:t( tޝ]v>+p`VsĉYd 666dffHYYo&+V JŐ!C8}4*Rvޭ &=yyyDEEQTTݻꫯaܸq̟?m۶C^}O].v7|99Z:5kзo߻Xn_sEm:ks?&&,ONhh(iiiرc;\?rgg׏:3o?cFWe,nӮ@5553uTihؽ{7 NGrr2aaawm~'}1m4Y|{U;=yyyR_|)#|vv(_i|@qq1FWK/V\iU0?w5ѼvAAAraW_%%%$ׯ߱ciFJ}}=C%**JV؈F… dffr ΝҥK͢X2dqqqAVo[t$%%/ՑI|߿HlllXv-,X]`ʔ)#߰a*J͘1c4J۷//2/>k~ȑ#;w>} /k~G>C.\_WmƻwfwQ"o 9;˗/`ooo4}EEE,Zf=zF7;?w-[4h* WWWzE$1p:|<<<?ĉ9r///-Z$^.ٳgի* GGG<==ٳg+9(++3Z!ׯ_ۛdBBB8z(7o ==y䄳YЗ_~ #xg%Ǐǘ1c  %%lسg!!!dggbtbϞ=?iZ[[[t:jʕ/>bjr5U?ȗ@HH4PࡇfEJJJ]{/|AccGi-n|vI~rvFL?rqF/3t5Fw4j5iiiԴ;BKzz:=888[oſ/|Jw}ͦ;;;?`kk+M-9s+WS椪 Jw.'''UV1l0"##`j` t]͘1ԓpsΝ;ill-˵_q';v F=L_EI :樿IMM%,,LZtٕӖJN;g.ۑJcgϞ򙹛~^Ϸ JKK^Knܸ!>}~~4TAIgΜ11=@QoŅJ._lTUUfc8t6mbȑ,[`_3ؒ]Won𠠠r @yyt] r/~MՏRkBBBAٽ z&88Mrw޽Yr 'j|v5_i9Mښ&nܸ.SOQ^^?QуZ_Nss}ѼW"C !::j8y$駟j),,d֬Y̚52w\j԰w^"## ;G4Qo7npsycc4U4j()7z*:sJCC.]>P޽lܸѣG|V!y}=>sHMM5.JhZ=z4UKSpY.\T(ɓ2~{a_NNNN|WmƔ+yʕ+ceeEhhhЏ#'N㏶+G IDAT?ܑ|N6w;wU -olooRS~iJJJx衇!u͛yyghjjۛs {ҥKYr%}e̙,\_|+W8;;3rH>c?C*Nh;:233Oѣ'NdΜ9ѽ{w2331c...L:l9s&:Cƣ>jԎ4 c.dddpB"-- ggg5k'NHjj*%%%466FXX???jjjPՄʂ !_},rT(O?ZֶSu[:?c7ń}v/^|#L{j`ժU=EnG_Iq'L`…lڴ 6H\c 6 OOOJJJZm2=z4>}h"%;w..]"&&CޗL" `xan2ռ4{}|ě@Е)))a@ZZOe@nx&}Ɔx@qǏ1(V.^ >.}h @ xyyuNG}D]]4vR8Iw@-͍yqu|||u}JEii;Z?z~W+7qD,Y $&&RVVƛoyWFw|_}1117m6bbbի~~~&۷E H[<<9r$Æ Swޡ+WJbŊNoZYSSo?8SN"ݻwgp%233[[[L"u2ͩjddtwwݽ݊" %KPYYot:)*wڵLnݰDDD@TTr |/|}oeeNn~ GLMF`` ˗/liFk=z4NNNKӧO1?>̙3C)9ڿ[غu+n:͖_ Ύ:rmQZ%lXj~jkkٰa ..{ 6P[[ [YYLDڵkÇqpp 66W_} _~tՎ; )) &L/Yf GFÅ ĉ̝;KU1x{{ev믿7GܹsӇ^xY$h4,^f{Ƽ/|k׮eÆ T*ژ1c4~~G>C.\_Wmƻk_72U%'++ )S(*_Vo[t$%%/ʵ`` 7nܠ_~?ufjɷ{nOdd$666]ş?зo_^~ebcc jߦWvTE'Ma֭ذzjz!c֭+** 6;ؿ?ܲe  BRJ=XhG ''t:l׿ŋ_"^.ٳgի* GGG<==ٳg+9(++kbFŨQ۟@HHVʁسgǏ'''G {9sFrAcc@*r򥤤MXX{!$$lRRR̢z!())1~LڏǏǘ1c RT~zz: gggNwȑlڴbccqss#>>>,~r}1g}VJ_WW-:NHٷEi<273:hjҤiwww<<<ѣps3w^ٿ?==7n;;; &+9"G9::JضBǎCbگ[cƌrtt2#"">|8IK*!'Z 88;;;BBB4~;ƢE`ҤI\~"T7''UV1l0"##r `8z7'ښ~If TC߹V\\~عs'ۛžM/J/vt]Uhn;+FOWTTPZZz7nܐ>ﭻO}Xf?"~/]C ʕ+B~~> }ڷYisQ/{|ݻwGqq1N8!gEEX~ccc$''իW022«WҰoI :uNi=ikk0~555HLL2228z(xxx0077ÇQ]]믿ŋ?zH PMJJbA qnܸk8-- =zŒ 8p0kTuM\~Ee Cii)̘1C CXꦛN<?~\`MMM\zU~$9>}۷oñj* =<7o:h`ddd"??B/_VѣG?b֭"xׯ_1ϟhѩS':99HKKA>}0sL̞=0|z aaa-~PUUccc_q/ a8qݻwǔ)S!xyya߾}XtLCGr޽{].gΜr.iڴiPVVF\\̙--+Oo>f]>/^,SV~IOXΝ B.]'N@7Ĉ(--ELL f̘mmm,ZHWbߒQ\mKŋK.x"?MMM8;;lmRo/+Ey>.P BSQ"YY@EUJJJ"˽pK@N}9وػ}~BP( "@B4P((4ФP( B-T!( BPW&BP( E&zЧ) Bt4rƖhR( BPhYGAALo/2ܾ}prrjlZZfPׯQr<55GŞ={OBCP%صk:<۶mCagg/_6cdd|۷@PJ{ٳHNNFUUw FFF˯Bdd$_ &MԩSNPweffHKKCyy9v~a޼y011*U5Qi*5k:w,|Y_;wp1dffBMM prrjiD9s={111(((6\\\oЋN%.]Q^^?fz? 6눊 ;9so8~)6o,R~x̾|1L8˖-n޼-[ 55X~xx8cƌ8q݋.]>y{1믿i&舔Gqq1akk#008|'Ekkk ~ڙ999aPUUE\\~lYFb.OJJ"228tTOs'իǸqW_aGn0bJ[gTVVHHHhenR||ٳg3w8|0~XZZ2wM:ƱcQx5FSSSO BWWWm޼#F@ݡUUU@^xUV5:B7o8;;CUUSL+L2tزe |r7z !ǎ̜9S${fWPP!ЧOyyyXle˖6q?#ö֟<á 555f$R/˻'N BKK XdTOs'8;;spvv/,P{n<v킫+\]]k.xa92228ܽ{ ,;J={;w";;Wݻn:rFx888`˖- ::cǎVVVŽ;ܺu ϟ?G޽1f/۶mC`` oȑYͱo>ddd`ҥo8xE/i~yak-O>ݻ#GĴiӤ._G̍ıcꊄJ݆k?I_YY ԩ!̌C]Zo{m˗}p9bxnݺI&I&g2q,&`=rFÆaС2d(; hK4cbbp fjZWWPWWv1zӈŹs0l09k׮Ŕ)S`oo/_XGёq>٫:w9sojŋ4ne˖Ǐ̙3%"S`-ACC ?ȀXkbbbӧOGΝʴ(F]Y544k7fffPQQbF ϟ?/|I˻_kw5_| |||D^+(|Y_^=3ydtԉZMԨpjjj"S(еkW&*))9TVVƪUHUPVCi\u%orjPTV#L򐙙dx<%Fll,.\p >OMM,x_WϺ۶mÛ7oe`:(Qի/^ZZZGAA ![T]ѵkWL$]ę6f~yq'+.]C ʕ+EǾeU!=zB,Jk?Iolldz FFFx_t EEEE(//WGyy9x<|>???uľ",, _FMM 燌s8z(xxxĄؿ[l۶`UXG1aruӉuA  QUUJ8p0|po_zjR!"" 1cs}ݛ7okf8ܸq7nfDG?~XrCO<?~\`0 7od^wU`ddd"??D~鯵h+;}4oߎÇcժUbȗu]q}0K}˗a'yll,uitY}QYGɤL?5jTUUQYYJ<ۃ ,)s!EPPttt0w\x{{3W^3f`MtrrǑ>}`̙={6 ҥK[%###xyy X~=s16m9s@KK981m8VrQ'%{jt­[7mY9وػ}~BP( "(SP(w >–Ϡ BP'B5I BP(4ФP( Bל:~QiIP( Bi3f5ԹЧ) BP(2]29ү@Z,˺|u/ܼ#ohOo ~fرcGӥ'$'[N?'ΞsiS穩ׯ uVDFFJӅT? 2e ,X555ӥͦs>;v7nRSS555a``> ՝X[[uw_044Đ!C*@yy9`mm CCC8::_~f!5׿ozz: $єְ?iMs]>X|9>cbȑ8}twή KPZhnذׯ_GTTLLLp1̙3GMM N> mmm}PPP۷cѢEؿ?rq9YYY \]]\~}4!_t;1cȕ~9˫5w~QiҐV!-Y3WӱsNL:n4i.^ӧ(Bi=u^B K͛7dʊYf6M!$==1 !B166&eeeLZII d~ O!G&aaadĄ4(#",y֯_O͛'V ƄBLMMIQQ@zAAqvv;[R<lܸX[[ccc_R&333biiIv-bȞ={%133#>>>R,9r=;;;-5t>|8r2-[Kc_-/ֿ9u:t(122"ŋR[R ӏV& mz> <._[" z;BN.$_$!{/eݿ >%?fc2OHdߞyi2~|p?,"bOcڴiPUUşaŊhbaԩ:u*ˡ022©SP]] 6 ???Y/,?AFFHI51c f$+W 66۶m.^ذYV~}$$\pIII֭6loڴ uqmݻwqUܺu ؼyȲpOHOOǩSQxX~=[ٷE?$ڵkPSSèQ`hh Yz$/X,8BiU &˖-W]]M !|g$>>B32e |27n!(KX,155%W\%,JJ $555BL"rǓBHnn.!7oޔU\\"B/_NINNx$33xzz}}}X%oggG={&0beejk_% ŋd"tpp L䏈 si+M?qKڣh*f6C!̾_D{sRG<==IFFr$;;xyy+VՈi]EI#ь'*C]] +++ӧsaذaشiL|شi׭ttt*UGpttDTT Xd ͛ds\[8x LLLѣ`ll OOO;=z+M!W^aСmؠI/,,sf+bP+333-/joئ+K$?iW[p]011AuuC}ڿHj_:6o (++COO8w\˗/ѻwS(؁f^^233ip.]8X̚5 Ö-[Ν;cƌxI霦o_mdaa?x@(WVVfy&BBB<(ϟO<[[[&K.ذa߿,\rUUUptt!|<~Xrrrtmmm 8Ti/򵵵 ӛ=F a]IO՚|Wpwwǽ{fFk}oYIKiyk;wں\ ׯQSSD!##`iiG )))LLLgϢ999ǧ~* HJJjС$y养;QVV.,YnnnLV_N< &`ر8tz)xb}ZlY&Lv>{,ƎtaHI_%kF{z6!44˅,XAAAܹs عs'zjhjjb asДٳT|c֬Ye˖xB[ b̘1DVVzGGG:u FFFr!ۺmi?44...˃9S'Xj֬YAAUUK.kZKưar1yd\RdPUUŲeSݻ] 455[ݡȺD/ c۶m ‚ 8qBj!̾_di_̙3QZZs";;8q";hgffݻM>+,Bimz{](.j|X\l _H5EG{Bi 8K.mQoOP$9"0مz&Ci%ۿ TF'ܺuۖ}99وػ}~BP(a_Zj/ "4ФP(BBP:jn"w4ФP( B72F2j QK'謢BN/hIP( s2KM BP(1*Dw;cz) BP( BP(hQPP /^y/iOi[]\?;' 4eJjjjߤHlݺ-~RNm-BS~OBi@cǎ!ƍT&:t( 1qDP6b?tP=zErrrr`mmYzz: 26;6%li1?˗?!FӧOK*Q>i]{ퟢ'IڿȚ( <2dO#f!‚Fq "}INN&$**L<BH\\$-Y͞=DFF%mGYOrIbYʗ5'O$cƌ!T2j(K'd}y`^t<y{WNDۋ(| Yz5"FFFd֬YfBIOO'fffoB!FFFB&NHnܸUUU}}}淰2zhFNLLLHHHHRcs,YE@whJ{DXl>}޽{ \'Mb,Zl6Xti;"I;ٻKB:{l 55|>Ƙ5k<==Eʿl2yyy077r9s&JKK1w\dggCSS'Nw}'|Q/00>>>rqh%5gmmaÆbXreٷOY._Eָ… zE6 KHp5).6/P#tuuWW( OQ"YY@EUJJJ"˹pK@N}9وػ}~BP( "@B4 ' 4) BP(4ФP( B@BP( B&BP(  BP(h5Rykґ?5Iu/^ymoy-wG?B 7i)ya֭СC2( "װs_|>v¡C~a۶m($6ݻ===,^VwSwRHMMݚV^^u… x )o 7iգOOOǠA.BTTPYY ]]]L4 >>>PSSksg%kji?m]?i؇, <۶mõkPXX>+Vg$m߼<ʕ+())A=0j(|ӧOwmS^jBAgJKq 47l؀ׯ#** &&&8vq "E!,, ߿?>|///&Lh80fY{YLܹs۷/ J2j9.?$$g?>}۷oǢE6wTa_⶝}ҿ<{ իtܹS*pB|ǸtzBc…8sLooocΜ9C |>|>ȿ|>ᣦA,"RTXv`^.o޼!W&VVVȈ̚5lB!̌M!555ȈBHrr2ω4ht钀la !d$,, >edXbqquu%ϟw92cƌFt>|8r"gXdϞ=ҒRYY-ȑ#dАّh&Ԕ _PP@Eƍ5166&_~%)--uTVV___bffF,--ݻdJ*_~$_gw7iisTTTcccSСCquu%/^hQ=Z(՜Z?58k}Hٗ79pDGkll@^ee%111PpȡCȬY"f""U ?o@a%TWWJRQ^NJKIפ ?%/eN6yE^<F7k2~|p?,"b? T^^iӦAUU'RRR`gg+VSbԩ(// GZZ֬Y+W  ##وCddTRRR >lp,Ucܽ{W^ŭ[PQQ͛7KQQQ8p~'ԩS}6Eņ͞&P$%%… HJJBnݰaclllsss̘1Clشiq- ]GRl67ŋ1x`˗qa̘1[nX}iOI'#m}HJsu5aԨQ044Ā*h߉'"$$GHHZ~(qG4ɲeUWWB!}'LLB._Lƍ mp'),JJ $555BԢ|]]]R[[K!dʕ(^c#""Ȝ9sľ? 2`888&ӗ/_NINNx$33xzz}}}ّgϞ XYY5zlyy9?,|[[[dee5Ivȯ#..XYYFӫ͒0GOa:u~ڇ4FU޵/===I222%ˋXB.͛7d„ 3&LUPE%,p\o>^h~Gr?y,:dg h>N{DEF=)vigg9!SK_5ٰaadѢE‚Em.?!?~\(/\@ݥ~}EEEIOOx<.R-LNTTT5kb``@FI;FEn6˗B$zzzsHҒ/L?oI۵D>!AAAO>!c߹sL:49}/KG.̾ZOa:u?>$mcaGmaff&_@Kx<%/Pd,@sȑrh~v'+yM<~L򐙙L muOxGnn.˗/-X,7ޥKlذGVV\*8::$_GG?hf(++pX[[~!|aT~KW'O-W_Ǐ[uD}D-?OI'#h>$E}59Bܴo||<%%%`ոzjEpʕ+W侌;w5F7~<,--eKy4mmmׯ_CFFGEUURRRO~ !!!\~_kkk-~֭CRR\.n:ח#..-:Gpp0dv IDATQRR`$E}O>Emm-l6֬Y &E~Gشi^z>}UE/#IdD$!ž"""Ȑ!C>$~~~\.7''x{{KKKK,--5ERִrsr]^Ӗe7_$Un:WXEBw@4.6/{2e BSG`T&90ǪkP[[+{4|>>5zvN6"m:P( BHp8BAAAq4ФP( DhBAEY)bI}1KM BP(q'a //Ϟ=øs"h+P( Bt@X}Y2o\ٳmX%%%`eIh_,JP( BxHr9BP( E&@BP( BM BP( 4) BP(4ФP( BP2UBP(J;p8p\V9"UTЩS'hR( BtT*Ôd|JJJٳ',ojA&BP(JG ?w܆%l s*(( oݻf7@CBP(Ijj EE?zOqu͝G͎BeUd|S<{*BE"={% Dj _43o' e.m` E t0磰PQR Z**(,,)f; #G|I#?^o()P(WL8^/ұ@?)Pk6;W`q7h }PueTPTV@s 4N1Œ*B'(#03ʊJ~ors k0nhR(-#m>^s- 4AYCQQ܍|z,mT = $&si'jtBipĄ$&& ҔEjmjkkt9B`uFM B>!D0?a&&68BP@7V/m)J!|Gbb"va5prrw$l+ m##5^h5 _Vh"t8{ UBAo"j vAWBQIC1uEE),--Ŧ͛qy|]br >ڋ %P(AWWq'f3N188Ν (((H%+ uN2͝n(J{]_o*]CCiii˗/c׮]HLLD.]0|p|S\\q˗EMw!t,Щ*jo*z]Ĭă̢ڵ`hh%%%ԩ8s&kzi Gxw9004B&]6w{7)]ɭpdRyعS w}s ~ǂ Q^^?1qt`;` :,RZ}Q(+ѧO_.n_~ٿB/ #GBrJ ֜曕8zT0@>r(f%5J"** .d?~&L@nеkW|Hׇ ==?[#\.Ï>)vIo>!X( f0*tQ"]C=M脗$: [#E 4۷oAzTwQa;“iHK{SSS] n]\rMyar7oDQaK]-_Xm۶~R\iйsgc^ Uqg;"Q(O<5?ZzWׯ_ifˤ57@tt4N~{sǎƍH( bذaرcG:~8`ZJDFFQ`ur&7.,BXy=F+x/_gXAƛj@[;>BHzYHp&*WR {0+||3hkki"VDݛw5Ν;#`Z8f%ދȅ=q$ΞE^m`r9r>r' ֿ/J0lˡW(*,~޾^NS(mUTT@]]ٯ 淤M`:"ue zXd17TUUƏGrr2bN B n׵x ;!00PptGxx8zBll,Bqq1Nh>a_q:Æ "ƘoߣwY&~Oć, l^0՘7X>P@.P]ś _`t> !RX B222+, =MZQYY 7ugmhh(_Xzc _uk6o44C?n4 #_|.0h6plizc_[ +Y]7._lE>aÑG06/*PũE\XI= 033`ܼyc{zb?{*# ۻwox]QO>HI~L00`9rOaMgͥQ(~!#75Q[[+&ϸ )ȑ8x`?wٳg@(EEFΝ;xfjhh c̨gaA>}%}Qл+壷nd[TV@YI\ PQmLqӱ(((@mm-l6֭'_d |ܹ:u/+|Gŏ7+d;r78CЗ&QQc,^c>Bގkogd?H.~jhv[ uCJo˗a\\AO_~&י&Ly󀾁!awn(HB9s#Gȑ#ٳgK- =-p9z4sh67Y釅 bSiǍ̙3Ϗ0qD,Y&&&6mLLL?cx{{7رXhLLL0vX`n^#e+f>b$~ tDXO/Lѳ{ qJ+NƌǨvS]AOKG4z{](.*=FN)+-%3ao֝*B[6/yrr2fngh1m=+++&y#W`Gv|]==ڸ{E!CEE((6V;bY[[ x^̇^䕢OS*Ja όy5>_7vN6"P(}D|{裰H&B+ ֔G-zlWn+];!77*x+[Q(ayg%= ###;EES 4H&ڷAfmm-@xX0Zyq8覮Dn+\Vz&B ;W. eei UQRVCYZ>!]TqL$eoڇ T4l'(+)OLt;p%%FB$UQRR @&BeeF|\IfS0&p$Щv"t#UUJK..V/ |BtHP/d[ ֦wxTU̝I!H߂])b+"(JD P]BYQwu]DIzI#L@H<}[f9}s.)Vbno6$=^-|-ج6Dh7W^[6sǟwZݷG EW+T/C[(ZID0Ȉg?f7Й +(pkϞDEESVZbAtt }իɩ/pJXxu~3+{'/7?4J%Ѽθ{өǢL!VQQv,fsݩ{ӪMڶ @?xV+m(/uhT4ڵԸUB!hd nns{;غy3W|̶(ҳDE85@M!BFÝf͛ߪU]qh !B4Ba̶B!h !BI4B!$B!BH)B! 9\!1RUf3ũVE;}+OI4B!r23ٻg7yyyWE! Ķ툎n;J)Bq=[ILH]h+rn݂>>TqJI4k=.Q} I,B`6ٹ};ڵNwUMe {HEYy9GbdgeKᤰpU$a!BH<v;$$$WtuzrU^[ӓTb+f#`1`5j4KYO4ũem6bB xpl64Z-h5hv$l旟w$:w*"%p'BҢE<:† 4dhڱH,BAEЎHHvN&<"B CK j5V+:a02*[(@5~h1Ff!2!.= W ĪJBb"tNX ăkdrgғ$Bq]ULRSs]>|>wŶԋBH?99Yf0f<==INN櫯VKa !QŃʓ*:ygkSXVb7#1{oiϩD ?OBDFFV23q|h4 Ɣ)Sh45MZZZm=j :a1d* !.jһwoxp WXyUJMmqs3`WUp9|ykK!W?єRQ_%Ki&֮] IIIaȐ!ծrIj~;(jۺ3m`޼y&ޜ38EIݎV!ߋM 2eB? o|B7AϞ{ 'Ǎ#*:V۰`Zwq}&Md/mWf6W^I˖f9sƱ7:tS{=!VX)S %44)SbŊjX,|nj1%]=W[\yI,]rAg$_q]-ñ'28~__m6Ap{g{ٹk?9xSiKIi99Eey͚Wdz?>'`o8jtR]-~wwwNCNoϙכ+:d ZBKrm̝ANI 󉊊❷>=>]v9ڵ-[^… y'\҃aٜ\uʞ{Yd)'"=*_ѨijOMm9--~8JQWł+=?~n" kY9㩧bcQZ(-4; ߟS/( ??^xM&ns &LX}&LcǰZ>7xĈ߿m6S@NB?999k1p`S?#tMس8vztP[\)++c̘1|"7o.=8&I ;v,iiiXV?΄ HJJr-gffV=wbuu=sS'++ӧOԩ1k^xe=mDbcQQv,VGnt,[z?>]00(Y/<~~o߁{=nuԩDGp=ҥszm0~Stڅ~QH{c]<#D4a,zS:Cqt΃>HΝٳ'={k׮ < ,`ر.8:A.MY4CtyY[\yvdFAn4y|yDѷo_|I7oNi޼9fri[k {Cѕuu'M">֓nDTds=Τ bdR~tڎĄU&U@:s{ϛ 02_+=/GS3nhuSX/-*).fd"@ya1U"߽{7 e <)xXt m۶uR|!$4x,e ݻwG(h5Z4Ǻ=6ʇ>ƱB;Q1Q)fW FSqc$DxOnsڵ<3yJe·-(׿/dHʒOy`&'$&&'S!*~jjsXSZݎjc@W~Nn^A~>`/g ۾ Z !Yt)M6ew*>t.xp5gj8L^'nfL2m6V &/'ٌр232y_,u41`/ t:EgӡU4Z-ݎNof F3ovbrx|=h4\niHH(.aR0(Jϫ( xРُ hTƤPU:"531 -(*\9thZɮ%ŕN:BH<&<7^ӟXW]sph6z{w~Z4_WB4_ufӟ0A xpLq<5uTI41MW"''r NatƊ={MYi!$4x{Y;yAW".uÝVmж}Z ***pssszyݎln;BH<8?F3GU>"f#* *LRBwrQb*=-AAXf =\dS`ƭa!BFFӡ l*N߆R'VAEî];qN[M!BFFhX87SPXpl+B`@ ={ATtSC $B!h=iּ9Z_1*B!D#lM!B!B!DS!BH)B!$B! Ul6cX}kzݦNb$ZYy9GbdgeKᤰpU$;J,BAh dffnDG\ إ,'LԲ6Ç燏 x$ef33$ѹkW)!.3=Z-i6lXϠ!CԎEb$.g9y2) !.qV3j]#((op xH56MB\rrޔJBb"tl6BH>>0~x:X,Ӻ&gj>;KS.Hҗ쳓K$Y))) HPPlݺxq5A̓9 +_X,LMN&eKb{I [ocN֬ipwwgUٰa79|$&L7{ٱc;?͛6;9ߙm !Ю];vڱ~y睼P\\… ;^=K4kEٳgªU_Xls̖/5駟W3̙=vlOeOX~}^]ʺ.Otrg/ <ۘ;u2s_| c_|_EP` 3g·}WֶT!UZZht<6:=ƌs=̛7(V^5`|rӟ}^XT[|4 |_ݧwU_ݷߢK$D5/̒%KW3jM>]v9ڵ-[:=͌?ʘ͛7;~M=6Iu늏{eɒ8z|իy'СCyuŋBBB8q;BCC9~$zG0a"Gjo>bߏ(((Ss`oud !￟^{rrrx8pY`3|Zj5Yc,Kc.|jeee3>XDRRd2ɗH/^̙3Y|9۷mmjƃ3uj2 /+_4}Nc%>?)vB~aQ$Mr xkߞ7LNQz'uǝ8 Hҥ)Uv"K0t.O4kN̈#ޭPZ޽8p &O/C9^Osdffҳg*<7.xq5 /<wps'M">֓nDTduQqcG}‚<mJY0m&<3Ȩ()!as9r ee;ݻw3hP&NX7zeKжm[z~,ŧOK,BA ]fF:.^0.ԩ:u\_o߾RCB9#11%27k7 eɧ$&&GS!A$11t҅N7uחLBnruYt)M6eҥTd"kobԨ5RjCqz0,Xt !$(uS]*ĥYPUUEQBH!rtI$~ۼyGEancU>wss#& A歷}Ll$jBsmEӛ$mM?I4멠 !#369|.[^^΢co{ '"88D T^X-_bDqs+0AN wd#11.<*_Fz)4@bBF2;[ B9KF !\T/{(MHYn!z/YJhq1Wfb;vx+UU8 l+(Mw{pRlj;&(0{r/L1+--ed /; iTaMA ^ŠfHhp1QNh<< 7qQݟ?[M^:^p!V{M!Dfh;[P~SR3<17 |-;+055w. Q-(snFd}eds7rc[L1i/M 22(9~(11M׭R@6m<ݛ\V+V݊V% *lFC)(,}C{4'O'g$#3jP:|йF!&&:^M!D;#'t5ef_(-ZvI &#"ukiiN_`/sDcU |:Vۼ?vs6!33ȨHh4%OG2iDEFEVV&aa8p;Ժ4YngΜm۶L<!:۝6BAxwN1q<+?n=BDx0McB),Ů4o^b:~{yyѹsg~mڴi{۳g}ܵ 77wLr6R:<rwXZvE,wiOիۛ[n'|^z5rCB0 S;GnED`r5r8+-[ЬsgFch&6_ѵlfnl$<.ENA S.:Sa2jl]t8ddT&'sri&elݺ[o =F]hׯ?@kS`22&>N=;a|i#Ƌ/HDD>>> :j̛7H|}}>|8F#Ӓ_&+;鄄CLL ZE4iBn^.!!!HO'+;i/cVt3f`ҤI5@ܹ3˗/vyX600ѣGc2[ڷo'qqq|ǗTגjEIֶaDxvr̃=0Wda)n͆C羾<3۷ϩ2;ЬY3 S\[,^8<==ԩ;wlm" ??@=mAxu7fEˏ6܀E]k2gx`~~߷y(///nrss),,$<<*,,,$22k$B48vԘqy 43Ћ {ﱳEʘ1}W_%55-[;?|˯_۷sArssyu=xzz2-eOrq#,< dgdZxzzֺK/;}HOOgڴi>(ӦMM6]r]+nn: ti qXW..3 vjN-CyWK zNg>}yѾ}{bT=g˖-lٲT9VG֭cݺuq2zyԩSxzVKghsLl+ĖSe*l,^m4& / Bݻ3f6mDyyy{ᩧ"++L4iߟ>} I4 NII VEr<8!Ck\'>)aA(VEUU=k크n:7yf٬ZoBHHo&˖-kuq.*sVúQ[,XHF#'Ndǎ 0&[kSy9/\fm4Cx~I|݆\VÃ*_r%11157oĉRڵo|}}9s&=O=-r/t^IDATZ,^_ ' !\jDFFShV9[GsfŇKKT˱|ff& 'MDDqDD8'O[=TTlh-6fbb٨09^j]\xANN%ꫯ1}t|}}y۷QVa磗Y?RsyY45~UUc;[vIq*յXVSZ.#W9'b`* eLq%36"j8uH^_Xy?<6%M{1w_ifs.JKKsfMiժ+Vrҥ aa״-HeT50j5;ؤ-%DTVCyy^^^:yaaa83gJSIIq;v㄄\7d3g0kL4iBDD%%FF#%%DӤIf͞ə3g^Ϟ=ϝ>A$$$J=z찊7p+V,c̛7't5z()2zPOPy{0i0aݠCnУ(9R=O5%@fM裏x k;^S۩kQu۫}^PXX@pP(‚||}q3aKrBK;9_~nUh *&*** բE ^56lx~ذa5PRRLvvVxb,.{2~SW-@Bj$pW9,+/IlK3P{:'3fxMD4zɉ?Ƹq8r={ÏԘh>cήK2gϙEppaaMFF&x(,, ,, fϙUg oSXXd_e-3idrsseҤIwGy}a6QUt5z77U?1m0wukݷ_x5e;)}Esu8˿>N]ۨFPTT@P` &R3OLTS"W|.MVی<)**Tad*'0 *.>3rrrZK/qM79)// cxqUʪW^h^kI4Gf-ǣSϘ܇7Ű_nrf_h3Daym܃79>e23˰Y/)ќ0a]v#)nBBByǹkL4uJ]h&^|FۣYZZʜWgGHHExyys O'0(,*$$$?:W_G۶툈dg0`@嚜LHHڵ]3uT}2dPBCHN~>k0 L(Z 鹧8pjdh!c$*=|i{um:j,=YRZVs. i>8Z܉^o 7$Y6JOVV{3nAy睔Xw2e󄆆q]}ڵEe5v&O\7JgA3nhuSX/{I!%1WTb2F8R6-nwꄟɄ=/mFdi{oٟqV{Bwh8׳q.-A m-__?N>uE_㓿~ğ|;gO%]v=,Z>N&**b|}}T)|bZ-Ǜ0!;$F#F]w?{N(KC8}$.җ Hbl0aAި-|E)L^PqʸE{b*,$gO`۱=Bܹ~A¶uk՚no۩SEz8s iΎ"=="}1TD|?+VpJΔ̶m`4L_J7>ZF6a[{6qń`?2NՂ w\\Hߛ.zz*+TTv;wr<۬%m{ۅ$BO, h{/f99؏tv\ + Mhq&^~#FD,噎UTTxŒƆh^{232 '##SEx`࠳4Th4( deXf"##$482Z-8.L72!#څ pG}ʄb# O ]JY3&J4תq):)oNUnPpls?` WLju%•!2_G$E{oK4u`Ǎ:}nwF O_H]hx8ڶAy.EW5F=EfWٹs'aaR.b=ѩA^ݤ=4 pm롤mۤGSqBXxm۶eTOvleqyE׏Dqq٨ 7*ltЂa]MG-$[CCoR $B^'66HV*eFNóecC2F4*ņ Ms  z!FUC#iR׾$BWNN.}m"P/RE TiD}R)!B!B!DS!B9hffKi!Bь;ZIB!.#jNIENDB`KCemu-0.5.1/doc/window-screenshot.png0000644001050700006200000006410111340261610017136 0ustar glaubitzfbedvPNG  IHDRZksRGBbKGD pHYs+ IDATxw|WF^2[  8DD("EP%R(eB颓BgФQz$WwSN_v"Q%cB4Y#)U9k6DQ˲2A7%⌧R [U*U% X+CDQ4\rf>?DD@ecZ>c_.JU݌|g+~e<#"#v!2sp0MԶk 7Ѭ}_ *nl8ntf9>vof(}=iy877!~>qr*߃="6Z;7@Y2Z1Wr߳N+{wЯ}\ՄC0B|JU]_-TЉVNĬ ojv^i Z5 t99q :ayX;q j"tSZ6R[kHɇ^ <<<Х]=x ` F+>'T9ewJ͵}!I ծvKm :J0ܲ+lkrsaP ƞ2u?$h+- SzPE"9&t[TuKؑkVPV#+'|yFݓ﷣}*sE's=/VI!Vxvevg}:\*:/&?`UݭK"/t@_o]w>?-鸭W~`>>"2Zjz(U @ӈ;;< hKIpF!7Qz!Gi\nʴU2<Σx(k !}[hYξ,j Sz ^}D=V!vYOrbr:8ښw逷F 5Iz+!"f7`\4onrkBdZE!9|&nI@A]*=!Xpªxvf/= fX5%~Ƽ}s%gH֊h.ÒWؙTKD-$!*n K!Y<C=xĔ[hh_"ɮ4#" ^bjLj1o"M7DJV Q^(yb%aqi!ݕ~!;c e~PxDInvlT^۽Qؕ;}6iz/^/ kdu~ SHU-U2{P%\ 1IRr.fO ~ :qyﶸv Q8{@v uZ̩XbKyB4뾎m _ulk3ظQ8s n!>Ccߡ1DA[vǔPrcO8 (vpxAi)' }*ZF3 gO.!ϾB[3QjP[!D .JAIbD5Bʱ6۸ :bo lc{}q6{zfݝΙ_qV>{ڕҞv%o3 W,H(ѴnZ?SWE% mSCl. Nі^ 5M{=v<.%Jv%o*"83-6v/f*> 5X:)N ;U=ZԯZ*?7v>Xx) u(EzZE6R3EzT?"^s'С}2NP'ˡisP*\I;9RV>J&2P(!PqS,~J٩hh9KYb\ h,"Bj~0 L슑 KZ .4󐣾|(jt,^eŽ,NEWz󞤣#${J&ti-LmSF`k߶v6iJYI]_K̵[幙rOk'1dC$dn\firH_38wyj-FQ'_NoH$=p@Txyøz鼤/_sj*8QL&Øވ;;h,__ X6!Qȸ~ )))g B|+ 0clsѮHY\ħ& 7R2pRF2\RX{`ZP\>{{w\9x^AaPɀt]ͼV-o+EDә/AR4vKBmhۺe^[.ixAIg+v,JjEB~ |ҧちcFf`3 to!üHJFG`=fۥ>_jp5! w`}d޾`3bnZXI<2 #C9sq}yt/Raw E8qؿ<4hnUv@uim\ug;+6[y䞵ժQPZ1R)ШQ!~-lmN $ B# ɯC:pzrz\2E?̤"Ɲ^A`߮Bݍ<g2=IUilEw55̝S ;W{}O]7;oBD.UӾ+C7h:EU] w.>%"{ nJvC0Z&ժZpSѽ P ?DDX7(((@Hx/(B@B += (BB@Pdr<==P!?7IШ58s,Μ?p8tN/Nnv/rl^zb :hPm=^,3 QW.^Q',AF< f>mQ',˃#p(DeJ(r1og4MwL1f@O4_Ah&]y ôqCТi#!ik<<~{0}M<-sx8wwԩ_!!sWq$^MDA~ro"z2nJxy{!v'C]ƍ8s ƞ^Gmڨ۠.<<=DZ~ggL?t]bޅl ޣL{{^Q_qSeFDHNI+ F @`-D'9̴Lԋ1!J%V' ،6sםLǧᾎ:Q38{Ɲ[qBd29fxo*K׹N.jd+_OA[{ G\p&Qer2ӓ^s9r*Eu )<?gh/")[C~0>}RcD⋴r%ͬS7HH: #"ٿ0Mww$%$1rnfrփ=Ej\| o :^L-:a8TEu|m{A|r4:z-R`sAg)e2]1c.)Pfخxnt7Е੐oq- Q Gg1O[qT~dĜB 葕| ߿2@p}<SYI :d'ES0j-֧xSBaGDC.c&B"3=܎7Ƚm|JȐxzy?'иycԏDBfZ&\=.Q!;~ف k6ꥫj5lCǝ:Eb:=ewh{geOa[s&:}R5nÑel=sZO/܃[:?'WgOo 1w}럈Ȝ]._ߩ憀*  99~:Zwlj ?7YYH[ FǣI+r6lm'g.\BJF:9jDf-{p<=u܌ ϯ#H U >9ˡ9tb-~{q;_G;#bl?mGpJ@MDSfaB&N?Ь7XzŜE֭"xGT@2p^ Ք,h, '"2^}QVm|Z̹۷n#($~~ȸkIPꐙSd2(ݔpB)UPPf 5)z?jt""nƫo|h4wTQ xz@pd2t:nfDA~T2 rGhHz _{nJG߽DDT-ܻ xq 8z(;ӧpmܾuhK,W. #@. ?oZt0興)CB.ЭK7L&CX<q#:tDD/O28ˊ8q$E>:""b1興tDDD :"""t\DDt/SVQWNno)'jk˦5Awj]~ډZ?7ڽf#""AGDDĠ#""b1興SroG 0aѴM31& IDATǴ<-μ6""Vt._[#Kt=A`iyK/iۑZ7ξDĠJڪTiR=K`+K&ݑ̑ufcGDj/G0ׯMV yG^U=]AwOUsΆ̄ u3cVzWѕ|9:͉M*6Ӷ L7c?XU#_RPK*=G˛tt"[U/ggL?t21lh^s#1ljq=DZ4fkjW-љlgm3ؤSo\,cE/ IkcX1$3 ёhjqjDD:RڦC[śVrHDĠsd,Mf<#c)lttӥqjƟ9;qY;@2X6tW|~9#"<84)1REqxDD JSzto-^#"plUIGDĊRWrTqxDD JrB>.GqQ8:+ZҼGDTyztDDGGV+5k m RYZQYGgfqlqpDDw+:+ד'U|頱*RƱ;n4YqtV%[L"NRșzX~y 1ʽ+./֩kg9W88:ZyTUƱg'u9L3 {*RWGDD :WmQQ1twql̓MWG'( ;G'""Vt. 9S#"bieicl#""ש纴4͙M\tZIgzy=9"qt6Ruf,IDĠ=aDDĠs)褎8 ;""]Lê'""] 9g٪vDDZuQΎ+9R]APfi\1NtwNRϕio!IDD8:3J9R8<""bйz3W t$<>9ufGȞM8Ǝ]JP4W"tAWn!gNJ5fmߚ#Gi#"r=<5WU_\9;MN'""]T|r*0kբ׻QDDqiR*:so`q\+|EODt/8: \57[:O MDĊTJ}=:W _ "b1VHΎsvAwW+9qp!)%Ь/-#"Fiǟ@vV=bw;;OD6b4rךU+WrjZg`[׫DD33M9[ȭmZv""bЕ['2e}칪8Î8XѱC+WGDD :P2w+K=G%J""]̍3̕#"*iRCG1zg),sv4Gga!9;O숈Agwfm4csDD\Vr$Apș;ץaR٪̤.MDD :Wr\X:jґqx 4""8:;Iit+>kAc;KUQ4g_!Lr8kcL9:lAJY N""8:I**{wGDTq]9lֳ'7a2U+7[+:Vr4ݼ)9Ct 9Z]]MY I""b\Rg`5;=;c+yϿ]a#F}wQ4n${&'%bʕG'u),U\R/=Iqt6Y {Gg89Q#U$?AgS|C wSFA3 9Ͻo mڴ JҨM4Ǐs&˴C1wG !ߦ*9kwuc:C^`T]M&8R<ܳ=CV)LyZ%-╯W IETDLզ6&Bb 7{BTVaK?M߷j>zo04m /셭1g;qxg{0?UT.~t3|ˉ|r'ȑkΛj:bޛCS;d>kgE~i{o1ϳtOAP [=Sn*13[%G?89kرļ=sv]8-Y<:܇r NM&_]Lyw-cw!n1nQADdXf7?U,73[]~ !nHRnЩ=*oS* MO>3/1x[xj /io9ԇ2r0>@5~[ߝCJa&G0Ԧ5:싨0o~iJ92L:̈́\guYN?mX sF+pH^N[tJ:Ff6ew&Ϡ #ESpsd+|nҖL®>LTSiTs藯Og>/hog_q_=>3m_ҍ,rJ؞])^FӋýv[[Z0|XɏUTTsOOfaEFO~l"3r ifk?M7Տ-_u/L>^=?|*rڄued`sSKaa䛳.G.OE A9OoǰÍz1K+h¼.%R |;/1L:ElB-\ Z]" 8\م: gx| ^i [?AEA(zKL;?-[}Kش/ ԁ-x_W$zKW{+GEpCpxeXp|8y`1k?L|ksam-l6mR4|&Mɒ؟*Ir>:&1g;qxs~ֻۧ#"BCШu,l`mgtWiͩwJ蝘>!4{8>|F2X5f)3ͬI66P|B0tݬ7R2'ǃN! 7}ZdtW?53hӿĔo^1j /DT _aO0 /Q;o[Ŕwb^Rc#l 槑 tΓ@e؆QtHδOO՟_:u.܂igcjD}<_VdYL|{#ǣk[}%ɺ7^mOlm{a#ѩMktQa4ҝlJ92L:̈́\guYN?mX sdqMoi؟*?9|0N/?& Xozf6MPAK~?ŽĞ᜙hwnDwmwl.”`/E^-->JWEEN=WthQPdHDU?95 Qô¼.%rヽs2,Ӻ| b>O#L\>9QfO֡ 67H9Yfj]_w(}i·)*'t{h|+Ū 32 4pV4ǝy>#'bPkJŒg}ݰD2LwMv"6ENzM.bvU.4A9ˀ{]0{ֿ7ʰ앖TA7t3&~ Ne"9;zAdMفW?~#U䒠k8M\^7 "A8"ś5;cz,=Cpt: Ey?AF|9%6,ZEA&,۱FSx¯~mqt$"{2b/h魴/ \=ti)8w 2%ͳqixS D xe|Ӣ\o[؟GWPTq|GiuzLKacz]ccyXo2?}do䇾/(޹~Vd&8u2z ѻ/A被eOpo[)SeOLh٦-NgRgj92'^E/ВZi_ IDAT:W/ $lgswwGNh*Qb9@P@sETWh/Zm#"D؟$dj T-'&!WU@bMBnݰk8,VǎiOMdffѵkwh,Bebb*MvRThҬ9TmV^Y5$W+ѫ7#"Pϳ?QE'7ATt {!AVaȱ?Q'j5ED>AGDDĠ#""b t YzhuQpS~^rv\Ơ+WRpvs)مFQyeB͐ vK[yQ<+]G]CDT4>vD5U 򐑫Ǟ#0Vڱ%W]BR)3л3kJEкW]־U3dBc)QYI "T*7BDdɣpQsm*`9x]ҝZ}UV0r%X9+?GD$廒AWeqn$"]i͛ڵ*Gnưl}tYenU&"$rrn"'&=h sWF-yJ{.'=-[aǟA.W@.W`ǟEVr߬r}GzO#3_&'v}QC>2֞H+G !7ުkF= Z$G~Ka/FObD-v`/, }j5Μ/΂NN/™q|jzx+zCc}|,xALJA:0Xpr w_|I J7j 6 Yhȅ N"B5Ǣ'Ԥc_لW}Y^+X:OɩQ;XޜjvYsjԬ6FkE~~~MQ˿[:uj\!DT% VUm_]|)7-.snj|'ԪU[][uIw6]DT\5%X㈪[;(;[MaQBPZn R$|Ai"bAPPPj":"%!MlGȒMdlw]sew3}{"q>wkZg+|s}dtuh0tAM GY`d\762vpOZCc#sс^CDƭ Y=-7UE5O#)^Oԃ''jse^GA<& kj0EH(}A7R2^dÈT4DtRSB +%L,|HFg'>nb |^|IL&tD,A#&Źn᧓71>Q Ցى :<ɵz A!!K'"^r2B$:"Õ}``)'A ḶQdt1;A*T  R  2:  # 2:  # GAW]^H!q#D*KYDz FHa Cg΁8qt3A4g19JNѾC*?MF#Rqh$OO#,5$RSCFȑTۯ|t0t 3|ш䤛_ ??? )++ OÃ#uуF7o~X,F:̼Ng6#>r:vD"% :!JѾCG%b??ltl 2۴mx:vX*#GB R㐙__?29 NH9GxFAhB.|Fi!X0drAȥ8Ã5Sg&%A@Bg!# /:|fu s`t4HFGA8|Gϧʲl޲ п_2: B8yظ={3gݽڲ:۶oKQX|p*ûK[6 D>ӟ!#h(xoQ5ަ^z!55+cnnnJJJju 0zMzjSX2HzRÏc ot>RۭFMivkP}|M{AԔ[ճ'n 4T dbv&@$'߄Ztx}w#72ADA MMpRRu5!1̜,VY Xd޾<,}";@L %%YYX,b*hrm֥Ry '(s ōKsoE&(ԋc̣SE}~'ѡwѠ3Oc܏6aar`ØDtj uxYAuW;cٷaL2X'EPcYK&r?^G Ln}#'ʳ>C̚ :>ׯT*<???de߆ZFбa΂n =31cT* 8&'&&ڜ =Eu,dױt7Sp~?[rsS9bC\??_2VLKK3Om9&ڍa/ok'1D#\Q6ez n{{EN+6ƌp۷vάW/7>ƅɸx"c|O`nӏ/J\BY=;^ƕM37#+U+7eB@Xddf"9)>>F@` o$'%##31cP(Xktݻw9wXm`n]/70ϐumG{@!0~5v^Q;1m7 ~`1u7G 4?vA,mZsƾm즆T"[$/nQ/7 0PxzUm0/ߺܷC"B!H1[ͤތ кuk:tZhraK{kP*hATƍ~FP8Hq|Gt|Ģn/0oB, 27]º%k/'ӝ l{GЌmU(I5=ZOݖHޙcc"q_@t9<-j?%}Ě vCtR_h{z<>hDd2d2X&(( 6l8h /AA0Yrwf,חB"KND"L&9#66Oft۠ lnc8 {}!I~/Vay6gN&Gb}[O?y |ˣ}`EA\GZ >/!!!jNXAk o/(**Z F$š_%t~xʌsi\g} 4[~~ot1˟/"zu[cWTg53S5I c٠ '$MX3"B:9[4HhhC=\oyzz")) XK`o5!00|`2.<ܬZQ2F,re.Yϕ] 0 `Yϗ-s8qxC,9v=7i+¶/2Իu''V|S)!h7.GVo&#dyT Z33cqhfeL[0/{7>LBGtb\|=zDQQ!J7ܺ|M>fLpXOO?hDppSO!77JҮ+1+ǣP(())N+3Z#h4d2A-FiiiY|wbJPAӡTR=(-աQa71}Y,<mm1`"_gQRbju={Ov !f1"gB̈1axTP*pwrT4ar&h£3LQ(c%Е[ٕYWz &p,ގx^pß{OX (aya(Jbi$ \]]P( Jt:d..8~80dpuq\.0·R''YmT*EDD6|Zϕ͸r\E) ¾&AD< tç6a2́Xl~vA-eyF`Zmß\!s iPQB8]]nn}̇$j 999mwq\-6^dO~rk88v(۷Z,F]q̰xwC~OHgFtF&cp\\-nA4s00^0 ּL,#008{&#GRKD*wxeѡCGso?>MD3[8FGRiA!0 rU$b I!+>2z@CS"h0b1ux\shAќ!#          A͙*OF|e hӥf{% R*  #       7, e5DD"0 D I3Ҍ H3Fg2 .@GYm!7 k T Ҍ4#H3Lf~deeSxx`nXLm`F#o XPuUH3Ҍ H3;cYM He Ǟy _drvd4seSڷT3k'$5&=O\*<0\f-rD7X00L-w˶B`Boo~q('fDsnǰH0sQt E\'7}6 B~ m;ٜ}Wp0:rw쎉c% vWDp,a&]Z7V|]:K[T\.HgX1G;(]]ߦ;kThY.Ů㙂{w0wGx]צ;>P!ڕS[e$ ~{ JObe cPE၎[V< ѫ}\ej |TW4fuQ"_BAؾ7<^+= yژYCBlo\#. R>5_|^e:t o*4Ϸi[]Pp~գXt8ae }bν_jOIDAT?Ue}gĴ"#~b2^;M_#=O A'8B>-2 u}&ö=oǮĹh5nBd}5Ǯ:>_;AG>]S/m75ݜ:k#f/+pHDj [yژ[>X<أ^Ŗ# X9pi4yss-TwYFSLlNVﯴ/b^xdvȿkWhU[J_[6aەoY2j>xz#|!9RyzE]^,1WIm|TEn[m7Ymu/(?/"SHkfaؠhF7g4_ $}q}荬5e\?4{?M^N~FכEmc&KLȹykg )#d||hJ 0L]un4y`dH:lcoE] qR6fu30F$Iӣ`{Q֣m|G0 kT󇿂נzёپsK>WkKM3A !̜éݎ$ٌ܏{qDD2 f=0 YE b (;ck̭М ͻm)sfWvL.}#-vա2aAx*EUh8&.܇5Be6 YExլ.:X6u&38O/+Zڶ'S߳4\Щ@|~#Qsg7oE^nz=>l?5ANhN=*CfhB&Eivp1 x C-&/E,Υ~uBt%;HngMp-|vҌDVG:@[4#*Mm32:ZH̦K4#Ҍdt @[\ 66 ҁ4#Ҍ4ht"ZBNN|}})Lnnk4#Ҍ4z1:]Ir'g+O(Jh# Uhmߪh****+XD01h2E@Da sPV2V9KZMj d'wAbC\{5*J_Q5nys^Cl "ڮXV5SP#ShĀe!u;Bm`#?E(dʔ7|3$s`R0U+kxRR !Us-9,s u7 r q:X`E} @a5@YBAKUO]J)(=cg]H*RmhW6o*"mxC,J+)CO9ՐR>K=ϦIWȝjErJ3󁀂m{"rr[{]hSK`maKCt$| ]~]RTyPe؞6ۺURZ4B4U k*DC >Le*k`U1kJn Bh]6O瘅S?1؅fv`\K|c#o~HpWA @T9p !LӶq0yua9L$ВOPe^U[ D&YHC4tr2c5wo$CL6VUmw*uo.+Qx ֶ@: {c ydo`C@#b1Ă2GV85҂nH::lC G[]tb}k} <&gme&R}nelT/zӧK8]>GBRvS \bz>?v TS ZE)LAl] ֛9ݛ8o&e'<E 5$zˢ.Za.`X@H^#>CJcX'< a%5?5R4K53%h2E|5ًSxܧ'_I`>t^ޗ&*ONE@*Xϯ@BJ.{{mvDgj}'ÇEHPKv{Nxvxӽ^*LAH|b{:`(AuA{V.8Gc$ kw #9H7ؤRk`Hu+>49d =4/ֶ`w$^C{i/2e>]otY?Pix qS | @q1@*-]H;g*Kemݘ1`o)(<vIG"Ρ{ChVÊ42d D4R$)۠VDIX T֞m /ѓ+q^u`:$i,\,Ϲ hL>|D÷} € Lo[|t&t I[SWZ)ȕPWrfz9V=9)ȟ6E2 %\UlOrV3ϑn/0gd'p%H(BBPT_7uakK8F d`~ή'Ux⏫ 0lkSu%6ॄUZPWsb<]LAqM"TCw$ `e+ dzjwsHh:B˿?ATU)P蛃JQ?J?,wM#?;dQJ~< Of t"IysfvYlp&S^9q(7Ea9oddamI⳨r3u5-3E"L=3߹ gҡ;N淚̀oV~I]qPVY ǸTrF("wϖHv)=B#]0 QR+|eSm_ÈgЇ.}޻8T0CEԏ,\iSS%XNj?`LIŰy<4teFj}ڰ]ߎ`'av "0CNp^V!v"*ABy#A#^kv@)81UE+/Z $`8RU}?28 )9Uz2,&հm8 s 6hBU= ̇'^&Jd`2@`km]v:KC9WUpt cSWESPwR_@ҙWO$4%`LgX_M@! 6X=谡< uyX!9C4>B!4TAkԗi)0A 4ۭUWDa Ng&)i "1J8[;T4EA,?M3PM Kvɡ.ʀ֭\?Y0Q'NYMc\NX"ː O sRQL8JʪVċ:Ukrwz;uV-~jX>'i 94r}ꊧ Y6j A#WҝeIU}t>~[XBKU5TV0oatnd6UAkgza9H!ʐԔ*X|VVjw9~~TO8JQI>`ޢ-Mk v u4i5UW]IcB]A8_#M3nUڛm{D͒uY]s^ {V R ~;b7K +TJ|^|F >*UZG%;"*au <IT}xڔMM7QR+Fa6!ߍ{nJ,+u$9uHՕ \i +l90`ž41u[GYgLqlb{9a$d&j[?*3EJG1x~pJ<r*Uoy+]hn~Mru_തoMٝ6c=t+A Cwͪ!F*u(c+WU"YmX<@8)6(YB#.z<נuiuYrXJUlZtCznP 2"eHFj}Vp6 }5*u!=`<;%J96YZY;)m0҇ʂjё"w+`m6qs}`]`%O VUjjpZ7M:&UJ(.l<`f}FID9nړn;L  fkm0&pYB1wѫX<ةh.K=0;s@%so-֍oZ 1WWWBe~& S +aǮ=_B7aA'vT͔UeJjsPE85:hU}mɪ:(Tn㕊sPM*8S]EŵZԚ Vd˟Q`ez┦ \aZzi?R4K1!F߂Oh,7(%z%#9Wf*g; _M2B*9V) })nXW 0(d\".MO J}p2녵JAg/ ul2~(LU~K| ,1UB- "+͞N9HO: 'L=KFh!u ݏt#l.\AM;Jhm*sz:^!-߁)?pE\nٮ4Y(]"t~~R:uɗwJ~f@ JUXɺM#41Zv*Zl %^|_2芖6V@j\qV*()T nYyK3-X-!YИ#xcȖâH4ICBhf 8DsvMyfE&ZL-P|-EXսߋk` TAr\g _lplvүYkv,뜦#sVZJ7 fŀh XLDTAjlڱg0. jZp"9(2Wh*SKm}T:9pR- hZgn'XN OCG3<}\&k\eeT+bŔԱ'B4ϪUВLaczxVA$Ame|8,x^imAkn&X4#`t MO[&$Sd[_UoMUP!tdJ4 YJH0$)O*xӒ{_*@1r0l:sA51_U]wCUV JVyHEA_Î#3u%E %A{+=E[Lm\ĦǦҌy'.`BLmrVݚ`Ek57LT,5-Yy[`bqz!7vWtP4Ҏpt W/0\gcNe jTj D BJ/16 \4b't gS Pt#W2 J#:+**FAH-0àTht}&簙 HPVBd^9sƗJlgNUp q`jє-BKŸEyQ栭hG`!1[yXtHksII(^h4ӄf !˜LZڴe?mS9_VʪJ9" 9UvG8M1FBeaqPG_FZΟC R9߹:3H%51Ay&:" VHV6,۟BU=u_BU%m=<n IDATn*+-O^Q{E/X5o~ =Źßlz : QAfP[ePUoHBLS%6?p@B FN!a:͟?fS4Y * JMLAުi%uJLl $F*T`)18ٟÌdՃ: f( )9;FplF o/dcj"{  ֏ͱ 4ـZ0h)n`L~,՗E9qNe+1a7ݬUj+ 1nBK-vb/ykPWo(D'ϯeX'Y4mm<tbN1p=~"dMϭʆq83F3x>]<_Ep=f,<@z["$g,pV]3N^gc rN`[ gMyX63pbL@}$͵|)Sp2 {y>kt4Q(s :Yi@LmʈZdQiX#D ,7]'6" `ˁ ٹW|Y( UoK>bt/F9NiJv$i_jO 82Xf{o!C$NGA}:[t]ُ~1Z@q;@'gyEos-N 7fMKkl6j >}7~ه* )c ,9ۇyXrJ_H3XCPUz@"3r*h &yXꆭp'0{/y/_==o1B?,aFt7%B3GX a3hZc#>)ʛuEE5>XῢӐnX%EeCԟ!BڶY +XU&8(T $/aU9ERZ7(Zh1(OyXg?}! C&ҵzZДi-y46NW*Ĺ~8>a!Ljנx QB#r\vAoǿ/aDo71R3!9>t 6ϣ{-VS'`I/~ c#9[RA ' L M3kkkPAKo2Yp u%,"CX dR&t} jV+ҁzM!dCyXrLR&5ѯmE)篧Nl@c3TVTpT9qЪsMrberՂ$|q918x?۲Kb.½`13UXY,̬wWfesn/еz,\!̷!.`:JMu<%]Qopt|5GHl /%DgB7x;]b|/-X[.H)+ (Z} *ۓͿ|p]u*`*s6YK@lWWR}q茕 jFO;9ɠELNY#`q鬐>`(9h1v"BKn"ڶ ֖,]V:11u2#P~,MLu2Ʊh,*`%ʤ 7X oa3e36)iJvFןH+B>*?">Kk۹[q\o26ǏADx-Yu-7v236UO =w` V;$ 7?KsHXM/&R_&|or)-G &)abwKYzG'L]͙jaaB.nɾNc"\"m1EB@'6(%9n\VrTjFwfH1E^b"g' V20H41Z)7W2 Z҇H*o?TX=#eVL̎'+A|gT):v!1OXTh!BwK47yqu'o3Q']$,եŠnI$D0A`NJuР$U7 y VE|CQt>-1r Zq{Y4^Lh: BG[QeU$@*3@χ'IvׁG8x6\bJt<,B _hShq:#ϡND\..[4uTVd*9Ē'ؚ.{@`@'\U45L`q];MVg_~sV?J\?Y14&SX+@[j>h$7XJԫj[llS^W8{R' uZ=t\(uO,Gۿ,'T|&rxTJd@-;VOońt ")?Ks S5E& q_䀑dtV\V*v)51U= x0`j #/e@AH83nm*U<:HfK R'-`iX_Z= wP۩+u2yu*ph{Lo _J>B(GA,KbZ.bz1)gP{$;@&H^bP.BT6k&<编jC`yyZVBjuPQ[9px.qK{|`RXHڙsv.0x="fKG8s/4}~fQIj}kgoS2lg~[_l 4&̓&Lf&K] IX{KOfMø?fs'}!iQ{}֚@ȷؗ>LZNt1g_)hL8+\?s=ɇ &{T[n\$ܗkKEׁJl2A8E2D6.=OJcr&"3R LZ~OBkP7Y oa(Ig֢B~P2 C"L{pYyVY. |%4@B qNu!Q>HoEymx0.4 ͒,Nr=b+"ӥg\DPpĽj_SmӾ� 6--.=i6*+{NWz7x_owbHX=/ϷLj1Z~X責A@U_7K,Իòo#Y Zc.e~:fU?a2-Ֆ_Q09$~ʹhAMcXs8^fBMވ3#5j>H;SVC2B#m٦NA5/WFXh !cPk3z,WIDgHYks}vcRZ 8^gf{0+חMD_6K=L\]K5HEYgoqx׍_%`RlvЋ/ c۬kB8SK6ł˝"e@Q[w7W)ÑR/6XA2y0CPLg6Q=&b2a[9Uv0:çme}vf9CE{`E:` !_.!߄`RP^Wi8˩7]*EX[ZbAT|Hϖh`lvdD>I{Q+9bR$1Fy屈x2+ 0?lFth3>~PG[m!̩,x #eH[3hTş ^L/@a#YzBڇf!AlD |V$"DA3o"~%A[E")opZǿŕ"ɾ>[L??QoXt$tq ;z ȗ bdDHUI2h!H;d.JP'vd{99tE7f-wS^UE?Ç=o%;Yޙ:Z>=$cj*T@E]]*BWJg.) խH4d#┎G%h&\x"'H[3hK1X/Ȏ"6It ?Bo$c]?̜N7^> 'Ҵ׊AȠY+LEy\Ke$x?{Iv@X<,ZS"r!Y*^:˺zX<&"H@9\Ngx~<9̿7 nu_E Oe{Oናo8d)ӫBo oݼ3hԆ6i!O4 {qBҹlrb3G\n˃ `-csoEXbj/SP~-~?f'{-N(@+]q KPk\H+Y%WC njrKV?ewZEd7=@k\Z2:R-@m7o5CQ&ɥ:KtxcKp9^}ub"th.Fh} $1AU*) Ɔ5't'<ع3pPGc]U=7Ü1aQO7{h,0UXdf{>v2]ԹU2 M @kEW8Sc2f֎wLKZjaϣЃ9"2(ԊH,AXd͙KpeN,AV:pO_Mphuʳ_ =XO@Q2-=;g6F9 :ӑ'jV 1Z$qDM=O2vVj^ȧaJj͠/[Z%`C:q;YY?\!) EzsS=K7kG8{;y3bMs6dt { mr}*(b>,aNx} 5"(o -P|_k33̲bJknEk&KI!%◒_!N~{oc鄗@?~>ӕ*{,VZ7@kZ X.KДX{M=6X/\e>x IDAT|ӤQ<]xmiAqOs/+gc5<—Lg9Ј(hC`J`yFsDuI=*4 &WF҉iR檠]J 2!>!ľԝ`7ߐrsh ñ:v| vZ=~uTY5^'ko!+>ͱA0i Q]Ru-U!EL^_&FyT,稨L Y0{aAk? +hZUn\O/ ݜ8LmJ}t XMZ~$U0f E{l^jwU%j@̑ikis^nqQd/6F4 e4R55s@ #5HFVBDU6[ C.nE!H3Uh0F·:+C~:ErxmmNkRLh2_E$-#>e&j.E3Q. bu4 .q- 0y>.Y*o@:FD:~, Yg(Ƅ|QFg"e9kk$A}58>1)%c <'6ȣg˱rW|nJYvO\5TrA;:+ѳ<Dۇ/͐\zLJ}y )T|3< D̡_*W΀ &NH>E>7:wkX`%r% AV3/ Jy#po!AigM(Խ!7OCW=:UIYz9R& VqlWU'p]GEgN5&(#ӬMIs.7rk2% az:?ם,M*fPM8BHe ^gym9$D&:X)}VRn*&KU"b3Ao&eh^گ]J>|K TjR,{SpWC2OIT,γsPVĦ7:%Uᭅh\Vn\xU͛\@**6gE%|ojj6V[RjACo"rmV5K>7m Bj|y_cޚ.f,*H@M/&XV)wM^8u?|f5Yb3>7*uY S0b* ]TSUЪkd Ja9 [scWATGT>k2a*ο\94jjOD>\MjY4-pk*Z䠠n׭=z# \d&o&*-h, M@L5νjsfW)` f۫MUT7TUfJT^ii4U)XoM ZU0CEV P5M]{ou*a|YuMBk|Pz3VUDf_o^5E:[ǬfVQmW77H훣 Z Ǜ*JAlƥW7<@i*LoXMuZ!v~зU 5>nH7GTum׊siP*Tʆzlolqq|#}Otqk*M\QM2^w6tZ[pˍyW`"F֕]^=qDW;˛Rdwa-c9oP>ItSm̾kSpѦk$[uĨ/IdQGMZ ?~' O ==cǎE=sIX,(9( :J0Ea9;:8{ ވRe{(ǽ?v%%&G5#qqΏj&<h3ز,.~"bjNBz@E'6ыP|9EhaTQ ~Y| ^ZK)p -VsݻQcr>Y-(((.]྅,YHMMŶbWD{G5 Pyb'yx0*xSl n!Qdϱ]qمck!`h̋vnK"Pw;ƠO|$*x= HJ0KG*LX =[8f[rk$<̱GBB4d/Ѹt[__|d_61/F@cZx$DŽ weSz?غͅhaBL!{q3{1d$EBKLKLbfLmpҵȘ4U<+ybjhAXXiTjYaaa\ 4vKL~@yY& pt9уQwg/"A|H3!Ȁ/Wc@Px,q[cBsbqihu3Λ$w "6>o:"c/QA i3Uh=kFNEL>=6!*+o!v+]1 cœ[ذtN!8 xecF'L0Ec+Sl(q|ޛOBݷmIspu˻?w"cGJwm ;]p;{;N8NbP\Pf@|""[kJa2P#lJ^kBB.Xz6+lv@a׎ݨ@TDw֟P^n8`>LfĊI8+&_سw`N*:;5}&ۚvf&]tJVa!rmyp ɶ k6ξt뙄Ra(s,)u蕄2K5j Iݚi2PY79o^}x}vv!E8;Pd)ڀ>w@'%C0t, )#KG9+`M3a﭂!ҀӀӳ}@Pgf2pvj$v Cj+AqVw/GR Slʲkq^]caa >j:NK޶`+-15莟%=3Va5,܆[n^U-mC N6MF{MJ `0@ 240::}y8q ׿&yVPRmø L2aCM=bÃa)GUq.ºBXPe]TX9 pL[ la<^g^G7mſ4; Hܚi Ѣ?`>P8SL/XKsi4d 5XyazKӳPSE!hoLˎ" »ma4z(.Va5.ܛET8\+y1/ݒ{"996 5UDDXjka: j AU9X&QэΩQ''aQP/"޺e t~ ٻ* ң;J+ՕHvoxy=9sn7%ť xSH0G6b ``9q`WkYM?݆9*AU6[KOĂA8a1-qWVD'ѭ w2Na#F`C ulnxx>#נ6Bi|/1i3c̓<&^%b.o0[6lk_jwҘ U6DM˨錠at+ gF?jRcG)ߝ, g1?^"ljMVr I]:njQWoAQQ1e@]5(-.ŕvvajmv$GL'o-Ʊ!ˆ^ЩS$Ju55ÀpD"OU0(jB)q hxڀe0F@ CGC[W^#zGр?bc`H6aF*H6n8 0#"+*O(=M@р̟Pk` #j 0Vch8"b h>7G~>,(9Jaa4E <6q=|i8±W1r<[daj9j4 *| bD5]}#""V `X6`- EHD(P~5p>~[E6>#S-,zz)*\wbTSROp;`@Z=8[G'+[RdVaw葎=Z/ť#΃Yb**B0Ya7#:]bjs-STWt> |`:shvh >.9룄bCeb#ѳc_ʫprˇȸV[lV:2":Q v@IJ !D25uEcfǦ_E0̜z+ꭍ}Vz6 ņΝu6;,NFZ+yA!D9o*\0;O>`Biܹ1Xl. 'BH0ʕadBqBSZt%&B LZ~ BS(B%&B! |<0&maDA8Xc4n%\7| JMA41/}eMi}ײ}^b:_ [["x}J.¼Wvಅ/`cKpѢ~[FiK |܊k>\QqxnN0lz ]|xqe8.^; P썈p᪝ya/7dw]׳Gr׎;xϿ3`z\x5[17/g-oL>نpZii:zNz#6VS8jٺ٧6ŜQꔺXK [7#%ԱgYfjf D3?s_Ql/5/[iSxʟ's9 ~z5|{;~}lEIӳH[gRJv-EՎ Sޢ`cY^7%NŠm^/s*g,yñpӄa칈%He_]LmLA8\cA&[=U˱kdh{Wc2`ExNx@)o2%+; ;]]j;ׅ/ċ17=|m?{S[kE`m^nOn{&q(->lXj/ߊ7C;kgAΡp vk-gWt׾FqJX7\r{Gc͎0z̝;/]49vI,u疡cb*.c0Q$LX]S_*sG a7tfbRf񙻱~⵸Pji_?aHN5aٕzǒ[2tHHŕ'-l 0K9ϻ BH;EKL6FB\ 0 !I1jwBg~&BxN\Bjz]pqg !|kj=O 84#B B B B B B B /,&w>!0 .$^r=RK9+JT7-IDATQ$Jy''}pS~RWP-_LWԨj}H[_ (y"}& >Ng?A"~4>j/weVn?j-4yH-u'y'=YqGnjlU NLkZ4|9ޮ'#@ܕ#ڡ(MiZ#<%ju%v )__+;o͎As$eD`q=#JGZVURAkm)5nS_}RXZpfӯviy٥|*Bv?j6)(N]/xx]~OF'P~! 2WIBNARj?oYsYb9:kR}e7oSc}9#vwg5jeFng D(RbMZn[y( w:"FB/.GdTi=4<--x㉘yF)"EC9GKL&?ӬP`o-/:>_?%#L>uC hA!AHUybwww~p@yVZ̞I%&OF+]PMQ)I]-s(=B2\EO.C6з=Qs4{)JQ(rRNGIC';yJfj}_4 _=W<@5Hh5Sz{aAP?RIفh%&"P{Hi<-Ǵ6SN3 BCm:ɶ>LjS2@{*_ѺJH `AB/v-G9ZsZLR$uXVWm+Ghکl2WNDƋY ~6{p?T<_и _-<PN%ft+!V(b A8jC}f׺cR^ ;8rF#4k?z?BiVg? GM#7-ޯĎg!knqu>c!*$|OgJ5BJ ujA@FBjp(!“?vrZZk B_ ̰&xa/+!_P$R5f02`BveV#BH{f/vv-" 5k~O!Z;MN=fW#C3O'VoFP_^h?R˾_ (y" W;|ȸ_P1 W; <W;n?JVՎ~t`m D+~=y[*޾Fq\bPLqK^b0Fo,(S񆱢٘RSN@ N ZIj ZUL_?5תsڟ[!h}GKLf%*Aiy.إc]nv>hOAh8ΎA; |Ow:yN?=]SKI ku5u(w 2yu]n2{؆FG_ X2 q^E!H^~ '7+W `;fyB# ,/(}!~LA(t "@ ‹x{F1}m&J!Ѿ+q"AiI)!'$pa\/-p1k,B aVn  Q܏j, O)G y$5OjҪ~A_ Aj]}2QRK:{SRR8 -O+` ;$ AeUrݗ %ij样*}ު_),Aᷝpn+Hlju8!{Up3CZ^~W6Z7Sh5FRH\-A}^ij0&|@q@=guTәv&JBмǮN“]8R? 扵r:WWVY=JDB_s ABO ܍bnɫOIz7AA7"(tJ.A;WJ/ɻPb4[.⃩ZBROSEПK#id4N~|>l$_/[\|FEW/›G%@ڞ&+u'ka%dnܽKIK$ZP T-f0j40WkR}i%eI[D<@]oY>ǖԂf'?zLKj oZN~ ;;i{S#KN/)uCNBIN.%A2|ZEhA!@{PӟH?9CGB|b՟wg*W@Bx2џGР|H?!%o(jT@t@H ۋ?oV_!Ad| B\ |9ֻ 18 ~!uAAx!8ȽG k_MKBwHª>~8Bԓ]0z!wV<i!eBU (P 2RB- !+JLH!f rzyɓG=!=NB6]wG_M; G9TJ돫v^`vJ<}{z;EeSY!*hJס? -F6Vq*rcTȿټ 7+YwRެaٙGAҿ@Eu7R“[N}Zw>.x02{]}v25 ܍R=bˍ\Z.1V[/Oj'o UVå/@\Bh9i/w* au=ʟ ${3$O:58|g{Iպ=C9P[pj+i'_ X2 q^E!H^~ '7+Ws))M;BA5wc“U.AaݎBۘK1dQj+(x?&9kY9RDB2 Bg:oӞ!AA  ST!t_z\q[!8H 2:x5Gr !?s!32) "B@@Ԙ*!wD!>vBl,# v F3_A _!P $8Wѿ;; wyO`V|PsABq1Fg< ߝ?ˉwW>J;T)SsHA BTA:u(=,w-|Ks2!BV3 k j.e 7xBvdIyޝ* ߛƂZ'C|I-UnP{?v B-6R/**mF/!v'IPcaNv`>A(.H2>q=O˝2RY~odҸiinaGdg6v$jvzLZ''CJ畎}Dհ\SZ~R 4P{}>R,}`:A9' 5n }z WR,?O@;B!B}ʁBi~=0ڻ7?ڟ7h ;Ahi Sthǡ=@cZca:p{y߯tH'x!]ZW+| ^K;AW }/1I-M'f=霥|T>r/#VfH __8@d/Ay2j~i=Xj/AP+myZ=,>RRWi>eݽ?П'J?! B!Π@B@B@B@B@B@B@B@x+䂛 !(FGm4sr"'!AB!!P sGBHBHD=9/ݝ[IB!H { !3ph\B~A!P (BHBB%CB(B@P!!!ŘA!> B B B B B B B B(B(B(B(B(B(B(B(B(B(B(B(BBBBBBBBBBBBHaj7Z\!Z `.#Gl !Kϭ@@a~B7B!B! DnNZRqGq+={DžWߎ+$#'1'8 B>_j'O?s.:~%̟t1 vx~ű!_fR'"."qxϕ"|fVX(ώ;;oıOqlnb ۪Ř+;/\x}cydBX,eB?/!s\f?WLFѵH-'a4 cc݆ꓣ<xn5_:1 HKd)Bfrj˾k}|l(*mu_m[ ~0<)º06 !ėQ!_7=o.V%sdcyVy+-iyiB<l_|<2!xK &}NX`_?Ob#O53eoo+5%/5Ȋ<݊;ü+_zfr"|NX`@ $f,KBd s_ލ{Gi#0q} Ͽ{>4>zj`_`#X}<~T%5G&v?3øq0]X1t$E2!xK LO}ѽ'$+b,O X5*!#B ငB7ĀΔ@O?!)|~Bq*S&OdBGjB!nf9 B!_ 2!N3$KIENDB`KCemu-0.5.1/doc/window-plotter-1.png0000644001050700006200000015207011163412576016627 0ustar glaubitzfbedvPNG  IHDRLײ=sRGBbKGD pHYs IDATxw|ϵt BNCATHQHt "4)JQ-[B ~G̙Kr y޼ٙYhi _>Q!8ԩ_40ڈiR[B!(R⡃+'EJ Sӌ D-!{^oֺ*gY }i F,=JC!<|'?s/ٸ7ŊQ̡{~w)4]r ]B! x"c = RŪ܍},75E='[Vy MKzB! \ݳ+㞭2]ãR@:ryDKm0dܺlNYj6-݊^ !Df(Ҟz-Z*S^!{OnŜxoY)1CA+75SYos{&F 54}9BDf-CrZ)w ,rL,Z|oz{͟7M(B:y❿(UypDmB)(\P..M05k.>P|CT \=qky`'s5=Wf :~<J%pt2Q#{8bL] x9wbrט.֨珝On>ۨդ9'm35MgCb_)}9u` îhy I{rwOstOZ(lKbl,'N]bo8W!1mkop}=zK^ ӱMuf4W/M:~v$h)u17YИ vϪ&m^a茟L?( Mڼi[[ZqT"m$qHuVLԅ3 a 4 EU .?jc8`T.(o~7a6?t|F {&uElK%+8] f;Oիpo@ZcСS>%/5v 4>`X;(fͥ~'OT6mrk6> +a"-,[|< uw]B&,PJn2'3k"&8/O9 /Kh8β:S(UԌOp'8w(3K(sׇvo0%6 &hJ,5 lv쒋|~zy]aO(tzµ Sc0$ѢcelOh eOL"2B'0|rpn"vtD>ѧ+.Q*voO=%ǒr0Q޵'hFIhlbywy4J<R}P9Gp(ADm=%Q!(E|O-h:b)jH}FjyOlyWr_`W܇Fl1764pְo>x?zT½R}QyDڥ6^x(Ӧ*.S];,>"GT{LZŜL=Vv6'C 1AVfe)72_e)3uڴԺbu2c[' Z ? g6?kץ :_%!Z*٫"nQ|e_˵1*TWI?$4" OO..{t MqtQW5v.bqo\VXE=Lk}usOϣz+?\#hF^#yŽ JcJMˍ X-&9?7/r+F-(-LNh2Z++8sfݬYRS{(O>]nSMvi^?\usAQEI8~U 0_M/sL[;qzU:mcbaWv*:#xkڎZJSKRSj܎ۿ.ơ)bB/2[fCn (mp,Wb$ޡ8GB0njB.PF?sUrG'18APקKP3}(D RuqR=jSJʨNF-z4 50eեB$s%e FSh| ?E:L.|`3;:3 TwqkQ.F.kr~QUAkχMJ2@(*bTT>^vxu\O?Ԣ7Rjr7ե1غړx5zb#枑ɭ\e}z(55߿㋂#uyuroeI¾BJM/*ʩ|8hXt5Uǃ9'Sb%>C|]>XE*wHm}}TqoT5`H`cUzžZL[lJ+-eRˬܬ얛,U<2+)AӁSV,MfOt(j-,"59rx.G-x(V<̛ D>~{!,S\}:lvz4]6'xT.< }ztеXoZW3ҡHr(ơ'SvࣖeV7ZGEs  `z4*",OMH9i|VKܵ!zgj<~n5cRgatc>>O>7Wz5*^꿁-;]f%(eeӭs0{sqܼpǭ;'MxJv?$4[˅BzT*yc:Rc`4PͿq1q<~̎]i٬.._9jz\rߖϢ GygnBa$n)Xcy}t@QbӥSWܖ'cܨnN d\Bfϛ3'"E7CUpJ-7}jwɧKsyjЕ:*SƧ~>]u5]RPQ2} ZկI2>X^e$f[ҫuX14BioKɑ.Bz n|x|KfNDt8#PT4h@||˓Q1~@e_ɢ[e؂wC8ǯs[]ru8nXĤ\ +v@l g"ݺG2vek(GBbo@||NقqHgn֤nh4r<(M7Z>DYhFPq>z[wp>_{oz w1T)Y-N㖑dWg}Ͼu>7^` xB1[A/Ϙ62tb½Pݿ/GBɗoX [,xyWr/+e}p\q SF*ٹy\:g̔VʏAQH߅Y=v#͕7cė$ߖU9UmPEwnķrO.- V[?` $GB ];GȣJJ(= |D6{{9#4"Ԕԥ$prp"<EjYgKfZ^ZM&ϓ)5"(S&m:3bPZ01L&cWȝ nS`5eB!rI\|,#P)+L F$xNT4'!IN.N2_CL3bL9nzפq.v}0㓷3g4$Ms-BPz:~u3ۨfc"E2k49s $mzdY3 rV͍-cI\s,yGmJ6K۪e;uG!(?QC0) WCyJ0<=kxP[JOS"ǷwWظ76.N!(`RfN֎5jsQܽ嫗T!W+2vMw)FK ?)ӭl&& B%4*uǁcۙ:rjV*ǢnTݘ;O(BS)3}?mv盶n0],+fkӟm[i"v5,}wY!y#Lߩ/_Uq9.\vѺemK)-B(LOj?X׭C0 !70WI6B^evBò[$B! ,!I͚4gPT*F#Ga{LB!(PΧ\y6nʇc>L2GVoK--B陾3R\&8SgNULB!(BAޖLB!(:#IL%B! :U-dзB!LB!0 !BH$BÇ2? T*qss?e|HE !.`x{R;BbӼ } +Fh4b4BRT0 ܹsݻ`ckT"ǤKNm߾5jP6Mgj5ʗjժl߾S*O!p4j i0 ! шUښB&!De0Xr%A*CRB,,_>}2w\JTF#I$i0%/J66lgr,!D.KocÆ 3J%_4Ah(\%""B*$_KJ\^%K`U3 _OB9;p)ۇ+z^{c0RAJJL"<<ѲEsʕ+՝|.Z-׮_篿ŵ..$'XpI ! _~۷ [G6mrs iHʕ%X'l4*Wu` GFcc0 ! nݺ...tY*G|6]}^jDTۊ?NRf6-'_ҫG|AvT-wIЅxp$&&?ΝKNB|*ohk^?<mOqK8&{VO^L;$z_O?GL`tצ.[n.vG2׿<{ r 6/|S0fYS 3Wns]Ѕc   ޑ{‹FX/@y_t !Ѡ|x[aJ_2|)[xP 7MÿL9)ߗ] x)S*vdͅ~`Co-ޛŴ|ĭ(%7}fNҕgiж|BE]CyT,RRB|%*3BKs254-_CTo?B :K)_ek#2 vsć7>v^,= 2CULJ%x{[YzpxU@%?(-"_HJ.##}wM^5s+1G5 ܟ"w*h4Jeb}fWvt5lժMZ4!( {9cHޜt`[ٳrTd8Gl IDATޭ{yK:ۀIxm# 9M! β?bW59 lߙ;寽CHꉸu/Gw2->#K{e :n[w͖gm~M"[٬S^"uG%G exeT݌[㲋7̖O1᣾c3Ӵty, B Oz^̖gm~׿Ho7otRJ%jш^\[o|f K)|ci~VcI~d+#3\|4H !r̙3x?2d|0eB!^\n~#) BNB2vNek.r(;n&O r`01`4'jQ((T7?k@/`>B|%9Zm6<5ʟS 4zܸqr ^zs}&M.'!26PTPȿ|OաTZ.9Vk6}>|gϚ]ަM&LaLi'Ofԩ4mڔ#Gjݺ5&MJSw}G`` .]2yzz2rLUVQ.H2|,Zw^{ATҸqlϩ Tbzm6ԩSٸq#N:1o<Hw 80]dNOB!XRpuq;T(_N*$snn0Ys&sNfΜɮ]F5bŊi?}:wԨQ|'9ʟ㣏>6{.ӧOOcMBFAQ|9l4,I?lقĤ0`VΆAbȐ!l޼J*?o<2V"E^ϟ-6ZaÆ lْyeڲb֭r>ZjVegZmW5Z?;N8Ur~GZȿߍ '$He Ur)Wt֍x.\A?" "ˁΉYåKx1u͕h0N0`0peΟ?ϥKl26 \ts\obo1b.صkٺ",9~,–J!rGJNPp1.\ŋ-ʟ^~etBLL fJ<((Kf8)Ŵi۷oСCYfM=zݗ=zp +DEEqiA`f͚8;;cooOBB?xj FܹsQYv]Y~ًr%KKʗ.9!x΄_ή]8w\ON>M=aРA(JYf :too ˈ{rΝ;f>|h6[n,[̔6h 4hcoذ!OÆ ZӧOW^]6O[`0pM^{5SkkH_'..Jŵk(UTONG!D2JΚ3h"U\{R ~-[F&Mh4f?׺ܹ3uɵ+6n܈;t:lllrmr xI$i0 BTac;.ӪU+4i/2M4ѣk۷ogРAL2S :^rϤWzv\6f/^lYd8h^_%7k,ؾ}E" $%&sh٢9ĕsjv:7.pqu!! D$ςT*[nc>lgVw֍ۼysE=J%7o~ak@@@lvڕӄ$D!D T\ju:t???,Y!CҬ7n86mĖ-[Xb)/^ Jʳq/,^CZT֦[[5g,GK{zzRT)~^}4˖,Yŋ-Ւ.9!^ Obb }qr|﯒l&错8w\n?Fq <<|֭[9p}YW;vФI@RP(2eJѢEͦgԄQ 9Oҙ3g2g^4nت} n\c2zh.\B@C6o̡CtӺ }1s~JW^7l0j֬.ۛǏpBz >ŭt^^^Nyyf9z(-Js>lZzU4(G]xqvܙiÇg<} n\Ν;͛7Mi%JV@f?' /'1"`]r4j(u'Ofiy,K,QiMf59注n+.9!=*9!-%J>٠^C!e}"'!"kCBKĭ9& r&J!^LM!2/ 50U*DFJL2tN\gchڴ|Yޣ 1i"|fb%Ji~='/&6Ƚw3K/`Ҝt[JSkhZS Z+FSoOafU~kOiaC aÆK6l"74iM ص߳FMt'M7:՛ړ{BLÿø%~=rav/sN1d \i0`tצ.[n.vG2׿<{ r 6/|S0fYBZH^\%29OO~+,rj/WS0)yѶ kcњ4-`_ n|eC,4 N37rƯ_@ےYg=j`[n1-_0q+o9JjoҰY,o !B@RS(Ը,K='q'5q&[:݇O@JҼv8 ieh QY _˲`dX!<Õ.w<go EO ZUrݹ;^ϒ S{ ͢ F8}iSF4VΠ~ck:?\Bx.JN!2c8e% R{~{q׏~w*ȏ!wӁ"2\͞寱w+elnYOj~d+#3\|4wʱ`݆MR0 !/|K*9I!țI@&!BdDTh4RLVRi0 !,Tp*/'ܹs7W7zLB!bcϏ{(W6%i\v-[$BA 9|v`0H>%qpph4J$,ѣpPLZ-H*Uڵ+ݺuӼlݺ@N:E.]8{,NNN|W,X[[[VXA\\AAAK( 8p M4BBHJL?pW:u/*J*&|`!?grUvރ3..$[~Lɓ_Q(̙3LϞ=TNhѢimڴ)7oߔVV-ڵkGNػw/FbԨQ̟?Sxq-[FŊ>9cǎ%22___zСCBX II:|]Rf |F*O> dw!k.7nL*U8|0{ܹsL:///bcci׮* ,`۶m邥oOO4REƊ+Ҥ1+WЧOڷoO@@̝;rEzɯJ*UhҤ G&$$D>4!Dby!>>Rπh[ =zBQ +W0dV1rH.^Ȏ;47oժUL2\zvڙ-o޼y,[,_O>ÇsUzE۶mYdiِ!CLgϞMll,-[I&)(H? t:6MnU#]r/?KbooO˖-9z(ТE z=۷oJ*9`ʖ-Kʕ3SJٵk[6gԨQٓFԚ4ib4~xjԨAƍYjJBMPH%^:uJZj߬\'O2w\RTTkצcǎ}JEywC٦ yjO,TЈOy^%4Sy){RN6y3' h[l\vۮEg;_fi߾='O&::ɓ'Ӿ}{s\W0 UF`` ϟϲ 2&&Zjѿ%iӦѧOyL0")) ??L,'''/_ٳgv*To@XMO;3g'F-S{!p)qUl#r%_4G .?%e{Z&hgNꖣ3sL=Çg̙?>-L2 _~Rb,׉^z׏SZ˗/i&Ϙ1+ܹɓ'SfMN8syٹs'W\aРA̙3QF1b9(|^qHU,Nwg۽WPB|O;>ux}#_og1p mhUoiC7x<ú7n]taҤI۷Ϣ`n ŭQ\\\8}1p@իgѕq+Vd߾}l۶+WҸqc90U.\K@mnѺ|?V5!h?i*5_Ы]|K]ǔhS*}˙4y~~lto݀rJ[ޏW}|*`W釆47,:_@jU0K9vO,;p)͛???8`:SNu֙i289rwww֭KXX(²/X۲|C?Fch5gZw{H^-ʵ[7ؼ=Nw?Cfܻ̕7]9vO/l]\z?o}#tu?B?ȇ& -"{̱v&]$&&ҽ{w̒%Kؽ{wVou7\ʺt}0`k֬z&͛ر#޽{r8Wi}\>>ٚ( d=_mҺuk-17((8qb9xOަ]t<엲\gCx<+ *$>)WW{ǁ Ҥ0?u:٥"-^!d>"-L<4J$z*2$=@:9#شyԥsG ^`VZ 0!06nɓ'w-m KQJƌC8uU6;ҨQ#n߾@QfE@NWuXyej{,6k)/@$8]X(w{;V3GTZewcD󹔉%ӕUVL4 le6mP\9vڕunjF{Os˖-N) />,d7|V'"Q]Yp9*M_cݪ}nwO5}u|8>``ث|;p3kìg6Q(PK IDATT?l$`Dz{E[js6GRFt 0`7o{eV2Az'N ""F=DlOx-YmSw3]w,=n3}jo^JO޵jKz]3{v,+cweyCr?|\|fTz!%`z^і"**/[h_r~58{lwrrb֬Y3[7L1UMma>o[6jd~9P>KwDzQ|h{ϩ6zs:j?|fըx eKa o! |H:pP}Uϳ/5S]X̓_'R{L?|)}zzOiV}zIÔewbɧݛ={2njأUZꫯxb]'3f@V[41xi6t>\tO2\фO7zc ޘIJJVme6eҒYz%)Z#zL)SңGwbc+WdY[>M|&7 oW\/߿_~9܍l2V\2R&lժl"ʕ+NJ+8p⹪{zxZ=dZsĉ\%i;RCVr ?̕ȕr^~eoߞr<==qvvfϞ=9.gĉ2#"שT*zT3 N=4:![/”,^\ vڅ75'&&4i_}jF#zZM%:theթSN+5ydF+ gc !D-*n=|TH^׷ݟV,22ӧsر\)oĉ{ի,X^ϙ3gpssh4r}BCCi֬666$&&Lݺuӕ믿?B0OҥKԨQWWWt:~~~Ԯ] *Xϝ;wfĉl޼Ν;稾ƌî]ܹsB66U޿֖ҥ|PTR1y0YZ~{6mHLm nݺѣG<==s(+Wpi,Yݻw1 xyyѦMWٳ)Q;v` 4`ɒ%ԬY={wq1o55hJQ*Ѧ %K ɒ.Mvor+k\\D!q][PYrUD &SMM?ܶx?yԜ?gΜ|^kDDD(**`kk (*ּ͛hO!6n܈YfQ$QHˠuk5uWAaaQcvF*􁶎6XGr ҥK"===$޽)))(..LMMCUUVϟ> rssann[;{<[nEdd$Q\\ ]]]̟?/8E"֭aaaA #!AEY ⢴y䢼\hDr1j(C={`˖-())pI{f۶m5S˖-ann(,X޽ <<<9s 44T$IKK k֬ȑ#Fc Ǧ RKK2 u7VVVpqqcǎ!''}􁎎"##aee([VM<޵klO<;w`ii5 ǏDŽ gjA oIvv6n߾F ѣGKtǎC˖-ERL(++s+++7:S=x+!!'OUV:I> CCCXF! /h0`̟?7 pqq!n޼8i"KuqUUUַo_DEEAKK `X066Ʋe<`G>}:5T 0}ef͚eeew˖-&O 0 ݻ:::"wpDER߾}bТE ޽^ѣѩS'9˗/gDD:u6 999jAMUUQ)V5 IHK3!++&L_ o*ORRNJĠSNՄ!rfddeⳠb CqUHHH@NNƎ }}}=Zrrrprr¢EqFjAMǏxn%ƫWBĄA TUйsghkkA^^^{ ann. .!C -- Wƈ#jc5l,Pfş;֮]~ڶm ۴l2ۗABS^V\\v AOWWa۱h`0s8BD(AYEB#IHH[ݸq#еkW<}%҉_*qqЮ];mɓ'W Euuuܺu /^̙3M6ɩN۷&1uTjALiy9nܼ !C`nnFDf2aܹ3$pU)`I_lHKK׻*??سg)^n݊Ν;"3"x`0f_߿+W!J~m2UUUBt۷۷o(J+닉'z Æ q]hkkԩSunP޽ ___DYYaaa 48}4PRRRձm6jA{aoLmLfI0}%233k]b`jj*A m,/ iye8{ ;wx=;w4EZX,֖/ܹsP1$22Æ KYTO ۷o::?~ yyyzԨQuu"'cAꑸ\/ 1zumCD40D|1< Bz/Hn{+6,=zX2ޔMmW}kѢE /P,Zz:/F޽I&ɓ7o^}ALOG޽{b=vX}?ѣGK.DSvk.j2zر 31S19t/e@N9>Ǔ5c~_Wǃ/!jI鹇Ha WVA_Ela)䫥˫v= "Xr%<<} ̙3xqAs58QQQAtt4K]]prrǏyH0ur1=߉`j>8);qaNݏGvUűlLRKg=YWj`%ކQRR0sW6 MNj/tRHII "ѣGb#FСC"ンgϢ Aa*b,2_/ӻS.̇"N]|ldE]L ox~34z#v mW+lCCILdggbرcœ9sDdQVV'O@JJ غu+/cyy9233ѢE ᠢ(++bIJg8ziii@SS向AUUJJJ b鐖a"Ç"-oLL xufE*~ 78zz&z̴{/sv``Bj(<뾵ӹ ^_|(0)>d8#AgIBBo:d٦J(ƹPx<+j<=F5-Sm۶;w.;&2^Brr2 0zh|/ZlCII VXZZG~:Ν z `0(..\.PZZ*25 ˗/G6mP#i7h v/E+&,v' ۋn:BvY}y0}LێK}}S)ӽVzSvd%_ 5i3>B=kRd mW85C ѣyiG8{1 &1 89958R~~>oߎK.ݻw@EELLL[aر6DcDp  QD^PTTEEEXYYcǎmp-[CCCL<[nݻg 0in;~)/*69h/O)$\UAkii}c$]tepw%%3 Xn-;gG JXB lܸׯQ\\VZǏv---KDݻi&d?kkk̝; 7X,R"coro7I]|(H* &Bcb0矱`(++_$ &1@S0Xr%xIpppwBЈsW}_]] 䥥aǎ=ڵkcСШ}5k`ذab Jx,b(<.b=x,ᙦT1͜z,-,qI7{A."9 'ObӦMͅ\]]e}ʝfUsssl޼XYW^Ş={m60 aDkN>|M y89*{RZZZ"%%E$[`3Ϟ=êUxۇPHKKc֬YO#nv؁nݺߓKEd21~xx{{-^SLNDHJJ*S&StNEEb14hΝ;]ѸsNRJJXsh|!m6}Z}RUUrsrM, ii&de_iNILp8(**"11ј4i8f̘zpsr֭[!))GɤND|gϞVmz*DLhi#Xb@EY;w兺_`ebAQQ^^^µkװ|rY{ƚ5k+MLLĞ={p?e#Nʑ׮a@7RJ15l;-l/rYYYHU%((Tv$Ą|}}g^Z= gϞ)v WWWtر^ߚ8zh4⦍O%%%ٳg-[bȐ!غuk¨zzz rܸyC܌* d¸sgHJIʕ5ғSS]v~zuVW۷c׮]`0hٲ%ڶm#Gڍ{„ ؽ{wqrQQQQ$''c׮]x!OΘ1 sݻ())*5p jUV7nKvTD}{%t@QLz(-E֭e̜9V; 8𳲲w^DEE!88߿2 "^ qɱl>Tz ;w:0|pL<@1k,jA|(Q7)))9r$8 H0 ôisРA4hΎ7䗞۷oӧffbh򐑑Id2pL&666Mf)-- /^m׮](++CYY򠨍$ IDATiii~:::p8߿?LLL`0`0c)>>Ѯ];jA`j"wTΝ;pqqAaa!\\\KKKLMkkkڵ ;vD"Ǐall /}PSSYYzyyyj >|$$$$PQQQ3g@AAwE^x~޾} HKK޿SSS޹LMM၊ (**)X""""ҺfX_w^@NNwr^5xS.(m+t3 09+·Ue†;p982BZ솞b8q"v WWW={ѢXt)틍7B]]]dLa2(**r> ,\NL۷OUVtX꽲Rqlmm1vX(++CWW7]CB0OuvpY{1bw_s {{C Gxy>Yi/s|ôh"b___(((`ѢE8s &$%%kڵ ѶhVM#)) ...3bMޟ={&!#F@YYAAA8q"lllq@4eAi= ; S?5LـM0vq m^k^p&ēכidMfH%'O6{3fLE05ka``ѣG*~I.])r#..YֹȆ̢+W?~ WWWj?X̗'^a}t;cHgqdĆ tuabuEѣ`Be55Nf8nG#xkV_Vȳz{{ la)䫥˫Pa++Ǡ/"; y`jbڢ>00갳ko䈭$о}{aÆm]SXXHBN䥠"j-**rR,ڴAb9[rLalm݁q{NaRPZn^sV.ֲ|%\X -Dž5^> #ܥRL &s ~Gsph#]1ۀy##s0l_[\9Xl4I(++ŋpr4. ;;;̛7k֬i_9990?86mOG" gkk lܸVZQO80@U*Jt+=-Y$ `[~Ni/:KX >\wטЛ֑}*uH>c0f2 nk0|ϼ؇--)s-(_b.σ6CIx{{c<|Fmnnyyy,[Qb,++K W^'5gϞٳjjj8}4_SFX)LP8VW-' H{ 5p1zsP 8n/ƬwC{rZv`~p\Udq-ӵoAVEy);qaNݏG`%@Crbf„ x _"(ԢE ܸqC,אłX|}}mPޜt RNN$%%D/AM+:R_xaz6խC',2<34ghIIH(&_tzZp7'<8ޭD~$%~1ݐ` !;;h}6bbbrX0ֱ޼} ;y6:N 9C 0'־z9WO HǯQ|6-{7\ &=!Xoq[{!6^MV$&N ޫ{_[: &+))!55۷.9".] 55U,er(9uDw˖- ]"00>>՟bl6?%KPCNr}mEg7 A~뎣WXy;CGk Aڷ. a$gbtɿm݊ vZ |0=L합h)bANUK;`Xw$6qcu@1+Za w:0;=G58]t݇cI ƌBtt4֭[cǎQSENN3VVVHOOGff&:w %o===ڵKefA޽{'!<9R [^|+A`"DP cbzjhkŚ5q<&|v$0[lիW 8>^N:ʕ+y&"""h"XLAzHk,--KK`jݻ@C]w///ҥK5*)) ضmMSSS,]ohoȑTxH}fffE"b 2/ԩSҥ 6l؀ׯŋuѣGcĉh Z/) 5UyKUBrrsZhAK+Dl9::"==.\իWaddO>`0x=z(ͱpBlܸBH`x-fΜI fgϳ+tFr.$ʄu |e\1-t~ \p/_acc333j t]aHI!77W]T{}ŋ"##m۶ʕ+1hР`0УG :Td?B||< xv\./ѣbeeehhhvvvD˖-yhjj|066XII ^| 6 33χ*f888싊f&  H05!akkɓ}}}T[B`0:{,C!;;***B֭S,Y044lt?Hv TdeeAJJ mڴAΝd8:ֽYп|, ~:5J SSƍAPP ƍÅ c0ޙaÆquxzzBVV(,,D-x\.>͛7HIIrQXX ioo.;BVV+V._V}p\\rIII"lll0e4A$̙3g`mm :7@ 77ZZZ yÇo߾yfIII8ufN>Qejժ~w̘1Q~>} }}FܹsE2:t5g ~tL:w"\T 5 ;;F-ut\]OX_~ڵk'??{FH,B]( hSPQQA=#00O>m& o߾mgz* 666_?'']vٳqj`A X(++ 999 ;3fhiyy3prrjpxdffb߾} ʿ~EA`EzѠFf͂2t  9r 5** ,@|||c\A$&̌3{nxyyaB?u>}„ 8rHlTVV} ?bBÊ+pmtԉA`hw37n܀3{󰳳C޽fff G>r??Xx+~Wt?3A  D d0p=9ǣGu4۷OԌ;<~Xݸq!!!~9 'Xڷo` LD"++ >ZZZG~~~NlVEFFBGG^;a`ff'''7(6Aצ޽Gq;^ޣákbP3f`ƌضm\]]ѦMرLǎCTTaÆ:kŬYY`Zzu6GٳXkR^^V^ӧOm۶xI"~DTqs-v9{P(kuO'x]?-X@nޫfњc_TzZ'GGl<Lؼy3֭[c044䳛}yǏ۷odz0vXĉz^zիWŋΞ=[XNg^F č/P;Maxq&BWAFFㅅ8p&M%K0'LM zTAr:u"##I,ba^L&/DS=3%`B {~ DZҳg`ggӧ먬 #D|kf̘۷oѣG EFF #<<1118{,={ccc<8z(;VAгgO%%%򂁁/Œ3!CsE޽cǎԤ/+R8x@ɇcXn蠣]EQNV7g~945pzxأji.b:0vDB^(**3233vZ8::pttݻq ܽ{ʂƏ,8::k׮4iyyy;v ~~~HMM?>=zh\xf͂ '⣍/<ð Cf'TL݋{/j8ĀyQH:,;Oh͑.?>9sЏ #3eZې5/S=Qd'BB}.}[_Ll۶ III^J. CRRҼL&*++%%%C^^VVV߿?$%%ahhHZ?r&dBRRR`?IDe[\OHĝcܼ7 bލj%-Tey*ʞA H,Ї[Xl³)|KyE(06lbP,r{ )A͛7}e iӦoHII6m`jjm۶"j z~z_+c{_})@JFB6n)(OdԎ @Qz"T^ՏH uyֱ }MwAl)0p>cP| /߼CoT dѯX(JHH&Hvv6",,~̀&/>|Ѡqӣ[nHNɱCva=?x131ӆcֻ =M9pCˆQeu!"DŬvk1n)1k( H{ 5&SL$vMC|ZtСjvM&J.!!χ;ի߿?~7;kkPTEx07n$N[)))Kk4UrV7 |G hV(*\Ⱦ eeTqM&+^| ooo(.AD3JI GVBI\x?~qOjصk&L@A?,4G_&9'Ok3#G}kAA|Ud:,Y ,\-  :hvtC ˥  H0#eee(**BOO;UAAIBBM|۷.\@tt4͑BBA 'J4;> h&Ça`ll3gPA"fGUUrrrУGŢ! ~LDCrDM ,¤I~T1Aď)ܹsظq#&M6Aish8)SB[[`0۷/F,0 @A˃"/VVVÇhR\ (Aɤ#Dq]ر|b3Ν;ggg0B08۹;Žl|(5ú|9998^Ng^F č/P;MJ"D722225/,,ā0i$,Y?`"$4$cr1l0,Zޞ#;;;aܸq44GļL\~s$ C:aߨQYYYXz~'dddTaM!K4ilmmѵkWL6M  %%/^#PV 6z t',@:gse2nvma޽v]9<uk,G^qŴ45peRn:0Vv6ц#߮GE"8;;#33k׮#U A+\&L.]v /22TDcp>WoƟGONV~c~_Wǃ/!jI鹇w!c$NmG:/̊;|.(;w2p?[Sβߜg)b#ΪX;j8ĀyQH:,;OE؝?>9sP`j8G͛HJJ:#,,,/PEuWӓ8 *pg_+pb+\Bɀr; ށ´ ac1ZSyx"NlH/ ܣ巰ZϏ9Bqa #ܥRL?MQ;0n)Lr%`t0vjGx_N{(=T}q^*/X`ӼrO؊\; @+=-Y!T6?!ZDCVVaaaT1$ XNQaВ <,={~󘃂Pp[iݘnsO`SN+в!%{ǭ^BIm0eʔObw4thАd`Xaiih_$ 85"+fSwvxz\ Tp+"5z&"vltϺ!i^ t#~Qi SwcŮq p >rX0Va5޽{COO*hUr?C Aii)6hCAj8\/ sYbR@ڏ Ñr~3oWiF7>#PőZ| QD@=V{BO=~#︚N oX Gg//-Dii)h:tP5RHI$9QQQx=zwxl %R"M@DE)v`HQ4 JSPFD靄 $!dG HBr>>v3wg;sP/Z\FQ'>Er͜Ov;>ѼyS>1ݞIYͤ@&!fȑl۶P`UA֭%B"A֭ԱC;NN&H]zѷo_[BCC }yf͢;w,.@!0)KCRSSر#{Բ;ŝfȑf,Xݻ?dr/1'/2S-VI!3),\ğ\:>@X\d1}DLٌhޠGq,1cտ=F[˸hذa7!Cΐ!C7nÆ +-L%Wѷo_[BCK!fb N7*7S}glĪٙf{T =#ڿfҩqUtj-[0e vLܮ³0ip'=u<4x<۷oQ*Tm۶ >T>V-EKt~ٕ?G.z. dGDEP)2?܃/~ٛ9p:DUnӇc}s)f5ÈՐgߜ%[fטU罝7Mc7nڜ2|7PHp,[pOd%BC²>;KoӈJaԾiNgVV1عx"4J"֤kw9tօ{5c{ݔh4Q엳X^ {E_/=;UY볕k G^=3=3r]2G tZVcЧ?rv8|Ogl~8w1-܎aK]ê;2g]pσ|H[v痟Ms7];g>CҾI%5L9;M叹]hSߜ(qL,]jԨQ_{~@ŋK(#4?}tmܚӸ^=?КʼxOl5Ħc1q%^8;yw:ww8;^AynS^7#)0P旟u5ܐVaKRwh?<0}A=uj.ZoHE:<{rXx#3a˿˜9sػw/^^^ef/^LjXnڵP$G}8~woB /gyBs.0f/a봠 *l #41{j:|ۡaOz'bVr5LNJkcK&^ ɞD.cV.%A|b0Iw\q1:wܹsXbkZ>>|wwwbĈA+h;\˄ }T|+ +'55e#G?>k3SC̺T#okz{t^ /W nҕ0I 5Ӭ9~ 7m777JC#wɉ@ݻ3lذ2"Z, 1D/3m[p;LkcVb}\1pXg+3~Y슝1Y<>X'Xɥ|zlMB[O!Y$jm^'3x=9IMfͿ3 m~Y%-c{qB<5YoM7\ť ;K9nߨy juˡ(2aCfhܸ1/b hY\mRd5ܛð%|@}WiT=j1Y55[o^':RR{^̸69_5x5*Q.G/Kr8b)6jΏ0*gKB_~bVZ aϤǭ!+*󺏭p뎻oU>" lSOb`?/VT&LR3f}v8 -,Y"EuKxzf$sZ7e裼x{{˯R^;^\]1cưlٲ۾-EQ >87I@9cRg{5߀˗SJ/_N n*s;KN(%%b W.Z8qBJMat#oK& 4`HJ'w5HF۷/ 4-z!(4N}C :wLʕ1tܙ6m0j( -,^;wn: "ĪCB% FQ󊋏V%'ҥ .]O>a49s&__-d!uԮU?DLiii*p~^El;kr.2k׮\x;v0{l )))2;q9! ?7iM,.D&NwbC>HX0iҕ0Ӷm[F#;v~`ݻYfQn]bbb$H`UA֭% Ba*xx]jQQh4rKa1 |w8VRH;p?;wR|yjԨ7n$44kRvm d@K!.ٌl`2hb,wɕ!?;wv<+W`Xh߾=K.%***i*VȾ}[.kזdɀB! ]!qy۲e }7opPV->Zjyxyy-9!IFSb RRRiӦ] P1xbUƺuh׮D!$a*\eKbgƏϹsȠI&?zHjp1um@'|Ç.ABI OY;t .䯿… ӹsg "I 2BH$ ؊+2e qqqxzzҨQ#MF:uL,>"A]FIJk܉'0av"==___3<#5- QƝp$LKNQk~WN>͛7gܹ{RkK\d(B ю;oظq#nnn3tPZh -BBU._ɓ&)) z! VɀB! S*]r̙3{t:]6KGABIʌMƚ5kxxxкukNHIBI KOOgL8DL&Z/I&RKd@K!P܍.}1o<|}}y'8p\{" h)0u 4bŊXVz=@)))ٳ';f͚ťKQFY`%ɀB! SrKB DGGٵg)?~`ʕ+|ԯ_777⮓-Bj;v3](d@ˢu-PxT9M첉սW+.7>)u帲=7[bB$!$&LtEGGjQD-V$EpgnO%B.93NgΝl۶MQtucors}+T‘_r bĈA+h;h!Jb”߻VX(tE(RQ H11d#5u{`WٻAyKYe+^˭l~S@Yb^6gڶxw>̥Y]r(5]r|QQjȀOxiKQ:*ՠkuw}6<$8yvV6?˹ג 0jkLaKn[Q;DixbUƺuh׮жm[8p=H6>^"wAKNeEÆ 9x ӧOm۶!(b%.93N5/2111X,$ BQJ]rrg(pj.]*(d͊EiB֭Vn#\uk"(0HCZ߼K SRBB%TrR )9ȈNE!͘O]E!5͈Zr-*;.93NQ^CjEQr7\~tV] hns%KNBE!J|t'DKHHjJ&!ʸĢ s!p- U[Jut:9r'D!3g_}H~mڴi# eТ ի+~9/вw/A)]r6l,D!kּoӿ8C<|fLL6gNc1[RJn9Ν;h`p#<<N_ .Ntt46mtp8j-[ll6jڵ+8p^zAߨU$LB7}Vڵowiccϲf|'Lyuɝ>ލ*`69~8ժU)ir8:u0͜>}U v؄b0 4 5X"J AZZ0 QLRRuI<)GvضmOWdBd20p:9~DZdp7ws#dݝ䔔+ SZO Qƍ{ǖ-[7n'OfR:t(DV헄I%%xO.D_ĝGy///ҍ鸻c63OpjKS'qwwY͍tc:^^^yλT&LBt:oW^,\OO20,66)qzɗo9/9Ɠ+IS^%CC8y$`pl`p7?g1-0M,fVZZп20_~k2KV$::@%EQPҍӵj涗ZMU8u$Nʼn;wjwC{nz-fTZ(bJ$DV%IDq7o~0<׋QShԨ45FÄ s ?7iM/N!S ujbL3^4oڔdu^sZNG~O11?p0\ j9//jը7&I&!<o_ ..(BIQ\[E^C bEZJB#&K4J&7KRR_x!DH4M2e :OO?IZBnIIcIrr2O-Z0ydBIԩxٺe+tqyTI p)XuVի$I%=aR8 Z6_?~OTO nlazۣ<\vI%#a'>< yNTI p)ar~&<~8!DO6iQ:͛7ͭ@O$B|oXغuG塇 !͛ǟܹ˥v3OnZ,Q/%n0abLiuZڴj-B "2~}x !B!$aB!I!B&!BIB!$aB!(nV#!Bik;ajJFB!Dvż !Bur B!$LB!0 !BH$B! B!$LB!0 !BZZ wbbYQ_}j zMb-XK -֒0 qgdp?ARRĥ+R=CtJ%kQౖIjre@*UtfSl>l2K%kQౖkV+GMԨ^]t.tԬ^6[?kZJ%a.R`܁p.'%Ѩ]u.].Nb-^‰j3g|!.HIUx$wISxi $'+]taŊ|>^Z]sqq̞=Garr<c~vCW~~) +Yr*6&bE4ztKN&!J aP{꘮%vX Ҍi*G`Pd$Ӝ?KCaa0sR U4\˚L&&MeHLLIQ2X]|GSSGl9N3g}A}QL>BF~<`I?[bX-&1$'RQT [Փ#$^ؙ2u2~><ڵF|h\FFx^G׮ĔiS$aB nHO>@(2JIP7%?ŋWFѠjjh4Z4k֠ڻeh 7I{HO>glPVibrx2|BIpζq7ջkһWDX#&vEdY>lL˗_M*gXGV~>ke@5QG-13GD{ "#"%M|4BBB B9wlӮk(>éopiIfvVBR(ȞK8[)six~5kb?r'ja3bϔt?P#@!#% fJ8z:3ϯtcL_{Oޥ5y6Gbx߽{ѮPT0Ml]u}ydɾ{iPar?k.|r׮;V Zk-S^;vȈp *xQ#>FV %RqqqoP*$LBaı~ϛ·48uN= x<2w FCJa\x0 EVExJp Ξ=Gbb"#?U*괫KN0{>y3<U\X8#Qzz={C8|(fO= oҸ|;Rx^${ygֶ\˪T*6LUkTiȰ9K\o䟿JWLHTgc U EXkӥ|b'*(NׁcH)oFѦQuʻQuwD*VTJ*4:4/~yɕh<ְ ,y I(CTpye6nH')xSr+FUC PNhJJIDAT].n%\N7q`Dxr1xFGcx^YsH[LÖ3O&#|y(ί}\Y KFT^W(۝oqhu<`_Dk4z'~T b+x݊$99̓qC,ߐ0Ȟ\HaץS0xyzr9)/X:Van `,_Ž#r\buٝ=ᛦ9E_<;wm}Fͅ 9{?_? "$$Kq:4.\dԈxxxxYŇ nIg9 ~*ӷ9Cq)XY5m~tG I(#0q:jj5}ۻO҅ ?4 jӉ-** 7JxzEObfܯyi"6^r,Z2 X"ZS6Wx9؋o^vl:^:GX' j׮o>(R!o|إٻ]]VǠSj#5 W@V &}5Ʋ]ߋV9"={Y8LзՂZݝԴli8/2Sew^QS ft*xwCqufr,qr"[epoQNTj5:ՌbϏ[.S׈$R'_I/ǗϹ ^`1DDDBZZ*xzzJxx%"""?~ Rs[T]_?Iϧ}=nS\&!JBt 3qlJU8: n*Q#s_cǎLHHH$00Z?.ԓo]`єl_96޷ m=\V9* ƄM81P8, 7P#-_{$ە?IۊGS縷Jz-* +} ^$_L)bPHB}1b<1 ` 99 ŌlǗKu؜7/n:Pե6&i15&S> 6 piVv啑θqKPP II*ǹsq=II ߗq>&#=~L=xpd~{v){.g>sI(ML.łq<ĉVHTެoޔfa8W7oJ7mGE=i}OBŒ}9Z>7ut)7k=W]E%?ymq$AHli\iݖÞ|na> h:.gq.M8FNZ{O5ѫn+Ox1hrm8iZ Oil*zOHHM0=~3bݸfGo ƃOH1;Pl۹!k]ZDŽ|2~~s Zu~_&cOHJN˫gΜ왳;wg")9}*0vdLZ_(3a؝bOׯxlЬ27Kɞ_ 60 Q|Jeң&i&Ծ8cb}=Z_ 16?cH_S#gƹe+/L&E|z]rM -vx+^cQ76/~{?ooZ>5djJE%׳G|n>D.!-"W.FESaJmf5ح8lW@~l ֌lˆhV >XV8yߍGJ5\ו(1`ZYԨY/}I7eE0T _h59|]J3QۻTz&*gGwKၿfӧxzwFrJ gΜ#3i|r|lE):],z.~<{4EfnP}~;>Fa,kVVo!I+bf_2I6mQ(c9Çڥ U(# pnނ g@6IA5|FHݏa27~Ѻ [wC&}Ȅ럗|˲#P>$#5oZwwn7ZAhDc1%switxb֚yn~|'^wR8QeWrmt3+7f]i;!IVnC8t kx%/Ξ=GJr ʼS'׳nL1 vMrrjnlܿ#iѨorzzz{$&&f@QB\%օ}X,XVBBˆ;Gpp0ΝJz~:f@L&Z6kpܲgI(;\Ka'û.8jva5jw(\{dJy;I{F,kAa蔺'@fmsA/weuSUG$ߊo`u.IC4Zt/  7Fm63iNtNjEゔx> 㱟R'WRQTuZz-Z65s j֬?;аa=֭ eݤ[oi}.)VF?o>BY|}pww\r?-Ǫտo~屬h52gI(-L ͉- ﱙM ^?!Pz*Yo,Z+"7i3N Ӯ4| JAp]VnL,[34 ò,R)0qM;8`"z" dc S!Yo RU!>CAN "ͦѴ}uCF'n݅#Qm}ޚ3| &k/]ؿ_`"z,.,`z4+,.(י5f²^-qM$Gtt]8}"3 ΩQX);w03֎O1kfͬi/Ys`6kXRԺQv'@?D:Fe¬5f/4k0uEi>o|)RX`M$ +E!UroCxnݿoE^%I<2eZ $;w=-:~v=|CڭlG52(>>PoX55@pW\?p]c)9$;C`.@Na9YwecYZ- ޟyOm_ u lsR>d叽 [8:S}|0[.m1ǝ*[Zq٭I JEi&qC7caT*%L&SgQӡm,>huzgdS\R`@ g':zֻp8)R:+[CWIGOPVV@HB.[$OLfL~mX}q|8Atٶ>[~,;ѷEvkڮvJK#V-K7k0]u皴':b| OYGOv:}&C?OnA1& uq hO |=0-Vǐ$ D,[R?VQO3kLW ջlek(ZCGY~࣍H%48햕Wj-jV .HH45z(eW\d2܈Fmz:hٝw=Om`DtcչuY"89:q^DA B igүSM$bB8v ;~qur{[RJp?:*N,RöQ(Dh$Tc?{t SgΑ_7 ~Í(/n-s#wrcv[<x{S*ώ7}gG PniҤiy_  ى,|z(Y,N:',*Vg?":2 GF#IǓߙ 7 F3p2:f6[H:=ۇw_g(8Uz[u&5BcE۫:`7%׿o%ۋ|"|QeO@7r&B y@\(TWH:;Nd@Vッ8qL> ] ` 8r6Au?0cXσE=g޶;ޮTl~CiDn FigO7JbC7a!ӛذ=g2(*.bL-+_ owgaQC3=[ӱ˫;r{#V Y}"W_ߛYo}g_[ gnn#JWrF&;sL.KCx8ƄpT)X ""ps\hکfN$)gLd[psq`CP9~.oweMNaf^^PoOIwwfoqrv$&:jJ.NGuYva9ΎzzKFMdN !9n\!WxumĆzs:`oHX^%ϲͫ,x_>ۣ:h!sG[Ā.u]y;ref ?v&N`ü)Q.-@RrkbWϜowwفCs$Od'ZJ}nEg!Y?6ByKl7 JcUf=FF\7x?7۾&.:)@YBb{g|H/Áݣ|qoFRo;51kzىeM_z3JhkWi^-ύk4aHt:bC1, `\`4SRRFx3 oӦt>#qֆ{0oK\ etN՝N/bL|=SeZ$22Ҋ" J488(-w[ky.gg**4DUu9E8:8`06%;[6gF&bfױ fߓ`7:2Dzp=DZ<\(z}nnԮQOF!(П0Χg G&[B}Ҳ|4mb_R xn-t \TFQLfVn:dJ+ťTĤfGؾZϹ|]vRˇI²oFVm+B$j;Gg3IlB|7{N$;`OI8{"ErGRgl[)v\K6^}v=~XɺS2ξ]XMJƲ+bCP*L+`ӼP9mf ^MF<ݬbV5 +=EE%j]?g Cz5(r-)5WbBstPU귴5.X$CgrEi;DD>@F~N[3m)*?ە/..jt~~p{UȤ]v WWb#Q:_LBo6e+R=''gR2[btzNsB;Rm-Wh&R5`!0VV>5/v\Kh YV!͞zu+m?D~)Q_ ***XMLWx.^ԗ%OOo0@~I%nz.-VKAA!A880M9;ZGNss耇tl!. WW*+tv((,-X9]GYٹtrqD$Ifz#}h˿clz'0Ύ<_+..ά$[O nMc@(o8HTdx|sIuNhϱ6A<Iu[z qrtR%&CBx1 g\quso{_77 N v؟ow& WǪL3FҲr}GF%*b@fSXE &"sh4.&jS刲dVV.YLYSqKy]yk/:7hnJPj aVە***m+?fCVūvS47N0}-Tp L2&L/GmxRѤ$I`0o2[8y pWGGzޥsnޙ[w&**wv`` l?WYghaGGUχHJ`9s % F^~!6L*Z#JIؕLZ7g6l?MAa{,eՒ电e4ύw\"٭K'uTgPcvkj`~R=lJ ;Tj48 ˛̜\.^ܗ<ڟ/9×{u{[>xֺұLٌb ˉ#*"e1RN˵>[ m# FŎ1(tz-QU&"ڇ@rQq(PWgrfB.#8f?e5k0%96DZy&!=˜H?\y,:FLtdmc$A`?w^q7.^oz?O&Pk/==YcRh:9;kLC 烯2N ͽ}9~.xwO?rrm yeF%*bF?\]\H,˅ ږLmD_rF5T;ߠsv`ۥsBٵ ~kzN.TkN6fG׉Vw8~2Hmpttq.-:%j t9~ Wg".dfPVVlBTNNNVǒNb2Bɱ'1tJ$-:%Gޗ_bA倇;EEHtIBi}~xHݻvzfr1L888I~A!$С*&եFr9nR5deRXTYH֟R<(^s)-+ˋp8SQ)tJh_~5&,k Tu'c4о-h 媶]fΝOG.x:u7 )YEdّlbQZ!uݻ^{H^߈eCݝ.;yyy]L!'<<ѻG|Ht_Su\']. Mp5:c$ v-oϪ[ۆEݒИk`Ae "",WǎuMrg;*2"E?rGroйQ;L)r'.kDWg'TJ9lν\c{fa4YnH eE<],Z@ pqr@Tۏ^R;dFS7]Ig@ Rӕa_R~DV봮J@ ԡH][Sν[wV!A-ڹZGOqQ!nn3@ KRQQn?+3We} 7~^xK Izݾ @ qssw(^y!A#@@ B(@ B)J@ P @ R !@ ?~Y5[~Gx[ 7ʫexyX! O>yS;_9xOLFU=#{|}R$^xE>Suq@P̬LyH|f}m/#G7w71%sxEd21} v ˗s}c͓Ć ٱs')))h4ڵ 'O{7ɓ'e޳zUWqFOSQQ}'sN4/*,hVK=@ LFөvvmB[RY6Φم۾:g@ %Iy%*OߣRxG >|VXXȯƯԩOEvw`„zsc͚v999LǏ7߰q&}mxHzۖH;(UJ#yy$'%#I[7n%+= @||Q8~ڗ%GÏYDG,Y;wl'yrs8r >h%]X^bᅮNNv<Ȳe4h䡇&qq |͹rs8x`?IpP0OLV3h;N|2<<E& +::ys?+>dh#Itk@pe%e9N<<(SmN8_))rB(S1AxxQ^ZG$$Iɳ_R.{D /_dɛWYs7 ?/:I;-M ~;C>]x#Iiq)* RL.˃oW'b$ڭggep\̚9~vgjulnzhz_ '$'%S\P'nÝrQTfҩŕQQ$l^7w7*+G&QW@Ǯ1.߼b|j,TJu7X\ :uJ9sܹ38;;#0L?Óyɤ9r;wt-Boۦ[ՕRRΞM] $"&3 C$||)-$7;0g11cɁ $08 W(ORŗ^O?`4oFlՄֱbcca}q&}1V}N([]v۷;w6{z_ 'r?MnV.Jш$IT* zl2\NVz99(JL&;u+KdZ3X=P'$I,~cI{VG՗~D8-~c -:3`}zi.@p3ƘIc֫\. ev[Ey888 0 HCngĄ899.o#XnSM[ӵk{q9`@Ѱg^&L͛{{޽BL&ZG0u4tr'OD\l, n6mDaa!f29²etu U\aT9@ 4Hp9T*/nt??%pydWmW3['OBT3ٰa#O1*Wcعkw9N3|:'Nĉ ۛ7/...] 99)>='O2w<Λg B\f㔖ҦcT*U{FzZ:i)iDENxP(̚[la>W^㏼ٳZ]t){W(wl6ofΝ>}Rf) IDATL:KNömfOS^^ӇѣG)۬Y31|7gd`0.)ͥ_ nD|w?ήXΞ: @qA1e%ed?m6 (/-ݳEdfL["ozz8@ L&]'~'~ܚx+ӦY$Ք6J QaoڴRiʞt V6縭B(3rH6mt}3fq}(Z!R Z1WR$/1a~B(@QqԱ:wۉŏ:.Ȕ.NN6rA5Cr n7m -7nW)+o 1ϟ`?kqkÏ?KTt$"3޴{ukݻ7FUW 1*+dgQ\\^C,O5ǝ!Cw+R2])--SN @^zQ^^*K:J@ h\g)..g_7; c1cYboIeB<`'{kٳ'ee~<J@ YQFqF[0t7>{5شlMJJ/`}Mc[R0 ソ{.Uӡ}܏$Ivո{w^&NxN:_h VL}uVzr֭;C։oH$.łrQd9d*>e.]QЮm;؇FPZ՝3qudB)FWfر;XVdYzu5G$& ?صkf۸oz) (QЦMd(-U?ć.K$P  8trr믿;Ýwɯʜ9s߿?_5NNNͲ2 LEM[tDYwXm:wDnnD`@ &ӻ}!@0L֗s{?_U=4k| 1c-|Yr A_'_Cfd2 eKFW>QXli0L8::N݅P ͆$]\Yn3Ly7f׿1W|E|\<%<<<$2"##ٳw7 1r(!@pIM(ƍLȚ5_2{FEi{M?gf{S;{ꙧ!CZl}iT=4c11 89PYaoP(!Mݻo/_}ؘԥj\HNN"IRVVNDx8vB`䈑B(fQ[Iptt_+51[7۷sgRf*E`0P\lh4a1[T[,f3fBB]ZliP6S}"EiY)..nKeceDGP^^NXXv$F 4V:$q[M{ t&W0-)VVSRWa00L  =A_  <yyy8;3|HdhZ|}.I(3J@ h}RI/׮%hܞdͿ1j]g/0KU"%۳H\7f,3FJJ8psumvk3dPF#yyy>0(WǠc6[ppP!Y$8n"b}F)^a'7NZ;<5kFYMzp+>\I*T:ClEȑ!!!!K S"H(ۊ3(ʦW62ZJ0̀w R7 *7N^5_|qEјڿ_e|}܁wAtt4...X]RRZmt+ɐMT t~B)N)/ >Ě/V_1Ӎٓj~QRѩSg9^-;`rw5f3JryBI4P(P(Mn4P AI[UWtD٨zFrrK%"oH@p#|衫d2Fb2 Bb+lUz$ѤPrU Zց򷸨_$Mƅk.PEEx{XITT[™ɶUD@ F#ʫ:r2޽{է7:BAٷo7Lk0XvۣR9rԦ3JGG#a|FX 5"""uk\5 ooop*+ʑbH0paJzP(cǎL&ٹiprv]t|Z ptt#V@eEmQRChh(fɷ\.$J%N6prv7M~R@p1lh8! Uң{"7fgK<MdcB1T'ekz+@ -3a-Y5[Qi!?w~QGq/6D@2hve#EQGq/-e&=Bf""<#JAkoWW74vq\>C^oǎF.mdeft}\#Mlp+RG/bSO1xdgg1v}< /Mq!**xPb=奤2#J77wN6l cܩ(yvW`m9\kj^[Ė-ߓ֗iӦ1`+wNX ~y+9ȴiS:thX{/VDbb"KyÎܭf IT(ш#:BY{ۋd'L+\]=oY_ٯu}ZjcDGǰe())a,^oMVY ?!o~VX!C4YQ^d[NݝKeX솽C|>RRP(08Z~OWZZO`P0~=|[o:&t׏Ğؽ{7WKnxҧo_?nW'*:@~˯'X:gCqлꫯ32oCii)nDȴ3t[YYj;6u:SM' 8.]/oW\.חѣG[l}MG?٠䋅-G_$"<R7w ʆomni7{ͷXZFQ׻4[(=<y㔗yxz̼W^AP2+ujjЉs)c n+ODŽNl-ӧm=#;z}5v{0pOΘOjj*Æ С?qvvӋ#`?udccZvab0lpOjֵٮ}{~ز拔]o_KIK;Ç_˫I5GNN&88Y~o #?/RiWfܪWMu׮+V0d`^~% E韫?{)G_{M]cUL6 >^w{8h {.xcIIh4dvlήf2l999%^kh׌3,xU 1sL34v線U_9*[~~!!! }m"$$I?_O_8;;//!I))),_I'_79}O_k􅏏YYY hݚj7ǻ1w-[ΓOuCK~E4w*e|G}1^]ANEE1qu 3< ~kWrH-1i׌:t,\޳pUJOO߿ծlvu9:j`… :kqqq,Zq7Wj-4p _~gy6njyЉki >Ebd/I$%,w:~6<:|w}y'2*Qǐ3r̙ٓ1%2*Ӧs=w B,$ \NLL Nڞztq ޼Z(l$K/O^٫7A ;6_|y<<ֽ@>}ZP>;g6no {ES+mifL!Cl>>>;{26|Qtq S֯Ѻ5nyx7[U|-hp1O~^:ΞIw~4;am`rsn:-|WK<1ÇP1aXGֿ: E޽y)oO\# ngX,֬]KZZ_7R;נE@,BB?D&  |!B)EM2M)R@":&U>Wuy"n@(@ rB~*@ qL ~|lg@ @@ B(@ B)Z% B(E244nk߾=SL!==6++몊p9sL_VV+B^CL2;vvHIIcǎDEEqwۥINN桇">>xz!N:U= 0΋7$IM$-ZDС]mƸq㈉cǎ̜9fo*5R\\LbbbĉL88wΗ_~yEhjV:u*qqqtԉ~EUQfeeEff&;vM6<73r뭷2sڴiL&+رcFbҥBΝcر׏;vpi-ZĦMli7nCСC:tC2~x9;;/؅mݺVիWw^mΞ={Xv-~ʕL6$<<<1cF7y뭷BBBiZ)**ʶo2EI RLL4m4_)11Q,%%%(江}YM6R6m{NjͶTt:٢GFFJ0c iʕy'e˖ _l4sLwI#GK7l0ikå;vwQ5h4vmMŷڜ9sF[%V[̘1CZvmy 4|)!!Aj׮bŊM8Ķ_\\lWߦ|vy5'+m:VTX M~ i?r϶eK)%Cpkt9MқR79#iuҤɯ|aq!i֌i%?,**ߧ{{$nѣGqrrbѢEvæM8uwu?|Yd yyyڵ;wśoyIjSVVرcꟘ?jbwٹs'#Fh4͎;=ztѣGי"{),,޽VӧOӥK~Ν9}toN=9/ɩOn݈cԩj[oӧٺu+{%''CS9SQڷo/%''$&&JgϞK;wQ\\lwޢju&SRRݻ7VSڵޢjiѢEҀh)11Q7oݝ.Fӄ՛h4VZ%=#$IĉիW7xW~- fml6KaaaMJJz%4;S-&t=Hs&͙3G*..~Z6m-Gvi[sޛQ>Ҝ9sD={]}eKM?ĉV^MII zÇ̞=+Vj*)//gլXٳgkw̙O^:;%KKnn.K,aܸq>En:gFT|k yjΚ:'L… Qըj,Xf ΝKvv6̟?Cs{slZ-?Д/o4eK׼[svvgϞX®CYlƍ#//X~R^xsҧO~?dҤIͪٳx)//'00G İ~z/^̢Ejtn|\\֭cѢE,X={_hz1i$8p ='Nſ 0.ߙ3gpuum2S7&L 33~j4hK,ϙ3 2x`$IgayU_}cȰa(++#11O?ffj7Κ1Mzo ?N~&Oy\@ aӏ6̘C(Ә0[$,K_ " qwdݼDf\)*Ac@@ B(@ B)J@ P @%%%3@ @ B(@ B)J@ P JBB_B(Ņ$ed2\]] ٻDD)KDJr]wSfsY֊]+Ħ+,؈]K!RRMW|~َ)lѣ9s9s}>眙3zh899ASSS/--Z" ׮]Cee% ŋs2ܼy0l0Xl8qI1!++Euv؁0^^^n݂2rJhiiT^Zzk#%%ʰªUV˶FInc@woߎ[nAMM ˗/ǬY޽eZZRSSq|רƜ9s8O'<~...ӧu̙3|L=zΝe.k.!** HHH+ۡ&=fff>}:BBB Di (((1|pXeee(hkkDb+WBSSbcݺu޽;TUU퍿g՜kUZZ.]4D)w΢Q}ZfJΩ_TVVJ̛???N.,_:::PVVK,1ƚ5kD#""DXXӧOc͚5҂ [+-- W\͛7ca*778}4;0J_CCCZII |>E$-- ?>֯_/_XX]]fximzSadd????~\4_YY>>>ЀVZ˗/Ss15Jb& PD c߾} Cii)jjjƹDXX^x/^ ,, ҥK%ꊤ7 (((@@@fΜ)J駟}v߿_bg)dڵGaa!~u9;;;l޼ϟ?Gyy9V~~~(**ߪ}iu\_~լYuV ~~~7n\k9s0elL&W:6MLLL ''eeeGѣG9թoظq#&O 555|'9Uta~~>駟RD @@@QUU%e}b߾}u y+4{{{N;88`٢ezkנ"dAVV4440fl۶sP}v̞=1΁˗//lllgggĴBz`ʂ&N>(|K6xzLZ:!"ɩG1w9p *B!Ž*VnT3h+">*v,AHppF=qssCMM 0a„&B!ol@(dC(d*[=zQ]] &`ٲeMJ'BZ[pttlv:!&&6oTBHkSll91gK.ųgd^ں~) ajj۷#ʼ=c͈y͛S͛y&NyѣG_qEEE~gŋp^_޶m۰p& 88nnnHMMťKwww}V_{2ٳHNNFBB黥wimf(++ƍAvv69~wc1^aC$={WUU˙a ` `+WdUUUQ^>clȐ!lݜt>Ͼ[fjjXyy9`6l0+21Ƙ[lhѣGɉߟۗ}'@~y6a,,,?y~YXX0===fccy<<C+gVVVJsJ+/-5oϕH:e6l`&&&g{)Ӳl/_dMڮktqq19s濺܇-gvzS'l\gvbll˱۰{#llW?HIJdXQx<`ذay[lgϯY!>>'\IߵkRRRd())a͜}v@ m߾ǹs琐OʔJ۷cƌizo%r;3|o,==]gС,++K4͛5477g>U?‚=x@4φ ©ٳg:򪭭ezzzM8c*QЫW/&D[4}%fkk˄B)ֺ=1KKK)ٝ;wܹsن D &1־O7mֻ݃^d [b+))a%%%_oV3Ν;Xd ֯_/J/,,hZOOs) лwoN]={ cǎ]633{ݻ7뽟?MMM70k,044DQQ(=$$.] F?S_.]8׽|> ނ]rKCy$mu^III8qܹ{{]FUUUTTT+***޸q#6l99f縸8`Ϟ=ׯX< u|~EO!==...XbE{cmߣ7nz-qj}UCCRЭ[7M0Mw/_M7X6Wo͛79X/`رO?...HLLDnn.9pAoS-d̘18u#|W(,,Daa!+5Aa޽x%={իW7X̙3 '>GGG\?Gzz:.]x%ҰaUUUAQQ >|>c4bl!9 ))swߊ+w^ ޽{-^OOO<~-زe ?ϟc˖-pppx֧wBJ+/-5 7|#G`Ȑ!bHOOǏӧs/ӧOQVV___"///ddd#??[l\cޥ>}*={ O>P9w^Q5kѣGc޽;'nݺgϞ;;;GuVZ XXX`ҤI5jXeaaãY7Y}rȐ!Ν;9}vlܸLj#8uL:044͛k.Z-@__;.^+++aݺu59rgϞ9~xڮY`,,,0~x??+6n܈}:LLLp!8p3j䖹=(}&28.ZB.!6!a7K4p?J>BP U5|Ll"b)AHp0! BJB!%!BB@I!P$BZf6rB( !BB@I!P$Bށ@ibbZQ[̄L( !7(MLL8VVVBnnn>:611),--1w\رEEE-^x-[`ԩ033èQ|r*GСC''OFF.] XXX`ҥ6gᣏ>jUqq1&O,9cF;wruI6ݻ1b&LǏ7i7V^gFiiiHKKCjj*"##a``+V[ .믿Fuu5̙y*?Gmm-ߏ7o"22ӧOQO ǏKKK>} XnΜ9#ʓ WWWL8шĉlN}ʸtg^tt4TTTZ|Y0o }cx<+V`߾}Bhl,m2H[JJJЭ[tEEE;C")!((gΜ{k׮a IDAT~zjhnoS6؛ tj*ȼޥ@ـΝ;c AOO]f; JJJhiiU_n/uxo±c0j(+j*3%g c X~=.^ڟCNN/`eeY駟6k4$''eeeGѣG%ʳi&lݺс3Ξ=+J8q;} M_7nDEEuQFq۷oٳk^->}?0`N۷/9BBBdfG}$:={K'WuAԬYL>/_5g"mK+/:en, hx8gͥBHqQ̰%8NAY%!P(>B&6_S]Wc@^nB'!P$B(PB!ӑBH{$2!B!cP$׀P(L(PBy:G#JB!DI}*`:x:)(@^^^riH( !(!.%!BB@I!P$B\l!„uj B! bQ,Y۷/lmmqiNt8::FFFpttDzz>a0Q+Əb1l޼ĠAwq> ~˖-Caa奥&o-ڒ,̟?044󑕕%sݜ>ʆ`?BZֈyfDDD>/^ą pU믢`!55.]:e./-5ymіaHLLDbb"*@oi_-O>\10^a;?IҳgO֐i bfۛUWW˜ٷ~LMMY~+//fÆ c<<ʶUUU_~2߲YZZO`QeXj-v'-E$%en#>>غuvBJJ %%%l޼S>11QQQͥ!;.66vvv扉ٳϞ=111y(,,č7qqq(..ƴiZl߿{56leիݻw1m4Z]3,Y7nlm1ydeee ĤI8yѧOX[[c׮]M*_',, VVVxhD)i,#ʇذadN`<M!Cp?{R1Ƙm4O޽%橭ezzzbÇ3c?tՋ Ѵ@ `{7--YZZLKKٳ'+..[{j I#RSSVO>eBbٝ;wܹsن \^ 1cưﷺՌ(swޜ2?{ cǎ]<633\ݻP7yuBhjjwpp@RRN8;w޾EQUU銊 勋 ك~\^t¹e[ܸqfB CCCg}sݻ{.̙///|8p pȑ&N-okNNunn.u&sn޼ t4d̘18uj1XYYaԨQعs'3b077ѣfx}::w OOO8::"&&/_>n*ʻk.!** HHH۷o#,, /_9yTڵkk׮СCHNN5ֶ#,, 9PSS^*Xf /XnwUUUx{{㯿Yz5455Eӊ(((@qq1zM6њoJKKѥKF󔔔p:()):Y4ܷo\\\СC]UQQAeeļtRC~{k h͚58}tlgFÇc͚5bBdqqM M!z$ 044?fffѣ )) .Ĉ#`bbÇs~[AWWW4]5cƌƍCQQ'6gzΝz*̙iӦŋ! `.]m/PTT$1!55gΜ{G2J lu_e˖a۶mӧO[[r.x̟?ׯK?wѯ_?|???Z rrrԑ@GGG>|pa8;;VX?.\@jj*9wiii!//O4]5t ќ uX; DLL ֮]*N7gϞm4ȑ#)6?22R*,Xk׮c200۷Eӷo߆!'ٳgj*رCEiexmjg#Z555H'{FF.\ȹQPQQ_~***8p( PPP@nnXвsa###>>>~+W"33|>1Z퐻;ۇ0iiiqAŋxpA,]TbHJJjћxpPPP`̙~ ۷o%vtKKoMv[ԍPTT-[`魲-֮],|~\QII C8W7۪7n޽{97mڄ[:::pvv/____@MM ΈtZuwC__~ieĉBnn.+|IЧO8pGUU  p}ž}???9BBB8Z+{{{N;88`ٜ)k׮AEEEjyiR[mfBEENe˖ʶ?~<||| 3۶m E6^+Tn ڃ"^ߧ"Ys%f:~3f##ttRP\OՓ`B!1( ! BJB!%!BB@I!~pk׮2B( ! BJB!%!WtBțvyjKBByWe{9z***ˆ#hz\]]all}bڴiIOOǂ п ,ݻwŶǃ1ƙøqZt1͛7c4h[ehoMmm?>233d[OGZ[H*?`iDl۶ .eeeaܹFLL ݻ͛7#""BÇpppԩSDL:Ç9)++?̋J.g^^$">>.\@tt4믿\oMmmtR >7o͛71tPOZ[ZvÆ X`(<~߿?'P^]] ooobȐ!ؽ{7t@o000ҥK Lpp0^z59322pE,YJ;}vxxx PTT9BBB8yuuunnn.-ãնAXXV^{V^g<1115kYf!&&3o(,,W^Eqq1lmm[mܻwC M<䉏Gtt4QPPm۶5|\\"""p]|XjU^-ɓ2"((&Mjmall>}v@ hzsQ5 =zhV6~ gp)8qB濼+[cWXx`&IϞ=*++hܜeee}gteBCچ޽{FKbZֻwoٙ1Yhhh~$}]]]&DՋSɆ ֤EEE}~xݶz 1bٳ'ٳ'1bim۷ܹsW_}%s[ԟ?fv}KK1^aML 0>jkkYMM bU/_/+YyY++-e%ŬXo6HIJdQ^~3g΄!tuuahhbQz~~>D}ᔗ3 033y7nĆ  ''GCvk׮bۅ<b )6III8q޽s6PUUEEEhŋPSS䩿!??I2gdҖH[VoooΝ;sΝ>M<  ΩUY;:u ߿P@>ZԠ%^Dee%*+*PQr[9$&&"77;ttt-Zݻƍōb$==fEw/cƌU8~Ǐc̘1bxb,_PTTlm0`$''SRR>@[[I i˚˗sQ&$$eСBa׻k~MTRUU%%%(**";;[<̙3qFx<bÆ MJwttĪU#|ܽ{K.mj w|5vi{>s"44Ũƭ[87oy{{cϞ=8|0Q^^PٳDvvvΝ ???<{ Ϟ=ήxc` ;B!_]cF( ![rrriR@ Gi(PBiw:ui)M*sv:uHBH7[!=F2y>>|z fP+BizըQz "Olwx塩QǠge/lB!mU߾WSBJB!y$^|!ϟGmɜ IDATmm*K1%l+dʜWNN;vI)V哼'q1x~NL!D/ɔ)Iz S(]KOФ'v3!Cy4!&SW(rj> ]JL fz;7[*cmB!͊!M uz‚@ <CJR"I !b1kx$ϟ\OwФ( x[x  4$0?&C$Š]5qI06,1XM+^RPZRHmp B p'zM;HA:uwi)dbKɁ !rIV &J:HA ::|nݠ Z>EZ:룏'y޳':ˣ(%B#JB1< ﯂< ѳ*^RG@jR" FN t+! i !Ơ&߂Nw s5(%߽G_P[[ y J SDDC !I1ZZ`2xJKK%( 8֧W ?^ !4wDYw+_=tQZRHT(qenynZ,TUFI!#ʆp<^!uH\tzzabb;ɾ4imBiz2HKKEvvƍʺBG?۷BE|UZӄB} 4Ly?=m @ TE]iByу ! BJB!%!BB@I!~[Ӈ ~nV=*0oЁ!@U/PQQiv=80ܜ2!fkUíTL: JSSUŔ) --崖 !eyY*++J(/P;!;wwȦB3 _(B _okIN?VB!YJ玭maA(!Po&MZ; !mgΜ~.P֢JbZ [Щm)BɈ 舲SNԩiB!Nl5Ǧ <ٺN ~UdIFI!(L<|!kIee%TTTPh=BiV&&H 0ƚWQQk 4Ș~ŽBHQ33ܟPYQzTTUahh@wBi'CiiAƯU:@QQ;vL!}:f!A5!BB@I!P$B(PB!( ! BJB!%!BB!( ! BkkEz˱B^!B!tj  ISUU^QPSS!BAAjjڵ+Ԩh[yt2RQPPݴ1@5 =]RpJBPxOScdB`p ܆~xO rrr#tֆ2 :g?FqI TU5%uA|exW:wL[6v Bvڍݯ7z #=#t Jc[' TRR3]6|MJKPRZ^zAGOںiyqF 2á!|5Hd8:cx8u(V`̠APh`pwvwDy% lu$'a1] :vacavXOZݴ+,hs+2C[[:t@lt1KtjD(铧^w((Iɡ{=wxEM] ޽;:uTo˃/_ȇfWMуK%&%w/N#SFvR脑FO>/ǼԈי38::V_8~ xK]7kys|-Ν =C=ܹuXP숱{`hCablΜVwjjxP sjkk!//>}*TWWCUU=z@nN.UZCNkE(9ջ:uP*BTVVKoã>̤gIH HEiꊮH]V(wV˾.bo(4! %!$!!LFT@BBtJ̣O3摬klX-bY[[˚^V#xp=GB{ Z-[/oj4 45W}UeL)-(,ݻ0b@e>჆-U׵I]C{i~Eye$KID“OXQL&JKqpoVLF>H+M&kjZ?9̸{1JM:`+OO 1mё.;-jrQQYw?~ϠуFtvbcbX,ЇJol2/),g_^MڵkL(d&SRumąR[YI޴#\?j?U.1]{vE* 9d$_ojiPgt:VZɎ;ZݞF@`3IYY'_A۵7UU6g[6eiF(JJh]Yv3٧j%3#_oc?v&&~پTصc&SCkX8k;Ď?qQ,Knkm?_vPmtݝ‚viOCyIRkZ|ǘ~W{?V]HLڃ?jېH$FmvҥK E&ɓ$/oCd0xbz+  ӗP͟hܹ@2' IT`4؞'B҉>UR牉|Hvq1 ߟ]?om\]]ypD}D!(8Υ޾d2xoyA~үux뚯F7PbƲ{Q8oog<ͨjWV:l ѴNwϾy?FddK, a^zeVK/C?ԥwmm-NO*̖Nov:T*jk;6Y=׏ϴ&T65#܉ZlNNQYQ<wbOh4r-r퓰-09ޱi掩[89.{R$O_6귥 PZRBa" w]%_kݻ]$5eeeY呔ܛG@؟AuCmFrFyo6N[ZcÇ;}_:q\VxW9t0۷mcTj}} /Hz vl /())l߶30WԔܱ]vDڹE?Řٴnտjj~yy9/_k8=} j\]]YhdǏGWYeVV6۶mgvmljjs@LL CpAL.gdкh‚|ŕƆzCB)*(@!($(j0?hFCE0ggg =+a@Mu%F>nY0 BtÃܜVL&#&6'"+3vVP0]K:_֙ʊo.< Q\7 -6%+WDUeVXNCӱrJؼƲd<~tTTGtPޮfeL*eĉ$LcЪTTVVg3^lܸw}~Ț5 Eec駟fuv777VXqA^|\/6okê+8vIc6/D"!Wxsnt*S<;DرcYV%''eHK;JCCCv˘2y2/=s8;w볏o>r4Soçjgg*b4ٱ'ZVKEy9...5 q𤾮͆Jh0tro 8~2}b|.zQ%W8[kOzT*|} 6?^^TWS8wD璲>Zr.nnn,Y%Kc8ɛo<ȗh2B(,~,R"8DCC53à>9;S؈B.GR!yHGTaO|DIICL/4~~'Yv4Jo;]o{[P׀[w7 x˖qqqq3 p ^W^}}NJ B4Z uxl#q0L;^a)N46OC8y"#'tq`6ZtzJz}#Vk7Q(Ra2LSSy;^ިUj8D@`_)]cA=Çr^Gӑu51xp~M;׷SpwAMC]%P׀gFջ7V$"wӑKxxsbfO>N?gx,Bl&ۛJhn.څZɉqQo0KDB^[oq73z\Z|}}a___rrrx:{k\L,兝9kϺ@abb/q]`I儓,HHh!x‚uLHpnUb4? zoUն1Da~eds;/o& zߏC)0Lþ'o7TօǏa61 ?PCTWQSSM]m-V] 8}fQ[Hh.i-f3M߀xzE7SS'= ښnmҗfѯIزkJKKX,lru<5ed-^LYYeeej&RR8URB#"MfQ2ube@@Æ g! :u ̱cxp\{3bRXXHMM /xϴShccoé:<?k$r3rwKڗu^eɒ2i ټpfμʜzy7R*R][ӮY664u޵Nj%W8nLώ?k|}ўp`*lX,-IDDFPgNvIuhjj6>}([IIN,[#ٹgNf?~Й+Kaqy %0(Őt{Z8~PBB{Q_W'~de $?]z)-6⩧˯bQ2hll䝷߶y/ort 2Cs>ø' >sEcydbX߿? ow"adÑs3f܌d3:s| Ɣ ᡇ᏷^oO?MTToFA xϳ.ݝaF awս^"l8jF k6pY|f&=Ж/yæ~W{Ô)S6m;30[x9@tW^A.SXX555xy{i~'nvZJF*bX76MIFaiZJ3ëFΙ2.ѺhXVF4R鄳3R BcC})..VS٧ ??J%O1h@(*.& 0tqquCP8lkK 0JR#hGvFVDm'zy5*8w^zϯ$3č} QWywM qo>}.\xM=_^=(< 3ީd}m=;g_VZ|d:Ŕ)@!!!:xJe15sr 1L\7LΝL: n12j?1ZtmzhbsO55JO`P *ʞq :եҶhoyrz}#z}co.s?E׿-\dfw|2>`<6O{yzLjk!5]ӏ02 :&u+!Sg1V[k*k[neuu>?0BAޑRIiI)M\EP`j2QTTD}=r,Ps=v~=]rx{yoϱ| nr#Zڟ +Hh26p;O^E1^W\U'̺>bMǰ7[xπP([g8~8{e0yayy9Yٸv lP]SMuU5~KOm?ҫ/;(7 nVi$Lfĩu"˩8܌\4=8Ak+ǏƋ/{сx{V#H78]^ΉBD A:"c(tf'/;ѷ?'I)@ (@ F)0J@ Q @ R a@ @@ (@ K[?vTDE ,1*Qy@ Yj7 @p-#;G7IDATQ @ R a@ @@ @3lXl+VM #HTD"Pd20Jj0IL~^~ʪJ+L&ō>!W(4K_/$4 R)R XVK9x(1c+L&sX,ded/;e"˅~=P?\NHH(64F)b!ƎnȈB`on|4J_FjY1G F TWW& ,Ua20J'͆buBb_wϊfmzzivE[.e>X6]D H~:מ.61!R 8`H>LAhrnkNs`G{%euWsg::i)>B*S Q OA* {4_R.OG1|(*5z}#e\Fݿd\}F9rRDp(Aϧ,}̽3SҐ/P`V+3W s)=+V`=d}! }aHQQ! u{#ǍoC|Gh]1c&Q"b2@Ѓlؐ#ƪ4NSf&|pfa=}Ӧn~= 'NptxalȻd;v ,,+w9yO?/6fٽI{ywF 7]Q/VLzj5C !33'R 8 ({ߕX>JJ~=2 \\.G&#$cݵѣ%w&Ry7 UGq_ܐW.\k)=ZV+555׏)-%KO?bذa"Ps-ZL>'|Rd{ C7f1xRda@e%޽رoƷyr* Am_2t=${o9@֖1a„ZiS8)2.)2)i/|CFKd&1vkjjHHH 22JNcԩl۶wr"Q 6]vu-5JqC}B23D}~_JKEEUX@zV6Qǭw67hiiX%TsѺ7 B b'xm 8jedl6|G  l6||tf2Ͼ^f $''SPPZg*8kBTQU]ETT⩩FRs fݡI9G}$z}e-[Ʊcؿ?'O$??aΝ;ٹs'eeeL4G}Fԋ1%R \uuuTjl6RTJ΋ػgY'䔟72 TfCrn3;w1lܸW_} \\\Xr%[lj8kBRQ\\DAa*S=ѩ>sBBBxG!""e>{fZ}\.l6wSg4jj2r]3:Ν?Vw_"lYKj1J%}qhE5':>CJ$ Jj[koMۅlq:_]]m7\Gyq%%/>%27UUF]]-MÖ_`DxfggwυԑF??wtuk]RZZD"",{+'ER-#n,'JKF3o<0L=z?ngޤ| ʙt#˩#$8=lzKMp+7oL^^K.eȐ!2w}7O=4TUU3\QvѹeV+{&QQ tFy;}Yr=dz,ļv-ns?_o&~k~9觞$ӺWN wŬF`ĉw?ޣcHלIRS[,fLɼԩS(r "q.}|晿CTT#F]Qvٲ..3ϰnݫ\rdc^{-*+E/$tSF>>ؙ넗c+ї'si<wkYҘͥ_O[#f⮿7W ouV$T+=roEW>67wM'2? gg yyyLv'7g99lHɈIMAa!N+_6<AOzT7~MHpq7ބ`z8ho?3G|S_z [$Z-6RvGc['mTWW]m߱jp֨e-FII 6 gɧO}C=~~~gƎwQ{؞>W&#R Iݬ?פ/@u'w={$2r(%%Xsrx{a5a62IHx{w_7y^4qw]SZZBD~~HHpeeefl Sj5o|z/O_{\F)Y)ԁ4T٣!s0?̠~'bZ!:iSLCΝGh:Bxj7߂dI hhbT*Ymx{3k,R;&NF)\)>w A"GM枇HuP7$V/ggl6h7PZZhLM8|cB-E7θfՕӦc00hj2QT\B.Ã4 JR[@pJ o $~9jh5'L '8)*nGF69{'0[G%"hZ4r$IR\޼DQ pGy(  yYLNfpig:3!H#\{ʪ8 ^o>_[Ol@(8(/%i꣩ ðh襶2KS'MCL"PwcKJ5= A"]T0Ls 2Ll؀G5fp{e T/,)@\F!PNS3 rǕxMM2Q娅籕¤2#rhS {܁C$$BCCv!qQX7ފz,$Ղ`0eIes=/2$]q7lC|>nNGDE"T5:BI\jRK"K`y7yַƸ挹j`6ST& "quYa%-IE8嬣웛x_e<О XJ:k/7ek:&e= @B>& @[GL5 |^ZG{w[/;{*^cfs+3lQg%9Y,ob'2_in8\ulxoS\|⥼n A-w>[Ѷ|#Ya3.]ô,q& }W/JO 0LUnphcrɅ>EC ]LWΎ>tUav]~$!:wENaZp2mpևq>>D-4g}GYM|˸i2nL)ZLi+m׵AtB{q! s~u"?z#&맰XN Aʔ$qA4bS[SP5]iI1Q%OXa?PoGʰMVx-0|+5=ߟ`|# HA:9h8 ck} *qLnh>߸u<Ŧ2N]]D5~7 =§obggOs5j֘5;@J2=(OeKkM1sR=i{&1R14MoodՖ.lݏiL7?1}tE,,w6OŘ*?o݅AcmWj=\ٲ;{y5}"XXBQۇ}GӫxaVXT!x͝Ld <[EUګ#8hAoʇ[4L#&|HBj9p0#ql Ox;805q Amze ל--=Iv`|0 1~l=ɴ~jjk*Xe]6U\klgvp2|u/PYEQx)Ԏ"Ҳr SykQ&n:o>)wG1<.1>jE&o3cB-D3~['x]n$HD9p0hBbhanlӘ8i <eh4e/3bi*| <űx!fLu$;~JK:Cg*]LlnJ)5)TǍEAWw/=dLM%H454zz&Olrfz7{ѲX4L 7ĘjkYn#eAjZ~&MjdUUe46zA::PBen&75yXv#?V:́8piM`diىerE[~@2tf́8؋ 7< m(׷=8p7n\\JI<?4SW1P/o=P(nsx;\m ͋Cs;4y':4whܡ5A~˟ 2v\/EL%G2y4k Hm$ ]|1˝ڵ MF=v>j//M]n?,\M7}r***q{|Ԏq?8;phCHiflӺ" WrΙ0n8Vd2$5tDş<7ng)(aceY))E])SXz=tö[Hb}w0ڱٽJRPnq;4NsyXBto~IUU%z 7qwHsS3aCORA3ϟς1s---;Z}!\..tv:~%]1Fb/NYyxw>d"I]TWWcY0 "fM,R y)shv1Dr3EI1w%;4whܥ1m:/2se[^3ĸ 䉓b(J~(>Lebv4K?VUU!_K_2! >PE[n(x^{yh?D~ s7bDY$ O2kl46B׵lo_oӧO㞟/\v9?nty93O([n[W]~|\rtt/:] }N :yPHwp [bKY-ICb"B=šCsfg4d*7ȒL$y lX|78 =scYYO=2SGp?]TVUh">`^zEBxb>^|%<@9px F i˖-xӷY;0gNe˖lr.X.;.@8B^L:.sNz p^D59JI:ܡCs{;3z_?q$ (b(Bٽ̤aϛ#qJ6H8iݡCs{<`믥az#x{q{'gY+)β$IPVVFi 3$%] 08 ?2_˄P5]@VO$u}HR$, KhT3KCg;)I:\J!/#Yf9~ݓ2;4wh(xnV|HL/5/%߿TVT`v9*F 0G Na왁OpȡKiByy9׭#<~z)gYĢTE:;ڇͩ[w])mb Fr_ԂHoQ D.bc ;9thܡCORJ4M~+q3N0 #o }4k LfHskqH_W50i$8t6liAEE˗/'fϺKŜ`,XϟOo(ğg*9̳D"JqFFӹ;,]&tRΜ'¡Cs?IJ*۾Gf+ksӦH&(ɥD8AoO}}}9:`mΔ\BFhkk++`ټ H)-v"H{1esGQ| .ssq{tM羟ދ”R OF1pbE/y.-tS|\R8աCs&|>~\oc,?IS'FMmЅtwq?GJIOwj vM].әx<7\e}!0fs罿=~?Ps9c;.t]Gommm$ TUG4+XmІbf|/g>-/qPP6ɾЂEYq26+;4i.2-bS&LDZ߬|&@0Mi^ G[EUUUZ J>MMMy'+i->59رc<8䕕 O"RL쩘[Jq(1d8},H%[|C~هXJΡCs !Gœs^d J]}h@ 0BQkG1iaw_Ku(:1\[-#1$bkpI.vVUf 'j$u;4whyX9L?_wիL944{Dbb?aO8 $:ph+4<ӥyYϖ[ _e\pQ` hLRpVRR)wvbPź(7r{Gb+9;4wh^ͅDc1s_4m<fy!f&wYb5R،R)={GPR.dd9a# phܡCsͅ ,BN{yd28p`Dv{+eYlݼ.Lr<8p)D7DCw\(^̗׆hǿ#ZIÙt%Lb ]JI"3!% p0wAQ[KL\0i;x7/}]wjp?a*)J Lw}#-I2@ӴOf4!y͵[[>~!XYfaZ{|GЅhJ$0Qn6CQU,˲X,6:-qx^ӺF# %p2wk<^ݥxeYBTWd{tHtyy'ZMQN9s#ALY446*[lIJp4&Nʮ]i)H_qϝ~8|lݪXV,IhY^Ů+oM혇gvK)})sC|j--B,^rNGGm-ծX4B TTVf5LUӆz˖$q4M߭cQfw@5)e]vr@JOEEa5ܱ&qns-S.)b74p_:=h]ॄ~ |"ôMjָy2!ϕEee-;v []Qzz{o΁}( cǍcۖ(BDI79˲hjEU U\ GLI$.@aQMUUxC,(#JbF!бK)-/}HBe8Rfǫ :I4MLĐlX#4ͼxh0oюO˻!Xf5D"A)躁ݍՆViH9EޟO,)cr)"m􆠪*DXjH)SP__(vH TH 1\Ue}w/?cR)IIeNf/<}P7- eeϐl[Dz@ɧ? X&*{,eaIarr+-)-"˲0]1Jg*ju֭_OeE[f,8\ %3G*%hn7|5͝K0UUK4-E ĥ)h}/%TTV( 555twwc&]jZJIEe^B/IOOeeeWeѨIWg`Y7dn$#>Ydˈ )K/vJs+{Jo"kTxg۬^׃\mu|ؖ EV;By7Ad( ]]\:KrYjOO5_gټӃ߶};6+{Sp3{Ll;իf[iY7v})*b,KˍG O>\MWWaZkC6_ۮlظNhkkgW{7mFUU{϶KufҲL˅Jn4U-3k }L2acY8Kd2+#+W_;>YHӴ4#B4Q0aÏf̧oR$d2_L )-41.2B0}+|1|+*ܡ0AZT[5W1eDs8pon]}.&*_ `r3/μgs޷ UJt"\SlO>ߊL|fܿ[_مsH+5bL9 XNbBF4/n}}!,>@ `FtbE EOp^DWhaV@>,ݕ7vUU H$Yk'GcYWS^Vɓ0-ɮ6lBcc# 躎iY7Y Kf\MEEno|R|wGՒGJb(m!Xn=b[K P^^noh7t3ž#<\.4]#7HRx^\.}(#leyZ^+`0@2nl'K@ @,K}Y'"pхk.|>˲C4|>_ΑOǃ>LH¢eYTWUqeF"̶&C2C^׋PD2cYԧ,Du,"H \.$t䂔Kiֿ8ظa- 63:m~Xzxn4]'HDB  TVV" ,@ XҎټ씙(iӬ#:o~D"?^~Ϟ}m;顪 !Hd2\5ՄB!6vlB2^UM/a(&PUHtMyz"18Twh_ʒ%滷+/}?%_^}VSO uD].[C,=cbd^y4_[]ڑXlappe[G>{>a$44|:Db& }l|iqʸ]}IG҇Jڲ%%***jZBZe GU2D"1$IR$Kx'rŕWz=D=D֮]=˭?!<ȲGs4MxMN=t>\N= G9ϲcغuk1J*7m"Jqg:O_d/yG8营,^r0W]%~ϑˏ3"H^?*98sӟnCηnMUgd q 'C uݜv)D#QEʫ˖swqRu O/oϕW]MOo/@[lSN?G,GUMRJ+<,Yx3q]~^Q.|a{׷oλ2,3ger㔓O|` Hoo/gIm_xvءyXgy;\n(@> =8>3>gA)b,Zm۶[on: U׿ f^eӖ-lظ,=PSH$i~yy9}zZpǝw!fL?/@"䤓>ÓOg}3gPQQo]n>} SU]wf~C\oHhp_xQsMpӷ)/kW?㮻GAuu*%*PtuvOT*BUHrv5M</}k;z{]P%: 5Qqw7y1=c me"$`%j&&}6+D_R5Vv`Q YƜ1"2vREctvt jkk4-G2j3 4eӦ464g8el]"IYYY<,FA4)%mG=E i---˄B}(`TTT?KNb2VPU `iL:-=93i۷׃iYf'].֬[nj}J'|JqbDO=$I4U%es-$ejojؙǒ$IFpjK-kI0LTҦi 䞊Ǚ7o>|VN8~?0` /aKeTVUsgsک}V"2~,Gl96MrRpŜFHJc8}ݽOs&.RhDJeUaa+Ll@A8\N S`~s22O<ǍD}h41ˎ;"xwoЫ"SױHGmo_/݄B<緣Z9ZZvu4]YN^B'N'ѦEv3?nܴ-;q{ܤ63W5vvF6 g ~/~k֭_ώ;bQsޟrکzӟO#_5kŘ1,?o|k|p{$$SIma !D1!UO<s_|G{}ܹsh瘣& g̜9ys?L}Nq/hKdh#=Y|4? }Gg-%*ph4¸lڴʪi´ Dwa.jvvNI HaIW3}$I;vQ7vx )%P@ ajJpggGvI&HKfSlii|3D6* ]֎~' ƲL|@֔F Gi{f͘œ$>˒TWWt6P7T*D"N0X= 4-P6qfL+>7y&:;;ill䭷dwtsg ޗƆReN4fܸzzIՑL&,.{9Z[ٸi7meN:::hooV~?ibhz<׭e@LI+*-T`Yau}}^ۋA*ed2|Kp݄z{A<^F*aYg]uM˲MDJH475RSSM*L{A3fLZ͛6RU]Ρ̺u?^Ʋ$_J].no\xTUUzz{{7w.SN7=Ķm9]:55 c&`M㳙;۩y3˖AjjjGL6qxhʸqBaGk!dL:~M6s]sQ]S_4&MBu:j9_◸: twQU]WjLBS5*7o xꩿ.)S&Eypi2C9+WfZN:D 466db}={ >W_ -F ^?3iDn76u7x"^{ ׿hB*+Yh>tL< ŴioS/[v^`YF 3aB3Tp8LyE%txOWg5\r%va38?1zv K8F444pr3o~$ Mٰњ‡;_K9iJבc$a#bRJE}wv2BSմ4(6b@՚ذ!ʬ![+"XEY۳Oӂfvm-OJDn z$u^/D2*5Qv/yKƔ(pN=p$(An/?P/~:+~6醢d<DXۖ`I\wu9C'I"}|e:=McǤUi6VW145_Mv~?f+\d"رuT,ƓG"9leag&JEy*.m!_w71M/ 4馶믻)-B>ǓH$%K\.\>XJ9YE8fٲ#H$"Q˗acI"`YŸqr( OAeό\,ad5kְhB~<.fϞɢE H&#;DLy&lrBۄfE )>}~R?XBP cqܱr)'I&N_¥(B2 OpqljF#ynH98x{[B=it D1R$90d !$_W1 KZr)'Յ+| !BvX!=B"DAwO.m@4=YZMUleAQP5 4ʊ탢i;i ]'I~}3#3bTҨsmRhRp=\R\+d(le!.A0fBb")CV6c5}N]جֶqttg?fpE32٫(Mw˘ Y`cd x<t]Ʋ+O 7aMI3󂥏%yZpfAUUI\; l:dy!SpM8ܗp<7]]\xy̘1=ЎIww׀M'[5wð&þ/o49҂X,2ċhw.4MP[iZ8OK/_MSS#DTʢ3g\mlzjK:(xk9[%c\Sӄ&wlc6 `{ ~h1kl -AtϘ=wئI 31=~444 H$ ӎ+5lFVݥS,c̘1h Y3Ie&:@ѳbHf}S^^nzNdägu#ǰ+)..R)MZzF2tIV60$IٴqguKקWAvs!ڴi$Im6 Z)x7l ?y:?++}{vӲz%G[.^RRR1o~KVvS5 ;ү}8)N@DY1h:zbR;ujCӓE.]9=pake III?##LK@:Ĥ$ Z=ztYYp3HVf%R|YH6mF$8묳vj/v|ѐ{ȓRޣ{>p :J.˅ uQ"B9.PG/ WK9$L"=n" a#UjU*=yyt"CdXh@0 !KlX j3&YF7a㡁;APH`h0ҡF6@6B9~~F#F)`Ds?ԭAo;zh4iݺZu>k+Xۋ-㉖TXkqyGyDOeYMJoY!jE7xϜ85DtؾV@D|x$=HzF&%ő!jG3}$) i)q<_0p^C4t:By2bybNϵk#={"h=S< P%oQ|grEda.'INظq۷onQSJq? ({oU+$Y>qK"s nTn1XzfZ%x؎N#--RE!!![[bŇb-흓lja-@V٬ONNFQd*+ESVX\.h4tVWWcXHLLTa+**^$X,]Q'H)=U~HEEb;O6yjK0ʳ wpV3P룾zw:=y քVYҥ0L\w(ZnGk )M~d2f֭yszɶ;*XBp\=~\=gnCQ1DHn^J=lmjMcΝdges7*{-T5ִT&N(=r٬*$>xM(±G0Lǁrt/1n?UVQ\R5#Gbz?Ƅ J DB TV *~e 3Oo FM?o7ߌN*RRRYwo>|PΫFEE >}Y7v5ٲe %%%$''bJ=\pzJ}oxU ̙VFM-[p+S$7u}K,HnXf(k:8P8b;ZΚ$W߹9-Й̘<׍?Ae>dÆ v/[tFz=V]vknKbr*L&v_~A$L&#m`< ng^0r1s&6mBeL2vQa//`ȑS\\LII ۶mSbƍ8>(X,JJJظq#յhȑ#||ػ_|^cǎQVV͛1ȲLbR2}9w}քD~n/رc2u*}%y>˖-#1)Iu[,Vz}h߾{۶mc5t&ȑ#U:%5?^zyK-O>7k>PyZk(fO@nݸ89Bx)CLEK}}nc+:-JYkp*C(jrqӵKWz&Mb7ػw/-|GTUVk.l۶믿ܜt:Ng wu_{cǼ2Hhq>E+%Gh2úu?3O$Itҕieѳ~)`#F\{z!CR]](zʫ}|h _{.eO|9z(ǎh4>$%5C_ͪUp|c ]HZZ+Vk|x1g̠s8N}oV1srhXظq#-bO2d(|cؼy3gu/co{4i}˧}ƱG8p [la+ɢE 81JKKח!Cx/l2rEo:]3f0pnm4yyy\Z sgS]]U+cB2U {}X#IecLhc)X?;{?xMFޘ?ںZ`?UAwuz~a ;vA3OcHMM#Xf>s$QO>lݺŋswP?WS=jK}EYX4)1ŹL:)S2oŹs馛4qݺ ;+[nkGqpM7q%+Ohۦ ˿UWW]}se+̬3 j҄޽{sM7b02e*ݻwc̙3i꫼0g]x}=?,jb|AB1Mrm}O? ;o㭷&!!;vzu׍***+:e*$%%z ';С^e;k֣깾]'(,,O>ɻ,$-- Iee%yyya4q8jPw2k֣8rrr߿?;v#|ӫW/n7.x8?>-Z`"--iSg/D+ke}aFsum۶H52XK@Y}]Fh. 1<RԴ]^K.At*tN/ @NݣdYy~>_|$ҫwk>7ш$,Z1ڷg׮]Իٜyu=!72>dO<Ά m x<-͛sWBYޣsPU]Uc~~yy9<#F ZGՈyY}ݮ>oǏ.:Z$o0l+*3.rrrX7 v1ǭ(z-qo:߭oŋ1bz5;︃Q]~#l6STTW\^())lu,,Z;;9t۷W*\Se-nH)LTG)*T;֢746 \n|͎#OUT3IMMUvEV+ۙ4y2>v;tf!ITJoiiI)ce˗fJJKh٢%8kWG䠾gt^n(ɈZM 95#3o*Zlfc֣P^^9sIMMa;p9 { 32(**<:9Atԑ1 Zqa+Nˋ\~{i_]̛iX*JK>bwuF1g tލ>I'̳xSH~kVgSR^(.(I=2kS7Cxh6hmjk r8VX$;;Lyصsǎ#?? 7&29JVV+}( Z rrrP={@bb`Fv܉^ou3EɄnСCѬY3n7UUU,P.@`hJ lGp8?~n~s7֊o;nnc ll6_p:ݫeGnD"YVe/SzQZ`Gy=UyJwBN/Ĕ/=qV2xDTC(H+mu}НkC-N;6ֻ,s*1LqOZH6֒ \TN3!M9&iTհeZsC=ۮמ}UE>}:v." TNJoEZQ߅yNOh@d4Es5ת_~a:1ť<HY믿E]Daa!o6w999\p8{*++IOOWi&&&""g__ 1Jӂ%3" ʲk%w8K>B s@r󼮷AVvɰa͍XqSmټN]-/_Hh)s\~$ &30x`7o$l0==˃ΠYdtەl&##E:Ga 1ܫu^ŝ={ԗ䢋.UV%KXz5<sU@өD;ԺS NHGsD?ZP/Zá8Cp8|rT7`CLOcy#`0 ,#"B T3 SW1L {dCD>4i5 IjY3=zkϒ/Үs;Z!IZ6̧}}ٴnZ`͚5?, 3f`֬Y]޿ 4oޜ;3~Z7σentpϸHx7 <={tg=tԥ Gp_xB;w|I~_)>Zd F 3|4n$Ij ?EEQT7 Qw o/Ԅ" P?='.q4P}jC' 5>6{#LDzƠ>3lKZZ˿CLoÏ23j;3>M"Kz^M&årrrx'荏hӹ j͎-;WAZX˂^Z {F |?yFnUFsCI+ -.h}o 5P5C!%R{'䮿4.1Ç3{l?f tt܉;wgr˭7g֭$&& /0s o4(xqɥgd" "$ypiis=,X;e˖QqLGޣk׮<ѷvZp^\@ii),^`/dҥlڴ^.XreY[n,zw?8\MBZK?\Q\ o6}z徏 4#Eh_Í!HN56ȸ=DQgPZZJee%f3. Njj*\3lP.Y`h4駋֪fsS M<΀;w.Æ S~tzyEtҧO\.'=*qPo!tot:DQdٽ7| x|:rfh90?g=If5Sw:btQ )sSRA(V+?;t:DRVVFBB"M4Cձv{͘v}޽ŋ?eӦM̜9@bBB' N/\@%<\3n*Ujqӟ[NʾYIBB 0|L&|iSr0MҨo .iz5} 4HկPD =?Jd2qVDI`A0tPU_Up"ǥ_Z?Tn̙ȁ)hՊ:`Z{Xn%iӚnq'_ Iiii+n9C?LNNGeK(.*ut\VzBG)/s~MS$+dEлOof᫯OF\n7G s4u c6عs'?z<^:wqPNL\ #ddf2DžK#z$у%)-)C&i+>t-Tu-7j?ƮoBO9Ƌϟ$vqܸ\N:}~$YƠ{׏y-ΦXZw10eeܵ 2]Jz˗7g9غu %(Eꫯغu+wl63}t⦛nsX`WFӮ];&OLϞ=+8x f"//[n oke5=V =Y|!mdO#ܠS^^΀SYY).DQ`0`2F=ل^v{f (ndYd2a4e[h4b4pmfo?ǃ ~FQ|H~(˷A1L^< 5NdFɌx>ri;G~Lq~jQp?n7G&L& ZTG#"Pn'qn|m_SjyAmd,j?*/w! hSs?+ϕx]E]vv"ֹd 2Iq{\TTT$\vlW$ ,`߾}\vedee1o<[jW_C$͛A;w(Yf sO?4zW^a9{4'Լs)GR,H:$Hg7si}dh..< :!؉SaHScsMz4!%`ML&nGE9n ɠVSLVҵGVnP'Ư%I_~/d ̘1;uؑ\g 7mڴ硱3Zi,Xcy繿dn&s\ˮB8NqjNjj*=z;XB!``0."?7^&9 EBINZ9xd7eelٲo`y+@`Hy V4,rShБRY Ma:<Vd5}VOsA9x#G]qS#_mЩSHs =H@311nm4IGQc@pK-f\ۊؿW^qlPl % $?2\2,ƀ~ >Z"Bjy AqFP)S?GSjN ]|gtڵֺj:׬c FguΞ̙3ٳg/NYN$%%EB] BHfjiy1xşL =ܞn<(8)X ܿ&MTK[Հ"#x ӚS=Xc1[hۺ-fԹRLH8r}mvcqFcTdiGzmy8)N*FkԒaCb:>\x9{f(4X&k/+;\԰YɨGq#  E&M՜HXd?RRsh8ۡ6%Rn#籴_6IDff&:w85TVVhFl6deϗ" &$уfCeRS]EMM ĤdFIFnw5?#-BMFUVѣGkyvtAeuȾCY  ]k[s+++pTvpH G@rpn$ #pzpTSQYyЪM|Th[˜:鯱1xGL&M̺u먩q0mT*zߧRS̘>T.R׿0, ^}5Jo=q-4jEh42i$y晐>Nq:oûh":z+BԆ׈H窑j}wy1ud9BVVSd90D Fdņ''[bZk YY8nN {5(b fkMi A_/ .MzpVw}Z"ŵX4,w, O[X,[~Gy~qUHbؿkG[=wM3۲b׼w;w檫C>|bՠE!W`NGiy9qs$)2f| ˫0xDGѫdff j3ppB ",X<hlǪ/`4Yd)Utޝ:(**b9p*t:*ulܸ38ëvd/r!F@AAmldU˖b@999ٶmH~y//2=˖-cc1ctnw8ɧdYS,ZIy"zW65zsf{r7pB{1Zh?֭[b}⊄"+9|RN'n.=\:v|NfӞ"tz*L̙رc/ZW_M6mXd /iӦ7 UC!I'Oe˖̘1Bv;>,馛xضm^{-C E)FJ/K4~5#akd*C]*\NGee%k 2ctj_n+g \s͵:ᄈCp#էϽʒ`0;1q]􆸀iA:_p"I0Q %9[Fxt௢r P7+ſEQYfص޽{SRRªU :CCb,BEedItqKTWzHM5͆=߃ ?oKӬ !X/K,aر;޽{ӦM}vfϞ͖-[_0`ѣyX,=O?7gٳ_.]0vXNJFFz:!JD(-xObn()(z1L&/dʔ̛2ɓ'QYY(zhղ%Ocr\~d5i:t߬\IJJ7[t:oٲDrss sE< V;q뭷u:IQ=q{N+\Q$Y񐔔'|k={6g̘?pGRbP`ׇ7ezZjE-/5B &I2wziAxtG7tRr#VTr8kcXxǹK:tl IDAT.\W^@jk:tرcft1L&$Ib;eYU PUUg}JIq 0zm\.YQUUEIq_ej˗Q\TȄ euen28r `Z<۲R}ӁuQJxq,3^z)ڝn2=p#j}Ѯ}>ct::vVrj,dE #"2R2H >{;Gb%ӡYEX+^x/wy "k$\-dEB\lzYM >p IbBo o'ՒBE%%%dddꫯrM7K/q}1c ̙wMVV?Jz=]-:h"lBMM ӦM4>CƍF>St1bPs+RGj Gzxz8hsq"ȯ% *x9i,~8Hm>[/{oЬfXؼy36[k9DǕyN7r6"Ykt ,lr7sd ;sҽ[;&3Nǃx'I=D!kٲeȲL~~>K,Q's!(\y\y啵ɓk ҹs2x`Fȑ#kŢ\bC/,plhH<Ss% I9z0z>8"EFmXBKsMXZSÝm֊-[rIILSeqje\`,p+I QU GE$I`0*˲Zd4kIOOsBI;&=ejP{Cu,тmT!jn;<CtjCll6ǥx@y͑D5!yom>|T5c+\lUCyT 1Qü@0.h6S{dtVkd˖(Tן=}@} ސ|w(dggj f 7/q)ړBYM:_}A'8յkC'xQC뼵!w",ֶX9G8I];&XUx8)N\xӤwn.]{4O`MHG KHOKGM {Glv.A'@fR[șm[Ӭe[Rú2 81~dR.?@ `+-%11"ka( Fo4!zoe̱#4o2, #;N2ބoQYU$+t)ȦGȲ̏DgsVMY YTӉNb Gj˯KJJeM^TRrrrTD/ǃlN^^w:g S-m:uǥWj|y1[,Ґb\)Nhdm˩ikbe%^k5:B5\=n',"`()fB7 ;vRb#(\NG]СCYb6l^n3c 4inkW_}U֯_h$//￟~q 7pfΜINNcǎ宻b4mC=nOkTmhHʱQxmƣJ<7`A8ũ69NИ"5H韁*֨$I z4p% <@ 3ii)>Xdbm 1 2%e{ny/^ ĉ)((|3裏>b\|rm!M4`ƍtԉ]`^y֭[ǰaAHJ !<עDBuq$A8ҿlEVqPsG8 XyPQQ&++KE=l݊T|Ph7͸]>NJ \3|2AeYW:`] "U+3Z#?bVbM[$IPTTF3Ӵi"{wĵ?{&UϽ$$+HTPA]Q_EWudu⢫?Yê @Q0 9!Lox鶧!ȞzjN8nf֬YC.]J: [c/HW]+)ڠTO}D1'ZxF.fCERSSXV )))|(߹\?7ްpL&,Y֭?Q6ܟMCktEozdb+9ē6Nd9$z [gt*-]~>7$XNoy(T:w>.@aPؚ?x: Ou>VL(_^QXr3g%+-YY*:uDy嗹{HKK|mX,r-3QFyr7jժ@Ԃ.\3<?At["bGѸ͛iS14p6^`CvGsmk!93HGt֍~ EQ?Ѐ䚫od,n) l۶SNO]m .ШEU} 9j"Gjj*Y~ x<rssXHOO'%5 UG4 F;&f fj|BRSSIIMCzTHF"SWWW~>UUU-L}~C4L&3sgȩ_db8o?PUMǃ>'r̀9&A3\A`O?b0ټi]5\&aN4<9;ܞ{4F+b.>5'PzH?OV_#\2On"+yz{=|!\~s=lݺٳg_1j*VZ_d۶m̘1.]w^Xt)cݺuѬt>~tM4m-{B5pZb$BW[cX}n8[c>3̟)}9k֮A&Mg9s㏩!b[,Xvy1x ^/˾aÆqw^DQ$//}2W`СW_qȑvir%\}5嗏!ӧsiq7r0͌VO?DFz:}y5 IZZxA;:t(]=_PȈ#xm/Mi(BجVN'f3X"j1[,~$ò]oj_N)?9Z7 p`>4N0}{C7Wx.Kh%#i[-4E-4ڬ-g_~fͥYvS ZѠ_+'9صk>]w ڜ^cʕ,]^{ QF1k,^///wꩧRUU[o޽{v>I?#z_3pn ̣APk\1f w.ݺu'+;Xε^˾ N=6mڄꫮfdzʢgϞdffaK/FQDQxtRl6VϿe-噿=(ؾ}o2Jv`ҳ׋yHOOɧb!,K,K 9т }h^ ֮]˚kYb;0sLdE4.]J=xet:EzpȲLO` Ho2M_gĹcV l`88̳ٺi))dI[Go(o߁%حVPUr*,iZ[W :E3ц{p3Fzk`M؀b08TSEk M̧_~Ȋ*G1c:SNSN [g<ЬCw΄ ۷s9'p7lJ+X}bvX>UUg'j*Ν @zz:H`nS;pm'sӝwRUUG}ȣ<7vw殩3N?l֭_QSIzp>%%>q&zA߿?}]yv^b74W_qgz8q"6ndcklWرmAeŁf6v(Jd}\Ymlݴb0H&Tw̐(XCB2bLd9B_(oHLfs6P_M:*n /..e*͊?as:9mH)&QC2$mwu3~e/cSQ'8j,M2( W_}5ݺu sxvUmx, XV9㞻榛p8Y*ܗFjjjxPNjj*~)oǂ HMME4F#Z2y1k;} vYוp֬Y?7|CUU֮3/PSSç `6ihlh4xYmt.Yg糅 kja4p\nR3暫kIl.,+(LAaj4U%;72N9mKmO e/jFgJl?ǀ?|Q.kVDEL&Xkxd67jUؚgFc }O̮ "* V=dD lڽ̬f&o=*Ix^{?}7r ..' O?7 ߇*t.+ .`%СCv }> ^/yy 8.]cWp7б#?:L^/uLv!&ٖ A]QKp GUE%A),][Ծ 2E;4[ܒ%YZ{ L,ˤgdХ[ws;؛fmb x @Ł{2J⋴WPPXע'+:́<1 v؁BS}!2n?f9jFO&hg4Xakz.V^';Z"扲AgATY4pyd<^_"{\Xzt{1LZ t Jvv6 ]ZZ> BuyFFupff&6 IA5J{WWUb2Fz@ӨoiY9x=pzRIMt`QU,Lf uy˅`d2a0dfe X,TU`2EANN6 ,_(,l Cpb( FɌȸ].F# Iɒ,Gk1 ٳ=6`Gzgt:ZĒ].ڵ{ 5x}SU Y44&9p-X²b2}ؾ-2?*@&3%_:dE3VwgGΐ#Y}|:$֘IE-$I4444Mcn7.We33);p^%̀,TWU'EQ?#^Ng@c|YeI=O!IR3a޼iD"$t:}zx<[IfmKcUC NG-EI9 {MsQuo#9v,f#U MQQ5ɬ {</nSI'z{Lue"Je>D1T/,'/x8̂b1=|mD˓<_qGcQz6ɒ,nj@TEE+s%g[FKA-۲*5(W@zp YVp:6lvg}t?d{ڎ]wch+hԓ%YWdvy464֘sJ-c):z֪ǣ[w=BAA.Nˉft"K:c4JL5xa /km[hm$f6{4rpִ;{b?>_%)D TyFf&;w 3+;0Y%Y~+%]c&SIyL֢zF+rq4 ԊYX .T e3i.A;DN>8gzYl݉l #y=ň%*++p<=^3ăkt:ԘGԶkFjZe]conc̙nN<Ā6˺u0]vedee /ڵkٳ'SN塇baXxr#$sk1ԆH[Q5n/.Zc~[cs}(b2ɒ,VTU/e95Hy5Ny\~I(Jk{^Emvw@VTOjjjشiSrS;)G̜9L^>2Oweʕ\|,_2M)30?q]lx^JʺaNHH;* P_w-nY$5dIHEQT x-拦 ѳg/KфrZuSvBgnt]c.t꼍{uLT KPlڝ*"Ano'|c WHP[fBWU5ih4rג,ܿ{H8Om+4PLNn.鳲l O&sSo>Ć 8m.bfϞCŁ-< iz-ZX>!cUZebYdZC"=`<\&4}iʾ쳓{y`Yn^/ė"(Nl2( 獺̌L]m4$2P]Y ~,$v zʐb4Yv#K$aXޥ_ ſpg4 xK"![-`[[󷻜NL4bfL^|%,]h#ǍCf3nwS.qٌ`񐑑=ǣ~cp$InL&k׮%NIIIAQǁb $SQUz R-[[u&ycѢE׏czp9O<8CO?K.}3͝C@jZ:8wc믽=wӧO_^Ovz*رG**+y٧LGP5*+:PG*AiY.=|M6aIIԖ2B"`>B=N s}vLaңK'l4[xl ʟロ,~YшOdeefZ^}5v͛y饗7b,_w{|^ e4-;{6L|\{}QD$- dRN'[lh4vx#sΉ!9TWWc,˼+4tuOkc \tх>D&6Tt3lAOG^G3@aA^sL+-BCCCf⎴Xڪ-s\NvXD#SAMFzzX,q\8ڵkGEEߙ3{6 峅 x'y[HMM%++n& 9OyqLxlo?rmY۷h"xꩧf$P~S:}F4*B-&7*^T[UM0n]Սl^ɾ:ш^eu<~Uƽs9_{z'&.=z"{=h۶y-L@"XZޥ~B>یˣp]^NyA",! =2Kx?QT]E PTz'FHIA*;HXneO]v hIa.Z@(iz ;c6LADpGBpuh W aC0xB =MԤV[m~jK['1o(@ł(ȤDA -5 ضe+Ȳ731#nWMдw4YR]S_ʎ͵8ux _iMfHǴjp~b^#fbfTUCUlļ{|s_dUc%f_NI^ ӨzX~:`fG=ǗfR y.6$K&ٵtFNN83#!}j$mao-k:*EEtޝ7^&K( hmO4<٦EQ}{noak<)UCQ6wSUPe[?SwE^[o 0[8>9Y(KT˭\2ۍ ӣ`1IxdY@QM~b!?\WQn|_}wɲ\wVg>@n_`2HȲ۫н8;J9<\1;ҡ}5N$Q##ȖP@f'uow*vX,+M2F`hWQbϮ-У%9IE++qMIn9ߌrp8dIC+ӣI6;cj7m5MAj:'ض{+qopxdLw~|[f+Inow1|eyK-6'vΡazR|+O*DT囪9{6?©T@FwϣGq:gpD:'4's|щ$vo4ODhm'1?07i xq }/TdEEDD͈[l2- Ź-s-ihwؒ~ObԵ>r5x ;7Ց=x.5ᾋEONH:ZuDr {7;yc]$-F+Ƽ|p:5QWvK^#{˕U9s$؏4NeXm:t(f͜"%ֈʹ6f( F,|:.nŗRS(hhHt((kX j՛Ybt8#MHNt%Vhh9VO.{K'1?1irWTğJHCCJ+Q=.uu2n͆ /[J^DQ$Dk#'gvVv0#cáCEҎbi9܂9yu︀4}wޟOΝPd{n7J 畼vj:oOiq R0"=Dwq3]\{S(SZ<}$94Kҭ;˖4OmHqy4bź'Dơd'"F[Kbh<@YYB?QTu={1 ', 7x))x<f399۷Ȏ dR(@B:.xW|PhSImǫEȭIkԣoڰرerpg~VhH$Ȉu xp/o1%+; AjZ*#GPTXDcc#9.1]7$z &裏r7ҽ{w}]͛GAA?0EEEw8pǣ( _իv6 IHKKcڴiȲlc-4Xq"̢%rޕH,i) Eo[F̵cs=fhױ$ȈݠW ?444PiX,FM׮]Se]w[mQXg ?73qD(c.jYwŊtM\|tޝӧSSS̙3ټy3v(p-¬YX,\tE,XiӦ!"+Wdɒ%ڔ >^wD\,2 Zk„ vm 0wyE[̷~b_~8Nx;ee,so N9]d"=ɐH%gbY} |<&zx$ȈE38UP4.f͚0`wfڵ㏘ d[ IDATzUgi86UQ⋩B@Ab$B}ؾ};=z|x|;0!;vd…,X<!%%={|%%%sx L,J$d &B{("!0bY$ ˅$ŗp$yc"'1Ob~a@d q<ۗ3g(J@C\dYњB|4bL1.Rx g;orWr޽YhUU)//o?ɓ7oѢȔ)S ͱ5oZl-1eGzF[/DJnvȲLFF^<1Jbh<.{4|`!C0}t0wÎd4`6QbA@SUz~R;U&c~@]:p`2xw?>?Ϋdcǎ{ƍDž^ ;;wb4)..xX0e 86mلh@$ʊW`b_=D&36kqCCC@F8 6uְjݬ_>pYf ׯg׮]-p]]k֬j-[ϏDoۑe9LVTTĵz~fƚ5k \[SS GQhsc<\?GDš$Ȉ$H= ]B$hW'aU[vR[]K^@%K0o<̙Ø1cxL0 r=yf֬Y_޽{ögڵak?O<>f)a , >seŊL6gyQ_;Yp!=| C i7}@j|w0&}bhpu S3`x h $ȈVÕ⢙gy"46X)^NIRS޻MS9Pq*(..f˖-<|ᇘL&Ə=C>}9swknsj*:w&RRN rϟ?ݻ3zhnLi];t@ aI(++_~~h"֯_ĉx<q,_oՋ˗_3m4~y'߿`#"I[o`Ĉ7+ir Æ SOEQvM^^;wϏhzODϗZ{k>gX~nOǺPs1Ys$G+zjh tjZ*NK?r#z+w?y75 UQRR1hiZoݸq#}vc2ZM4yGZZZy׿:ujXMMxWy饗ϲl-E Qٲe sA$ #<n+3fPUU駟 ĉ2e 9/^x!mg}`4iҢ(b۹y <ϯ *g͚/ȅ^H׮]m?vӭ[7***xꫯ>}:cڴiXր܇̞=ӧEEEO?4L4Ν;orJ>#?,~|UUN੧t2gΜB[`)`ǡG8I@kDH;ut2Dy$ш\ s˖-cΜ9̜93-o?>/F倀{wꪫz֭L4 EQ8Sݻٿ?(w^l²e˨i6=G}mm-xހ)\cc#1yd>1UW]E޽{IOO|9z->ve˸뮻:t(L:5pnZ۷/v7rWp}?3p@6m3fhV/t}N쒒JKK9(**vӽ{wȒ%KPUѣGc2 >m۶g^233qݴo>I5آ"f3999׳m6(**b…PYYIii)ux^PP@ii)iii-ر# RSS)++ܹ˗s璓ٺu+;vdÆ 3!C'PZZȑ#)++k3icϲez'FQOb4m$H$ں86_|68駟G}DBBo689p!VPP@mm! VE/_ܹsyyW(**ѽ{wfΜɘ1cxoh۶-6l~GرCXDbgH`Qxc6~#]/DjI3#^ QЏdq]$$$ &9%۲-{[mMf"M 11Q#!!zaÆq7'|GZZ~#!Cŋ%!!o%\]EQܹ3w^}].-9@ 8$D \7w^֮]?͛-/@é"!!38b[ _… ),,qWxؕL4U's[-iD7RYQIUEUU$%'qÝ7JUETUm6]7ǃ0 av_WW%++_~+Vh^/qꩧ6Jpռ]tw^VXeؽ{7k׮elڴPuuuZv-Zϵ^g)))TUU1vX-ZSO=]wݥIZvb#p81w\$+w+ A@zF>7k,z 2۽Go4z"e2~z:w\Fɓ9:t(o&شizڝ1cs+$^}UIbϞ=ٓz ɓUVdee5 *2]v]t*1by&LJ=V߁wѬ[C@$VKnT8,X 9WV >X٣s"Ũf``~` ,nS,ѻ!r6H]DZyf**eϧ#yYd veee;k]v5o=QF1da׮]zډ|̚5={0a+.,X}G 6e˖5W ZN{,sWĕW^W_֭[q\n]իWӫW/>(\~<裚tjܮp>R-[ųyK\ww0w0?F0GQ ur ۶1Hl8ajB!YFC(_I-]ym'zfOhFbx$:Xꋶ/23^7g  Ȋ@HDJeV0|cns-sscs+mENǛ̪տJ!%)Q^IYAu> ry!X{E.=IOoYzYSFrEFb%tX>XqѾm;¼9Dc5~֬@@($dYAVʪ雙*V_d 5 IDATP"{ XWNPtAؖ 7ҘZ8Y~*^j4- ٳ:uxFǎ;ٳ'[-[p'kfMY 6%vc PdB:Vө?lzXCsU~Rw0oY7Wq0w0?0c(-;k9 P' JVBvC  n e(Z^{HVwgɒ%< '0?3?0?Ǐg߾}TWWs]w_3i$Sn4Vx!1m@fZ2iIiIOK"=56INI@ޢ-hXՔp | > DQ$石fu>;*HoWlLBֻ5G AM,9pgff6j?Nk?Ս禛nbL>;vn:nV=\~i~WrUMCoV]osв9V-0,89̣yO>ƍ㮻b…̟?:oѿFM gIWBPDy'!/ɸN+(]Aч9<) 8p52AwO<%\w}駟N~~>999SVVfuډHф_r)*s0oaU2<쳼˼曌9[n} +!y")זB̓з'.Bd1H``ڦcǎlݺU3Ssowq-Of͚5deeQRRGV\ќa3'ּz,Q=FX>ӂecΩXܶNQfΜUW]C=ęg%) . PvO (^Q~B]]qFBV^MQQ[o?a駟x \.t¢Ehժ6l`̘1=)Sp5װ~zfJ񰄌c4exvt8Xܞ)Aф7 'eu@It}TԆPPHS!# \@gʕZ3c ΝKee%z+aHIIaڵL0nݺ0yd.]SO=Ո5Enh )8h;ц6 Yi5#]> 3ңs/#À?*1EvF$-gdnߺBn\=mLUY~LMY)C*E•X b9@.~o\.I!C4,˸\.*]eYf 8P( zW^D.qc,md!g&f2l\,h󖏹3FFBzXeCfфӒ-שּׁ h$<$+ZE]Qo C =;Yi\}y0^ce0[@fχcT݅ipv#FsFo[,&s;H#';FG'h F^ 'RZTDjZj"m[ߏI&Ya/fj4z$k'TuVͥs0?7t&̏Fmp=V vRhE\w0w0:&r=V$J""O?i@!|QcW-W'Ħ%c}i7Wp<0?\'%p0?;ܸ~W4'=I$q5{'H1zd.[Y*:tn5Ng8LVvt/zu#LcMZkŕhN\ yn0g;1 E c:& ԔH&(g^qA$IJяG?n[pwx< 8)NOCs=byL}v* >e0[vl!S6eL{j <tԩHk$%պ?b͸EAE<n[^ A}ޮH$0oJb79^q̏["! Y,]+En\~ 'Hn֬bMTA݌A_o+RYB-j85^Jyyn@JEƌ ~'ȹ?K/Rƌܹs;w.W]u_~eW^fmȂE oصuydfe֋y~?Yع}'; hG|$IBe$Ibʔ)l;w?7xC;^Bê={6]v׿EQ#Dr… :1ckɲW_O?/BmۦC!IPʕ+ի[f?ѣG'hM:ѣGzj?_ƍk'Nkaxǔ?\{^ٳg+V0~xƌìY|jժrI'Q]]MiiAo]Дv1O⑳` Q# ͬ&>#s%C:OaͤMgŒd`q{>7iYi|.eeehwZ PQQɓy'kjꫯd޼y׏7|{tR>S֬Yï^v-osΥEѯ_?fΜ=[ZZٳW\ɮ]e=={0i$͛ǂ ؿ?3gΤC̛7_|ӧs '0g <~'xB<噺Oe̚5iӦm6V\SO=o͌3x')((駟zj{1Νե^_|qtdt6c4Ya>2S/Cnl9"w0w0?05imhINJSY^7KfV&[~B lm =n**|$'&72S {8;v,~.Fݛ*+֯_9Ê+6lÇgժU}OJJb,^kŋ#еkWmg(ڵO?.Fر.]4h;v 55vڱ|rj>\0dر iO\ve$&&jzbJKK曹ii#U,3rH<>lwN.]8s {i׮&Mdnv[,Y@NNN#( fO¥fA/JU,ډ}Gm3Z%scsK>cW^;uDNmsl:jkjInU^Ejz*5VR]YMoy~nPGZbA#zGaa!III(j/\Tw͚5k(++#77<ϟwͿ/T^XXȄ x'ꫯ+hW׋+"s#Fk?r-\O=%%+>}s0k֬Cbq3ydKFF$&&zrnڷoe]F~~V\[7eggF*ݏtI[z#()Hs;l6`z``~4c ]sz?~w}roڶoKfLsrԥYhסOΜsqzРA|'Z.X%~+W$77q1zhϟ)²eo8EQ{[nÇh"}.\ /?/I$;8Ǝ iƲep\~|A?| g}1.O|W\s58q"o񆦪0'uuuS2&+Wd's#)ջnNDFaĹ؏>FYX􈗃m9Y8Byf=l: [)/)' QS[s=--#F0j(Jvv6v7x#W\qyv Faa!#GdΜ9tMtڕl.R8p UUUZ%|>MOȑ#ӮZBW^y%o6/2cԩ <]v?ŋs饗rWp3{lM7C=Č3=z4~&W*.BǏϯ 7^ @BB0>ǣ1R$>s I "9a\'ȍs88wgN4iHs;=oJ``~,aK}o !erbɎmTU={p\tљӳ_OmFPZzvĻ&>[Ho[Cٴi.ݻҖY몥|8HPW_}I'DFF!/3vUOUoHWozï ͛bn*l1\s@'x"`>w-;c:;{ ,_-m"WBE#`JNp:^LvloNbR"(B|N~^>yFu0ltx<(B0"EZ$IJDQ<$JU71EQ{x/]D0|15A[u蚢(\CnxFϥ%NWxFٳfnInE;^co4e#Sys΅GX<*`|Iزn _x9Z#+2G";=kŐq\nnFAЮp%I4:aJ=) /X(zWۏ" oG:pC~x$*Cca\u}?DQlUmHbK9}&.L/Q<=Gz '@1E͊G)yHOO,gn>vre-0$ҏad5vFi5;Ϙ%fh<-s[.Xv|:fm? QPk^ːsJBB@@-\Mgw)hVsgv7Q-s}1WhPA:}``~80Mr7V`U^k׮]#ѶY8JqڍdA10;Zdi͸x抃y:>vC}Y-m;;77Qܣ9e5,5 lٺ}]sn?gpqqv9<;\'n#y'F7Wi6UvI7%7azK((Ydæ }<ϼ _,Do"mo\UmKz 4%mMo꘬xZA\`}[`8;$TU;FLe5"ܽM JKKufzA"P?c/r>DoDx7xEQQQ?o%~Q6oʕ+]vrӄ\z*e,m9]4[vXsӪ;c``ޒ1$.` 'V` 7@N=:QQٿw?OM%Xjjjj;v*_4b΁Xd ;vЮUWWd*++ ,Yo77jaPxjxA(**Q_׿Yo,]ZݻwlٲF/((BXbv^M[LVbɒ%|wZɓ's׳tRK8q"r K.ղݩQue|S} [0YǛ',Mp1c{{6}n}%N֯ÑzHcnI'R?v`fgɚ&i&$QbǶ-]vl) ]&ٹ}'^7#{Q;jSxȔ)S?>6m׈J 'MĶmۘ6mF6l=ܣq yf&O1p 'x"޽"?믿^J1ggf}QPP_{׿"6mGeɒ%;e&^z P% 4&Nh֭[8p r ݺucݺuB!9n&233Yp!cƌߣ>JJJ lܸΝ;3sLf̘;CEVbaʕ\~B! MFee%o=ݺu@Q^{5~i?~vHMM՘?͛0`>N]Qeƌ%Keݺu]ロ-[ԇcKn9s?OEE/" 0+WrYg5;}uoqѵCss>+zs,ua~\ֲ~z.0B{1l0N8`0H{ӫ/wj]fzXլ_۷'//O믿O>c;PVV[n}||Ӈ">˳>Kzz:V9K/DMM ;w2#??ۍ$I,[wyiӆ"M Imڴnݺ5~WW^yUV.\9眣]SJKKvqAvZcc2UjU=jQ;H`Ri}nsu`4':; GȎH®S/yݱ4~Xzwcwnsq]d//VTTh"M=j(͛nj3ر#˗/֝:uc|;A1n8RSS7o?<^{-f赵۷Ν;s50uTB/F<'O̺u40ϟ钫-#F0g&M#OMV[[:Xh=mXOfhFyiʾ&jn]qD T:R޽:be(Br!SSd1  d IDAT]-A]wѦmPcȲLJZ ;@Qʊ˸܋9ڄ׏|55׏K.R3f iiiڄeddpdz}v."8 DQ䬳bÆ 7 {9S5:wq%33 ;<233 0I4hڵӌDQo߾o^ܖoͰap\viקٓvJqq1wy'$ѱcG:vHuu5wq ХK233 B7A߿?Z:~?}%;;[sСYYYt֍VZiuwؑ.]-[ذaF" 6h6Կ}z[lPmzI@۶zp^DI"M]Q^,"ۉh4Ni#¼IxH,kXrsG$.=eУnE?|/OoWK6qٺ~+vPN \?*#^q"s5=~عfpF9ӭơw;#z4\qL1M,ړY^he;^[v9;·K,w;I:k϶w,i1 YHc!ڶoˎ;HLEQz}ȩR_fDC3S{^~xFLQ 6V+\58̅YV3w.wbnZd\osfܶ)≦ cCHJJ^=CeU% w"dg3ډ:RL׫M6BSl.̭cIb(GTr`7QnsscsWS0"Z&wCr38Sgxuƫ\~\r%b\11ŲTfdh.6nÉ"-sFr0X(.*OGhR|D!L'@RRqpbn8ZZiv*g^Oog,N;zxaMfAp0oǒ:- z4|p.EFB!`("ꃛ2"˔W=wcC6`@p"n/UbYRog7d.Wߪ`r17g;;G(Ab^Fy~_ POЃAB AL ]NqV/zhXEqS~0Ï*k1#G>w0w0?<$v?'hΧ$3w&e >?`PPҾC'҃oܬy$ inP朳so܂0hh\ʇn$WE3fhc[9 }~jkjPDRSZ:V$%%D6,;$!f~#sGu2k5'v۱NSb[݋X)@;^  *]d4iyyy<܃"x饗eORR$$&6ʪJ>[G;Kğ'JJJ$t~W͛Gff&Fr1g|>^۷OҧO ^x!zW_cO>Oezi4uΌ `&]+?ͦnX,dk.?x̷<̏-O Yg1`-䨚#!AdmݻIUU;yfڷoBii&e^{?Yfq?Y˰'hz ̛7g}V[d/n5>>@}g?9vo_oMc7ixpt̏ v6QyT"w4qፖ1vXw܁$IZH]$8餓e˅d6o\TQ(+AFiS|,Z뮻?矹HJJ~ΦMxw0`& 0%Eɋg=#{z}Y#YqIhx97vfT-Dшw<扉> (+MFݺuGQQQAbb"P_V¨QoP!sږaݺu|2MVx>t]"i \LԐrVVc iE>N㋹Uh0͍mn,|g|̜9YC p\Y W_s5ټi3 Fw}_- 33߯J @AA-D'i5)I'ė_~ɰaè%%%E3Sx|8w+dر<#n]qX&rz ,5|f%0{/r|FXƫwD4F#u0w0?0nWL3e&NH0ԒDprss=j$TM,"$jkk Ȳ ԑәEA;5G}OZ\. ,s`&RXf5WFrѾ)ќT[Q1yv@h<&n'ĉ B1K+*a琔 rdwJuE@b|.bї_jqItn7 ԋ^ !Wwǃ,˚(^$$/VQ;95؉l1ZQݜzzh?h7hۍ~4"D VuVaLg @QqP r^R!))I#\9T{Dυ|b +mxlXqveUXuWrhs07-6fX%AcM:%Ȋ̫Ȼ޽PEr\Gr{vc+6l񇝴|v,*ͬLzn=`VMIFh64GraޔDV;^1= Cm2=j ݺ!k+H!!K֭d.Վ)WF>Vw,Yy7Fb6WآΡqdA.ͤyMLjgb훴(.6+FdhǮWols^%Z1>ά>;0F/4dzž{HTsh üEssyT"w3ц(HD(Mdjj BjCٳ_HjZZ =ɎQ 4nĨOM ``h.b"-"{"gvYAAA{|ߨ80)t0o-j;;0̣:qvؼi#IjZ+Y!!AdY!#+ P[SGN<׾~߮X*҈2ӽ.j׬f3WtkVshpE!==Q/oO PvbǎZp Syqr7|82+ܞD;A@a~4K.Ɲ)!JIJN`?z&=F|;Tф04 E竨UD3 #X8w j#͡U jkq\T$jjjj@LS q-s0:DsZs0w0?1Mfd9BeŴ-T~ܻsh{z:.κ>Mw]>ձaN>zQǷ~ :+WRRR矯UTTl2Hzz:eeeکoZ+=nܙqvV7fϊsong 3)-.77Ԡ_WjNЌs=ьSiL``~cWD REӻy] bX=e ݮH{6s7Ki,n)~+E]"opwoj*}]^/ e> s=dž @ ˁX|9,S[[kh[oyGh۴UmKѝ7|JC b} 8)N9ZK7{iq>fu+݄}.$  I?1mڅ'ͺhwQ fUB+P#лKy83>}:9xᇙ1cFn7 @}ע"8@jj*믿Xg޷"V|A1!ц=l 2Fv T#r},P`0-{A& RI|{$I[ZJ8)N9EEjIKo}\V=?P(@Yi:?n7%K?Iڪ:$I_~!##{Gofǎ̞=I`͚5,[n.bnvx} ~YMNN',X3$eVrrrزe3[le",[*䤓NO>۷%K0nM0`ŊWg]V~W@$.IiX (%ѩSN U;:)N9ROГIEa- :r5kDQ4 qHE3jS]В$ixE Оx<B0$ ""߯x<]sDG }$ZQPwD@ݹSc+rÁEda"wAGMsNqSMa&-5CoS8)N)= ;ӪU 9)NqS=DёH8)NqSZ(IoM;DK`FbIKFs7%؋U;~zxłQd̛ s0~8kef¬,=g'Q"?FYzB}cuF?є ́yG>&(IƙGͯ3!9~EADI(1#슢وT-3,xAo!vn͈VSO͉o `GA>e$Ҷm;iV1$<6oڄ ؟68d$UհfDQo^E~.Xzs#vST*QԋvMkk(/-*3%"B\$ Y؁`; // SU](I1SGZp@ WKB{Y8$IHyWiݞY@0ld=(;bvK/vsi1${[nq;hX5$ .ʪA$6.c}A 'g=ky gj`$~#Aտ#9EwNJzZ7A49$R쨧4;qݷ3F[;;iZ$&&3?(.,$>v޽{ّ9wY۳k.\n7EP]#n$ӏߓDv(Brr2e%%|t>ߏcmIֱgpٛ]v.ꋔϛoϠolذaC/N*0a\p#F`\.B. WCnVZѪU+k|>dYFF|7,\ݫW}N/.+&)R$~̠_xeޑUwv^UeW); .AVmUW]yHu]률K/fcH9;(Fg(řM %-i)UZ۷G w!MZJEV<h OJL'.\Myi&!t(.]ة3Oލ!me_AƌC5lݶ:Iֵ+kyYg kkaڴi~>;֭[vy뭷O[k x^^yNJUUwy'>^zrrr8q"SNSNHQQw<AyٹsXZݼ'~RE#6,e9}'dsəYz+5uL0_~^z%y}Qjkkn`޼ydffj4]Xt;/Rh4v>}턍4Zg;Y͋pH;h=nNsÅy\Q>|`ۃ7K.E)KnO($m[n $ Ů;$ !PoH&Cjjj蔓CT:tepܬ] '| ~/h~]s=|Ħ-v_/ѣB IDATW]uwy'{(TUUgqeqWj}O:u*ǏgڴinƏoa >}:۶mcĉ_#}єqېD_>ZƁSar2R ۍDx$h)uuד-[KNNuuuu]wy<裬X￟ŋ#I@ nz昮h nݐ8NP;sb#oԏ9Eaw0w0o 7"P@Lpr(j֮iVn`AC xjM0l0*Ѭ %ؿ`0SPYY(}4 _P@oEQSN! RYYI'L0  h|u 4=stM3hYBݵv8$INR.xX?PYYAuu x뭷6mSLaP^^Nrr2C%--;z ߏU?x^ˊ,M#U;v)'5QdgQ-]5xRDRDrZuqB >_]:w^RvI5Dk4A6.r7͒BDsJ2\ů"~{1NMM``~$1'1* ,,+#99zGn [kDMFFUw+En0 3۴SN%!1Gvd"׻JlŒjߞB<^/=kѲ5{|,d DtvOMIv0w07懪3ABj+*mV[wn1Ru\v^]]-H )`LbIES%ħO6A{I0H(>}CMmbĠ`Yh9LJsafXȜfg2!2&'dU+1z5atu/C0tA[(]?@uTJTdl|?b[<׊!R4-cd>T*:}}LMMN8 ~~aݮTbhh'ǡCF>} srAz9z###l0<<(Y8v(|'E&a׮][i«XXWfy}_/|$ 2P]˂>vnudD=?g{y^z;w>OEU}\prqzzz=^ǰ~y+`.B!v@B}1sso$ܓ햹>d#["ͅEIbv&EA+pmrвn(c\sryM#  D'*\H1zzд|>?t)}#8$DXd4 D~p1=)\;Anfܓ$s[\*#L@ xY\Be=_{p8bGJoȒk2G$ e+$fdSE ^CQ㟗.x"__b+WXn=BѭuDv bYul6dc|>ٙY8 rB8J(MOoW(}dE'=Ť ."NL_/I$34k4oԎ⋦i|*};$=ZBlW{ zqrl(vmd^ S]L 'sOwǯ;kv(M.!)Sꊢr`G!LZ_y␥M ^<#<#6pkȹ < 8*ݲ,$ 8v,s<#<^t:٠A4-IENDB`KCemu-0.5.1/doc/kcemu-help.xml.in0000644001050700006200000012753711345001576016154 0ustar glaubitzfbedv

KCemu @VERSION@ (c) 1997-2010 Torsten Paul <Torsten.Paul@gmx.de>

Inhaltsverzeichnis 1. Allgemeines zum Emulator 1.1. Über KCemu 1.2. Lizenz 1.3. Kommandozeilenparameter 1.4. Tastenbedienung 2. Emulierte Systeme 2.1. KC85/1, KC87 2.2. KC85/2-4 2.3. KC85/5 2.4. Z1013 2.5. LC 80 2.6. Polycomputer 880 2.7. BIC / A5105 2.8. Kramer-Microcomputer 2.9. PC/M / Mugler-PC 2.10. VCS 80 2.11. C-80 3. Funktionen 3.1. Profile 3.2. Kassettenverwaltung 3.3. Diskettenverwaltung 3.4. Modulverwaltung 3.5. Abspielen von Sound-Dateien 3.6. Speichern von Memory-Bereichen 3.7. Vinculum USB 3.8. Plotter 3.9. Screenshot 3.10. Video 3.11. Farbeinstellung

1.1. Über KCemu KCemu begann als Emulator für die KC85 Heimcomputer Serie des VEB Mikroelektronik Mühlhausen. Inzwischen ist eine ganze Reihe weiterer Systeme hinzugekommen. Zur Zeit können die folgenden System emuliert werden: - KC85/1, KC87 - KC85/2-4 - KC85/5 - Z1013 - LC 80 - Polycomputer 880 - BIC / A5105 - Kramer-Micro-Computer - PC/M / Mugler-PC - VCS 80 - C-80

1.2. Lizenz KCemu @VERSION@, Copyright (c) 1997-2010 Torsten Paul. Dieses Programm ist freie Software. Sie können es unter den Bedingungen der GNU General Public License, wie von der Free Software Foundation herausgegeben, weitergeben und/oder modifizieren, entweder unter Version 2 der Lizenz oder (wenn Sie es wünschen) jeder späteren Version. Die Veröffentlichung dieses Programms erfolgt in der Hoffnung, daß es Ihnen von Nutzen sein wird, aber OHNE JEDE GEWÄHRLEISTUNG - sogar ohne die implizite Gewährleistung der MARKTREIFE oder der EIGNUNG FÜR EINEN BESTIMMTEN ZWECK. Details finden Sie in der GNU General Public License. Sie sollten eine Kopie der GNU General Public License zusammen mit diesem Programm erhalten haben. Falls nicht, schreiben Sie an die Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.

1.3. Kommandozeilenparameter Es stehen die folgenden Kommandozeilenparameter zur Verfügung: -0 Starten mit Z1013 Profil -1 Starten mit Z9001 / KC 85/1 Profil -2 Starten mit KC 85/2 Profil -3 Starten mit KC 85/3 Profil -4 Starten mit KC 85/4 Profil -5 Starten mit KC 85/5 Profil -6 Starten mit Poly-880 Profil -7 Starten mit KC 87 Profil -8 Starten mit LC 80 Profil -9 Starten mit BIC/A5105 Profil -a --autostart Automatischer Start des angegebenen Programms (KC 85/3 - /5) -A --address Startadresse für das automatisch zu startende Programm -d --datadir: Setzen des Daten-Verzeichnisses (für ROM-Images) -E --effects Anzeige mit Screen-Effekten bei vergrößerter Darstellung -f --floppy Aktivieren eines Disketten-Images beim Start -F --fullscreen Start im Vollbild-Modus (wenn durch GUI unterstützt) -h --help diese Hilfe anzeigen -H --home Überschreiben der Einstellung für das Homeverzeichnis -l --localedir Setzen des Locale-Verzeichnisses für die Sprachanpassung -L --license Anzeige der Lizenz -M --modules Modul(e) für die ersten Steckplätze definieren -MM022,M011,.. Einstellungen der Konfigurationsdatei werden überschrieben -M+M022,M011,.. zusätzliche Module zu denen aus der Konfigurationsdatei -o --debug-output: Debug-Ausgabe in Datei umleiten -p --profile: Start mit dem angegebenen Profil -P --select-profile: Start mit Fenster zur Profil-Auswahl -s --scale Vergrößerung der Anzeige (erlaubt sind die Werte 1, 2 und 3) -t --tape Aktivieren eines Tape-Archives beim Start -v --version Anzeige der KCemu Version und Konfiguration -V --viewlist Ausführliche Liste der emulierten Typen -W --warranty Anzeige des Haftungsausschlusses

1.4. Tastenbedienung Der Emulator kann über die folgenden Tastenkombinationen gesteuert werden: ALT + 1 Zoom x 1 ALT + 2 Zoom x 2 ALT + 3 Zoom x 3 ALT + A Menü "Ansicht" (nur deutsche Version) ALT + C Konfiguration der Farbeinstellung ALT + D Diskette... ALT + E Menü "Emulator" ALT + G Maximale Geschwindigkeit ein/aus ALT + H Menü "Hilfe" ALT + I Information über CPU / PIO / CTC ALT + K Tastatur ALT + L Laden... ALT + M Module... ALT + O Menü "Optionen" ALT + P Einschalten (Power On) ALT + Q (ALT-F4) Emulator beenden ALT + R Reset ALT + T Kassette (Tape) ALT + U Audio... ALT + V Menü "View" (nur englische Version)

2. Emulierte Systeme Im Folgenden werden die emulierbaren Systeme vorgestellt. Dabei gibt es bei einigen Systemen verschiedene Varianten die sich z.B. durch Speicherausbau oder Systemprogramme unterscheiden. Die fett dargestellten Namen können als Parameter für den Kommandozeilenschalter -e benutzt werden, um die Emulation der aufgelisteten System-Variante zu starten. Alternativ kann dieser Name in der Konfigurationsdatei für die Eigenschaft "Default KC Model" eingetragen werden. Wird keine oder eine ungültige Angabe gemacht, wird ein KC85/4 emuliert.

2.1. KC85/1, KC87 Die Heimcomputer KC85/1 (früherer Name Z9001) und KC87 wurden vom VEB Robotron-Meßelektronik "Otto Schön" Dresden hergestellt. Foto: KC87 Die folgenden Varianten können emuliert werden: * kc85/1 (z9001, z9001.10) Z9001 mit Schwarz/Weiß Anzeige und 16k RAM, ohne internes BASIC. * z9001.11 Wie Z9001.10 aber mit Farberweiterung. * kc87.10 Wie KC87.11 aber ohne Farberweiterung. * kc87.11 (kc87) Nachfolger des Z9001 mit eingebautem 10k BASIC ROM und standardmäßig eingebauter Farberweiterung. * kc87.20 Wie KC87.20, aber ohne Farberweiterung. * kc87.21 Neue Serie des KC87, das BASIC wurde um einige Befehle z.B. zur Ansteuerung von Plottern erweitert.

2.2. KC85/2-4 Die Heimcomputer KC85/2 (früherer Name HC-900), KC85/3 und KC85/4 wurden vom VEB Mikroelektronik Mühlhausen hergestellt. Foto: KC85/4 Parameter für die Emulation: * kc85/2 (hc900, hc-900) KC85/2 mit 16k RAM und 8k System ROM mit HC-CAOS 2.2. BASIC muß als zusätzlicher Modul gesteckt werden. * kc85/3 KC85/3 mit 16k RAM, 8k System ROM mit HC-CAOS 3.1 und bereits eingebautem 8k BASIC ROM. * kc85/4 KC85/4 mit 64k RAM, auf 64k erweitertem Bildschirmspeicher, 12k System ROM mit HC-CAOS 4.2 und 8k BASIC ROM. Zusätzlich zum Grundgerät werden einige Erweiterungen unterstützt. So wird das Floppy-System (D004) emuliert, wodurch es unter anderem möglich ist, verschiedene für den KC85/4 verfügbare CP/M Systeme zu nutzen. Darunter sowohl das dem D004 beiliegende, speziell für den KC85 angepaßte MicroDOS als auch das auf dem weit verbreiteten ZDDOS/ZSDOS basierende ML-DOS. Die GIDE Schnittstelle zum Anschluß einer IDE-Festplatte oder CF-Karte wird soweit emuliert, daß der Zugriff mit ML-DOS möglich ist. Aktiviert werden kann die GIDE Schnittstelle zur Zeit nur in der Konfigurationsdatei (per Parameter Hard Disk 0 für die erste Festplatte im Format einer Seagate ST-157A mit 42MB, C/H/S = 560/6/26 und Parameter Hard Disk 1 für eine zweite Festplatte im Dateiformat des MyZ80 CP/M-Emulators mit 8MB, C/H/S = 128/1/32).

2.3. KC85/5 Den KC85/5 hat es offiziell nie gegeben. Dies ist ein umgebauter KC85/4 bei dem sowohl der RAM auf 256k als auch der ROM auf 48k (16k System ROM, 8k BASIC ROM and 24k User ROM) erweitert wurde. Zusätzlich kommt ein verbessertes System-Programm zum Einsatz (HC-CAOS 4.4) welches den nun verfügbaren Speicher verwalten kann und auch sonst einige nützliche Dinge mitbringt. Typischerweise kommt ein derartig aufgerüstetes Basis-System nicht allein zum Einsatz sondern in Verbindung mit einem Floppy-System in dem sogar in einigen Fällen eine Schnittstelle für IDE-Festplatten eingebaut wurde. Foto: KC85/5 mit Bustreiber (D002) und Floppy-System (D004) Parameter für die Emulation: * kc85/5 KC85/5 mit 256k RAM, 16k System ROM mit HC-CAOS 4.4, 8k BASIC ROM und 24k User-ROM. Der User-ROM enthält die Programmpakete KC-Debugger (Testmonitor und Reassembler), EDAS 1.6 und KC-Forth. Für den KC85/5 wird auch die Emulation des Floppy-Systems (D004) verändert indem als System-ROM der Floppy die Version 3.1 zum Einsatz kommt (im Gegensatz zur Originalen Version die die Nummer 2.0 trägt). In dieser Kombination (HC-CAOS 4.4 und D004 3.1) ist es möglich das System direkt von Diskette oder Festplatte zu starten.

2.4. Z1013 Der Z1013 ist ein Bausatz der vom VEB Robotron Riesa produziert wurde. Geliefert wurde eine bestückte Grundplatine und eine Folienflachtastatur die selbst angelötet werden mußte. Ein Trafo für Spannungsversorgung mußte auch erst beschafft werden bevor es losgehen konnte. Foto: Z1013 ohne die berüchtigte Folienflachtastatur Vom Z1013 gab es bereits ab Werk eine ganze Reihe von Versionen mit unterschiedlichen Systemparametern. Durch die Bastelfreude der Besitzer sind dazu noch viele Erweiterungen und System-Programme dazugekommen. Parameter für die Emulation (die MHz Angaben entsprechen denen der realen Systeme, die Emulation beachtet diese noch nicht korrekt): * z1013.01 Z1013 mit 16k RAM und 2k ROM mit System 2.02. Die CPU läuft mit 1MHz. * z1013.12 Z1013 mit 1k sRAM und 2k ROM mit System 2.02. Die CPU läuft mit 2MHz. (Diese Version war wohl als Steuermodul für die Industrie gedacht.) * z1013.16 Z1013 mit 16k RAM und 2k ROM mit System 2.02. Die CPU läuft mit 2MHz. * z1013.64 (z1013) Z1013 mit 64k RAM und 2x2k ROM. Die CPU läuft mit 2MHz. Der System ROM enthält sowohl das System 2.02 als auch Version A.2. Genutzt wird System 2.02. * z1013.a2 Identisch mit dem z1013.64, es wird jedoch das System A.2 geladen die eine erweiterte Tastatur mit 8x8 Matrix unterstützt. * z1013.rb Z1013 mit 64k RAM und 4k ROM. Das System ist erweitert und nennt sich 2.028 RB. Unterstützt wird eine angeschlossene K7659 Tastatur. * z1013.surl Z1013 mit 64k RAM und 4k ROM. Der ROM enthält den "Super Ur-Lader 5.0" der beliebige Dateien von Kassette als System-Monitor laden kann. Es wird eine Hardware-Modifikation (Port 04h) unterstützt die es dem Urlader erlaubt den System-ROM komplett abzuschalten, so daß der komplette Adressraum aus RAM besteht. * z1013.bl4 Z1013 mit 64k RAM und 4k ROM. Der ROM enthält den Bootlader BL4 der System-Monitore von Diskette laden oder ein an den Z1013 angepaßtes CP/M System starten kann.

2.5. LC80 VEB Mikroelektronik Erfurt Foto: Ein betriebsbereiter LC80 Vom LC80 existieren 2 Varianten mit unterschiedlicher ROM-Bestückung. Die Eine besitzt 2 1k-ROMs (U505) an den Adressen 0000h und 0800h. Die Andere ist mit einem 2k-EPROM (U2716) bestückt, wodurch der Monitor in einem zusammenhängenden Speicherbereich von 0000h - 07ffh liegt. Das Monitorprogramm unterscheidet sich dabei lediglich um einige an die unterschiedlichen Adressbereiche angepasste Sprungbefehle. Ein funktionaler Unterschied besteht nicht. Parameter für die Emulation: * lc80, lc80.1k LC80 mit 1k RAM und 2 x 1k ROM (0000h-03ffh, 0800h-0bffh). * lc80.2k LC80 mit 1k RAM und 1 x 2k ROM (0000h-07ffh).

2.6. Polycomputer 880 VEB Polytechnik Karl-Marx-Stadt Foto: Ein Poly880 in seinem Koffer Parameter für die Emulation: * poly880 Poly 880 mit 2 x 1k ROM (0000h-03ffh, 1000h-13ffh), optional können zusätzliche ROM-Dateien an die 2 freien ROM-Plätze geladen werden (poly880c.rom: 2000h-23ffh, poly880d.rom: 3000h-33ffh). * poly880.sc1 Poly 880 mit modifiziertem SC1-ROM. Im Adressbereich 0000h-0fffh befindet sich ein 4k großer, an die Hardware des Poly 880 angepasster ROM des Schachcomputers SC1.

2.7. BIC / A5105 VEB Robotron-Meßelektronik "Otto Schön" Dresden Foto: A5105 Komplettsystem

2.8. Kramer-Microcomputer Dieser Computer wurde im Buch "Praktische Microcomputertechnik" von M. Kramer vorgestellt und war als erweiterbares System konzipiert.

2.9. PC/M / Mugler-PC Der PC/M wurde als CP/M-fähiger Selbstbaucomputer in einer Artikelreihe der Zeitschrift "Funkamateur" von A. Mugler und H. Mathes vorgestellt.

2.10. VCS 80 Für Lern- und Testzwecke entwickeltes minimales Mikrorechnersystem. Industielle Vorbilder sind der LC80 und der Polycomputer 880. Ziel waren vor allem minimale Bauelementekosten um den Nachbau für den Amateur zu ermöglichen. Vorgestellt wurde der VCS80 von Eckhard Schiller in der Zeitschrift "radio fernsehen elektronik" (rfe) Ausgabe 3/1983.

2.11. C-80 Von Dipl.-Ing. Joachim Czepa entwickelter Einplatinencomputer mit 8-stelliger 7-Segmentanzeige und Schnittstelle für Kassettenrecorder. Vorgestellt wurde das System in der "Schaltungssammlung für den Amateur, 4. Lieferung 1986", Blatt 6-13 bis 6-18.

3.1. Profile System Im "System"-Tab wird angegeben wie das Profil heißt und welches System emuliert werden soll. Zusätzlich kann ein Kommentar eingegeben werden, der das System kurz beschreibt. Dieser Kommentar wird auch angezeigt, wenn der Emulator mit dem Profilauswahl-Fenster gestartet wird. Anzeige Der Tab mit den Eigenschaften für die Bildschirmdarstellung erlaubt es die folgenden Einstellungen vorzunehmen: Skalierung Anzeigeskalierung des Hauptfensters. Bei einem Wert von 1 entspricht ein Pixel auf dem Bildschirm des emulierten Systems auch genau einem Pixel im emulierten System. Es ist möglich die Darstellung auf das doppelte oder das dreifache zu vergrößern. Effekte Das Einschalten der Effekte hat nur bei einer Einstellung der Skalierung von >1 Auswirkungen. Bei der Skalierung auf doppelte Größe wird dann ein sogenannter Scanline-Effekt erzeugt, bei dem jede 2. Bildschirmzeile etwas abgedunkelt wird. Wird die Skalierung auf dreifache Größe eingestellt, erfolgt eine Filterung des Bildes die eine etwas unscharfe Darstellung zur Folge hat. IRM Zugriff Wird diese Option eingeschaltet, werden bei der Emulation eines KC 85/2 bzw. KC 85/3 die Darstellungsfehler durch den Zugriff auf den Bildwiederholspeicher (IRM) simuliert. Debug Diese Option dient lediglich der Fehlersuche und hat bei einer Skalierungseinstellung von 1 zur Folge, dass der für die Anzeige benutzte Caching-Algorithmus sichtbar gemacht wird. Das erfolgt dadurch, dass veränderte Bildschirmbereiche für kurze Zeit heller dargestellt werden als normal. Diese Option sollte deshalb im Normalfall ausgeschaltet bleiben. Module Im Tab "Module" können die Module angegeben werden, die beim Start des Emulators mit dem jeweiligen Profil automatisch geladen werden sollen. Medien KC85 Dieser Tab enthält spezielle Einstellungen für die Emulation der KC85 Serie aus Mühlhausen (KC85/2-5). D004 Einschalten dieser Option aktiviert die Emulation des D004 Floppy Basis Devices. Dieses ist notwendig für die Nutzung von Disketten oder Festplatten (über GIDE) am KC85. Außerdem enthält das D004 die Hardware um CP/M Systeme auf dem KC laufen lassen zu können. F8 ROM Der im D004 eingebaute System-ROM liegt normalerweise im Modul-Schacht FC. Eine kleine Modifikation der D004 Hauptplatine ermöglicht den Einsatz eines erweiterten ROMs. Dadurch können 2 unterschiedliche Versionen der D004 Software genutzt werden. Wird diese Option eingeschaltet, wird der Zugriff auf den zweiten System-ROM freigeschaltet. Bustreiber Diese Option gibt an, wie viele D002 Bustreiber emuliert werden sollen. Maximalwert für den Emulator sind 4 Geräte.

3.2. Kassettenverwaltung Zur Nachbildung eines Kassettenlaufwerkes werden spezielle Archiv-Dateien benutzt. Diese können ein oder mehrere Programme enthalten. Angezeigt werden der Name im Archiv (der nicht mit dem Dateinamen übereinstimmen muß den der KC verwendet) sowie einige Eigenschaften der Dateien: Das Öffnen und Schließen von Archivdateien erfolgt mit den beiten Knöpfen rechts oben. Ist keine Datei geöffnet, sind alle Knöpfe außer dem Öffnen-Knopf inaktiv. Das Anlegen von neuen, leeren Archivdateien geschieht auch über den Öffnen-Knopf und der Angabe einer Datei, die noch nicht existiert. Wird die Nachfrage ob die nicht existierende Datei angelegt werden soll mit Ja beantwortet, wird ein neues leeres Archiv angelegt. Um dem Archiv neue Dateien hinzuzufügen, muß der Menüpunkt Datei Hinzufügen im Kontextmenü gewählt werden. Das Laden von Dateien kann auf 2 Arten erfolgen: 1.) Mit Doppelclick auf die Datei oder über die Menüpunkte Datei Ausführen bzw. Datei Laden wobei ein Doppelclick dem Menüpunkt Datei Ausführen entspricht. Bei Datei Laden wird der Inhalt der Datei einfach in den Speicher des Systems kopiert. Da dies sozusagen ohne Wissen des emulierten Systems geschieht, funktioniert diese Vorgehensweise nicht in allen Fällen ohne Probleme. Bei Dateien vom Typ COM, also direkt ausführbaren Programmen treten normalerweise keine Probleme auf. Bei BASIC Dateien funktioniert das leider nicht so ohne weiteres. Man kann sich behelfen, indem man den BASIC-Interpreter mit BYE verläßt, die Datei in den Speicher lädt und danach mit REBASIC (oder auch WBASIC, je nach System) zum BASIC zurückkehrt. Bei Datei Ausführen wird wie der Name schon andeutet versucht die Datei nicht nur in den Speicher zu laden sondern auch gleich zu Starten. Das funktioniert nur für Dateien vom Typ COM. 2.) Laden per Kassetten-Emulation. Dazu muß wie beim realen KC vorgegangen werden: - Datei im Kassetten-Fenster selektieren - Im emulierten System LOAD (oder CLOAD o.ä.) eingeben - Mit Play das Abspielen der Datei starten - Im emulierten System evtl. mit ENTER bestätigen - Warten - Bei größeren Programmen noch länger Warten - Evtl. Programm starten (z.B. per RUN bei BASIC Programmen) Das Laden dauert im Normalfall genau so lange wie das Laden von Kassette beim echten System. Es ist jedoch möglich dies etwas zu beschleunigen. Dazu kann im Menü Konfiguration der Punkt Maximale Geschwindigkeit ausgewählt werden. Dann wird die Emulation nicht mehr auf die Geschwindigkeit des Original-Systems gebremst und läuft je nach PC auf dem der Emulator läuft um ein vielfaches schneller als das Original. Achtung: Nicht vergessen die Geschwindigkeits-Bremse wieder einzuschalten, sonst sind die Monster in einigen Spielen ziemlich schnell ;-).

3.3. Diskettenverwaltung Die Diskettenverwaltung bietet die Möglichkeit bis zu 4 Diskettenlaufwerke mit virtuellen Disketten zu bestücken. Die Daten können dabei in unterschiedlicher Form vorliegen: 1. Disketten-Dump Dieses Format stammt vom Programm Anadisk der Firma Sydex. Die Datei enhält einfach 1:1 die Daten der Diskette mit ein paar Zusatzinformationen zu Sektor-Nummern und Blockgrößen. Da die Daten unkomprimiert vorliegen sind die Dateien (bei gleicher Formattierung der Original-Diskette) immer gleich groß. Für eine 2-seitige KC-Diskette mit 80 Spuren mit je 5 Sektoren zu 1024 Byte ist die Dump-Datei genau 825600 Bytes groß. Werden Disketten auf Basis einer solchen Datei emuliert, sind diese im Emulator auch schreibbar. 2. Teledisk-Image Das Teledisk Format stammt vom gleichnamigen Programm welches auch von der Firma Sydex stammt. Es ist zur Archivierung von Disketten gedacht und unterstützt 2 Komprimierungsverfahren. Es sollte möglich sein alle mit Teledisk erzeugten Images im Emulator zu nutzen, aufgrund des nicht offen gelegten Formates kann es jedoch bei einigen Dateien zu Problemen kommen. Das Schreiben auf Disketten die auf einem Teledisk-Image basieren ist derzeit nicht möglich. 3. Dateien in einem Verzeichnis Es ist möglich eine Auswahl an Dateien in ein Verzeichnis zu kopieren und dieses dann dem Emulator als Diskette zu übergeben. Dazu muß im Öffnen-Dialog in das entsprechende Verzeichnis gewechselt werden und es darf kein Dateiname im Öffnen-Dialog angegeben sein. Nach der Auswahl des Verzeichnisses wird eine virtuelle Diskette mit den vorhandenen Dateien erstellt. Liegen in diesem Verzeichnis mehr Dateien als auf die Diskette passen, werden einige Dateien ignoriert. Das Format der virtuellen Diskette entspricht dem KC-Format mit 2 Seiten, 80 Spuren mit 5 Sektoren zu 1024 Byte. Das Inhaltsverzeichnis wird so angelegt, daß 2 Spuren als Systemspuren zu reservieren sind. Wird im Verzeichnis eine spezielle Datei mit dem Namen @boot.sys gefunden, wird der Inhalt der Datei in die Systemspuren übernommen. Diese Datei ist im Normalfall 20480 Byte groß. Beschreiben einer solchen virtuellen Diskette ist nur eingeschränkt möglich. Es werden lediglich Schreibzugriffe auf die Systemspur in die Datei @boot.sys umgelenkt soweit diese vorhanden ist.

3.4. Modulverwaltung Je nach emuliertem System steht eine Auswahl an Modulen bereit die das System um die verschiedensten Funktionen erweitern. - Module für den KC85/1, KC87 - Module für den KC85/2 - KC85/5 - Module für den Z1013 Module für den KC85/1, KC87 RAM-Module - 16k RAM (ab Adresse 4000h) - 16k RAM (ab Adresse 8000h) Software-Module - ZM30 - EDAS - IDAS / ZM - BITEX sonstige Module - 192k RAM/EPROM Modul Ein von Lutz Elßner entwickelter und im "Funkamateur" vorgestellter Modul mit 32k RAM und 160k ROM. - KC-Pascal Modul Der Pascal Modul ist im Gegensatz zu den "normalen" ROM-Modulen nicht 10k sondern 32k groß und belegt den Adressraum zwischen 4000h und bfffh. Dadurch kann er nicht zusammen mit zusätzlichen RAM-Modulen betrieben werden. - Mega-ROM Modul Entworfen von Alexander Schön besitzt der Modul 2,5MB ROM und enthält durch die in der Modul-Verwaltungssoftware eingebaute Komprimierungsfunktion in der vorliegenden Version 3.5MB an Daten in 311 Dateien! Mit dabei u.a. auch ein an den Modul angepaßtes Mini-CP/M welches auf 2 im ROM befindliche ROM-Floppies zugreifen kann. - 128k ROM Bank Dieser Modul von Ulrich Zander enthält eine Auswahl an nützlichen Programmen, erfordert aber ein leicht verändertes System-ROM und ist zur Zeit nicht ohne weiteres im Emulator nutzbar. - Plotter XY4131 Nur unter Linux verfügbar ist dieser Modul der keinem realen Modul entspricht sondern einen am I/O Port des KC87 angeschlossenen Kleinplotter XY4131 nachbildet. Alle an den Plotter übertragenen Befehle werden umgewandelt und in eine PostScript Datei geschrieben. - CPM-Z9 BOOT, CPM-Z9 64k RAM und CPM-Z9 Floppy Diese 3 Module sind nur sinnvoll in der Kombination aller drei Module nutzbar und stellen eine CP/M-fähige Erweiterung des KC87 dar die durch das "Zentralinstitut für Kernforschung" in Rossendorf etwickelt wurde. Nach Auswahl aller drei Module wird nach einem Reset des KC87 nicht mehr der übliche Prompt angezeigt. Jetzt meldet sich der KC87 mit CP/M-System. Nach dem Einlegen der CPM-Z9 System-Diskette kann durch Eingabe von BOOT und betätigen mit der ENTER-Taste das CP/M System von Diskette geladen und gestartet. Über die Auswahlbox "IRM Color Expansion" kann eingestellt werden, ob das emulierte System über die im Gerät eingebaute Farberweiterung verfügen soll oder nicht. Module für den KC85/2 - KC85/5 RAM-Module - M022: Expander RAM (16k) - M011: 64k RAM - M036: 128k Segmented RAM - M032: 256k Segmented RAM - M034: 512k Segmented RAM - M035: 1M Segmented RAM Software-Module - M012: Texor - M026: Forth - M027: Development - M900: WordPro '86 (KC85/3) - M901: WordPro '86 (KC85/4) sonstige Module - M001: Digital In/Out Die eigentliche Funktion des Moduls als Ein-/Ausgabe Schnittstelle ist zwar nicht nutzbar, es werden aber die im Modul enthaltenen Schnittstellenschaltkreise PIO (U855D) und CTC (U857D) emuliert. So kann z.B. der CTC als Zähler genutzt werden. - M006: BASIC Dieser Modul steht nur im KC85/2 und KC85/3 Modus zur Verfügung, da er nur für diese Systeme einsetzbar ist. Sinnvoll ist er eigentlich nur für den KC85/2, da dieser kein eingebautes BASIC besitzt. Eine Besonderheit dieses Modules ist, daß er nicht nur das BASIC selbst enthält, sondern auch ein komplettes System (HC9001-CAOS, es gibt auch Module die sich mit HC-CAOS 2.2 melden). Deshalb kann der Modul nicht einfach per SWITCH eingeschaltet werden, sondern muß mit JUMP initialisiert werden (z.B. JUMP 8, wenn er im Schacht 8 steckt. - M008: Joystick Der Joystick-Modul enthält keine Modulsteuerung und ist daher auch ohne SWITCH Anweisung immer aktiv. In der Windows-Version des Emulators ist dieser Modul nicht nutzbar. - M035x4: 4MB RAM Dieser RAM-Module besteht logisch aus 4 x M035 Modulen, die alle 4 Moduladressen eines Modulschachtes belegen. Normalerweise wird nur jede 4. Moduladresse genutzt (8, C, 10, 14, 18, ...), steckt dieser Modul z.B. in Schacht 8, existieren auf den Moduladressen 8, 9, A und B jeweils ein M035 Modul mit 1MB. Achtung: Bei Verwendung des originalen Floppy-Systems mit D004 ROM Version 2.0 (läßt sich im MENU per "J FC FF" anzeigen) tritt bei Nutzung des 4MB-Modules in Verbindung mit MicroDOS ein Überlauf bei der Berechnung des verfügbaren Speichers auf. Dadurch ist für MicroDOS trotz des des 4MB Moduls kein zusätzlicher Speicher sichtbar. Dies kann durch Verwendung von 3 einzelnen 1MB Modulen (M035) umgangen werden. Oder es wird die neue D004-ROM-Version der KC85/5 Emulation genutzt (Version 3.1) bei der dieser Fehler beseitigt wurde. Zusätzlich ist es möglich in der Konfigurationsdatei eigene ROM-Module zu definieren. Module für den Z1013 sonstige Module - 256k RAM-Floppy Es können maximal 2 RAM-Floppy Module genutzt werden. Intern wird der erste an Port 98h und der zweite an port 58h verwaltet. - FDC (Schneider) Floppy-Erweiterung (vom Computer Club Jena?) - GDC 82720 Erweiterte Bildschirmdarstellung mit 80-Zeichen pro Zeile - RTC (Port 20h-2fh), RTC (Port 70h-7fh) Echtzeituhr, es werden Datum und Uhrzeit des Systems übernommen auf dem der Emulator läuft. Die beiden Module unterscheiden sich nur durch die Portadresse unter der sie im Z1013 System angesprochen werden. Um das CP/M von der Diskette "z1013gdc.dump" zu starten, muß die Z1013 Variante mit den Bootlader BL4 gestartet werden. Dann sollten folgende Module ausgewählt sein: GDC 82720, FDC (Schneider), RTC (port 70h-7fh) und 2 mal 256k RAM-Floppy. Nach einem Reset muß sich der Bootlader mit der Auswahl Z1013: Z CP/M: C melden. Nach drücken der C Taste wird das CP/M von Diskette gestartet.

3.5. Abspielen von Sound-Dateien Diese Funktion ermöglicht es vorhandene Sound-Dateien abzuspielen die z.B. von Kassette aufgenommen wurden und nun im WAV (oder einem anderen unterstützten) Format vorliegen. Die Anzahl der unterstützten Formate hängt von den bei der Übersetzung des Emulators aktivierten Audio-Module ab. Beim Öffnen einer Datei wird von allen Modulen in einer vorgegebenen Reihenfolge versucht die Datei zu öffen. Ist das erfolgreich, dann wird der entsprechende Modul zum Lesen und Abspielen der Datei genutzt. Liste aller möglichen Module in der Reihenfolge in der sie beim Öffnen einer Datei aufgerufen werden: OSS - Lädt keine Datei sondern direkt von der Soundkarte. Dieser Modul ist nur unter Linux verfügbar und wird aktiviert indem im Dialog zum Öffnen der Datei die spezielle Gerätedatei "/dev/dsp" ausgewählt wird. ALSA - Analog zu OSS, es wird jedoch ein anderer Sound-Treiber benutzt. Als Dateiname muß "/dev/snd" angegeben werden. FLAC - Modul zum Lesen von verlustfrei komprimierten Sound-Dateien im FLAC-Format. SNDFILE - Dieser Modul nutzt die Bibliothek libsndfile (http://www.mega-nerd.com/libsndfile/) und kennt alle Formate die von dieser Bibliothek unterstützt werden. AUDIOFILE - Dieser Modul basiert auf der Bibliothek libaudiofile (http://www.68k.org/~michael/audiofile/) und unterstützt daher alle Formate dieser Bibliothek. WAV - Ein unabhängig von externen Bibliotheken und daher immer im Emulator verfügbarer Modul zum Lesen von WAV Dateien. Dieser Modul ist sehr einfach gehalten und kann nur eine begrenzte Anzahl von WAV-Dateien mindestens aber Mono-Dateien mit 8 oder 16 Bit Samples und beliebiger Sample-Frequenz. OggVorbis - Modul zum Lesen von komprimierten OGG Dateien. Da die Komprimierung Verlustbehaftet ist, kann es bei sehr stark Komprimierten Dateien zu Lesefehlern kommen, da nicht mehr das beim Aufnehmen vorhanden Signal generiert werden kann. MP3 - Modul zum Lesen von komprimierten MP3 Dateien mit der Bibliothek libmp3lame. Dieses Format komprimiert wie das OGG-Format verlustbehaftet, daher gelten die gleichen Einschränkungen bei starker Komprimierung. RAW - Dieser Modul behandelt alle übergebenen Dateien als wären sie unkomprimierte Sound-Dateien mit dem Format 44100kHz, 8bit, Mono.

3.6. Speichern von Memory-Bereichen Zusammenhängende Bereiche des Hauptspeichers können auf einfache Art und Weise als Datei gespeichert werden. Dabei ist zu beachten, dass immer der aktuell von der CPU sichtbare Speicher angezeigt bzw. in die Datei geschrieben wird. Der im Fenster angezeigte Speicherinhalt ist statisch auch wenn die Emulation weiterläuft. Über den Button "Aktualisieren" kann aber erneut der aktuelle Speicherinhalt geladen werden, ohne das Fenster zu verlassen. Die beiden Toggle-Buttons hinter den Adressangaben schalten das automatische Scrolling der Speicheranzeige zu den jeweils angegebenen Adressen ein bzw. aus.

3.7. Vinculum USB Emuliert wird die Schnittstelle zum VDIP1 Modul der Firma FTDI. Dieser bietet die Möglichkeit auf einfache Art und Weise USB Massenspeicher-Geräte (vorrangig USB-Sticks) am KC anzuschließen. Die auf dem Modul enthaltene Firmware übernimmt dabei die komplette Verwaltung des angeschlossenen USB-Sticks und bietet dem KC den Zugriff auf die gespeicherten Dateien bzw. erlaubt es Dateien auf dem USB-Stick abzulegen. Notwendig für die Nutzung der emulierten USB-Schnittstelle ist das aktivieren des "Vinculum USB" Moduls, der eine spezielle Form des Digital-I/O Moduls M001 nachbildet, basierend auf der Schaltung, die Mario Leubner auf den Web-Seiten des "KC85 Labors" vorgestellt hat. Dort finden sich auch weitere Hinweise und Programme für die Nutzung des Moduls (http://www.kc85.susowa.homeftp.net/). Der zusätzlich vorhandene ROM-Modul mit der CAOS Terminal-Software erlaubt einen einfachen Zugriff auf die Funktionen des Moduls. Verfügbar sind 3 Versionen der Terminal-Software: - Version 1.2 - Version 2.0 für CAOS 4.2 - Version 2.0 für CAOS 4.4 Version 1.2 unterstützt noch nicht die Funktionen zur Nutzung der Zeitstempel für Dateien. Version 2.0 existiert in 2 Varianten. Die speziell für CAOS 4.4 erweiterte Variante, erlaubt es bei einigen Kommandos den Dateinamen direkt anzugeben (also z.B. DIR B*.*, statt DIR <ENTER> mit nachfolgender Abfrage der Maske). Welche Dateien sichtbar sein sollen, kann über den Menüpunkt "Emulator / Vinculum USB" festgelegt werden. Die Auswahl eines Verzeichnisses wirkt wie das Stecken eines USB-Sticks mit den Daten unterhalb dieses Verzeichnisses.

3.8. Plotter Das Plotter-Fenster zeigt die Ausgabe eines emulierten Klein-Plotters XY4131. Dazu muss in der KC85/1 bzw. KC87 Emulation der Plotter-Modul ausgewählt und die entsprechende Treiber-Software (Plotter-BASIC und GRPLOT.COM) geladen sein. GRPLOT.COM befindet sich auf der zum Plotter mitgelieferten Programmkassette R0114. Außerdem werden 2 RAM-Module benötigt, da der Treiber GRPLOT.COM im Speicherbereich des 2. RAM-Modules (8000h-BFFFh) läuft. Das Plotter-Fenster mit den Ausgaben... ...dieses kleinen BASIC Programmes Über die Einstellungen auf der rechten Seite des Fensters können die Eigenschaften beim Plotten eingestellt werden. Stiftfarbe Bestimmt die Farbe mit der gezeichnet wird. Änderungen an dieser Einstellung wirken sich sofort aus. Papierfarbe Bestimmt die Hintergrundfarbe, also sozusagen die Farbe des Papiers auf dem gezeichnet. Diese Einstellung wird nur beim Löschen des Zeichenbereiches übernommen. Nullpunkt X und Nullpunkt Y Bestimmen die Position der Koordinate 0,0 des Zeichenbereiches in Bezug auf die obere linke Ecke des Papiers (in Millimeter). Damit kann der Zeichenbereich verschoben werden. Auch diese Einstellung wird erst beim Löschen des Zeichenbereiches übernommen. Linienbreite Dicke des Stiftes (in Millimeter) mit dem gezeichnet wird. Änderungen an dieser Einstellung wirken sich sofort aus. Zeichenbereich Anzeige des Zeichenbereiches. Es wird ein dünner grüner Rahmen um den möglichen Zeichenbereich (180 x 255 Millimeter) des Plotters angezeigt. (Achtung: Das Einschalten dieser Option verlangsamt die Bilddarstellung erheblich!) Stift anzeigen Anzeige der Stiftposition mit einem kleinen Fadenkreuz. (Achtung: Das Einschalten dieser Option verlangsamt die Bilddarstellung erheblich!) Refresh Definiert alle wieviel Millisekunden die Darstellung des Zeichenbereiches erfolgen soll. Umso höher dieser Wert, desto seltener wird der Zeichenbereich angezeigt was aber die benötigte Rechenleistung verringert. In PDF-Datei plotten Hier kann eine Datei angelegt werden, in die die folgenden Ausgaben auf dem Plotter geschrieben werden. Für die Ausgabe in eine PDF-Datei hat die Funktion "Zeichenbereich" löschen den zusätzlichen Effekt, dass eine neue Seite erzeugt wird. Dadurch können mehrere Zeichungen in eine PDF-Datei ausgegeben werden. Speichern Über den Button "Speichern" kann die aktuell angezeigte Zeichnung als PNG Datei gespeichert werden. Die PNG Datei hat dabei eine Auflösung von 2100 x 2970 Bildpunkten, was einer A4-Seite mit 10 Pixeln pro Millimeter entspricht. Der Kleinplotter XY 4131 Einige technische Daten des Plotters: Papierformat A4 Effektive Zeichenfläche 255mm x 180mm Raster 2550 x 1800 Schritte Minimale Schrittweite 0,1 mm Zeichengeschwindigkeit 100 mm/s Abmessungen 396 mm x 177 mm x 82 mm Masse 3 kg

3.9. Screenshot Screenshots der Bildschirmausgabe des emulierten Systems können in verschiedenen Formaten gespeichert werden. Die zur Verfügung stehenden Formate sind abhängig vom (Host-) System auf dem der Emulator läuft, aber normalerweise stehen die folgenden Formate zur Verfügung. - PNG - JPEG - TIFF - BMP Das Screenshot-Fenster Der aktuelle Bildschirminhalt wird beim Öffnen des Screenshot-Fensters und beim Drücken des Buttons "Screenshot" übernommen und angezeigt. Soll nur ein Ausschnitt des Bildschirminhaltes gespeichert werden, kann mit Hilfe der Eingabefelder "Links"/"Rechts"/"Oben"/"Unten" jeweils eine bestimmte Anzahl an Pixelzeilen abgeschnitten werden. Der ausgewählte Bereich wird dabei durch eine schwarz/weiß gestrichelte Linie dargestellt. Zum Speichern muss dann das gewünschte Format und der Dateiname ausgewählt werden. Durch Drücken des Buttons "Speichern" wird der angezeigte Bildschirminhalt bzw. -ausschnitt in der Datei abgespeichert.

3.10. Video Zusätzlich zur Ausgabe im Emulator-Fenster kann der Bildschirminhalt des emulierten Systems auch in eine Video-Datei geschrieben werden. Das Video-Fenster Möglich sind dabei die folgenden Video-Formate - Theora/Ogg Ein lizenzfreies Video-Format der Xiph.org Foundation. Dieses Format können aktuelle Versionen des Firefox Internet Browsers (ab Version 3.5) ohne zusätzliche Software abspielen. - AVI Das "Audio Video Interleave" Format ist ein weit verbreitetes, von Microsoft definiertes Container Format welches verschiedene Typen von Ton- und Video-Spuren erlaubt. KCemu nutzt als Videoformat "DivX MPEG-4 Version 5". - MPEG 4 Video-Format nach MPEG-Standard. - Dirac Lizenzfreies Video-Format entwickelt von der BBC Research Abteilung der BBC (British Broadcasting Corporation). Dirac ist die Referenz- Implementierung des Video-Formates. - Schroedinger Optimierte aber zum Teil noch experimentelle Implementierung des von der BBC entwickelten Dirac Video-Formates. - GIF (animiert) Das Grafikformat GIF erlaubt nicht nur die Speicherung von einem einzelnen Bild, sondern von mehreren Bildern in einer Datei. Durch eine Erweiterung, die ursprünglich von Web-Browsern eingeführt wurde, ist es möglich kleinere Videos im GIF Format zu speichern. Bei Einstellung von 50 Bildern pro Sekunde wird die erzeugte GIF Datei optimiert, indem doppelte Bilder nicht gespeichert werden. Bei Einstellung von weniger als 50 Bildern pro Sekunde ist diese Optimierung derzeit nicht möglich. - VNC Hier erfolgt die Ausgabe des Videos nicht in eine Datei, sondern der Emulator kann so die Rolle eines VNC Servers übernehmen. Das bedeutet, das die Bildschirmausgabe des emulierten Systems von einem anderen Rechner per VNC-Client angezeigt werden kann (Vergleichbar mit Remote-Desktop für Windows). Welche dieser Formate verfügbar sind, hängt von der Installation ab, normalerweise sollte mindestens "Theora/Ogg" verfügbar sein.

3.11. Farbeinstellung Zur Farbeinstellung können die Werte Helligkeit und Kontrast verändert werden. Bei einigen Systemen wie KC85/2 bis KC85/5 und BIC / A5105 können dabei Vordergrund und Hintergrundfarbe getrennt eingestellt werden. Bei allen anderen Systemen wirkt sich nur die Einstellung der Fordergrund- Farbe aus. Die Farbeinstellung

KCemu-0.5.1/doc/Makefile.in0000644001050700006200000003674511412404770015036 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = doc DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/Makefile.in \ $(srcdir)/kcemu-help.xml.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = kcemu-help.xml CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(docdir)" DATA = $(doc_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = $(pkgdatadir)/doc dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ IMAGES = \ sys-a5105.jpg \ sys-kc855.jpg \ sys-kc85.jpg \ sys-lc80.jpg \ sys-poly880.jpg \ sys-z1013.jpg \ sys-z9001.jpg \ sys-xy4131.jpg \ window-audio.png \ window-colors.png \ window-disk.png \ window-module-kc85.png \ window-module-z1013.png \ window-module-z9001.png \ window-tape.png \ window-profile-1.png \ window-profile-2.png \ window-profile-3.png \ window-profile-4.png \ window-profile-5.png \ window-savemem.png \ window-select-profile.png \ window-profile-1_small.png \ window-profile-2_small.png \ window-profile-3_small.png \ window-profile-4_small.png \ window-profile-5_small.png \ window-savemem_small.png \ window-select-profile_small.png \ window-plotter-1.png \ window-plotter-1_small.png \ window-plotter-2.png \ window-plotter-2_small.png \ window-screenshot.png \ window-video.png \ kcemu.png doc_DATA = \ kcemurc.sample \ kcemu-help.xml \ $(IMAGES) EXTRA_DIST = $(pkgdata_DATA) kcemurc.sample kcemu-help.xml.in $(IMAGES) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): kcemu-help.xml: $(top_builddir)/config.status $(srcdir)/kcemu-help.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-docDATA: $(doc_DATA) @$(NORMAL_INSTALL) test -z "$(docdir)" || $(MKDIR_P) "$(DESTDIR)$(docdir)" @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(docdir)" || exit $$?; \ done uninstall-docDATA: @$(NORMAL_UNINSTALL) @list='$(doc_DATA)'; test -n "$(docdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(docdir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(docdir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(docdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-docDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-docDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-docDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am uninstall uninstall-am uninstall-docDATA # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/setup/0000755001050700006200000000000011412404771013346 5ustar glaubitzfbedvKCemu-0.5.1/setup/Makefile.am0000644001050700006200000000033111340261610015370 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in NSI_FILES = KCemuSetup.nsi pkgdata_DATA = kcemurc noinst_DATA = $(NSI_FILES) EXTRA_DIST = $(pkgdata_DATA) $(NSI_FILES) KCemuSetup.nsi : KCemuSetup.nsi.in KCemu-0.5.1/setup/kcemurc0000644001050700006200000000034510527416075014732 0ustar glaubitzfbedv# # KCemu -- the KC 85/3 and KC 85/4 Emulator # Copyright (C) 1997-2006 Torsten Paul # # $Id$ # Display Effect: 1 IRM Memory Access: 1 Full Flash Support: 1 Flash Offset: 50 Floppy Disk Basis: 1 Busdrivers: 1 Enable Sound: 0 KCemu-0.5.1/setup/KCemuSetup.nsi0000644001050700006200000010102711345001721016100 0ustar glaubitzfbedv; Script generated by the HM NIS Edit Script Wizard. SetCompressor /SOLID lzma ; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "KCemu" !define PRODUCT_VERSION "0.5.1" !define PRODUCT_PUBLISHER "Torsten Paul" !define PRODUCT_WEB_SITE "http://kcemu.sourceforge.net/" !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\kcemu.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" ; MUI 1.67 compatible ------ !include "MUI.nsh" ; MUI Settings !define MUI_ABORTWARNING !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" ; Welcome page !insertmacro MUI_PAGE_WELCOME ; License page !define MUI_LICENSEPAGE_CHECKBOX !insertmacro MUI_PAGE_LICENSE "KCemu-0.5.1\COPYING" ; Components page ;!insertmacro MUI_PAGE_COMPONENTS ; Directory page !insertmacro MUI_PAGE_DIRECTORY ; Instfiles page !insertmacro MUI_PAGE_INSTFILES ; Finish page !define MUI_FINISHPAGE_RUN "$INSTDIR\bin\kcemu.exe" !insertmacro MUI_PAGE_FINISH ; Uninstaller pages !insertmacro MUI_UNPAGE_INSTFILES ; Language files !insertmacro MUI_LANGUAGE "English" ; MUI end ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "${PRODUCT_NAME}-${PRODUCT_VERSION}.exe" InstallDir "$PROGRAMFILES\KCemu" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show ShowUnInstDetails show Section "!KCemu" SEC01 SetOutPath "$INSTDIR" SetOverwrite try File /r "kcemu\bin" File /r "kcemu\lib" File /r "kcemu\share" CreateShortCut "$DESKTOP\KCemu.lnk" "$INSTDIR\bin\kcemu.exe" '-P' CreateDirectory "$SMPROGRAMS\KCemu" CreateShortCut "$SMPROGRAMS\KCemu\KCemu.lnk" "$INSTDIR\bin\kcemu.exe" '-P' "$INSTDIR\share\KCemu\icons\kcemu-winicon.ico" CreateShortCut "$SMPROGRAMS\KCemu\BIC.lnk" "$INSTDIR\bin\kcemu.exe" '-9' "$INSTDIR\share\KCemu\icons\kcemu-bic.ico" CreateShortCut "$SMPROGRAMS\KCemu\KC85 - 1.lnk" "$INSTDIR\bin\kcemu.exe" '-1' "$INSTDIR\share\KCemu\icons\kcemu-kc87.ico" CreateShortCut "$SMPROGRAMS\KCemu\KC85 - 2.lnk" "$INSTDIR\bin\kcemu.exe" '-2' "$INSTDIR\share\KCemu\icons\kcemu-kc85.ico" CreateShortCut "$SMPROGRAMS\KCemu\KC85 - 3.lnk" "$INSTDIR\bin\kcemu.exe" '-3' "$INSTDIR\share\KCemu\icons\kcemu-kc85.ico" CreateShortCut "$SMPROGRAMS\KCemu\KC85 - 4.lnk" "$INSTDIR\bin\kcemu.exe" '-4' "$INSTDIR\share\KCemu\icons\kcemu-kc85.ico" CreateShortCut "$SMPROGRAMS\KCemu\KC85 - 5.lnk" "$INSTDIR\bin\kcemu.exe" '-5' "$INSTDIR\share\KCemu\icons\kcemu-kc85.ico" CreateShortCut "$SMPROGRAMS\KCemu\KC87.lnk" "$INSTDIR\bin\kcemu.exe" '-7' "$INSTDIR\share\KCemu\icons\kcemu-kc87.ico" CreateShortCut "$SMPROGRAMS\KCemu\LC80.lnk" "$INSTDIR\bin\kcemu.exe" '-8' "$INSTDIR\share\KCemu\icons\kcemu-lc80.ico" CreateShortCut "$SMPROGRAMS\KCemu\Poly880.lnk" "$INSTDIR\bin\kcemu.exe" '-6' "$INSTDIR\share\KCemu\icons\kcemu-poly880.ico" CreateShortCut "$SMPROGRAMS\KCemu\Z1013.lnk" "$INSTDIR\bin\kcemu.exe" '-0' "$INSTDIR\share\KCemu\icons\kcemu-z1013.ico" SectionEnd SectionGroup "GTK" SEC02 Section "-bin" SEC_GTK_01 SetOutPath "$INSTDIR\bin" SetOverwrite try File "dist\bin\charset.dll" File "dist\bin\iconv.dll" File "dist\bin\iconv.exe" File "dist\bin\intl.dll" File "dist\bin\libatk-1.0-0.dll" File "dist\bin\libcairo-2.dll" File "dist\bin\libgailutil-18.dll" File "dist\bin\libgdk-win32-2.0-0.dll" File "dist\bin\libgdk_pixbuf-2.0-0.dll" File "dist\bin\libgio-2.0-0.dll" File "dist\bin\libglib-2.0-0.dll" File "dist\bin\libgmodule-2.0-0.dll" File "dist\bin\libgobject-2.0-0.dll" File "dist\bin\libgthread-2.0-0.dll" File "dist\bin\libgtk-win32-2.0-0.dll" File "dist\bin\libpango-1.0-0.dll" File "dist\bin\libpangocairo-1.0-0.dll" File "dist\bin\libpangoft2-1.0-0.dll" File "dist\bin\libpangowin32-1.0-0.dll" File "dist\bin\libpng12-0.dll" File "dist\bin\libjpeg-7.dll" File "dist\bin\libtiff-3.dll" File "dist\bin\libtiffxx-3.dll" File "dist\bin\freetype6.dll" File "dist\bin\libfontconfig-1.dll" File "dist\bin\libexpat-1.dll" File "dist\bin\pango-querymodules.exe" File "dist\bin\giflib4.dll" File "dist\bin\zlib1.dll" File "dist\bin\SDL.dll" SectionEnd Section "-etc\gtk-2.0" SEC_GTK_02 SetOutPath "$INSTDIR\etc\gtk-2.0" SetOverwrite try File "dist\etc\gtk-2.0\gdk-pixbuf.loaders" File "dist\etc\gtk-2.0\gtk.immodules" File "dist\etc\gtk-2.0\gtkrc" SectionEnd Section "-etc\pango" SEC_GTK_03 SetOutPath "$INSTDIR\etc\pango" SetOverwrite try File "dist\etc\pango\pango.modules" SectionEnd Section "-lib\gtk-2.0\2.10.0\engines" SEC_GTK_ENGINES SetOutPath "$INSTDIR\lib\gtk-2.0\2.10.0\engines" SetOverwrite try File "dist\lib\gtk-2.0\2.10.0\engines\libpixmap.dll" File "dist\lib\gtk-2.0\2.10.0\engines\libwimp.dll" SectionEnd Section "-share\locale\de\LC_MESSAGES" SEC_GTK_06 SetOutPath "$INSTDIR\share\locale\de\LC_MESSAGES" SetOverwrite try File "dist\share\locale\de\LC_MESSAGES\glib20.mo" File "dist\share\locale\de\LC_MESSAGES\gtk20.mo" File "dist\share\locale\de\LC_MESSAGES\gtk20-properties.mo" File "dist\share\locale\de\LC_MESSAGES\libiconv.mo" SectionEnd SectionGroupEnd Section -AdditionalIcons SetOutPath $INSTDIR WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" CreateShortCut "$SMPROGRAMS\KCemu\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" CreateShortCut "$SMPROGRAMS\KCemu\Uninstall.lnk" "$INSTDIR\uninst.exe" SectionEnd Section -Post WriteUninstaller "$INSTDIR\uninst.exe" WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\bin\kcemu.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\bin\kcemu.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" SectionEnd ; Section descriptions !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "The KCemu program" !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "The GTK+ library (http://www.gtk.org/)" !insertmacro MUI_FUNCTION_DESCRIPTION_END Function un.onUninstSuccess HideWindow MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer." FunctionEnd Function un.onInit MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2 Abort FunctionEnd Section Uninstall Delete "$INSTDIR\${PRODUCT_NAME}.url" Delete "$INSTDIR\uninst.exe" Delete "$INSTDIR\bin\kcemu.exe" Delete "$INSTDIR\bin\tdtodump.exe" Delete "$INSTDIR\bin\kctape.exe" Delete "$INSTDIR\bin\kc2raw.exe" Delete "$INSTDIR\bin\kc2wav.exe" Delete "$INSTDIR\bin\kc2tap.exe" Delete "$INSTDIR\bin\kc2img.exe" Delete "$INSTDIR\lib\charset.alias" Delete "$INSTDIR\share\man\man1\kc2img.1" Delete "$INSTDIR\share\man\man1\kc2raw.1" Delete "$INSTDIR\share\man\man1\kc2tap.1" Delete "$INSTDIR\share\man\man1\kc2wav.1" Delete "$INSTDIR\share\man\man1\kcemu-remote.1" Delete "$INSTDIR\share\man\man1\kcemu.1x" Delete "$INSTDIR\share\man\man1\kctape.1" Delete "$INSTDIR\share\man\man1\tdtodump.1" Delete "$INSTDIR\share\doc\kcemu\changelog" Delete "$INSTDIR\share\locale\locale.alias" Delete "$INSTDIR\share\locale\en\LC_MESSAGES\KCemu.mo" Delete "$INSTDIR\share\locale\de\LC_MESSAGES\KCemu.mo" Delete "$INSTDIR\share\KCemu\kcemurc" Delete "$INSTDIR\share\KCemu\.kcemurc" Delete "$INSTDIR\share\KCemu\asm\autostart\kc853.asm" Delete "$INSTDIR\share\KCemu\lib\z80\kc853.bin" Delete "$INSTDIR\share\KCemu\doc\kcemu-help.xml" Delete "$INSTDIR\share\KCemu\doc\kcemu.png" Delete "$INSTDIR\share\KCemu\doc\kcemurc.sample" Delete "$INSTDIR\share\KCemu\doc\sys-a5105.jpg" Delete "$INSTDIR\share\KCemu\doc\sys-kc85.jpg" Delete "$INSTDIR\share\KCemu\doc\sys-kc855.jpg" Delete "$INSTDIR\share\KCemu\doc\sys-lc80.jpg" Delete "$INSTDIR\share\KCemu\doc\sys-poly880.jpg" Delete "$INSTDIR\share\KCemu\doc\sys-z1013.jpg" Delete "$INSTDIR\share\KCemu\doc\sys-z9001.jpg" Delete "$INSTDIR\share\KCemu\doc\sys-xy4131.jpg" Delete "$INSTDIR\share\KCemu\doc\window-audio.png" Delete "$INSTDIR\share\KCemu\doc\window-disk.png" Delete "$INSTDIR\share\KCemu\doc\window-colors.png" Delete "$INSTDIR\share\KCemu\doc\window-module-kc85.png" Delete "$INSTDIR\share\KCemu\doc\window-module-z1013.png" Delete "$INSTDIR\share\KCemu\doc\window-module-z9001.png" Delete "$INSTDIR\share\KCemu\doc\window-tape.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-1.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-1_small.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-2.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-2_small.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-3.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-3_small.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-4.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-4_small.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-5.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-5_small.png" Delete "$INSTDIR\share\KCemu\doc\window-savemem.png" Delete "$INSTDIR\share\KCemu\doc\window-savemem_small.png" Delete "$INSTDIR\share\KCemu\doc\window-select-profile.png" Delete "$INSTDIR\share\KCemu\doc\window-select-profile_small.png" Delete "$INSTDIR\share\KCemu\doc\window-plotter-1.png" Delete "$INSTDIR\share\KCemu\doc\window-plotter-1_small.png" Delete "$INSTDIR\share\KCemu\doc\window-plotter-2.png" Delete "$INSTDIR\share\KCemu\doc\window-plotter-2_small.png" Delete "$INSTDIR\share\KCemu\doc\window-video.png" Delete "$INSTDIR\share\KCemu\doc\window-screenshot.png" Delete "$INSTDIR\share\KCemu\images\kcemu.png" Delete "$INSTDIR\share\KCemu\images\logo-flac.png" Delete "$INSTDIR\share\KCemu\images\logo-gtk.png" Delete "$INSTDIR\share\KCemu\images\logo-lame.png" Delete "$INSTDIR\share\KCemu\images\logo-libsdl.png" Delete "$INSTDIR\share\KCemu\images\logo-libsndfile.png" Delete "$INSTDIR\share\KCemu\images\logo-openclipartlibrary.png" Delete "$INSTDIR\share\KCemu\images\logo-vorbisdotcom.png" Delete "$INSTDIR\share\KCemu\images\logo-theora_org.png" Delete "$INSTDIR\share\KCemu\images\logo-ffmpeg.png" Delete "$INSTDIR\share\KCemu\images\logo-xvid.png" Delete "$INSTDIR\share\KCemu\images\logo-bbc.png" Delete "$INSTDIR\share\KCemu\images\media-end.png" Delete "$INSTDIR\share\KCemu\images\media-play.png" Delete "$INSTDIR\share\KCemu\images\media-record.png" Delete "$INSTDIR\share\KCemu\images\media-start.png" Delete "$INSTDIR\share\KCemu\images\media-stop.png" Delete "$INSTDIR\share\KCemu\images\media-pause.png" Delete "$INSTDIR\share\KCemu\images\window-about.png" Delete "$INSTDIR\share\KCemu\images\window-audio.png" Delete "$INSTDIR\share\KCemu\images\window-copying.png" Delete "$INSTDIR\share\KCemu\images\window-disk.png" Delete "$INSTDIR\share\KCemu\images\window-help.png" Delete "$INSTDIR\share\KCemu\images\window-info.png" Delete "$INSTDIR\share\KCemu\images\window-module.png" Delete "$INSTDIR\share\KCemu\images\window-question.png" Delete "$INSTDIR\share\KCemu\images\window-tape.png" Delete "$INSTDIR\share\KCemu\images\window-thanks.png" Delete "$INSTDIR\share\KCemu\images\window-color.png" Delete "$INSTDIR\share\KCemu\images\window-keyboard.png" Delete "$INSTDIR\share\KCemu\images\window-options.png" Delete "$INSTDIR\share\KCemu\images\window-video.png" Delete "$INSTDIR\share\KCemu\images\window-selector.png" Delete "$INSTDIR\share\KCemu\images\window-plotter.png" Delete "$INSTDIR\share\KCemu\images\window-screenshot.png" Delete "$INSTDIR\share\KCemu\images\about.glade" Delete "$INSTDIR\share\KCemu\images\audio.glade" Delete "$INSTDIR\share\KCemu\images\color.glade" Delete "$INSTDIR\share\KCemu\images\dialog.glade" Delete "$INSTDIR\share\KCemu\images\disk.glade" Delete "$INSTDIR\share\KCemu\images\help.glade" Delete "$INSTDIR\share\KCemu\images\keyboard.glade" Delete "$INSTDIR\share\KCemu\images\legal.glade" Delete "$INSTDIR\share\KCemu\images\main.glade" Delete "$INSTDIR\share\KCemu\images\module.glade" Delete "$INSTDIR\share\KCemu\images\options.glade" Delete "$INSTDIR\share\KCemu\images\selector.glade" Delete "$INSTDIR\share\KCemu\images\tapeedit.glade" Delete "$INSTDIR\share\KCemu\images\tape.glade" Delete "$INSTDIR\share\KCemu\images\thanks.glade" Delete "$INSTDIR\share\KCemu\images\savemem.glade" Delete "$INSTDIR\share\KCemu\images\video.glade" Delete "$INSTDIR\share\KCemu\images\plotter.glade" Delete "$INSTDIR\share\KCemu\images\vdip.glade" Delete "$INSTDIR\share\KCemu\images\screenshot.glade" Delete "$INSTDIR\share\KCemu\roms\z1013\z1013_20.rom" Delete "$INSTDIR\share\KCemu\roms\z1013\z1013_a2.rom" Delete "$INSTDIR\share\KCemu\roms\z1013\z1013_rb.rom" Delete "$INSTDIR\share\KCemu\roms\z1013\z1013_ul.rom" Delete "$INSTDIR\share\KCemu\roms\z1013\z1013_bl.rom" Delete "$INSTDIR\share\KCemu\roms\z1013\z1013_zg.rom" Delete "$INSTDIR\share\KCemu\roms\z9001\192k__d2.851" Delete "$INSTDIR\share\KCemu\roms\z9001\192k__d3.851" Delete "$INSTDIR\share\KCemu\roms\z9001\192k__d5.851" Delete "$INSTDIR\share\KCemu\roms\z9001\basic_c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\basic_c0.87a" Delete "$INSTDIR\share\KCemu\roms\z9001\basic_c0.87b" Delete "$INSTDIR\share\KCemu\roms\z9001\bitex_c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\cpmz9_c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\edas__c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\idas__c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\os____f0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\os____f0.87b" Delete "$INSTDIR\share\KCemu\roms\z9001\r80___c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\rom_bank.851" Delete "$INSTDIR\share\KCemu\roms\z9001\zm30__c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\zsid__c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\kcpascal.851" Delete "$INSTDIR\share\KCemu\roms\z9001\mega_rom.851" Delete "$INSTDIR\share\KCemu\roms\z9001\os_rb20.rom" Delete "$INSTDIR\share\KCemu\roms\z9001\os_rb21.rom" Delete "$INSTDIR\share\KCemu\roms\z9001\chargen.851" Delete "$INSTDIR\share\KCemu\roms\z9001\kc_caos.rom" Delete "$INSTDIR\share\KCemu\roms\z9001\zg_cga.rom" Delete "$INSTDIR\share\KCemu\roms\z9001\zg_cgai.rom" Delete "$INSTDIR\share\KCemu\roms\z9001\zg_de.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\hc900.852" Delete "$INSTDIR\share\KCemu\roms\kc85\caos__e0.852" Delete "$INSTDIR\share\KCemu\roms\kc85\basic_c0.853" Delete "$INSTDIR\share\KCemu\roms\kc85\caos__e0.853" Delete "$INSTDIR\share\KCemu\roms\kc85\caos33.853" Delete "$INSTDIR\share\KCemu\roms\kc85\caos34.853" Delete "$INSTDIR\share\KCemu\roms\kc85\pi88_ge.853" Delete "$INSTDIR\share\KCemu\roms\kc85\pi88_sw.853" Delete "$INSTDIR\share\KCemu\roms\kc85\pi88_ws.853" Delete "$INSTDIR\share\KCemu\roms\kc85\basic_c0.854" Delete "$INSTDIR\share\KCemu\roms\kc85\caos__c0.854" Delete "$INSTDIR\share\KCemu\roms\kc85\caos__e0.854" Delete "$INSTDIR\share\KCemu\roms\kc85\caos41c.854" Delete "$INSTDIR\share\KCemu\roms\kc85\caos41e.854" Delete "$INSTDIR\share\KCemu\roms\kc85\caos43c.855" Delete "$INSTDIR\share\KCemu\roms\kc85\caos43e.855" Delete "$INSTDIR\share\KCemu\roms\kc85\basic_c0.855" Delete "$INSTDIR\share\KCemu\roms\kc85\basicusb.855" Delete "$INSTDIR\share\KCemu\roms\kc85\caos__c0.855" Delete "$INSTDIR\share\KCemu\roms\kc85\caos__e0.855" Delete "$INSTDIR\share\KCemu\roms\kc85\floppy20.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\floppy30.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\floppy31.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\floppy32.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m006.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m012.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m026.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m027.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m033.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m052.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m900.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m901.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\vdip12.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\vdip2_42.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\vdip2_44.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\vdip21.rom" Delete "$INSTDIR\share\KCemu\roms\poly880\poly880a.rom" Delete "$INSTDIR\share\KCemu\roms\poly880\poly880b.rom" Delete "$INSTDIR\share\KCemu\roms\poly880\sc1.rom" Delete "$INSTDIR\share\KCemu\roms\lc80\lc80__00.rom" Delete "$INSTDIR\share\KCemu\roms\lc80\lc80__08.rom" Delete "$INSTDIR\share\KCemu\roms\lc80\lc80__2k.rom" Delete "$INSTDIR\share\KCemu\roms\lc80\lc80e_00.rom" Delete "$INSTDIR\share\KCemu\roms\lc80\lc80e_10.rom" Delete "$INSTDIR\share\KCemu\roms\lc80\lc80e_c0.rom" Delete "$INSTDIR\share\KCemu\roms\a5105\k1505_00.rom" Delete "$INSTDIR\share\KCemu\roms\a5105\k1505_80.rom" Delete "$INSTDIR\share\KCemu\roms\a5105\k5651_40.rom" Delete "$INSTDIR\share\KCemu\roms\a5105\k5651_60.rom" Delete "$INSTDIR\share\KCemu\roms\kramermc\ass.kmc" Delete "$INSTDIR\share\KCemu\roms\kramermc\basic.kmc" Delete "$INSTDIR\share\KCemu\roms\kramermc\chargen.kmc" Delete "$INSTDIR\share\KCemu\roms\kramermc\debugger.kmc" Delete "$INSTDIR\share\KCemu\roms\kramermc\editor.kmc" Delete "$INSTDIR\share\KCemu\roms\kramermc\io-mon.kmc" Delete "$INSTDIR\share\KCemu\roms\kramermc\reass.kmc" Delete "$INSTDIR\share\KCemu\roms\muglerpc\chargen.pcm" Delete "$INSTDIR\share\KCemu\roms\muglerpc\muglerpc.pcm" Delete "$INSTDIR\share\KCemu\roms\vcs80\monitor.rom" Delete "$INSTDIR\share\KCemu\roms\c80\monitor.rom" Delete "$INSTDIR\share\KCemu\icons\icon-default.png" Delete "$INSTDIR\share\KCemu\icons\icon-deleted.png" Delete "$INSTDIR\share\KCemu\icons\icon-root.png" Delete "$INSTDIR\share\KCemu\icons\kcemu-winicon.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-winicon_16x16.png" Delete "$INSTDIR\share\KCemu\icons\kcemu-winicon_32x32.png" Delete "$INSTDIR\share\KCemu\icons\kcemu-winicon_48x48.png" Delete "$INSTDIR\share\KCemu\icons\kcemu-bic.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-kc85.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-kc87.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-lc80.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-poly880.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-z1013.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-kramermc.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-pcm.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-vcs80.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-c80.ico" Delete "$INSTDIR\share\KCemu\icons\icon-bic.png" Delete "$INSTDIR\share\KCemu\icons\icon-kc85.png" Delete "$INSTDIR\share\KCemu\icons\icon-kc87.png" Delete "$INSTDIR\share\KCemu\icons\icon-lc80.png" Delete "$INSTDIR\share\KCemu\icons\icon-poly880.png" Delete "$INSTDIR\share\KCemu\icons\icon-z1013.png" Delete "$INSTDIR\share\KCemu\icons\icon-kramermc.png" Delete "$INSTDIR\share\KCemu\icons\icon-pcm.png" Delete "$INSTDIR\share\KCemu\icons\icon-vcs80.png" Delete "$INSTDIR\share\KCemu\icons\icon-c80.png" Delete "$INSTDIR\share\KCemu\icons\kcemu-icon.png" Delete "$INSTDIR\share\KCemu\icons\kcemu-icon.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-bic.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-kc85.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-kc87.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-lc80.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-poly880.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-z1013.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-kramermc.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-pcm.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-vcs80.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-c80.xpm" Delete "$INSTDIR\share\KCemu\keymaps\kc851.key" Delete "$INSTDIR\share\KCemu\keymaps\kc851_keyboard.xpm" Delete "$INSTDIR\share\KCemu\keymaps\kc851_keyboard_pressed.xpm" Delete "$INSTDIR\share\KCemu\keymaps\kc854.key" Delete "$INSTDIR\share\KCemu\keymaps\kc854_keyboard.xpm" Delete "$INSTDIR\share\KCemu\keymaps\kc854_keyboard_pressed.xpm" Delete "$INSTDIR\share\KCemu\keymaps\lc80.key" Delete "$INSTDIR\share\KCemu\keymaps\lc80_keyboard.xpm" Delete "$INSTDIR\share\KCemu\keymaps\lc80_keyboard_pressed.xpm" Delete "$INSTDIR\share\KCemu\keymaps\poly880.key" Delete "$INSTDIR\share\KCemu\keymaps\poly880_keyboard.xpm" Delete "$INSTDIR\share\KCemu\keymaps\poly880_keyboard_pressed.xpm" Delete "$INSTDIR\share\KCemu\keymaps\vcs80.key" Delete "$INSTDIR\share\KCemu\keymaps\vcs80_keyboard.xpm" Delete "$INSTDIR\share\KCemu\keymaps\vcs80_keyboard_pressed.xpm" Delete "$INSTDIR\share\KCemu\keymaps\a5105.key" Delete "$INSTDIR\share\KCemu\keymaps\a5105_keyboard.png" Delete "$INSTDIR\share\KCemu\keymaps\a5105_keyboard_pressed.png" Delete "$INSTDIR\share\KCemu\disks\a5105sys.dump" Delete "$INSTDIR\share\KCemu\disks\caos.dump" Delete "$INSTDIR\share\KCemu\disks\cpmz9.dump" Delete "$INSTDIR\share\KCemu\disks\microdos.dump" Delete "$INSTDIR\share\KCemu\disks\tools.dump" Delete "$INSTDIR\share\KCemu\disks\z1013cpm.dump" Delete "$INSTDIR\share\KCemu\disks\z1013gdc.dump" Delete "$INSTDIR\share\KCemu\tapes\files.kct" Delete "$INSTDIR\share\KCemu\tapes\z1013.kct" Delete "$INSTDIR\share\KCemu\tapes\lc80.kct" Delete "$INSTDIR\share\KCemu\config\a5105.conf" Delete "$INSTDIR\share\KCemu\config\c80.conf" Delete "$INSTDIR\share\KCemu\config\default.conf" Delete "$INSTDIR\share\KCemu\config\kc85-1.conf" Delete "$INSTDIR\share\KCemu\config\kc85-2.conf" Delete "$INSTDIR\share\KCemu\config\kc85-3.conf" Delete "$INSTDIR\share\KCemu\config\kc85-4.conf" Delete "$INSTDIR\share\KCemu\config\kc85-5.conf" Delete "$INSTDIR\share\KCemu\config\kc87.conf" Delete "$INSTDIR\share\KCemu\config\kramermc.conf" Delete "$INSTDIR\share\KCemu\config\lc80.conf" Delete "$INSTDIR\share\KCemu\config\pcm.conf" Delete "$INSTDIR\share\KCemu\config\poly880.conf" Delete "$INSTDIR\share\KCemu\config\vcs80.conf" Delete "$INSTDIR\share\KCemu\config\z1013.conf" Delete "$SMPROGRAMS\KCemu\Uninstall.lnk" Delete "$SMPROGRAMS\KCemu\Website.lnk" Delete "$DESKTOP\KCemu.lnk" Delete "$SMPROGRAMS\KCemu\BIC.lnk" Delete "$SMPROGRAMS\KCemu\KC85 - 1.lnk" Delete "$SMPROGRAMS\KCemu\KC85 - 2.lnk" Delete "$SMPROGRAMS\KCemu\KC85 - 3.lnk" Delete "$SMPROGRAMS\KCemu\KC85 - 4.lnk" Delete "$SMPROGRAMS\KCemu\KC85 - 5.lnk" Delete "$SMPROGRAMS\KCemu\KC87.lnk" Delete "$SMPROGRAMS\KCemu\LC80.lnk" Delete "$SMPROGRAMS\KCemu\Poly880.lnk" Delete "$SMPROGRAMS\KCemu\Z1013.lnk" Delete "$SMPROGRAMS\KCemu\Z1013 (BL4).lnk" Delete "$SMPROGRAMS\KCemu\KramerMC.lnk" Delete "$SMPROGRAMS\KCemu\PCM.lnk" Delete "$SMPROGRAMS\KCemu\VCS80.lnk" Delete "$DESKTOP\KCemu.lnk" # GTK START Delete "$INSTDIR\bin\charset.dll" Delete "$INSTDIR\bin\gspawn-win32-helper-console.exe" Delete "$INSTDIR\bin\gspawn-win32-helper.exe" Delete "$INSTDIR\bin\iconv.dll" Delete "$INSTDIR\bin\iconv.exe" Delete "$INSTDIR\bin\intl.dll" Delete "$INSTDIR\bin\libatk-1.0-0.dll" Delete "$INSTDIR\bin\libcairo-2.dll" Delete "$INSTDIR\bin\libgailutil-18.dll" Delete "$INSTDIR\bin\libgdk-win32-2.0-0.dll" Delete "$INSTDIR\bin\libgdk_pixbuf-2.0-0.dll" Delete "$INSTDIR\bin\libglib-2.0-0.dll" Delete "$INSTDIR\bin\libgio-2.0-0.dll" Delete "$INSTDIR\bin\libgmodule-2.0-0.dll" Delete "$INSTDIR\bin\libgobject-2.0-0.dll" Delete "$INSTDIR\bin\libgthread-2.0-0.dll" Delete "$INSTDIR\bin\libgtk-win32-2.0-0.dll" Delete "$INSTDIR\bin\libpango-1.0-0.dll" Delete "$INSTDIR\bin\libpangocairo-1.0-0.dll" Delete "$INSTDIR\bin\libpangoft2-1.0-0.dll" Delete "$INSTDIR\bin\libpangowin32-1.0-0.dll" Delete "$INSTDIR\bin\libpng12.dll" Delete "$INSTDIR\bin\libpng12-0.dll" Delete "$INSTDIR\bin\libpng13.dll" Delete "$INSTDIR\bin\jpeg62.dll" Delete "$INSTDIR\bin\libjpeg-7.dll" Delete "$INSTDIR\bin\libtiff3.dll" Delete "$INSTDIR\bin\libtiff-3.dll" Delete "$INSTDIR\bin\libtiffxx-3.dll" Delete "$INSTDIR\bin\freetype6.dll" Delete "$INSTDIR\bin\libfontconfig-1.dll" Delete "$INSTDIR\bin\libexpat-1.dll" Delete "$INSTDIR\bin\pango-querymodules.exe" Delete "$INSTDIR\bin\giflib4.dll" Delete "$INSTDIR\bin\zlib1.dll" Delete "$INSTDIR\bin\SDL.dll" Delete "$INSTDIR\etc\gtk-2.0\gdk-pixbuf.loaders" Delete "$INSTDIR\etc\gtk-2.0\gtk.immodules" Delete "$INSTDIR\etc\gtk-2.0\gtkrc" Delete "$INSTDIR\etc\pango\pango.aliases" Delete "$INSTDIR\etc\pango\pango.modules" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-ani.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-bmp.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-gif.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-ico.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-jpeg.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-pcx.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-png.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-pnm.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-ras.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-tga.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-tiff.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-wbmp.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-xbm.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-xpm.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-am-et.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-cedilla.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-cyrillic-translit.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-ime.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-inuktitut.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-ipa.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-thai-broken.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-ti-er.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-ti-et.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-viqr.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\engines\libpixmap.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\engines\libwimp.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-ani.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-bmp.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-gif.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-ico.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-jpeg.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-pcx.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-png.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-pnm.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-ras.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-tga.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-tiff.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-wbmp.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-xbm.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-xpm.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-am-et.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-cedilla.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-cyrillic-translit.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-ime.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-inuktitut.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-ipa.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-multipress.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-thai.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-ti-er.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-ti-et.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-viqr.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\engines\libpixmap.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\engines\libwimp.dll" Delete "$INSTDIR\lib\locale\de\LC_MESSAGES\glib20.mo" Delete "$INSTDIR\lib\locale\de\LC_MESSAGES\gtk20.mo" Delete "$INSTDIR\lib\locale\de\LC_MESSAGES\gtk20-properties.mo" Delete "$INSTDIR\lib\locale\de\LC_MESSAGES\atk10.mo" Delete "$INSTDIR\share\locale\de\LC_MESSAGES\glib20.mo" Delete "$INSTDIR\share\locale\de\LC_MESSAGES\gtk20.mo" Delete "$INSTDIR\share\locale\de\LC_MESSAGES\gtk20-properties.mo" Delete "$INSTDIR\share\locale\de\LC_MESSAGES\libiconv.mo" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-arabic-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-basic-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-basic-win32.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-hangul-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-hebrew-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-indic-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-khmer-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-syriac-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-thai-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-tibetan-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-arabic-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-basic-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-basic-win32.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-hangul-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-hebrew-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-indic-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-khmer-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-syriac-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-thai-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-tibetan-fc.dll" # GTK END RMDir "$INSTDIR\share\man\man1" RMDir "$INSTDIR\share\man" RMDir "$INSTDIR\share\KCemu\roms\z1013" RMDir "$INSTDIR\share\KCemu\roms\z9001" RMDir "$INSTDIR\share\KCemu\roms\kc85" RMDir "$INSTDIR\share\KCemu\roms\poly880" RMDir "$INSTDIR\share\KCemu\roms\lc80" RMDir "$INSTDIR\share\KCemu\roms\a5105" RMDir "$INSTDIR\share\KCemu\roms\kramermc" RMDir "$INSTDIR\share\KCemu\roms\muglerpc" RMDir "$INSTDIR\share\KCemu\roms\vcs80" RMDir "$INSTDIR\share\KCemu\roms\c80" RMDir "$INSTDIR\share\KCemu\roms" RMDir "$INSTDIR\share\KCemu\disks" RMDir "$INSTDIR\share\KCemu\tapes" RMDir "$INSTDIR\share\KCemu\keymaps" RMDir "$INSTDIR\share\KCemu\lib\z80" RMDir "$INSTDIR\share\KCemu\lib" RMDir "$INSTDIR\share\KCemu\asm\autostart" RMDir "$INSTDIR\share\KCemu\asm" RMDir "$INSTDIR\share\KCemu\doc" RMDir "$INSTDIR\share\KCemu\icons" RMDir "$INSTDIR\share\KCemu\images" RMDir "$INSTDIR\share\KCemu\config" RMDir "$INSTDIR\share\KCemu" RMDir "$INSTDIR\share\locale\de\LC_MESSAGES" RMDir "$INSTDIR\share\locale\en\LC_MESSAGES" RMDir "$INSTDIR\share\locale\de" RMDir "$INSTDIR\share\locale\en" RMDir "$INSTDIR\share\locale" RMDir "$INSTDIR\share\doc\kcemu" RMDir "$INSTDIR\share\doc" RMDir "$INSTDIR\share" RMDir "$INSTDIR\etc\gtk-2.0" RMDir "$INSTDIR\etc\pango" RMDir "$INSTDIR\etc" RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\loaders" RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\immodules" RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\engines" RMDir "$INSTDIR\lib\gtk-2.0\2.4.0" RMDir "$INSTDIR\lib\gtk-2.0\2.10.0\loaders" RMDir "$INSTDIR\lib\gtk-2.0\2.10.0\immodules" RMDir "$INSTDIR\lib\gtk-2.0\2.10.0\engines" RMDir "$INSTDIR\lib\gtk-2.0\2.10.0" RMDir "$INSTDIR\lib\gtk-2.0" RMDir "$INSTDIR\lib\locale\de\LC_MESSAGES" RMDir "$INSTDIR\lib\locale\de" RMDir "$INSTDIR\lib\locale" RMDir "$INSTDIR\lib\pango\1.4.0\modules" RMDir "$INSTDIR\lib\pango\1.4.0" RMDir "$INSTDIR\lib\pango\1.5.0\modules" RMDir "$INSTDIR\lib\pango\1.5.0" RMDir "$INSTDIR\lib\pango" RMDir "$INSTDIR\lib" RMDir "$INSTDIR\bin" RMDir "$INSTDIR" RMDir "$SMPROGRAMS\KCemu" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" SetAutoClose true SectionEnd KCemu-0.5.1/setup/KCemuSetup.nsi.in0000644001050700006200000010103711345001576016516 0ustar glaubitzfbedv; Script generated by the HM NIS Edit Script Wizard. SetCompressor /SOLID lzma ; HM NIS Edit Wizard helper defines !define PRODUCT_NAME "KCemu" !define PRODUCT_VERSION "@VERSION@" !define PRODUCT_PUBLISHER "Torsten Paul" !define PRODUCT_WEB_SITE "http://kcemu.sourceforge.net/" !define PRODUCT_DIR_REGKEY "Software\Microsoft\Windows\CurrentVersion\App Paths\kcemu.exe" !define PRODUCT_UNINST_KEY "Software\Microsoft\Windows\CurrentVersion\Uninstall\${PRODUCT_NAME}" !define PRODUCT_UNINST_ROOT_KEY "HKLM" ; MUI 1.67 compatible ------ !include "MUI.nsh" ; MUI Settings !define MUI_ABORTWARNING !define MUI_ICON "${NSISDIR}\Contrib\Graphics\Icons\modern-install.ico" !define MUI_UNICON "${NSISDIR}\Contrib\Graphics\Icons\modern-uninstall.ico" ; Welcome page !insertmacro MUI_PAGE_WELCOME ; License page !define MUI_LICENSEPAGE_CHECKBOX !insertmacro MUI_PAGE_LICENSE "KCemu-@VERSION@\COPYING" ; Components page ;!insertmacro MUI_PAGE_COMPONENTS ; Directory page !insertmacro MUI_PAGE_DIRECTORY ; Instfiles page !insertmacro MUI_PAGE_INSTFILES ; Finish page !define MUI_FINISHPAGE_RUN "$INSTDIR\bin\kcemu.exe" !insertmacro MUI_PAGE_FINISH ; Uninstaller pages !insertmacro MUI_UNPAGE_INSTFILES ; Language files !insertmacro MUI_LANGUAGE "English" ; MUI end ------ Name "${PRODUCT_NAME} ${PRODUCT_VERSION}" OutFile "${PRODUCT_NAME}-${PRODUCT_VERSION}.exe" InstallDir "$PROGRAMFILES\KCemu" InstallDirRegKey HKLM "${PRODUCT_DIR_REGKEY}" "" ShowInstDetails show ShowUnInstDetails show Section "!KCemu" SEC01 SetOutPath "$INSTDIR" SetOverwrite try File /r "kcemu\bin" File /r "kcemu\lib" File /r "kcemu\share" CreateShortCut "$DESKTOP\KCemu.lnk" "$INSTDIR\bin\kcemu.exe" '-P' CreateDirectory "$SMPROGRAMS\KCemu" CreateShortCut "$SMPROGRAMS\KCemu\KCemu.lnk" "$INSTDIR\bin\kcemu.exe" '-P' "$INSTDIR\share\KCemu\icons\kcemu-winicon.ico" CreateShortCut "$SMPROGRAMS\KCemu\BIC.lnk" "$INSTDIR\bin\kcemu.exe" '-9' "$INSTDIR\share\KCemu\icons\kcemu-bic.ico" CreateShortCut "$SMPROGRAMS\KCemu\KC85 - 1.lnk" "$INSTDIR\bin\kcemu.exe" '-1' "$INSTDIR\share\KCemu\icons\kcemu-kc87.ico" CreateShortCut "$SMPROGRAMS\KCemu\KC85 - 2.lnk" "$INSTDIR\bin\kcemu.exe" '-2' "$INSTDIR\share\KCemu\icons\kcemu-kc85.ico" CreateShortCut "$SMPROGRAMS\KCemu\KC85 - 3.lnk" "$INSTDIR\bin\kcemu.exe" '-3' "$INSTDIR\share\KCemu\icons\kcemu-kc85.ico" CreateShortCut "$SMPROGRAMS\KCemu\KC85 - 4.lnk" "$INSTDIR\bin\kcemu.exe" '-4' "$INSTDIR\share\KCemu\icons\kcemu-kc85.ico" CreateShortCut "$SMPROGRAMS\KCemu\KC85 - 5.lnk" "$INSTDIR\bin\kcemu.exe" '-5' "$INSTDIR\share\KCemu\icons\kcemu-kc85.ico" CreateShortCut "$SMPROGRAMS\KCemu\KC87.lnk" "$INSTDIR\bin\kcemu.exe" '-7' "$INSTDIR\share\KCemu\icons\kcemu-kc87.ico" CreateShortCut "$SMPROGRAMS\KCemu\LC80.lnk" "$INSTDIR\bin\kcemu.exe" '-8' "$INSTDIR\share\KCemu\icons\kcemu-lc80.ico" CreateShortCut "$SMPROGRAMS\KCemu\Poly880.lnk" "$INSTDIR\bin\kcemu.exe" '-6' "$INSTDIR\share\KCemu\icons\kcemu-poly880.ico" CreateShortCut "$SMPROGRAMS\KCemu\Z1013.lnk" "$INSTDIR\bin\kcemu.exe" '-0' "$INSTDIR\share\KCemu\icons\kcemu-z1013.ico" SectionEnd SectionGroup "GTK" SEC02 Section "-bin" SEC_GTK_01 SetOutPath "$INSTDIR\bin" SetOverwrite try File "dist\bin\charset.dll" File "dist\bin\iconv.dll" File "dist\bin\iconv.exe" File "dist\bin\intl.dll" File "dist\bin\libatk-1.0-0.dll" File "dist\bin\libcairo-2.dll" File "dist\bin\libgailutil-18.dll" File "dist\bin\libgdk-win32-2.0-0.dll" File "dist\bin\libgdk_pixbuf-2.0-0.dll" File "dist\bin\libgio-2.0-0.dll" File "dist\bin\libglib-2.0-0.dll" File "dist\bin\libgmodule-2.0-0.dll" File "dist\bin\libgobject-2.0-0.dll" File "dist\bin\libgthread-2.0-0.dll" File "dist\bin\libgtk-win32-2.0-0.dll" File "dist\bin\libpango-1.0-0.dll" File "dist\bin\libpangocairo-1.0-0.dll" File "dist\bin\libpangoft2-1.0-0.dll" File "dist\bin\libpangowin32-1.0-0.dll" File "dist\bin\libpng12-0.dll" File "dist\bin\libjpeg-7.dll" File "dist\bin\libtiff-3.dll" File "dist\bin\libtiffxx-3.dll" File "dist\bin\freetype6.dll" File "dist\bin\libfontconfig-1.dll" File "dist\bin\libexpat-1.dll" File "dist\bin\pango-querymodules.exe" File "dist\bin\giflib4.dll" File "dist\bin\zlib1.dll" File "dist\bin\SDL.dll" SectionEnd Section "-etc\gtk-2.0" SEC_GTK_02 SetOutPath "$INSTDIR\etc\gtk-2.0" SetOverwrite try File "dist\etc\gtk-2.0\gdk-pixbuf.loaders" File "dist\etc\gtk-2.0\gtk.immodules" File "dist\etc\gtk-2.0\gtkrc" SectionEnd Section "-etc\pango" SEC_GTK_03 SetOutPath "$INSTDIR\etc\pango" SetOverwrite try File "dist\etc\pango\pango.modules" SectionEnd Section "-lib\gtk-2.0\2.10.0\engines" SEC_GTK_ENGINES SetOutPath "$INSTDIR\lib\gtk-2.0\2.10.0\engines" SetOverwrite try File "dist\lib\gtk-2.0\2.10.0\engines\libpixmap.dll" File "dist\lib\gtk-2.0\2.10.0\engines\libwimp.dll" SectionEnd Section "-share\locale\de\LC_MESSAGES" SEC_GTK_06 SetOutPath "$INSTDIR\share\locale\de\LC_MESSAGES" SetOverwrite try File "dist\share\locale\de\LC_MESSAGES\glib20.mo" File "dist\share\locale\de\LC_MESSAGES\gtk20.mo" File "dist\share\locale\de\LC_MESSAGES\gtk20-properties.mo" File "dist\share\locale\de\LC_MESSAGES\libiconv.mo" SectionEnd SectionGroupEnd Section -AdditionalIcons SetOutPath $INSTDIR WriteIniStr "$INSTDIR\${PRODUCT_NAME}.url" "InternetShortcut" "URL" "${PRODUCT_WEB_SITE}" CreateShortCut "$SMPROGRAMS\KCemu\Website.lnk" "$INSTDIR\${PRODUCT_NAME}.url" CreateShortCut "$SMPROGRAMS\KCemu\Uninstall.lnk" "$INSTDIR\uninst.exe" SectionEnd Section -Post WriteUninstaller "$INSTDIR\uninst.exe" WriteRegStr HKLM "${PRODUCT_DIR_REGKEY}" "" "$INSTDIR\bin\kcemu.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayName" "$(^Name)" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "UninstallString" "$INSTDIR\uninst.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayIcon" "$INSTDIR\bin\kcemu.exe" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "DisplayVersion" "${PRODUCT_VERSION}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "URLInfoAbout" "${PRODUCT_WEB_SITE}" WriteRegStr ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" "Publisher" "${PRODUCT_PUBLISHER}" SectionEnd ; Section descriptions !insertmacro MUI_FUNCTION_DESCRIPTION_BEGIN !insertmacro MUI_DESCRIPTION_TEXT ${SEC01} "The KCemu program" !insertmacro MUI_DESCRIPTION_TEXT ${SEC02} "The GTK+ library (http://www.gtk.org/)" !insertmacro MUI_FUNCTION_DESCRIPTION_END Function un.onUninstSuccess HideWindow MessageBox MB_ICONINFORMATION|MB_OK "$(^Name) was successfully removed from your computer." FunctionEnd Function un.onInit MessageBox MB_ICONQUESTION|MB_YESNO|MB_DEFBUTTON2 "Are you sure you want to completely remove $(^Name) and all of its components?" IDYES +2 Abort FunctionEnd Section Uninstall Delete "$INSTDIR\${PRODUCT_NAME}.url" Delete "$INSTDIR\uninst.exe" Delete "$INSTDIR\bin\kcemu.exe" Delete "$INSTDIR\bin\tdtodump.exe" Delete "$INSTDIR\bin\kctape.exe" Delete "$INSTDIR\bin\kc2raw.exe" Delete "$INSTDIR\bin\kc2wav.exe" Delete "$INSTDIR\bin\kc2tap.exe" Delete "$INSTDIR\bin\kc2img.exe" Delete "$INSTDIR\lib\charset.alias" Delete "$INSTDIR\share\man\man1\kc2img.1" Delete "$INSTDIR\share\man\man1\kc2raw.1" Delete "$INSTDIR\share\man\man1\kc2tap.1" Delete "$INSTDIR\share\man\man1\kc2wav.1" Delete "$INSTDIR\share\man\man1\kcemu-remote.1" Delete "$INSTDIR\share\man\man1\kcemu.1x" Delete "$INSTDIR\share\man\man1\kctape.1" Delete "$INSTDIR\share\man\man1\tdtodump.1" Delete "$INSTDIR\share\doc\kcemu\changelog" Delete "$INSTDIR\share\locale\locale.alias" Delete "$INSTDIR\share\locale\en\LC_MESSAGES\KCemu.mo" Delete "$INSTDIR\share\locale\de\LC_MESSAGES\KCemu.mo" Delete "$INSTDIR\share\KCemu\kcemurc" Delete "$INSTDIR\share\KCemu\.kcemurc" Delete "$INSTDIR\share\KCemu\asm\autostart\kc853.asm" Delete "$INSTDIR\share\KCemu\lib\z80\kc853.bin" Delete "$INSTDIR\share\KCemu\doc\kcemu-help.xml" Delete "$INSTDIR\share\KCemu\doc\kcemu.png" Delete "$INSTDIR\share\KCemu\doc\kcemurc.sample" Delete "$INSTDIR\share\KCemu\doc\sys-a5105.jpg" Delete "$INSTDIR\share\KCemu\doc\sys-kc85.jpg" Delete "$INSTDIR\share\KCemu\doc\sys-kc855.jpg" Delete "$INSTDIR\share\KCemu\doc\sys-lc80.jpg" Delete "$INSTDIR\share\KCemu\doc\sys-poly880.jpg" Delete "$INSTDIR\share\KCemu\doc\sys-z1013.jpg" Delete "$INSTDIR\share\KCemu\doc\sys-z9001.jpg" Delete "$INSTDIR\share\KCemu\doc\sys-xy4131.jpg" Delete "$INSTDIR\share\KCemu\doc\window-audio.png" Delete "$INSTDIR\share\KCemu\doc\window-disk.png" Delete "$INSTDIR\share\KCemu\doc\window-colors.png" Delete "$INSTDIR\share\KCemu\doc\window-module-kc85.png" Delete "$INSTDIR\share\KCemu\doc\window-module-z1013.png" Delete "$INSTDIR\share\KCemu\doc\window-module-z9001.png" Delete "$INSTDIR\share\KCemu\doc\window-tape.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-1.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-1_small.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-2.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-2_small.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-3.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-3_small.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-4.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-4_small.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-5.png" Delete "$INSTDIR\share\KCemu\doc\window-profile-5_small.png" Delete "$INSTDIR\share\KCemu\doc\window-savemem.png" Delete "$INSTDIR\share\KCemu\doc\window-savemem_small.png" Delete "$INSTDIR\share\KCemu\doc\window-select-profile.png" Delete "$INSTDIR\share\KCemu\doc\window-select-profile_small.png" Delete "$INSTDIR\share\KCemu\doc\window-plotter-1.png" Delete "$INSTDIR\share\KCemu\doc\window-plotter-1_small.png" Delete "$INSTDIR\share\KCemu\doc\window-plotter-2.png" Delete "$INSTDIR\share\KCemu\doc\window-plotter-2_small.png" Delete "$INSTDIR\share\KCemu\doc\window-video.png" Delete "$INSTDIR\share\KCemu\doc\window-screenshot.png" Delete "$INSTDIR\share\KCemu\images\kcemu.png" Delete "$INSTDIR\share\KCemu\images\logo-flac.png" Delete "$INSTDIR\share\KCemu\images\logo-gtk.png" Delete "$INSTDIR\share\KCemu\images\logo-lame.png" Delete "$INSTDIR\share\KCemu\images\logo-libsdl.png" Delete "$INSTDIR\share\KCemu\images\logo-libsndfile.png" Delete "$INSTDIR\share\KCemu\images\logo-openclipartlibrary.png" Delete "$INSTDIR\share\KCemu\images\logo-vorbisdotcom.png" Delete "$INSTDIR\share\KCemu\images\logo-theora_org.png" Delete "$INSTDIR\share\KCemu\images\logo-ffmpeg.png" Delete "$INSTDIR\share\KCemu\images\logo-xvid.png" Delete "$INSTDIR\share\KCemu\images\logo-bbc.png" Delete "$INSTDIR\share\KCemu\images\media-end.png" Delete "$INSTDIR\share\KCemu\images\media-play.png" Delete "$INSTDIR\share\KCemu\images\media-record.png" Delete "$INSTDIR\share\KCemu\images\media-start.png" Delete "$INSTDIR\share\KCemu\images\media-stop.png" Delete "$INSTDIR\share\KCemu\images\media-pause.png" Delete "$INSTDIR\share\KCemu\images\window-about.png" Delete "$INSTDIR\share\KCemu\images\window-audio.png" Delete "$INSTDIR\share\KCemu\images\window-copying.png" Delete "$INSTDIR\share\KCemu\images\window-disk.png" Delete "$INSTDIR\share\KCemu\images\window-help.png" Delete "$INSTDIR\share\KCemu\images\window-info.png" Delete "$INSTDIR\share\KCemu\images\window-module.png" Delete "$INSTDIR\share\KCemu\images\window-question.png" Delete "$INSTDIR\share\KCemu\images\window-tape.png" Delete "$INSTDIR\share\KCemu\images\window-thanks.png" Delete "$INSTDIR\share\KCemu\images\window-color.png" Delete "$INSTDIR\share\KCemu\images\window-keyboard.png" Delete "$INSTDIR\share\KCemu\images\window-options.png" Delete "$INSTDIR\share\KCemu\images\window-video.png" Delete "$INSTDIR\share\KCemu\images\window-selector.png" Delete "$INSTDIR\share\KCemu\images\window-plotter.png" Delete "$INSTDIR\share\KCemu\images\window-screenshot.png" Delete "$INSTDIR\share\KCemu\images\about.glade" Delete "$INSTDIR\share\KCemu\images\audio.glade" Delete "$INSTDIR\share\KCemu\images\color.glade" Delete "$INSTDIR\share\KCemu\images\dialog.glade" Delete "$INSTDIR\share\KCemu\images\disk.glade" Delete "$INSTDIR\share\KCemu\images\help.glade" Delete "$INSTDIR\share\KCemu\images\keyboard.glade" Delete "$INSTDIR\share\KCemu\images\legal.glade" Delete "$INSTDIR\share\KCemu\images\main.glade" Delete "$INSTDIR\share\KCemu\images\module.glade" Delete "$INSTDIR\share\KCemu\images\options.glade" Delete "$INSTDIR\share\KCemu\images\selector.glade" Delete "$INSTDIR\share\KCemu\images\tapeedit.glade" Delete "$INSTDIR\share\KCemu\images\tape.glade" Delete "$INSTDIR\share\KCemu\images\thanks.glade" Delete "$INSTDIR\share\KCemu\images\savemem.glade" Delete "$INSTDIR\share\KCemu\images\video.glade" Delete "$INSTDIR\share\KCemu\images\plotter.glade" Delete "$INSTDIR\share\KCemu\images\vdip.glade" Delete "$INSTDIR\share\KCemu\images\screenshot.glade" Delete "$INSTDIR\share\KCemu\roms\z1013\z1013_20.rom" Delete "$INSTDIR\share\KCemu\roms\z1013\z1013_a2.rom" Delete "$INSTDIR\share\KCemu\roms\z1013\z1013_rb.rom" Delete "$INSTDIR\share\KCemu\roms\z1013\z1013_ul.rom" Delete "$INSTDIR\share\KCemu\roms\z1013\z1013_bl.rom" Delete "$INSTDIR\share\KCemu\roms\z1013\z1013_zg.rom" Delete "$INSTDIR\share\KCemu\roms\z9001\192k__d2.851" Delete "$INSTDIR\share\KCemu\roms\z9001\192k__d3.851" Delete "$INSTDIR\share\KCemu\roms\z9001\192k__d5.851" Delete "$INSTDIR\share\KCemu\roms\z9001\basic_c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\basic_c0.87a" Delete "$INSTDIR\share\KCemu\roms\z9001\basic_c0.87b" Delete "$INSTDIR\share\KCemu\roms\z9001\bitex_c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\cpmz9_c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\edas__c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\idas__c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\os____f0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\os____f0.87b" Delete "$INSTDIR\share\KCemu\roms\z9001\r80___c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\rom_bank.851" Delete "$INSTDIR\share\KCemu\roms\z9001\zm30__c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\zsid__c0.851" Delete "$INSTDIR\share\KCemu\roms\z9001\kcpascal.851" Delete "$INSTDIR\share\KCemu\roms\z9001\mega_rom.851" Delete "$INSTDIR\share\KCemu\roms\z9001\os_rb20.rom" Delete "$INSTDIR\share\KCemu\roms\z9001\os_rb21.rom" Delete "$INSTDIR\share\KCemu\roms\z9001\chargen.851" Delete "$INSTDIR\share\KCemu\roms\z9001\kc_caos.rom" Delete "$INSTDIR\share\KCemu\roms\z9001\zg_cga.rom" Delete "$INSTDIR\share\KCemu\roms\z9001\zg_cgai.rom" Delete "$INSTDIR\share\KCemu\roms\z9001\zg_de.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\hc900.852" Delete "$INSTDIR\share\KCemu\roms\kc85\caos__e0.852" Delete "$INSTDIR\share\KCemu\roms\kc85\basic_c0.853" Delete "$INSTDIR\share\KCemu\roms\kc85\caos__e0.853" Delete "$INSTDIR\share\KCemu\roms\kc85\caos33.853" Delete "$INSTDIR\share\KCemu\roms\kc85\caos34.853" Delete "$INSTDIR\share\KCemu\roms\kc85\pi88_ge.853" Delete "$INSTDIR\share\KCemu\roms\kc85\pi88_sw.853" Delete "$INSTDIR\share\KCemu\roms\kc85\pi88_ws.853" Delete "$INSTDIR\share\KCemu\roms\kc85\basic_c0.854" Delete "$INSTDIR\share\KCemu\roms\kc85\caos__c0.854" Delete "$INSTDIR\share\KCemu\roms\kc85\caos__e0.854" Delete "$INSTDIR\share\KCemu\roms\kc85\caos41c.854" Delete "$INSTDIR\share\KCemu\roms\kc85\caos41e.854" Delete "$INSTDIR\share\KCemu\roms\kc85\caos43c.855" Delete "$INSTDIR\share\KCemu\roms\kc85\caos43e.855" Delete "$INSTDIR\share\KCemu\roms\kc85\basic_c0.855" Delete "$INSTDIR\share\KCemu\roms\kc85\basicusb.855" Delete "$INSTDIR\share\KCemu\roms\kc85\caos__c0.855" Delete "$INSTDIR\share\KCemu\roms\kc85\caos__e0.855" Delete "$INSTDIR\share\KCemu\roms\kc85\floppy20.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\floppy30.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\floppy31.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\floppy32.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m006.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m012.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m026.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m027.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m033.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m052.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m900.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\m901.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\vdip12.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\vdip2_42.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\vdip2_44.rom" Delete "$INSTDIR\share\KCemu\roms\kc85\vdip21.rom" Delete "$INSTDIR\share\KCemu\roms\poly880\poly880a.rom" Delete "$INSTDIR\share\KCemu\roms\poly880\poly880b.rom" Delete "$INSTDIR\share\KCemu\roms\poly880\sc1.rom" Delete "$INSTDIR\share\KCemu\roms\lc80\lc80__00.rom" Delete "$INSTDIR\share\KCemu\roms\lc80\lc80__08.rom" Delete "$INSTDIR\share\KCemu\roms\lc80\lc80__2k.rom" Delete "$INSTDIR\share\KCemu\roms\lc80\lc80e_00.rom" Delete "$INSTDIR\share\KCemu\roms\lc80\lc80e_10.rom" Delete "$INSTDIR\share\KCemu\roms\lc80\lc80e_c0.rom" Delete "$INSTDIR\share\KCemu\roms\a5105\k1505_00.rom" Delete "$INSTDIR\share\KCemu\roms\a5105\k1505_80.rom" Delete "$INSTDIR\share\KCemu\roms\a5105\k5651_40.rom" Delete "$INSTDIR\share\KCemu\roms\a5105\k5651_60.rom" Delete "$INSTDIR\share\KCemu\roms\kramermc\ass.kmc" Delete "$INSTDIR\share\KCemu\roms\kramermc\basic.kmc" Delete "$INSTDIR\share\KCemu\roms\kramermc\chargen.kmc" Delete "$INSTDIR\share\KCemu\roms\kramermc\debugger.kmc" Delete "$INSTDIR\share\KCemu\roms\kramermc\editor.kmc" Delete "$INSTDIR\share\KCemu\roms\kramermc\io-mon.kmc" Delete "$INSTDIR\share\KCemu\roms\kramermc\reass.kmc" Delete "$INSTDIR\share\KCemu\roms\muglerpc\chargen.pcm" Delete "$INSTDIR\share\KCemu\roms\muglerpc\muglerpc.pcm" Delete "$INSTDIR\share\KCemu\roms\vcs80\monitor.rom" Delete "$INSTDIR\share\KCemu\roms\c80\monitor.rom" Delete "$INSTDIR\share\KCemu\icons\icon-default.png" Delete "$INSTDIR\share\KCemu\icons\icon-deleted.png" Delete "$INSTDIR\share\KCemu\icons\icon-root.png" Delete "$INSTDIR\share\KCemu\icons\kcemu-winicon.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-winicon_16x16.png" Delete "$INSTDIR\share\KCemu\icons\kcemu-winicon_32x32.png" Delete "$INSTDIR\share\KCemu\icons\kcemu-winicon_48x48.png" Delete "$INSTDIR\share\KCemu\icons\kcemu-bic.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-kc85.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-kc87.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-lc80.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-poly880.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-z1013.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-kramermc.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-pcm.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-vcs80.ico" Delete "$INSTDIR\share\KCemu\icons\kcemu-c80.ico" Delete "$INSTDIR\share\KCemu\icons\icon-bic.png" Delete "$INSTDIR\share\KCemu\icons\icon-kc85.png" Delete "$INSTDIR\share\KCemu\icons\icon-kc87.png" Delete "$INSTDIR\share\KCemu\icons\icon-lc80.png" Delete "$INSTDIR\share\KCemu\icons\icon-poly880.png" Delete "$INSTDIR\share\KCemu\icons\icon-z1013.png" Delete "$INSTDIR\share\KCemu\icons\icon-kramermc.png" Delete "$INSTDIR\share\KCemu\icons\icon-pcm.png" Delete "$INSTDIR\share\KCemu\icons\icon-vcs80.png" Delete "$INSTDIR\share\KCemu\icons\icon-c80.png" Delete "$INSTDIR\share\KCemu\icons\kcemu-icon.png" Delete "$INSTDIR\share\KCemu\icons\kcemu-icon.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-bic.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-kc85.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-kc87.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-lc80.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-poly880.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-z1013.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-kramermc.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-pcm.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-vcs80.xpm" Delete "$INSTDIR\share\KCemu\icons\kcemu-c80.xpm" Delete "$INSTDIR\share\KCemu\keymaps\kc851.key" Delete "$INSTDIR\share\KCemu\keymaps\kc851_keyboard.xpm" Delete "$INSTDIR\share\KCemu\keymaps\kc851_keyboard_pressed.xpm" Delete "$INSTDIR\share\KCemu\keymaps\kc854.key" Delete "$INSTDIR\share\KCemu\keymaps\kc854_keyboard.xpm" Delete "$INSTDIR\share\KCemu\keymaps\kc854_keyboard_pressed.xpm" Delete "$INSTDIR\share\KCemu\keymaps\lc80.key" Delete "$INSTDIR\share\KCemu\keymaps\lc80_keyboard.xpm" Delete "$INSTDIR\share\KCemu\keymaps\lc80_keyboard_pressed.xpm" Delete "$INSTDIR\share\KCemu\keymaps\poly880.key" Delete "$INSTDIR\share\KCemu\keymaps\poly880_keyboard.xpm" Delete "$INSTDIR\share\KCemu\keymaps\poly880_keyboard_pressed.xpm" Delete "$INSTDIR\share\KCemu\keymaps\vcs80.key" Delete "$INSTDIR\share\KCemu\keymaps\vcs80_keyboard.xpm" Delete "$INSTDIR\share\KCemu\keymaps\vcs80_keyboard_pressed.xpm" Delete "$INSTDIR\share\KCemu\keymaps\a5105.key" Delete "$INSTDIR\share\KCemu\keymaps\a5105_keyboard.png" Delete "$INSTDIR\share\KCemu\keymaps\a5105_keyboard_pressed.png" Delete "$INSTDIR\share\KCemu\disks\a5105sys.dump" Delete "$INSTDIR\share\KCemu\disks\caos.dump" Delete "$INSTDIR\share\KCemu\disks\cpmz9.dump" Delete "$INSTDIR\share\KCemu\disks\microdos.dump" Delete "$INSTDIR\share\KCemu\disks\tools.dump" Delete "$INSTDIR\share\KCemu\disks\z1013cpm.dump" Delete "$INSTDIR\share\KCemu\disks\z1013gdc.dump" Delete "$INSTDIR\share\KCemu\tapes\files.kct" Delete "$INSTDIR\share\KCemu\tapes\z1013.kct" Delete "$INSTDIR\share\KCemu\tapes\lc80.kct" Delete "$INSTDIR\share\KCemu\config\a5105.conf" Delete "$INSTDIR\share\KCemu\config\c80.conf" Delete "$INSTDIR\share\KCemu\config\default.conf" Delete "$INSTDIR\share\KCemu\config\kc85-1.conf" Delete "$INSTDIR\share\KCemu\config\kc85-2.conf" Delete "$INSTDIR\share\KCemu\config\kc85-3.conf" Delete "$INSTDIR\share\KCemu\config\kc85-4.conf" Delete "$INSTDIR\share\KCemu\config\kc85-5.conf" Delete "$INSTDIR\share\KCemu\config\kc87.conf" Delete "$INSTDIR\share\KCemu\config\kramermc.conf" Delete "$INSTDIR\share\KCemu\config\lc80.conf" Delete "$INSTDIR\share\KCemu\config\pcm.conf" Delete "$INSTDIR\share\KCemu\config\poly880.conf" Delete "$INSTDIR\share\KCemu\config\vcs80.conf" Delete "$INSTDIR\share\KCemu\config\z1013.conf" Delete "$SMPROGRAMS\KCemu\Uninstall.lnk" Delete "$SMPROGRAMS\KCemu\Website.lnk" Delete "$DESKTOP\KCemu.lnk" Delete "$SMPROGRAMS\KCemu\BIC.lnk" Delete "$SMPROGRAMS\KCemu\KC85 - 1.lnk" Delete "$SMPROGRAMS\KCemu\KC85 - 2.lnk" Delete "$SMPROGRAMS\KCemu\KC85 - 3.lnk" Delete "$SMPROGRAMS\KCemu\KC85 - 4.lnk" Delete "$SMPROGRAMS\KCemu\KC85 - 5.lnk" Delete "$SMPROGRAMS\KCemu\KC87.lnk" Delete "$SMPROGRAMS\KCemu\LC80.lnk" Delete "$SMPROGRAMS\KCemu\Poly880.lnk" Delete "$SMPROGRAMS\KCemu\Z1013.lnk" Delete "$SMPROGRAMS\KCemu\Z1013 (BL4).lnk" Delete "$SMPROGRAMS\KCemu\KramerMC.lnk" Delete "$SMPROGRAMS\KCemu\PCM.lnk" Delete "$SMPROGRAMS\KCemu\VCS80.lnk" Delete "$DESKTOP\KCemu.lnk" # GTK START Delete "$INSTDIR\bin\charset.dll" Delete "$INSTDIR\bin\gspawn-win32-helper-console.exe" Delete "$INSTDIR\bin\gspawn-win32-helper.exe" Delete "$INSTDIR\bin\iconv.dll" Delete "$INSTDIR\bin\iconv.exe" Delete "$INSTDIR\bin\intl.dll" Delete "$INSTDIR\bin\libatk-1.0-0.dll" Delete "$INSTDIR\bin\libcairo-2.dll" Delete "$INSTDIR\bin\libgailutil-18.dll" Delete "$INSTDIR\bin\libgdk-win32-2.0-0.dll" Delete "$INSTDIR\bin\libgdk_pixbuf-2.0-0.dll" Delete "$INSTDIR\bin\libglib-2.0-0.dll" Delete "$INSTDIR\bin\libgio-2.0-0.dll" Delete "$INSTDIR\bin\libgmodule-2.0-0.dll" Delete "$INSTDIR\bin\libgobject-2.0-0.dll" Delete "$INSTDIR\bin\libgthread-2.0-0.dll" Delete "$INSTDIR\bin\libgtk-win32-2.0-0.dll" Delete "$INSTDIR\bin\libpango-1.0-0.dll" Delete "$INSTDIR\bin\libpangocairo-1.0-0.dll" Delete "$INSTDIR\bin\libpangoft2-1.0-0.dll" Delete "$INSTDIR\bin\libpangowin32-1.0-0.dll" Delete "$INSTDIR\bin\libpng12.dll" Delete "$INSTDIR\bin\libpng12-0.dll" Delete "$INSTDIR\bin\libpng13.dll" Delete "$INSTDIR\bin\jpeg62.dll" Delete "$INSTDIR\bin\libjpeg-7.dll" Delete "$INSTDIR\bin\libtiff3.dll" Delete "$INSTDIR\bin\libtiff-3.dll" Delete "$INSTDIR\bin\libtiffxx-3.dll" Delete "$INSTDIR\bin\freetype6.dll" Delete "$INSTDIR\bin\libfontconfig-1.dll" Delete "$INSTDIR\bin\libexpat-1.dll" Delete "$INSTDIR\bin\pango-querymodules.exe" Delete "$INSTDIR\bin\giflib4.dll" Delete "$INSTDIR\bin\zlib1.dll" Delete "$INSTDIR\bin\SDL.dll" Delete "$INSTDIR\etc\gtk-2.0\gdk-pixbuf.loaders" Delete "$INSTDIR\etc\gtk-2.0\gtk.immodules" Delete "$INSTDIR\etc\gtk-2.0\gtkrc" Delete "$INSTDIR\etc\pango\pango.aliases" Delete "$INSTDIR\etc\pango\pango.modules" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-ani.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-bmp.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-gif.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-ico.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-jpeg.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-pcx.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-png.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-pnm.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-ras.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-tga.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-tiff.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-wbmp.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-xbm.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\loaders\libpixbufloader-xpm.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-am-et.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-cedilla.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-cyrillic-translit.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-ime.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-inuktitut.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-ipa.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-thai-broken.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-ti-er.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-ti-et.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\immodules\im-viqr.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\engines\libpixmap.dll" Delete "$INSTDIR\lib\gtk-2.0\2.4.0\engines\libwimp.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-ani.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-bmp.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-gif.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-ico.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-jpeg.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-pcx.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-png.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-pnm.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-ras.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-tga.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-tiff.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-wbmp.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-xbm.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\loaders\libpixbufloader-xpm.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-am-et.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-cedilla.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-cyrillic-translit.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-ime.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-inuktitut.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-ipa.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-multipress.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-thai.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-ti-er.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-ti-et.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\immodules\im-viqr.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\engines\libpixmap.dll" Delete "$INSTDIR\lib\gtk-2.0\2.10.0\engines\libwimp.dll" Delete "$INSTDIR\lib\locale\de\LC_MESSAGES\glib20.mo" Delete "$INSTDIR\lib\locale\de\LC_MESSAGES\gtk20.mo" Delete "$INSTDIR\lib\locale\de\LC_MESSAGES\gtk20-properties.mo" Delete "$INSTDIR\lib\locale\de\LC_MESSAGES\atk10.mo" Delete "$INSTDIR\share\locale\de\LC_MESSAGES\glib20.mo" Delete "$INSTDIR\share\locale\de\LC_MESSAGES\gtk20.mo" Delete "$INSTDIR\share\locale\de\LC_MESSAGES\gtk20-properties.mo" Delete "$INSTDIR\share\locale\de\LC_MESSAGES\libiconv.mo" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-arabic-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-basic-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-basic-win32.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-hangul-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-hebrew-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-indic-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-khmer-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-syriac-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-thai-fc.dll" Delete "$INSTDIR\lib\pango\1.4.0\modules\pango-tibetan-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-arabic-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-basic-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-basic-win32.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-hangul-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-hebrew-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-indic-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-khmer-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-syriac-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-thai-fc.dll" Delete "$INSTDIR\lib\pango\1.5.0\modules\pango-tibetan-fc.dll" # GTK END RMDir "$INSTDIR\share\man\man1" RMDir "$INSTDIR\share\man" RMDir "$INSTDIR\share\KCemu\roms\z1013" RMDir "$INSTDIR\share\KCemu\roms\z9001" RMDir "$INSTDIR\share\KCemu\roms\kc85" RMDir "$INSTDIR\share\KCemu\roms\poly880" RMDir "$INSTDIR\share\KCemu\roms\lc80" RMDir "$INSTDIR\share\KCemu\roms\a5105" RMDir "$INSTDIR\share\KCemu\roms\kramermc" RMDir "$INSTDIR\share\KCemu\roms\muglerpc" RMDir "$INSTDIR\share\KCemu\roms\vcs80" RMDir "$INSTDIR\share\KCemu\roms\c80" RMDir "$INSTDIR\share\KCemu\roms" RMDir "$INSTDIR\share\KCemu\disks" RMDir "$INSTDIR\share\KCemu\tapes" RMDir "$INSTDIR\share\KCemu\keymaps" RMDir "$INSTDIR\share\KCemu\lib\z80" RMDir "$INSTDIR\share\KCemu\lib" RMDir "$INSTDIR\share\KCemu\asm\autostart" RMDir "$INSTDIR\share\KCemu\asm" RMDir "$INSTDIR\share\KCemu\doc" RMDir "$INSTDIR\share\KCemu\icons" RMDir "$INSTDIR\share\KCemu\images" RMDir "$INSTDIR\share\KCemu\config" RMDir "$INSTDIR\share\KCemu" RMDir "$INSTDIR\share\locale\de\LC_MESSAGES" RMDir "$INSTDIR\share\locale\en\LC_MESSAGES" RMDir "$INSTDIR\share\locale\de" RMDir "$INSTDIR\share\locale\en" RMDir "$INSTDIR\share\locale" RMDir "$INSTDIR\share\doc\kcemu" RMDir "$INSTDIR\share\doc" RMDir "$INSTDIR\share" RMDir "$INSTDIR\etc\gtk-2.0" RMDir "$INSTDIR\etc\pango" RMDir "$INSTDIR\etc" RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\loaders" RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\immodules" RMDir "$INSTDIR\lib\gtk-2.0\2.4.0\engines" RMDir "$INSTDIR\lib\gtk-2.0\2.4.0" RMDir "$INSTDIR\lib\gtk-2.0\2.10.0\loaders" RMDir "$INSTDIR\lib\gtk-2.0\2.10.0\immodules" RMDir "$INSTDIR\lib\gtk-2.0\2.10.0\engines" RMDir "$INSTDIR\lib\gtk-2.0\2.10.0" RMDir "$INSTDIR\lib\gtk-2.0" RMDir "$INSTDIR\lib\locale\de\LC_MESSAGES" RMDir "$INSTDIR\lib\locale\de" RMDir "$INSTDIR\lib\locale" RMDir "$INSTDIR\lib\pango\1.4.0\modules" RMDir "$INSTDIR\lib\pango\1.4.0" RMDir "$INSTDIR\lib\pango\1.5.0\modules" RMDir "$INSTDIR\lib\pango\1.5.0" RMDir "$INSTDIR\lib\pango" RMDir "$INSTDIR\lib" RMDir "$INSTDIR\bin" RMDir "$INSTDIR" RMDir "$SMPROGRAMS\KCemu" DeleteRegKey ${PRODUCT_UNINST_ROOT_KEY} "${PRODUCT_UNINST_KEY}" DeleteRegKey HKLM "${PRODUCT_DIR_REGKEY}" SetAutoClose true SectionEnd KCemu-0.5.1/setup/Makefile.in0000644001050700006200000003537711412404771015432 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = setup DIST_COMMON = $(srcdir)/KCemuSetup.nsi.in $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = KCemuSetup.nsi CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__installdirs = "$(DESTDIR)$(pkgdatadir)" DATA = $(noinst_DATA) $(pkgdata_DATA) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ NSI_FILES = KCemuSetup.nsi pkgdata_DATA = kcemurc noinst_DATA = $(NSI_FILES) EXTRA_DIST = $(pkgdata_DATA) $(NSI_FILES) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu setup/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu setup/Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): KCemuSetup.nsi: $(top_builddir)/config.status $(srcdir)/KCemuSetup.nsi.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ install-pkgdataDATA: $(pkgdata_DATA) @$(NORMAL_INSTALL) test -z "$(pkgdatadir)" || $(MKDIR_P) "$(DESTDIR)$(pkgdatadir)" @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pkgdatadir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pkgdatadir)" || exit $$?; \ done uninstall-pkgdataDATA: @$(NORMAL_UNINSTALL) @list='$(pkgdata_DATA)'; test -n "$(pkgdatadir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ test -n "$$files" || exit 0; \ echo " ( cd '$(DESTDIR)$(pkgdatadir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(pkgdatadir)" && rm -f $$files tags: TAGS TAGS: ctags: CTAGS CTAGS: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(pkgdatadir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-pkgdataDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-pkgdataDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic distclean \ distclean-generic distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-pkgdataDATA install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic pdf pdf-am ps ps-am uninstall \ uninstall-am uninstall-pkgdataDATA KCemuSetup.nsi : KCemuSetup.nsi.in # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: KCemu-0.5.1/README0000644001050700006200000000347610527416074013105 0ustar glaubitzfbedv------------------------------------------------------------------------------- $Id: README,v 1.3 2001/01/05 18:41:41 tp Exp $ ------------------------------------------------------------------------------- _ ______ | |/ / ___|___ _ __ ___ _ _ | ' / | / _ \ '_ ` _ \| | | | | . \ |__| __/ | | | | | |_| | |_|\_\____\___|_| |_| |_|\__,_| ================================= Copyright (c) 1997 Torsten Paul Lommatzscher Str. 26 01139 Dresden Torsten.Paul@gmx.de All Rights Reserved ------------------------------------------------------------------------------- README ------------------------------------------------------------------------------- 0. Contents 1. COPYRIGHT Hmm, no docu yet. Just ./configure && make ;-) ------------------------------------------------------------------------------- 1. COPYRIGHT This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. ------------------------------------------------------------------------------- Have fun! -- Torsten Paul Torsten.Paul@gmx.de KCemu-0.5.1/Makefile.am0000644001050700006200000000106011412402443014231 0ustar glaubitzfbedv## Process this file with automake to produce Makefile.in docdir = $(datadir)/doc/kcemu ACLOCAL_AMFLAGS = -I config -I config/m4 SUBDIRS = \ intl \ include \ src \ test \ asm \ images \ doc \ man \ debian \ rpm \ conf \ setup \ po EXTRA_DIST = VERSION README.de TODO THANKS COPYING COPYING.de .pc/.[qv]* install-data-local: $(mkinstalldirs) $(DESTDIR)$(docdir) cp ChangeLog $(DESTDIR)$(docdir)/changelog deb: unset CFLAGS CXXFLAGS FFLAGS CPPFLAGS LDFLAGS; \ dpkg-buildpackage -rfakeroot -b -us -uc CONFIG_STATUS_DEPENDENCIES = VERSION KCemu-0.5.1/configure.in0000644001050700006200000006512711412402507014525 0ustar glaubitzfbedvdnl ---------------------------------------------------------------- dnl $Id: configure.in,v 1.19 2002/10/31 16:39:53 torsten_paul Exp $ dnl dnl Process this file with autoconf to produce a configure script. dnl ---------------------------------------------------------------- AC_INIT(include/kc/kc.h) AC_CONFIG_AUX_DIR(config) AC_GNU_SOURCE AC_CANONICAL_HOST AC_CANONICAL_TARGET dnl ----------------------- dnl declare extra options dnl ----------------------- AC_ARG_ENABLE(static-z80ex, [ --enable-static-z80ex link Z80 emulation statically [default=no]],,enable_static_z80ex=no) AC_ARG_ENABLE(sound, [ --enable-sound enable sound using libSDL (broken!) [default=no]],,enable_sound=no) AC_ARG_ENABLE(libaudiofile, [ --enable-libaudiofile enable usage of libaudiofile if present [default=yes]],,enable_libaudiofile=yes) AC_ARG_ENABLE(libsndfile, [ --enable-libsndfile enable usage of libsndfile if present [default=yes]],,enable_libsndfile=yes) AC_ARG_ENABLE(libflac, [ --enable-libflac enable usage of libFLAC 1.0.x if present [default=yes]],,enable_libflac=yes) AC_ARG_ENABLE(libvorbis, [ --enable-libvorbis enable usage of libvorbis if present [default=yes]],,enable_libvorbis=yes) AC_ARG_ENABLE(libtheora, [ --enable-libtheora enable usage of libtheora if present [default=yes]],,enable_libtheora=yes) AC_ARG_ENABLE(libxvidcore, [ --enable-libxvidcore enable usage of libxvidcore if present [default=yes]],,enable_libxvidcore=yes) AC_ARG_ENABLE(libdirac, [ --enable-libdirac enable usage of libdirac if present [default=yes]],,enable_libdirac=yes) AC_ARG_ENABLE(libschroedinger, [ --enable-libschroedinger enable usage of libschroedinger if present [default=yes]],,enable_libschroedinger=yes) AC_ARG_ENABLE(libavformat, [ --enable-libavformat enable usage of libavformat if present [default=yes]],,enable_libavformat=yes) AC_ARG_ENABLE(libgif, [ --enable-libgif enable usage of libgif if present [default=yes]],,enable_libgif=yes) AC_ARG_ENABLE(libvncserver, [ --enable-libvncserver enable usage of libvncserver if present [default=yes]],,enable_libvncserver=yes) AC_ARG_ENABLE(libmp3lame, [ --enable-libmp3lame enable usage of libmp3lame if present [default=yes]],,enable_libmp3lame=yes) AC_ARG_ENABLE(ms-bitfields, [ --enable-ms-bitfields enable usage of gcc -mms-bitfields on MinGW [default=yes]],,enable_ms_bitfields=yes) AC_ARG_WITH(ui, [ --with-ui=UI use User Interface UI (gtk or sdl) [default=auto]],,with_ui=auto) AC_ARG_WITH(debug_level, [ --with-debug-level=L set debug level to L (0..3) [default=1]]) dnl --------------------- dnl set package version dnl --------------------- . ./VERSION VERSION=$KCEMU_VERSION AC_DEFINE_UNQUOTED(PACKAGE, "$PACKAGE", "package name") AC_DEFINE_UNQUOTED(VERSION, "$VERSION", "package version") AC_DEFINE_UNQUOTED(KCEMU_MAJOR_VERSION, $KCEMU_MAJOR_VERSION, "KCemu major version") AC_DEFINE_UNQUOTED(KCEMU_MINOR_VERSION, $KCEMU_MINOR_VERSION, "KCemu minor version") AC_DEFINE_UNQUOTED(KCEMU_MICRO_VERSION, $KCEMU_MICRO_VERSION, "KCemu micro version") AC_DEFINE_UNQUOTED(KCEMU_EXTRA_VERSION, $KCEMU_EXTRA_VERSION, "KCemu extra version") AC_DEFINE_UNQUOTED(KCEMU_EXTRA_VERSION_TEXT, "$KCEMU_EXTRA_VERSION_TEXT", "KCemu extra version text") AC_DEFINE_UNQUOTED(KCEMU_VERSION, "$KCEMU_VERSION", "KCemu version") AC_DEFINE(PACKAGE_URL, "$PACKAGE_URL", "KCemu Homepage") AC_DEFINE(PACKAGE_NAME, "$PACKAGE-$KCEMU_VERSION") AC_DEFINE(PACKAGE_STRING, "$PACKAGE-$KCEMU_VERSION") AC_DEFINE(PACKAGE_VERSION, "$KCEMU_VERSION") AC_DEFINE(PACKAGE_TARNAME, "$PACKAGE-${KCEMU_VERSION}.tar.gz") AC_DEFINE(PACKAGE_BUGREPORT, "$PACKAGE_BUGREPORT") AC_SUBST(PACKAGE) AC_SUBST(PACKAGE_URL) AC_SUBST(PACKAGE_NAME) AC_SUBST(PACKAGE_STRING) AC_SUBST(PACKAGE_VERSION) AC_SUBST(PACKAGE_TARNAME) AC_SUBST(PACKAGE_BUGREPORT) AC_SUBST(VERSION) AC_SUBST(KCEMU_MAJOR_VERSION) AC_SUBST(KCEMU_MINOR_VERSION) AC_SUBST(KCEMU_MICRO_VERSION) AC_SUBST(KCEMU_EXTRA_VERSION) AC_SUBST(KCEMU_EXTRA_VERSION_TEXT) dnl --------------------- dnl initialize automake dnl --------------------- AM_CONFIG_HEADER(include/kc/config.h) AM_INIT_AUTOMAKE($PACKAGE, $VERSION, no-define) dnl --------------------- dnl checks for programs dnl --------------------- AC_PROG_CC if test x$enable_ms_bitfields = xyes; then dnl dnl check for compiler-flag -mms-bitfields needed for mingw/cygwin dnl it defines the bit-field layout to be MS Visual C/C++ compatible dnl ac_save_CFLAGS=$CFLAGS CFLAGS="-mms-bitfields" AC_CACHE_CHECK(whether $CC accepts $CFLAGS, ac_cv_prog_cc_mms_bitfields, [AC_COMPILE_IFELSE([AC_LANG_PROGRAM()], [ac_cv_prog_cc_mms_bitfields=yes], [ac_cv_prog_cc_mms_bitfields=no])]) if test $ac_cv_prog_cc_mms_bitfields = yes; then use_ms_bitfields="$CFLAGS" else use_ms_bitfields="$CFLAGS" fi CFLAGS="$ac_save_CFLAGS" fi AC_PROG_CXX AC_PROG_INSTALL AC_PROG_LN_S AC_PROG_RANLIB AC_CHECK_TOOL(RC, windres, :) AC_PROG_MAKE_SET dnl ------------------- dnl check debug level dnl ------------------- AC_MSG_CHECKING(which debug level is requested) DBG_LEVEL=1 if test "x$with_debug_level" = "x0"; then DBG_LEVEL=0 elif test "x$with_debug_level" = "x1"; then DBG_LEVEL=1 elif test "x$with_debug_level" = "x2"; then DBG_LEVEL=2 elif test "x$with_debug_level" = "x3"; then DBG_LEVEL=3 fi AC_MSG_RESULT($DBG_LEVEL) AC_DEFINE_UNQUOTED(DBG_LEVEL, $DBG_LEVEL, "debug level") dnl ---------------------------- dnl check for arnold assembler dnl ---------------------------- AC_CHECK_PROG(HAVE_ASL, asl, "yes", "no") AC_CHECK_PROG(HAVE_P2BIN, p2bin, "yes", "no") AM_CONDITIONAL(COMPILE_Z80_ASM, false) if test "x$HAVE_ASL" = "xyes"; then if test "x$HAVE_P2BIN" = "xyes"; then AM_CONDITIONAL(COMPILE_Z80_ASM, true) fi fi dnl ----------------------------------- dnl check on which system we will run dnl ----------------------------------- AM_CONDITIONAL(TARGET_MINGW, false) AM_CONDITIONAL(TARGET_LINUX, false) AM_CONDITIONAL(TARGET_FREEBSD, false) case "$host_os" in beos) AC_MSG_ERROR([ *** *** BeOS is not supported anymore. ***]) ;; mingw32*) HOST_OS="MinGW" HOST_OS_MINGW=1 AM_CONDITIONAL(TARGET_MINGW, true) AC_DEFINE_UNQUOTED(HOST_OS_MINGW, $HOST_OS_MINGW, "host os is MinGW") CFLAGS="$CFLAGS $use_ms_bitfields" CXXFLAGS="$CXXFLAGS $use_ms_bitfields" LDFLAGS="$LDFLAGS $use_ms_bitfields -mwindows" ;; freebsd*) HOST_OS="FreeBSD" HOST_OS_FREEBSD=1 AM_CONDITIONAL(TARGET_FREEBSD, true) AC_DEFINE_UNQUOTED(HOST_OS_FREEBSD, $HOST_OS_FREEBSD, "host os is FreeBSD") ;; *) HOST_OS="Linux" HOST_OS_LINUX=1 AM_CONDITIONAL(TARGET_LINUX, true) AC_DEFINE_UNQUOTED(HOST_OS_LINUX, $HOST_OS_LINUX, "host os is Linux") ;; esac AC_DEFINE_UNQUOTED(HOST_OS, "$HOST_OS", "host os") dnl --------------------------------------------------------------- dnl checks for typedefs, structures, and compiler characteristics dnl --------------------------------------------------------------- AC_C_CONST AC_C_INLINE AC_HEADER_TIME dnl ------------------------------- dnl check for common header files dnl ------------------------------- AC_PATH_X AC_HEADER_STDC AC_CHECK_HEADERS(sys/time.h mcheck.h) dnl ---------------------------------- dnl check for common C++ header files dnl ---------------------------------- AC_LANG_PUSH(C++) AC_LANG_POP(C++) dnl -------------------------------------- dnl checks for various library functions dnl -------------------------------------- AC_TYPE_SIGNAL AC_CHECK_FUNCS(gettimeofday strstr strchr strrchr strtol strcasecmp strncasecmp mtrace) AC_CHECK_FUNC(localtime_r, AC_DEFINE(HAVE_LOCALTIME_R, 1, "localtime_r")) AC_CHECK_FUNC(localtime, AC_DEFINE(HAVE_LOCALTIME, 1, "localtime")) AC_CHECK_FUNC(getopt, have_getopt=yes AC_DEFINE(HAVE_GETOPT, 1, "getopt() available")) AC_CHECK_FUNC(getopt_long, have_getopt_long=yes AC_DEFINE(HAVE_GETOPT_LONG, 1, "getopt_long() available")) AC_MSG_CHECKING(whether to use the included getopt library) if test x$have_getopt = xyes -o x$have_getopt_long = xyes; then use_included_getopt=no AM_CONDITIONAL(USE_INCLUDED_GETOPT, false) else use_included_getopt=yes AM_CONDITIONAL(USE_INCLUDED_GETOPT, true) AC_DEFINE(USE_INCLUDED_GETOPT, 1, "use included getopt") AC_DEFINE(HAVE_GETOPT, 1, "getopt() available") AC_DEFINE(HAVE_GETOPT_LONG, 1, "getopt_long() available") fi AC_MSG_RESULT($use_included_getopt) dnl ------------------- dnl configure gettext dnl ------------------- ALL_LINGUAS="en de" AM_PO_SUBDIRS AM_GNU_GETTEXT([no-libtool]) dnl MinGW hack, libintl is there but configure failes with dnl error undefined reference to `__nl_expand_alias' if test "x$HOST_OS" = "xMinGW"; then LTLIBINTL="" LIBINTL="" INTLLIBS="-lintl" INTLOBJS="" USE_INCLUDED_LIBINTL=no BUILD_INCLUDED_LIBINTL=no AC_MSG_WARN([Disable building libintl for MinGW compilation]) fi if test "x$USE_INCLUDED_LIBINTL" = "xyes"; then AC_DEFINE(USE_INCLUDED_LIBINTL, 1, "use included libintl") fi dnl ----------------------------- dnl check for common libraries dnl ----------------------------- dnl dnl on mingw the libz dll has to be linked dnl with -lzdll instead of -lz dnl AC_CHECK_LIB(z, crc32, have_libz=-lz, have_libz=no) if test x$have_libz = xno; then AC_CHECK_LIB(zdll, crc32, have_libz=-lzdll, have_libz=no) fi if test x$have_libz = xno; then AC_MSG_ERROR(Cannot link libz -- check CFLAGS/LDFLAGS) else LIBS="$LIBS $have_libz" fi AC_CHECK_LIB(m, pow,,AC_MSG_WARN(Cannot link libm -- check CFLAGS/LDFLAGS)) AM_CONDITIONAL(HAVE_CPPUNIT, false) dnl ----------------------- dnl initialize pkg-config dnl ----------------------- PKG_PROG_PKG_CONFIG(0.20) PKG_CHECK_MODULES(GTK, gtk+-2.0 >= 2.16.1) _sep="" _gtk_libs_temp="" for lib in $GTK_LIBS do if test "x-lfreetype" = "x$lib"; then echo "removing 'freetype' from library list GTK_LIBS" continue elif test "x-lfontconfig" = "x$lib"; then echo "removing 'fontconfig' from library list GTK_LIBS" continue elif test "x-latk-1.0" = "x$lib"; then echo "removing 'atk-1.0' from library list GTK_LIBS" continue fi _gtk_libs_temp="$_gtk_libs_temp$_sep$lib" _sep=" " done GTK_LIBS="$_gtk_libs_temp" if test x$cross_compiling = xno; then PKG_CHECK_MODULES(X11, x11 >= 1.1) PKG_CHECK_MODULES(XMU, xmu >= 1.0) fi dnl ----------------------- dnl check for z80ex dnl ----------------------- req_z80ex_api=1 min_z80ex_version_major=1 min_z80ex_version_minor=18 min_z80ex_version="${min_z80ex_version_major}.${min_z80ex_version_minor}" AC_CHECK_LIB(z80ex, z80ex_create, have_libz80ex=yes, have_libz80ex=no) if test x$have_libz80ex = xyes; then Z80EX_LIBS="-lz80ex -lz80ex_dasm" AC_MSG_CHECKING(for z80ex - api = $req_z80ex_api - version >= $min_z80ex_version) if test x$cross_compiling = xno; then ac_save_CFLAGS="$CFLAGS" ac_save_LIBS="$LIBS" CFLAGS="$CFLAGS $Z80EX_CFLAGS" LIBS="$Z80EX_LIBS $LIBS" AC_TRY_RUN([ #include #include int main() { Z80EX_VERSION *v = z80ex_get_version(); if (v->API_revision != $req_z80ex_api) return 1; if (v->major < $min_z80ex_version_major) return 2; if ((v->major == $min_z80ex_version_major) && (v->minor < $min_z80ex_version_minor)) return 3; return 0; } ],AC_MSG_RESULT(yes),have_libz80ex=no) CFLAGS="$ac_save_CFLAGS" LIBS="$ac_save_LIBS" AC_SUBST(Z80EX_LIBS) z80_emulation_type="dynamic" else AC_MSG_RESULT([cross compiling; assumed OK...]) fi fi if test x$have_libz80ex = xno; then AC_MSG_ERROR([ *** *** Can not find required library z80ex. ***]) fi AC_MSG_CHECKING(if static linking of z80ex is requested) if test "x$enable_static_z80ex" = "xyes"; then AC_MSG_RESULT(yes) AC_MSG_CHECKING(for path of static z80ex libraries) z80ex_so=`gcc $LDFLAGS -lz80ex -Wl,--trace /dev/null 2>/dev/null | grep -- '-lz80ex' | sed -e 's/.*(//; s/).*//;'` z80ex_path=`dirname "$z80ex_so"` z80ex_lib="$z80ex_path/libz80ex.a" z80ex_dasm_lib="$z80ex_path/libz80ex_dasm.a" if test -f "$z80ex_lib" -a -f "$z80ex_dasm_lib"; then AC_MSG_RESULT([$z80ex_path]) Z80EX_LIBS="$z80ex_lib $z80ex_dasm_lib" z80_emulation_type="static" else AC_MSG_ERROR([ *** *** Can not find path for static z80ex library. ***]) fi else AC_MSG_RESULT(no) fi dnl --------------------------------- dnl check for theoraenc library dnl --------------------------------- have_theora=no min_theora="1.0" min_theoraenc="1.1.1" if test "x$enable_libtheora" = xyes; then PKG_CHECK_MODULES(LIBTHEORA11, theoraenc >= $min_theoraenc, [ have_theora=yes have_theora_version=" (version 1.1)" AC_DEFINE(HAVE_LIBTHEORA, 1, "have libtheora") AC_DEFINE(HAVE_LIBTHEORA11, 1, "have libtheora version 1.1") LIBTHEORA_CFLAGS="$LIBTHEORA11_CFLAGS" LIBTHEORA_LIBS="$LIBTHEORA11_LIBS" AC_SUBST(LIBTHEORA_CFLAGS) AC_SUBST(LIBTHEORA_LIBS) ],[ PKG_CHECK_MODULES(LIBTHEORA10, theoraenc >= $min_theora theoradec >= $min_theora, [ have_theora=yes have_theora_version=" (version 1.0)" AC_DEFINE(HAVE_LIBTHEORA, 1, "have libtheora") AC_DEFINE(HAVE_LIBTHEORA10, 1, "have libtheora version 1.0") LIBTHEORA_CFLAGS="$LIBTHEORA10_CFLAGS" LIBTHEORA_LIBS="$LIBTHEORA10_LIBS" AC_SUBST(LIBTHEORA_CFLAGS) AC_SUBST(LIBTHEORA_LIBS) ],[ AC_MSG_WARN([ *** *** Unable to find theora library (with version number >= $min_theora)! *** *** This is NO ERROR. It only means you can't capture video in *** theora/ogg format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libtheora ***]) ]) ]) fi dnl --------------------------------- dnl check for libavformat library dnl --------------------------------- have_avformat=no min_libavformat="52.41.0" if test "x$enable_libavformat" = xyes; then PKG_CHECK_MODULES(LIBAVFORMAT, libavformat >= $min_libavformat, [ have_avformat=yes AC_DEFINE(HAVE_LIBAVFORMAT, 1, "have libavformat") AC_SUBST(LIBAVFORMAT_CFLAGS) AC_SUBST(LIBAVFORMAT_LIBS) ],[ AC_MSG_WARN([ *** *** Unable to find avformat library (with version number >= $min_libavformat)! *** *** This is NO ERROR. It only means you can't capture video in *** avi format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libavformat ***]) ]) fi dnl --------------------------------- dnl check for libdirac dnl --------------------------------- have_dirac=no min_libdirac="1.0.2" if test "x$enable_libdirac" = xyes; then PKG_CHECK_MODULES(LIBDIRAC, dirac >= $min_libdirac, [ have_dirac=yes AC_DEFINE(HAVE_LIBDIRAC, 1, "have libdirac") AC_SUBST(LIBDIRAC_CFLAGS) AC_SUBST(LIBDIRAC_LIBS) ],[ AC_MSG_WARN([ *** *** Unable to find dirac library (with version number >= $min_libdirac)! *** *** This is NO ERROR. It only means you can't capture video in *** dirac format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libdirac ***]) ]) fi dnl --------------------------------- dnl check for libschroedinger dnl --------------------------------- have_libschroedinger=no min_libschroedinger="1.0.8" if test "x$enable_libschroedinger" = xyes; then PKG_CHECK_MODULES(LIBSCHROEDINGER, schroedinger-1.0 >= $min_libschroedinger, [ have_libschroedinger=yes AC_DEFINE(HAVE_LIBSCHROEDINGER, 1, "have libschroedinger") AC_SUBST(LIBSCHROEDINGER_CFLAGS) AC_SUBST(LIBSCHROEDINGER_LIBS) ],[ AC_MSG_WARN([ *** *** Unable to find schroedinger library (with version number >= $min_libschroedinger)! *** *** This is NO ERROR. It only means you can't capture video in *** schroedinger format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libschroedinger ***]) ]) fi dnl --------------------------------- dnl check for libxvidcore dnl --------------------------------- have_libxvidcore=no min_libxvidcore="1.2.2" if test "x$enable_libxvidcore" = xyes; then AC_CHECK_LIB(xvidcore, xvid_encore, have_libxvidcore=yes, have_libxvidcore=no) if test x$have_libxvidcore = xyes; then XVIDCORE_LIBS="-lxvidcore" AC_SUBST(XVIDCORE_LIBS) AC_DEFINE(HAVE_LIBXVIDCORE, 1, "have libxvidcore") else AC_MSG_WARN([ *** *** Unable to find libxvidcore (with version number >= $min_libxvidcore)! *** *** This is NO ERROR. It only means you can't capture video in *** mpeg4 format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libxvidcore ***]) fi fi dnl --------------------------------- dnl check for libgif dnl --------------------------------- if test "x$enable_libgif" = xyes; then AC_CHECK_LIB(gif, EGifSetGifVersion, have_libgif=yes, have_libgif=no) if test x$have_libgif = xyes; then LIBGIF_LIBS="-lgif" AC_SUBST(LIBGIF_LIBS) AC_DEFINE(HAVE_LIBGIF, 1, "have libgif") else AC_MSG_WARN([ *** *** Unable to find libgif! *** *** This is NO ERROR. It only means you can't capture video in *** animated GIF format. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libgif ***]) fi fi dnl --------------------------------- dnl check for libvncserver dnl --------------------------------- have_libvncserver=no min_libvncserver="0.9" if test "x$enable_libvncserver" = xyes; then AC_CHECK_LIB(vncserver, rfbGetScreen, have_libvncserver=yes, have_libvncserver=no) if test x$have_libvncserver = xyes; then VNCSERVER_LIBS="-lvncserver -lvncclient -ljpeg" AC_SUBST(VNCSERVER_LIBS) AC_DEFINE(HAVE_LIBVNCSERVER, 1, "have libvncserver") else AC_MSG_WARN([ *** *** Unable to find libvncserver (with version number >= $min_libvncserver)! *** *** This is NO ERROR. It only means you can't connect to KCemu *** using a VNC client. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libvncserver ***]) fi fi _sep="" _vncserver_libs_temp="" for lib in $VNCSERVER_LIBS do if test "x-ljpeg" = "x$lib"; then echo "removing 'jpeg' from library list VNCSERVER_LIBS" continue fi _vncserver_libs_temp="$_vncserver_libs_temp$_sep$lib" _sep=" " done VNCSERVER_LIBS="$_vncserver_libs_temp" dnl --------------------- dnl check for libsndfile dnl --------------------- have_libsndfile=no if test x$enable_libsndfile = xyes; then AC_CHECK_LIB(sndfile, sf_open_read, have_libsndfile=yes, have_libsndfile=no) if test x$have_libsndfile = xyes; then SNDFILE_LIBS=-lsndfile AC_SUBST(SNDFILE_LIBS) AC_DEFINE(HAVE_LIBSNDFILE, 1, "have libsndfile") AC_DEFINE(HAVE_LIBSNDFILE_V0, 1, "have libsndfile version 0.0.x") else AC_CHECK_LIB(sndfile, sf_open, have_libsndfile=yes, have_libsndfile=no) if test x$have_libsndfile = xyes; then SNDFILE_LIBS=-lsndfile AC_SUBST(SNDFILE_LIBS) AC_DEFINE(HAVE_LIBSNDFILE, 1, "have libsndfile") AC_DEFINE(HAVE_LIBSNDFILE_V1, 1, "have libnsndfile version 1.0.x") else AC_MSG_WARN([ *** *** Unable to find sndfile library! The audio loader module which *** requires this library will be disabled. *** *** This is NO ERROR. It only means you can't playback certain *** audio file types (e.g. .WAV, .PCM, .AU, .SND) in the emulated *** tape recorder. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libsndfile ***]) fi fi fi dnl ----------------------- dnl check for libaudiofile dnl ----------------------- have_libaudiofile=no if test x$enable_libaudiofile = xyes; then AC_CHECK_LIB(audiofile, afOpenFile, have_libaudiofile=yes, have_libaudiofile=no) if test x$have_libaudiofile = xyes; then AUDIOFILE_LIBS=-laudiofile AC_SUBST(AUDIOFILE_LIBS) AC_DEFINE(HAVE_LIBAUDIOFILE, 1, "have libaudiofile") else AC_MSG_WARN([ *** *** Unable to find audiofile library! The audio loader module which *** requires this library will be disabled. *** *** This is NO ERROR. It only means you can't playback certain *** audio file types (e.g. .WAV, .AIFF, .AU) in the emulated *** tape recorder. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libaudiofile ***]) fi fi dnl --------------------- dnl check for libmp3lame dnl --------------------- have_libmp3lame=no if test x$enable_libmp3lame = xyes; then AC_CHECK_LIB(mp3lame, lame_decode1_headers, have_libmp3lame=yes, have_libmp3lame=no) if test x$have_libmp3lame = xyes; then MP3LAME_LIBS=-lmp3lame AC_SUBST(MP3LAME_LIBS) AC_DEFINE(HAVE_LIBMP3LAME, 1, "have libmp3lame") else AC_MSG_WARN([ *** *** Unable to find libmp3lame (part of MP3 encoder LAME)! The audio *** loader module which requires this library will be disabled. *** *** This is NO ERROR. It only means you can't playback certain *** audio file types (e.g. .MP3) in the emulated tape recorder. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libmp3lame ***]) fi fi dnl -------------------- dnl check for libvorbis dnl -------------------- have_libvorbis=no if test x$enable_libvorbis = xyes; then AC_CHECK_LIB(vorbisfile, ov_open, have_libvorbis=yes, have_libvorbis=no, -lvorbis) if test x$have_libvorbis = xyes; then VORBIS_LIBS="-lvorbisfile -lvorbis" AC_SUBST(VORBIS_LIBS) AC_DEFINE(HAVE_LIBVORBIS, 1, "have libvorbis") else AC_MSG_WARN([ *** *** Unable to find libvorbis library! The audio loader module which *** requires this library will be disabled. *** *** This is NO ERROR. It only means you can't playback certain *** audio file types (e.g. .OGG) in the emulated tape recorder. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libvorbis ***]) fi fi dnl ------------------ dnl check for libflac dnl ------------------ have_libflac=no if test x$enable_libflac = xyes; then AC_CHECK_LIB(FLAC, FLAC__file_decoder_process_metadata, have_libflac=yes, have_libflac=no) if test x$have_libflac = xyes; then F_L_A_C_LIBS=-lFLAC AC_SUBST(F_L_A_C_LIBS) AC_DEFINE(HAVE_LIBFLAC, 1, "have libFLAC") else AC_MSG_WARN([ *** *** Unable to find libFLAC library! The audio loader module which *** requires this library will be disabled. *** *** Currently only libFLAC 1.0.x is supported! *** *** This is NO ERROR. It only means you can't playback certain *** audio file types (e.g. .FLAC) in the emulated tape recorder. *** *** If you are still annoyed by this warning you can tell ./configure *** not to check for this library by using --disable-libflac ***]) fi fi dnl ------------------------------------- dnl check for system specific libraries dnl ------------------------------------- dnl -------------- dnl check for OSS dnl -------------- AC_CHECK_HEADERS(sys/soundcard.h) AC_CHECK_HEADERS(machine/soundcard.h) if test x$ac_cv_header_sys_soundcard_h = xyes -o x$ac_cv_header_machine_soundcard_h = xyes; then AC_DEFINE(HAVE_OSS, 1, "have oss") else AC_MSG_WARN([ *** *** Unable to find OSS header file soundcard.h! The audio loader *** module which requires OSS will be disabled. *** *** This is NO ERROR. It only means you can't directly load programs *** by reading directly from the soundcard line input. ***]) fi dnl -------------------------------------- dnl check for libSDL if sound is enabled dnl -------------------------------------- if test x$enable_sound = xyes; then AC_DEFINE(ENABLE_SOUND, 1, "enable sound") AM_PATH_SDL(1.2.0, have_libsdl=yes, have_libsdl=no) fi if test x$have_libsdl = xyes; then AC_DEFINE(HAVE_LIBSDL, 1, "have libSDL") else if test x$enable_sound = xyes; then AC_MSG_WARN([ *** *** Unable to find SDL library (see http://www.libsdl.org/) *** Sound is disabled! ***]) enable_sound=no fi fi AC_OUTPUT([ Makefile include/Makefile include/kc/Makefile include/kc/prefs/Makefile include/kc/kcnet/Makefile include/kc/kramermc/Makefile include/kc/muglerpc/Makefile include/kc/vcs80/Makefile include/kc/c80/Makefile include/sys/Makefile include/getopt/Makefile include/cmd/Makefile include/ui/Makefile include/ui/gtk/Makefile include/ui/generic/Makefile include/fileio/Makefile include/libdbg/Makefile include/libtape/Makefile include/libdisk/Makefile include/libaudio/Makefile include/libgtkex/Makefile asm/Makefile asm/autostart/Makefile src/Makefile src/kc/kcemu.rc src/kc/Makefile src/kc/prefs/Makefile src/kc/kcnet/Makefile src/kc/kramermc/Makefile src/kc/muglerpc/Makefile src/kc/vcs80/Makefile src/kc/c80/Makefile src/sys/Makefile src/sys/mingw/Makefile src/sys/linux/Makefile src/getopt/Makefile src/cmd/Makefile src/ui/Makefile src/ui/gtk/Makefile src/ui/generic/Makefile src/fileio/Makefile src/libdbg/Makefile src/libtape/Makefile src/libdisk/Makefile src/libaudio/Makefile src/libgtkex/Makefile src/util/Makefile test/Makefile test/kc/Makefile test/kc/prefs/Makefile test/libaudio/Makefile test/libaudio/data/Makefile test/libgtkex/Makefile images/Makefile images/original/Makefile doc/Makefile doc/kcemu-help.xml intl/Makefile man/Makefile man/man1/Makefile debian/Makefile rpm/Makefile rpm/KCemu.spec po/Makefile.in conf/Makefile setup/Makefile setup/KCemuSetup.nsi], []) echo "" echo "" echo "KCemu configuration summary:" echo "----------------------------" echo "" echo "- version : KCemu $KCEMU_VERSION" echo "" echo "- architecture : $HOST_OS" echo "- host system : $host" echo "- install prefix : $prefix" echo "" echo "- z80 emulation : $z80_emulation_type" echo "- sound : $enable_sound" echo "- debug level : $DBG_LEVEL" echo "" echo "- audio:" echo "" echo " * sndfile : $have_libsndfile" echo " * audiofile : $have_libaudiofile" echo " * vorbis : $have_libvorbis" echo " * mp3lame : $have_libmp3lame" echo " * FLAC : $have_libflac" echo "" echo "- video:" echo "" echo " * theora : $have_theora$have_theora_version" echo " * avformat : $have_avformat" echo " * dirac : $have_dirac" echo " * schroedinger : $have_libschroedinger" echo " * xvid : $have_libxvidcore" echo " * vncserver : $have_libvncserver" echo "" echo "" KCemu-0.5.1/Makefile.in0000644001050700006200000006243011412404775014264 0ustar glaubitzfbedv# Makefile.in generated by automake 1.11.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, # 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, # Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ VPATH = @srcdir@ pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ target_triplet = @target@ subdir = . DIST_COMMON = README $(am__configure_deps) $(srcdir)/Makefile.am \ $(srcdir)/Makefile.in $(top_srcdir)/configure \ $(top_srcdir)/intl/Makefile.in ABOUT-NLS AUTHORS COPYING \ ChangeLog INSTALL NEWS THANKS TODO config/config.guess \ config/config.rpath config/config.sub config/depcomp \ config/install-sh config/missing mkinstalldirs ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/config/m4/codeset.m4 \ $(top_srcdir)/config/m4/gettext.m4 \ $(top_srcdir)/config/m4/glibc2.m4 \ $(top_srcdir)/config/m4/glibc21.m4 \ $(top_srcdir)/config/m4/iconv.m4 \ $(top_srcdir)/config/m4/intdiv0.m4 \ $(top_srcdir)/config/m4/intl.m4 \ $(top_srcdir)/config/m4/intlmacosx.m4 \ $(top_srcdir)/config/m4/intmax.m4 \ $(top_srcdir)/config/m4/inttypes-pri.m4 \ $(top_srcdir)/config/m4/inttypes_h.m4 \ $(top_srcdir)/config/m4/lcmessage.m4 \ $(top_srcdir)/config/m4/lib-ld.m4 \ $(top_srcdir)/config/m4/lib-link.m4 \ $(top_srcdir)/config/m4/lib-prefix.m4 \ $(top_srcdir)/config/m4/lock.m4 \ $(top_srcdir)/config/m4/longlong.m4 \ $(top_srcdir)/config/m4/nls.m4 $(top_srcdir)/config/m4/po.m4 \ $(top_srcdir)/config/m4/printf-posix.m4 \ $(top_srcdir)/config/m4/progtest.m4 \ $(top_srcdir)/config/m4/size_max.m4 \ $(top_srcdir)/config/m4/stdint_h.m4 \ $(top_srcdir)/config/m4/uintmax_t.m4 \ $(top_srcdir)/config/m4/visibility.m4 \ $(top_srcdir)/config/m4/wchar_t.m4 \ $(top_srcdir)/config/m4/wint_t.m4 \ $(top_srcdir)/config/m4/xsize.m4 $(top_srcdir)/configure.in am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/include/kc/config.h CONFIG_CLEAN_FILES = intl/Makefile CONFIG_CLEAN_VPATH_FILES = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive dvi-recursive \ html-recursive info-recursive install-data-recursive \ install-dvi-recursive install-exec-recursive \ install-html-recursive install-info-recursive \ install-pdf-recursive install-ps-recursive install-recursive \ installcheck-recursive installdirs-recursive pdf-recursive \ ps-recursive uninstall-recursive RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive AM_RECURSIVE_TARGETS = $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) tags TAGS ctags CTAGS \ distdir dist dist-all distcheck ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ { test ! -d "$(distdir)" \ || { find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -fr "$(distdir)"; }; } am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best distuninstallcheck_listfiles = find . -type f -print distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ AMTAR = @AMTAR@ AUDIOFILE_LIBS = @AUDIOFILE_LIBS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BUILD_INCLUDED_LIBINTL = @BUILD_INCLUDED_LIBINTL@ CATOBJEXT = @CATOBJEXT@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CXX = @CXX@ CXXDEPMODE = @CXXDEPMODE@ CXXFLAGS = @CXXFLAGS@ CYGPATH_W = @CYGPATH_W@ DATADIRNAME = @DATADIRNAME@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EXEEXT = @EXEEXT@ F_L_A_C_LIBS = @F_L_A_C_LIBS@ GENCAT = @GENCAT@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIBC2 = @GLIBC2@ GLIBC21 = @GLIBC21@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GREP = @GREP@ GTK_CFLAGS = @GTK_CFLAGS@ GTK_LIBS = @GTK_LIBS@ HAVE_ASL = @HAVE_ASL@ HAVE_ASPRINTF = @HAVE_ASPRINTF@ HAVE_P2BIN = @HAVE_P2BIN@ HAVE_POSIX_PRINTF = @HAVE_POSIX_PRINTF@ HAVE_SNPRINTF = @HAVE_SNPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WPRINTF = @HAVE_WPRINTF@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INSTOBJEXT = @INSTOBJEXT@ INTLBISON = @INTLBISON@ INTLLIBS = @INTLLIBS@ INTLOBJS = @INTLOBJS@ INTL_LIBTOOL_SUFFIX_PREFIX = @INTL_LIBTOOL_SUFFIX_PREFIX@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ KCEMU_EXTRA_VERSION = @KCEMU_EXTRA_VERSION@ KCEMU_EXTRA_VERSION_TEXT = @KCEMU_EXTRA_VERSION_TEXT@ KCEMU_MAJOR_VERSION = @KCEMU_MAJOR_VERSION@ KCEMU_MICRO_VERSION = @KCEMU_MICRO_VERSION@ KCEMU_MINOR_VERSION = @KCEMU_MINOR_VERSION@ LDFLAGS = @LDFLAGS@ LIBAVFORMAT_CFLAGS = @LIBAVFORMAT_CFLAGS@ LIBAVFORMAT_LIBS = @LIBAVFORMAT_LIBS@ LIBDIRAC_CFLAGS = @LIBDIRAC_CFLAGS@ LIBDIRAC_LIBS = @LIBDIRAC_LIBS@ LIBGIF_LIBS = @LIBGIF_LIBS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPTH = @LIBPTH@ LIBPTH_PREFIX = @LIBPTH_PREFIX@ LIBS = @LIBS@ LIBSCHROEDINGER_CFLAGS = @LIBSCHROEDINGER_CFLAGS@ LIBSCHROEDINGER_LIBS = @LIBSCHROEDINGER_LIBS@ LIBTHEORA10_CFLAGS = @LIBTHEORA10_CFLAGS@ LIBTHEORA10_LIBS = @LIBTHEORA10_LIBS@ LIBTHEORA11_CFLAGS = @LIBTHEORA11_CFLAGS@ LIBTHEORA11_LIBS = @LIBTHEORA11_LIBS@ LIBTHEORA_CFLAGS = @LIBTHEORA_CFLAGS@ LIBTHEORA_LIBS = @LIBTHEORA_LIBS@ LIBTHREAD = @LIBTHREAD@ LN_S = @LN_S@ LTLIBC = @LTLIBC@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBPTH = @LTLIBPTH@ LTLIBTHREAD = @LTLIBTHREAD@ MAKEINFO = @MAKEINFO@ MKDIR_P = @MKDIR_P@ MP3LAME_LIBS = @MP3LAME_LIBS@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ OBJEXT = @OBJEXT@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ POSUB = @POSUB@ PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@ RANLIB = @RANLIB@ RC = @RC@ SDL_CFLAGS = @SDL_CFLAGS@ SDL_CONFIG = @SDL_CONFIG@ SDL_LIBS = @SDL_LIBS@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SNDFILE_LIBS = @SNDFILE_LIBS@ STRIP = @STRIP@ USE_INCLUDED_LIBINTL = @USE_INCLUDED_LIBINTL@ USE_NLS = @USE_NLS@ VERSION = @VERSION@ VNCSERVER_LIBS = @VNCSERVER_LIBS@ VORBIS_LIBS = @VORBIS_LIBS@ WINDRES = @WINDRES@ WOE32 = @WOE32@ WOE32DLL = @WOE32DLL@ X11_CFLAGS = @X11_CFLAGS@ X11_LIBS = @X11_LIBS@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ XMKMF = @XMKMF@ XMU_CFLAGS = @XMU_CFLAGS@ XMU_LIBS = @XMU_LIBS@ XVIDCORE_LIBS = @XVIDCORE_LIBS@ Z80EX_LIBS = @Z80EX_LIBS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_CC = @ac_ct_CC@ ac_ct_CXX = @ac_ct_CXX@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = $(datadir)/doc/kcemu dvidir = @dvidir@ exec_prefix = @exec_prefix@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target = @target@ target_alias = @target_alias@ target_cpu = @target_cpu@ target_os = @target_os@ target_vendor = @target_vendor@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I config -I config/m4 SUBDIRS = \ intl \ include \ src \ test \ asm \ images \ doc \ man \ debian \ rpm \ conf \ setup \ po EXTRA_DIST = VERSION README.de TODO THANKS COPYING COPYING.de .pc/.[qv]* CONFIG_STATUS_DEPENDENCIES = VERSION all: all-recursive .SUFFIXES: am--refresh: @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile .PRECIOUS: Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): intl/Makefile: $(top_builddir)/config.status $(top_srcdir)/intl/Makefile.in cd $(top_builddir) && $(SHELL) ./config.status $@ # This directory's subdirectories are mostly independent; you can cd # into them and run `make' without going through this Makefile. # To change the values of `make' variables: instead of editing Makefiles, # (1) if the variable is set in `config.status', edit `config.status' # (which will cause the Makefiles to be regenerated when you run `make'); # (2) otherwise, pass the desired values on the `make' command line. $(RECURSIVE_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ list='$(SUBDIRS)'; for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" $(RECURSIVE_CLEAN_TARGETS): @fail= failcom='exit 1'; \ for f in x $$MAKEFLAGS; do \ case $$f in \ *=* | --[!k]*);; \ *k*) failcom='fail=yes';; \ esac; \ done; \ dot_seen=no; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ rev=''; for subdir in $$list; do \ if test "$$subdir" = "."; then :; else \ rev="$$subdir $$rev"; \ fi; \ done; \ rev="$$rev ."; \ target=`echo $@ | sed s/-recursive//`; \ for subdir in $$rev; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done && test -z "$$fail" tags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) tags); \ done ctags-recursive: list='$(SUBDIRS)'; for subdir in $$list; do \ test "$$subdir" = . || ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) ctags); \ done ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ mkid -fID $$unique tags: TAGS TAGS: tags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: CTAGS CTAGS: ctags-recursive $(HEADERS) $(SOURCES) $(TAGS_DEPENDENCIES) \ $(TAGS_FILES) $(LISP) list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | \ $(AWK) '{ files[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in files) print i; }; }'`; \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | bzip2 -9 -c >$(distdir).tar.bz2 $(am__remove_distdir) dist-lzma: distdir tardir=$(distdir) && $(am__tar) | lzma -9 -c >$(distdir).tar.lzma $(am__remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | xz -c >$(distdir).tar.xz $(am__remove_distdir) dist-tarZ: distdir tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__remove_distdir) dist-shar: distdir shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__remove_distdir) dist dist-all: distdir tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz $(am__remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lzma*) \ lzma -dc $(distdir).tar.lzma | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ esac chmod -R a-w $(distdir); chmod a+w $(distdir) mkdir $(distdir)/_build mkdir $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build \ && ../configure --srcdir=.. --prefix="$$dc_install_base" \ --with-included-gettext \ $(DISTCHECK_CONFIGURE_FLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) dvi \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @$(am__cd) '$(distuninstallcheck_dir)' \ && test `$(distuninstallcheck_listfiles) | wc -l` -le 1 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ `test -z '$(STRIP)' || \ echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-data-local install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) ctags-recursive \ install-am install-strip tags-recursive .PHONY: $(RECURSIVE_CLEAN_TARGETS) $(RECURSIVE_TARGETS) CTAGS GTAGS \ all all-am am--refresh check check-am clean clean-generic \ ctags ctags-recursive dist dist-all dist-bzip2 dist-gzip \ dist-lzma dist-shar dist-tarZ dist-xz dist-zip distcheck \ distclean distclean-generic distclean-tags distcleancheck \ distdir distuninstallcheck dvi dvi-am html html-am info \ info-am install install-am install-data install-data-am \ install-data-local install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic pdf \ pdf-am ps ps-am tags tags-recursive uninstall uninstall-am install-data-local: $(mkinstalldirs) $(DESTDIR)$(docdir) cp ChangeLog $(DESTDIR)$(docdir)/changelog deb: unset CFLAGS CXXFLAGS FFLAGS CPPFLAGS LDFLAGS; \ dpkg-buildpackage -rfakeroot -b -us -uc # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT:

=>wik./[ tNVsʯP3}zˉ펁\.W9PN6mS^VrZ:]XB iE>}ܩA mފh%`A0/?7z, VKvv6˖-oGЧwo͢ŋ3͛ǫG&Rh|>S ˩pY'`405][Diu(&V|>N7$oNOԐzn-dPʖE!]rL\Wg C aÆ \r%{4MHla>C3Ǽ=m);txzMZ_1 [R^Wϭ FfEӅ!N*F<FC;C~L܃27?1&k2VPި3f֭s}2g($$Լٴy3?k0{>!O x=cwkhrss]Q:rجT%߰¦M0j(+#:ŇJ2a(֭[E<_q:!؇O,_qc ęx|wX,=8űuó ~_OÏo_7^d6釙G|V|BX$2v]/C`iiSX , C)6'rZ':'L^M;H5 ſ\a3kxnѵxN-8Cw$zlƓ2{.\s-?)dg2a8 2T|䍵o0Gxd;D)wO/卥 ? >*g,-[XI nqH 3I5 WWoPLڜ3gj^(TV+rrT֫WOV~iӦFK玝z=ki)F [NDŽ6l˗`ذdw#l}g.M<us%w`|v5(Zmh`@(_/֋\oKQQQ鳞Ef#*HHLU^JYzLF305-)'9HEEe>znOx #gY:M47o@⋀ZXkpb_cHEw"j'R},\~;j)$U_gЋ n \?t!rsT_2vn^sۙݶ52v㓷Gm 7H]zo{Ÿݞ&ԕ}*w,ZFW];Wc'KuU^vYYY]UWf0zIX$GE=_'e\g(bDpI`ãeȤ{h$FgC}71b G_Cԉӓ^{>!59_>~cA=Ffg!7gNdA x#/لz!P7 M# - Dx**APRA|"rMTYXy&٠b|xm%aKOeP$48\Ψ|/c- Haw/o~c4ίw~gBbQp`wΖ")(ׂcO9r_~%Vؖ FsA~ŗ i@Ҁ``h`njJy0iS;z0vsט(/+'ֆf;ӵ]c٭ NG}N׿y'̾2<3>Ҵ4u?n=˶ds˹vSl.[eO[ꑷ?䳝hu4Wfo%.._} E D4yT|(?&,4D"gDF$enOՀ 6/Yqk 1o0D3nT =^qf3 ヴ:Q;]v-<,<2Ir_w?_~KAa!&If ͚gϞC50G&SXv&ڨQhq]w1tȐa&t(..eР)wkhs&#s9{nStN sۗ!'ב76HMMO>av 2j,~;eL־2}. RhbC=Ҥ0Lh Y# e44HaDMU2ƀ]{8}eoTT`ZJ>ۣMjkR;Q' Kr^蜨G1TVMRW:7*cr\.~qX!!!FfIQF5"!>Q&Q:IիYfMXZ3} &?2 w^:uXkb5Vyb~nr`[,l`Ȑ! 3f״'FOxvyp(ez'3f/p Z7J {u q*wo"6Cao[ӆ0Ik7/h NV&-Bd!cf]T)H$"^$`Sh };L&M]jj*f)d^c]zZymF.~7=^m=xn݆L4nBff&[Ud4IzbT`xf9'X6:uDQaGڧ2y̜9+5oYȩdu3 ܯ'iv̔:ʹچ{yf$&Sע%wևU gQw.]ӟښ(((U#2BFqq 4^m9)Qtp:i X!3Պ^\xt[_k믿l;y;/NǦ͛aw2dP߾MF=Ͽ ¿{]CoLw0);C7ծwm9I?5 _5bTsagY1 Sk^x=bcMLk@pev (֭[ٶ};~T ¢Z#7Mˬu<3L~xR.UgۏM>!fZ- .y"e*/%cw9߳p)⯅e:w˴ؾVN;]v)H3߿/K"^킒c};Tn/6!^i4k֬p_}]7veɋ/sMd2ԛ(f+APlN*YVnSTXH=rDALnzqtkGZ@xf\ z7eN?~o97j@VGj<^ Ptj" (0ȕe0(sO/~yStk_H[9 _/ 'Ȩu:Bya-^DRJ ^CӅEkh\ҥj lɩO `RRRHOO1xmp anakK_^*cv̇V Y )'\Q.LܯmAI &5i˝O.`5xꙄз HlItʏWJՄ+MՔ)P~Oo@J' pֈ z˷kbXtHjVP%ۧ 5f^˧EqϘ1$%%(EW˘:# s5jYR?V f!3#CH)yXVN)IرHNNQQtCѽ?B]&3}~6&3IIIJȯ%3#YY,ZF9O8f5 [Bd"MR5m r7xzCz!LM~r|R?54h+a@)*+ƟRޯr{ $$$b29TXBKJ!RL:ɋtlNFFwsuҁP^\ӧݵ$VS&xc 1\ϿÔrIJLǶiɺu(-)M$%'Kݍ(:**0k Uoݺ5\|Edee]Ù9c&Çq4Qta9**ɋkź"; Tjjc@Rf2iҤG?Q^^xa4iL&)/+jebQ5v*SΒq:\s5A*,dݻՆh$)96[s3bpo\:GA;FA/J+(8ɓIX8Rpo˅`x7Ir4p kۖ }R#3f bvMa&]e$d4FM;3q]4Z A}R嘔K͵vgXSPP}>)t3'"\tEdffRQ^;Qg@xEN|h"zVў[ .]G[`4hٲ%Æe)ꅞ״i:X|DFRmvJm(pӦuk| R3fS*6oOޱ<`YY5uaYu &5mrR'i{׊ x{z &e˖ELK&Ew6n _II5Z/Stem%)9Y)kۖuc /0~xC\/ի5jT"@Dw|ҍTOWJuRdN5nOq-O|gXi4C>߃Wh:=ܢ'NoV;߰կ"|^} )H 㸘`<7$%&8^y?ڬ6of޼y,[1cǨV 7FSkh.4h jr|Vq疷4mS2*5+F}B"D=& Ы f_8J~:Afѣ`l,bAL j9Y'u?K1}'jSvRTTȤKQp}v^ZLN?/,"(D-GBb RaWk#~>ĩuFV̖_HlP-Y_B)P^Yn84GڟzNUSj#4֟ѴHc fZo֜fW{~5:agdif,iFBnp=!D `0ktdffu$'p@mK|X=^/qf3+WWpC?>䓐>z)ɽŬn,!1_r*LXs=n| Dw^eQY%ߙ8v$u{ }:uIu:VX_ ̜5;*(1:P63W\YocС t0RrÆwhڴiu:U_&&qIrp8NN:_RX5gcɬYV7| bkuhe4hu5oX{z y?|oҩ]Sl6[|ԋGK )iqG'KjH\8XR0 >\.7N7Ĥ$KO%-Hbb"z%E*֯O\87h@ZT, רѪ7EkT#EʵIKT_Q9zS~Hc._=&%cO1b1 Eڱw/Wx?#*0F~rj1 >]3q뿦쥧pxZ^)FAa!}=K^  Xby+y)jbu,w*p_6l'NbΜٵ>r;uZ艳$'5\ë_fU"&o7 Ȁ:i4֭[WcҘ\mw.'3vRepZ!Vh4f~->1D(/?Bt=7CfY\x<ʜ>>~c1OE0Lf h׾3a-)qУ?m&=aU"]`yi4 2*Td[~!دr!hBkbՑ5&r5W.乥oc]5 q:| ӗpxǧk҅7*/#Aes<Я.?%c:ѾC67_~(=φ-0mc4e?Wf=fł6[s'Ʒ_GuɬZO E`=!HeΟ/` cj/hTX(ȯ["#Uԧ gwk (MzG6v8Bw@}`Lx Tʠ MYc/!׏;3 T#<۴F=^/699̜5V-Sk^MҸ;Q|®Q$~׈O<4q"&N#G$|0xh )[_Ok^2-/φdr.ӻ\@b-y1.}O.HP:em̞VbhABӉS0Lf cir>I! $0\Ev!&ыk{b GPL V5br;*A7bbj,T2ukR~cKCt^CO',ktc  W@^@ ?tP/ȷ7ٝoF\\IƸ\.Y9u&}6ZbR"lh ׭;.Fvp]'ؗ˦͛,l6Kr/^=6mDK/=nv*Ӿ}{vYQgrrrXr%.?"NX&]NWH`X$))#ed6QRGQ=G4KmnZ5jpLzs=8\C|k ӺcA\#눞]|>ѵѤ"1 +4R ^V, 2g+Sj"ʒ3l0RMoQ^yL_>-#ozCxhպ53!ܸZtzlG[\Dd`0w<|sլ%#Q 0|Gb4)**h2ro.IUj#}|7  mؗZjh2bB%V7LٓRIL vq^&|=,qбSG'A$pVXb9"{s,}rÁ_>϶q̻ZmXKKCj9NJYVnafC 3:~zo-OħСÔ9 Ί7"J &&w+*ݐL}GbqbݟAj/?p0W,`1U+BsDѤ!Q2rdY D5*c#=ݦMZ;'M[Ne[_Ԭz}c4妾<=oFfcKs9 6 ,2x{c2Թcǎ%%%EU1Fm6ZVW?㴾 *nI!t3F; N'#n|fΘjc<Oʼn_^MsC&g6g6(Tj֭q#]ׯ}zWRPX@fFFl$%w5B0RK >$!gO"蠢 IJMac#w9n UFLe=(Ȱ)R U]!Qʺ+y@MՇuzL)}Ϋ ƀNqaK0냃zÂeNjbeB>!o&zd!rV=^/;vk=9/g y^ΦM|gr ?łwb{h֧o׋RURT]jSG%1mBە+TG"yX$goqŕ]*U2O*7eFo Ϧ]w{GP0ߗ\D)c YZ`Qi@O+fcUMKκԂ3yj˅fÏlGDp0Ll65_eVzBZXrTd&h&"<deeFŜHRw(}ZIʠj\^lLt-*Q xR~[Iud2-Uiw ՈV iek4mIAfFA.8jTuXxUZз1 f[aΜ2`Щ*jSy̕>VrQޠmU@P R[(Ԩ`6mΪ,dU6˃`X VTϥs%`h)K۔J&TRW*7(JUO( '+ۑTJt TsPCM+ E Bu/'E uWK$[S[4oNwW_cirF5*Er&ZІΦvIѓ%z+S>ؖΧto*5)n-ُa_g46VD]e W=ԃG:EH}|``lٻ]#Fp2d%c?Xr% `F0rI3^ 4AW(Ⳝo }YjI g_c%7EE:3'N H&111,OH I*aa~2sر;L0ݻv:&MDddcǍqFGDTʌQE*(,$3#Uf'0jhuʁټq3e5tqzRe4{ҧ^ڤsHMˬMt ZNG 50IZDu'++~WIcp" b7AE}UVg⮮oSPZt%Tkla,[T&N#<ڵkYpijڴ)GӸa#!V+QQ'oi_!a`4 vۿ‚BnӧHm҄W,@O?2]ؠҵ˴f]H^ Fʠ'%Tv.Q􁡹\_,+NJbY9sX+j,vbmj'ޯId֬ ԫWgi?龪 7۾!''OO޲@֭[ٵk7v8R4l6aZiӶ QQr%+ !p|\͕opKvV6DEGи».-BB:Yz=p+r~o{EXE>Ա0r: \.<i†Q\TUKeuԨswY[:۷rvvR!^ɦyDGc۱Z,$̡p:8p 6{E(bcc+ǏS,ZqQ߃'+l1ӱcGO>{x&Q UtU~˖$%%ˠ6e68/D)'f'Ob4UK%:O樼V[ &.Q&f6DGG)7r觟HLL$V-YO?"9`20TEy_&S*`k{d`@Kرo/6֭[*W7/ѤY+%7)-E%aō&J 8j(6o#鼷lreodzۭ,_WUG"X2{ֵkrrr8s,{)cv;[l??WHovvv"tՖagժUp:ۊp86u tSTx\Mo+6n#&ednbC<#٫99zb#3ڵOMԹ 2(YRA.nnbwuƤALx<"!aa<2n,W_=e Q0p PR]D_bKI#i)KAZ.Q5WEJ v6Vk;‚S؟k&›dfϜLk=Z-^NĄ팛Q2N5Bn@Ɉu5Yaƨhܸ1+WE3z .}ډjd֣G>c7FpAZ4o^!knZ8QbbbնbJ6Æ fѣXfWi-7gW_q™tXJ_kә4i}M6Ѿ] jU%B1bOb|n1Qf.EvzP#%%%FBBC:){0[ de3\8EɊ pz&&K@t LM&SRTDxD8<.HxD(bY|iwS'r.^bEE+EՊuPd\byV24 ,~+K)MDUJ72)OTV1ſ+bJwh 1`趖f!J IDAT(}Ed>1OɬXTç?x8_%߱3%]? n .L:;_yi5YLM+&MSOO1fXrrrGWŮ:9Bzzz9h/8ٝOJIMM|?^f`%6f[yYc;i$yf27nMvV6mڶ2 ͆ 6zLasv3r?k a=1;dzl|A>/7|Ή3$FOxl@ۛAˮմi~-^LXXx D.xz+d"1 "(kYA{~=tz:M Xw!t̨Yƨ\k-/fC|dpϔrpixnO)ia=Z~kߣ\SwPDХsgy,--MvJ^@:W<0p4,3aRꥐUeVn&9]!>6`qRpNWEru͟OT͙gO bZX-V"B ,1DEDriA\!JtwǨ|<-_#a /a<ɬ^zyٮH<qCa8{qW(>c1/]ƢE]ե5\Ϟ=[zfS'qU"/b*5)ճrDgX9Ϥv&u?j?]'cߧ;1]|j^SqR VvSV}ˠo8BOs|:8Pzn2f Q|q+q [0vdg?`˩9Ah4ash YG@غ 5P |eLOprm:]%-Rq,3w=tUY7 乑veŸxYP;va_2ArJfeujBBDc iԨf_}EΝyq\FСXl*h_pE?NLtojoE˖ƢE2֭|{㱉ݢ.QFw6pT'bpNʓkPVdJv:tn`. <F/6 7whء}͖)48d41O dˆ E)\:3ݎϪ&#r!$Z vJ))ʼ i"Z*5,n"\A'!%V̛>0ksX#Xڟ7n(M3b/Oԙ1"p\X,fb1"8nV?*j[̫Q!V+-[[{ŘfVe7iq:N"~S9nJsOXrݻ|)'A LMFHIIvR퀯:u`ZhJIc >>p$D+@7ZdкH n~ԏznNzB3A3&Q': N?ΙvnڦPv;iG|R ;V=1$R_Vo sX5餈QY*hf.5%*'Z}B:NQ,* S$L8xPSy3َ5̒_,W񷛚]¹0RhyD4mJVѰQCիGF ys4mJeujš,#Ybb"?|ky'sݻ*e3ӧOS' p 5j9yd(D-+(,I?|-/kch"pOnrl]/[{"b&>Gäޫ?-z`dGEr)*HNNn?]0t0S_wJvg^׋ǭ򸾮%|ۇR :ia/)([ڲӳX.+8m~CWܝSD<` t^51$H(ؗQ]@JOb>{G13zĔ)S5&&s1F1j49$o,Z(P%oš{:COFkݛݻ|BKYs~&MLݙ8aB`0MH ??J|YڞU .`k/s.u b1k߁W,cJzz:YYYt%xNUhh4ugb߾~֡}CZ|9.`X})3fMVH1S/9HZup/(^@u[ЉF<ʫ|ygjՊfMA'zKkӠ+W?֯yqk{GYvӬ54krMqrcX<1\[ZUeʜy ̓ԯH^=Xl)z'jb: 8,y]Kvʕ+h٪%}zeҥ`3x`nZ2//j隤hMW+ )߰G3w V$3238=T=1y@aA!YY~‚BN'-=62J_PW=b r],'(󵛑_B^×8Է‚B?vo DW3%*+(K) $SR\/)Ǿ:^PoM QrB64/ $0EԭUh0*`02k,^zEXj*" re9PF)/i}˲euݛKM:ùc~=v7oIW((,d֯%>ܽ޲x`\ύA|B_֠UI^_ ed;R4k+)_Z,GJM%>']_8%pzLXi^)LTWl֨3-@LP}T$W@9|m/{"e^`0q] &N@XT6 C%;FhS=z`W.T-[ܹsѓy瓙+ֲ%K,l ԩkʒXnn.fYܹ{7!V\!Q r1 /R#T%lT+Q El#*ƵJW Hp$̫죲=%S)_Ic%Yxxo7h>`,]#':,'j%Aaa!QQc}j{<{`tYFSSSyurrr{cpKZ5XZwrk8s,f:t5kزe OgϞr0&6@@cNx(&k^eSriPҥpnj cũWO|6^I*)c)).}x5<բ>aE_AP2ҊvS;6Æ c!|p$N &>!P)0~c V.\p2M՟i{UM:#dkԫP7MhE(HiW(UdQHyjƤ 01ʂ +E WX)+׈"QAFQ/usu^?5W*Ohڠyٶm[&uuzAlL0B>]OV";+z)nLDD7(˯.dzs.Ξ9>G{Z^Ggg^{ )+UVq9':b!!!<~nUjժEzz:;ߓn';+-[b6@wM9999r!CWղ{ ^$g%0H1`raZLP=IQ ,]Y[ԇ6VRH.l`B[Νy5f Yåݻ3{^]])r]n7Ǐ#7?݁$==՟fԘ1h\=jqDFER~}l6'O*/l6ͶoH;vH\\;#©ROm^ Z7m씇Æ.t?BؐZq^rGkֱԩ|C,JjVw`ADt} );N:QJ Zc隥S3c[XGcU}aMW Hnn.?_U@`رӷSTHѧjlDG3l0rrrX}vcnݸ˘YI 'MfyGDh:uJԩ%|yR 9O;֡E%# MB>7 kRʻ0׿*}`_Z}S&Kig4vرd`~)YJ=x}BZoS'[VY=B)b5RϿLDdD9;FvV6}z$FײA2hA E1 wBU̙3:t/̞OM `Ĉ2+ mرBS%߻g/Hyv]CB>9r\?+5MbHrr_5j[#TFmx I{Exh*M111ܒ0s*En`ㆍddf~U'Nз_*`F*&oh~*{J+ 3V2S5V e0aٲDFDҳGON:Vw˶f۶m+K9x`KRRR-(,d3VSL?? ^`(bsVI&eZO}"rhUJ ph t/M 8Vv ZL 3g{sW׻d d!V+gLgʴiV uemê[t4lPkxgѽ{Ǎ=͒լ,L_d9r ,j@Wo.se@rs@;!V+o[1byj88QFUZ'ܸa#f!a$[E8hQQ/d=Xf\z@p.ʪ,[zz"5eO*{OnJ}X^brl Rʢ3fdouM6mT`Sbae -2e*~Nnw?L05k){f3QQԊ%66PΟN#2*J`sEAhWrChX(Ak?P;dIRDI^MZG ԧ?b}0!!_E阫q`a5b!ֿp7={л?yͫ 0eT˂ Z[Yniiic4hJ-LӧO6ozz:od䨑rI3CxD8ge/ ̴lՊ)?ѬY3?@ZrBZnNxdM>)jPRfC?DhX;yk(,(DDo"Rꜱ@۴&Nr<QTXIm6Μ9OFFf #a4hЯ0VܴZn`*~k3s ]'Nࡱ QYt5f ׬)>#R4>|_>l۶ޥlRy XWQf$&3fkl2qqϧL3/6~֭_况L6o|d䱇`k2KA{?NW6}+zCDv&ܮ^j:"x<A s](/ S؊t`(ۤb嶫PfPW֓Bk,^R) vރ{ cO8Gfc.AW.2rtjƨGUVrg? vbm^;tt IDAT/b!99!CӥsgR:u7ldĄ9 .Źs~c"6_*?`ӥsg2xݥ>L~~w[nnZ' i%/uyvbS|E~>O'.W4?'JTD$!z7Evsq1LLZ8p8=X0"2Fp漢48_L-X^ (֪;X,XKM&( Grx8`rd#7h!qc} ݷoXcKj왓 ys;y?7 ,|tt+m۴fμe){Io՟n\v67u''/ --ټg7j7yc;rIؼy3ϧ2S)#&NC?qYج<\ECvLTeXVʼnc,źSa2:_Φ/7c ,P .M1+^3:~1Xɀ[UUV*0TbLL L07\̲eKGpqڶk^'Z 4ytRztFfv/ZM˖|ڵoGdD$|;v౉r ~j2RRYYG~n.#|L6W^ǟlFg1ܜ,$~7>b#V-v|7~X8m n#o䓷_d[kuK20}g.E"t"qmqt:Ό$fazF6k!V+?whu<~9g շ/{ds/P\T gԻ-s7RyDV^>S}bmJMGUU`-Xrl16նUѵvUf{999ܵ шX-:vȬ_ի @nn.N}8#ILHEYp9'5p/:qGgɼ\,yA&q}df<:GqqIݍ#=:&^{;Yo+:Ɓ]ڥ olȏLl{ӏQ;, I'/""JJ0nЈ3esߋX<ٌj?OShe|vf}ejt;oty DHvL?3}p}d&Iqyhoŷ;"էy,bCn'{_]cxg?͎XTh]xZc1J=lA+ҵ3f~c'ӿBRe?P+J3PMȐYcUYB}U\~i:%|TLAQm }EAk^ s"H㓸!6n]ҏ@8.b] Ք!^@bƑ{ФhƵ>%x75`ՈM#(/f(B3}`;N1w"r{MoFO`EbGfuxǚؑwهo eܢH|X8Cvb?1~3cڞ5'кHzf/f}xѫ1Р~Mueȿ1ՏkFgDtu18/9j ;6)Wk'1#RSSپsSZ_U0%RSLjFXˏ=V\&x ~缫go瞣a8[nI#.:aP)q=щB@haiܸ1̙3JA _;KmhZv=@nn.~'ڶkKTD$."Ԏ c6'DDD$/!1432{$Ԯ@>IdB"-[+pa=Ne웠@vv6 R){&0eT,' fp-R){9r$!"c1ݜI?;oLM+沏L¢øM\fW?&\> Ԫ} Fw1qu8y6vnPO!NCоVщ%HίG1 aa4j){$AAyٽL"K1LN"##[gt}\j$@ *.?zڦNd2 hѲ%QQtMѣh<]Ik%XbS FbJJ0 "׶NvB"w1.MZsM++^W1EoHyzS%WX Y[iES-\׬|׌S %x Ѓn#6mu`up8=YI^#.7m;]uR<L3^g1%N7P-'i1<9)jwe7'{؟8 //Ʃػg-7`ЂLĄ^tpeTFA۫ǩA^fa+yכJYIlr41`nۻtbϹxBI>t^c,=,Q@ni^@])oW8P6n~-dPRM( ʥ ӍKu#R*ET^cu@N֭->Ntd$))$W!?hA ZL QFɑtRc^WW\D ˯z N.W>HUNN"fzm c5'>u$F$RR[t7M][~J1:V'Wu}YcU8`A2h@͟ORR \Wn'/]5=*@i`e[\'@#ẍʟAUUڇК,UQt]cUTzQ T݃W]x ga8x05̔%$ B]'RDt:{d!IM)$sa.G\tYSJIm ;kMf:ޯ/&TE-]*gC7VY.h~p8ޝION"[yǃXI/@%+d'R[>fկ,]ÈTR 峕oWH۵?QY Uja ᮡ@hMZZ#G$//F듞d5JOʜ@9]'gV$JP+K-$ڷ2[:zpޱb\A,<"'N>N}1[|IAfXsϕ,ՓVLLDd2)+(MJ2uHpޱ,(4?bɒi}CRmƷ`2 LQZ'ԴBe\JRȽrS_Z>VUC0Vr_U #T3 0LY|,!\.& #_}#s̤ZʘWC\2€ 5s@/7'KB >h,S\YEy=XI%v'39qdyiӦjKf`` lk>_ s̟? ^1BS]H۶lgϞt{8ڋ`4*+lTѧ^wS,g|"J)~82_Vk4h0.WYmM `6xp\\:?&"%|C|Zr!qZ6e楸 N>(1v}ӨQ#V E8q‚կGTD_ѫe~V vЮ,KOOgY,~s,d*L̙3 :q<Z Oa f0$'bRdlhKD c8 Db|-]n7^ TFQl1s4SI p`%j_83= )*S&MrR,B.r ux}e$Sm蜕īɩ^lNy[cu֓‚BjE(wՌUEJ1h$Z=AbнC59͢yqOܽ 5M[ݾlo=""©ܐkވCfgf38q [0鴩g ~5B{3Ɇwd+V9WQ6:~c[^xQL;2~8p{ԊeϳiR^-2/Ԛ'ej 1;.^;kPtԚ3': 8]a&9Dc㟛GZHvѯ /V1lREUե[ޘʒԥ`޽ٸq>סm*nh /GXsla1n]VnFQG3} ^bQRT}cmx,~ƍ[ڄSŠss:l˵o=כ>;sqM ly~|}:`▛n#ؗD3س}"&w #(1o "2~;Cٿf omW}7{'__ .ZE͛8Tt Hke 8dzTI/-7V*,` P t\рdʕc4Xt)}M_n=\j+uzگѠ]4oќƎc[׮4NmK/,?1΂D?gŒ1bpFĿ}_'7Mf݈҄>3_ƢEtܜ9s0wЮ Ν=V-SȘDX"Ӆ$gëįhiY(F4mVka=y=z~u5%0jD=.1pgO7]WQ*̅%.BHH(ů䖴]r.b%u0ireEǨkW֪)(ul6&}ΝFӦב<]uU0V"fˎT#TZ̕i[f ,s^$fr Z䓲4hW9vj xvk+Mι#صzw]z 䖮Sf7o|=I1/~ kZ_⃼K}BO7dFn(;5$ sₓ,ԖbC6f"I,%[`)]VJYAXfZ7f]:5LP/*qRG|U\NQ 7t_|εMr{;Roj+eN:d``۶mLyf kډ/iOگ[׮lv;3",Ĭ#y{=mvđ t 1pQ+OM^?Qw7 "d;(#w$A$7"[zVQPjţhb  Zj -!Gȵݙ& d>W^{y>>ؽRs͚$IU'HDk5z ݇Q l4ECw^$ #cUƦFʊ 7"&h' *nzMoAO(Y$^r{~k[s>͊>*XjrJhY]^I$qH(=0$SZ rL*]&6BcwEKto̘9UL6S7=#Oۉ>DQDO$P42)G,2ߌ IDATZj@[i%%MK"4$8Si7{T$IYM7}})wZQ4bX9Rદe뺽r\cG6+{Y3q#wAiC  @2`NJKHzi: f~܊ߣ ʸBvw;C)Oo%}o tN+%q;O<ϗ-Lc p DJ=s[ g@Q.Ku S>sk$L/st@Y*H.U-tuw-\.Ì!8Ա \UdkVW6|)^}U^|ےL2s fΘi$]nܞ"Y$k+1]w\KBV$fwUGd5U??=b vf%[Or\V^wTmmU4EQ3Yl6W/=W)-1r˪keեDXqH_x!7xgԕܹs%vn? Qٳ-W):rYnͽ٫]r+gJa9[;ެmrnںau^׶5Vguz mu*"*П#1/ю.eux}i7 -S[Ν;Bȳ7\4+/DŮo]K.0=筀Ta(/r]ee[ $I $HͶ9&a)(yL3w9g\1}z9v%zI[u]\1}8)U#p[IAd4Ĥj9tm&874JC9 ;:,I5}9˗/pREE9 C@yEG r"0w<8>MPYrL?~2h`)]wV좡ŎzHnbvgp~w+ս}l2-ZŹugY %Xz5϶ȧ-uL8d"jK` zBU/9T.%B-"E/{^IЉ2>?~taKWfgg5dIbM^z*Tsn7~p271`;zKqPd2?gΜ.4r;\@5+`Rn@:@FPji ѲYnˬ>|y^^{a9ϱ3J47kM~ t=a-Z۷4}ձ󣮮s9_]!Y馛x7% =Zd|/'/?|&%|t41V:gWD؜m/ !FhS\RB  N2֛=Wg~J;)^rcke'e$IJ=,qCBp23fdڵ3W;?r '23N?[HPTXȜ9p[X`"` Xr,v<1ATf[лW/vg{VH*++]QIOԲڬg>rʘK1D+&oj۷/B4טM53<|[. #eRclv52 IzK+ǦĐ!CS}Am\d)'LS l]c=βϗGoe߭i'ǥ]ă't(M&NK ڵHݧ?^3V,_υޣOc75C5$$/$I~q4r_mrZX xѴG,$ǪE?^S2f4WoB ZH(Iu EyZϬ pӼ;z~U?ϣ?5p8I\۫;ٴa57/g_s qġ\2 %EuJW6oZPnq^}8-M%%\|筌*a?kaɿoUΜ8E'hll`1E'r'~z6zcy)0Vl&7'D̢筬W/ T ߟń t"$x9k_-y!x fDLrjmXM# Z V5F]ُS!S<{ɾP9 @DSM:L=؟g1kGe}9h^qyiXZI AB'yyzYyns48Z?ζ$Lq-e( J2#KEE/??YcikRk;]丳#W_;(/CaH$T^:Qjxeʖb.9ogsi/o|.g +S8Ǔ/Nc%g&x"~wvBA'gNؘB&I@6bԬC;2QU5p`T4Qi$B9@l(--eԨQ$I$'P'DIynyf>p^3O^8Os`q~$ښZv`d2(G #SRVI>{\ AU!bT.b=]ї}` p'r,ϵW^TPJC9ػƘ1cӧc0|P i.NwY1EwїrT@2`Q 2I0I"q1_XSa!DUQw=vJ Tc~ݗ.PRVNc"'[8`tUw&8xcacPU5 *eesOJzLf$R (؟w@ {_Djkj=v<ׇCx0}„a*++m GF1E2C0 pA]t)S'H'қ)(igw#0 ?=G^u;Pn}o'|:|j yME1㷒$իWwk#~(˖qsyѝՂ<hɐ$ U~{СLSS%DQvK!8H4>2TCɰTɾHSHġF%&$25ѧj4*_-xL?~$j 3{鉄},(llgws=~U"M?-j]ƺs~Hʕm m9.eܫMľ4Q5ΐC"N+N4dIvݡ{ޝ'(YEw }Əf="U9FO$P 93ϊ,{V ..ե]q'L?>@Yyeь#bӴ`H#FߎpŘ9c&^wM!dp;i"Iu[(NdTfiuu`SS`}u=x E d(H)B5P5+*ygYߝ Fs\BZr+A$IYio$LPS9U$]CQy`Ake2B.QYrYe]j%ݧ!IL+FK75 F ZGPJ7o.G3BEAbQPY<.%|Ӎqs9#wю>K/^}'N$CQ v>'`:9jI()KXW"܌H 3ʖP:Br-[IPmE5&CB@20$)BD:o$Dv%IP )}?'IȾ HU qZ0YŸ-YYk.#wApo45)$&()ZV %JDXAF"yޤ^ nk8ù}˭{V?$TeA(t܄Q_Wg+su`RMf]_fHWS]ehm~;KB*X ^Y9[5Y{䒕5eYR|Z&N#?$(=.-RT)?kY4#_P>'O=:O?ͻoK2͝;>#<:"4"rw,pZEm)jwL%]]ڲsfB(s[|tܳ%+qښ%+/?ee__oYٸa#}ϗ-#sn~JJJ0`M-m>Ӿ?)Ə|*Xz5# g-r]fΘfh?a;ᜋrCB%I+9ys-jKqKh(9;WxY!7yY$&LM$!bݫEN[c5Fh2j(6oBmmp=˦FDS%)= h˒$U޵ϫK٩,B˪rnEUVyX,F,=pau\mi~?_^{֭[GQq}9ǧrG?#5n?w_{ !qu穧Ip[9{O';[`bwFBX2?m*%/RJDBY͎dA@@J_owsyG ~tXe_,c Yr%gĉtA׏q{e9*̴i:t({O"A^4?w?~;@M4mnin "lk.̩Ni eJL';-RǢE! qSZZJQaaX &NH)"ڟHbkc:ςWv}Smz2]RYfWMywذa+C=N8Sy{ؖ?/\fK/$ . wIѦ%n֬]+/'3l0F~k[rNs+(u_5~|Hg\[)ayH ^Zݩ'|jռp!k׬`ܞ{rUGaQ!}+n[9y|~T}~K)//GFIb . يn[xwشq#Y&9r$ӧOMɯz^8?3f[a@\M}aMhI=>~Su5XfM5E>:`2u3w<>ivte" Ç|?$T$#QKKeqp㦍nfgP5SO9  " oaLr2&NHہWH>2 bgreŋnz+V\IyE9EpY&?_XTVTpÍs[X`{l '8R2h璹֥x^'du$Ѽ leVuTř̹@IEF¼+7+ߗծ-+g+0wkJAxg˯AUU׿v6}Ke J6orc{)\Ωڪ0VV2t l}js?_V%,ny,|EE.b;e)!s;q+8iI shAt͑{"R2^eļ*# IDAT8{$ߖt;W\$Td0KAٲRhgYk֬a:t(2-XK R\RbB!+ʹ8p`*y3s ~wu a Æad"ʆ9eR%56s,KaZJJsX\0<]Г I\ߖB\u)h&Ah-+'RmAD2 2ԥMObvVL(O|>}]6T ))-amsPUiUIx~~vHp8]O5-5(!QZVF>RTa7M3[YYSt7Jԣާa&K u$:BL3iZ1yٍy3,~2pk׶\[#ZIpz@L90 !$h`:ܔV!A{#TY}/Dؙ(..a\qWzj9hM֦WnvNivOH+}*Q0ȟq))z9;&C+.VAtnRjuue% c_QX(pYG U8e2յ{1zvɌ*%.x?rҧ-pCoE%azt!w^u9-k>ʒUR3o..AB[%+hMmBzu\}ldHU #vZD0$H…xL8` _ a_ډ~-RD( ,~]%3ifsS7%Hz&$Dc16׷PUٛK/Î<)'LY%S{>Bܐزy3*Oqi)!ɠ)!faɔK%q;۷/ͫ?Gs_қW#! "MKuEr睜x }]<)jQ2TM-jZ\vy;ёY9̊D!x-ЭO}r[E뵈&4}LA1IT,-WeOU33o~{cȑ|~= _U_$eH؉wuhBܐ11#0+ 7BaQ>и>u1F} y~ >˺kyEСl2xy׸P5_rBe4|1%V7rGsCP5 ڊN0z(+*)?F'@jݘ1L8h*[B 2ÇSڧYiin! 㟌1HduϰZ. J9e)ZK{xj}Lkʱ,:waFuZn>6O'Y &D;-ϡ-vWP7UIw@X5\K GK2||'d710MD1B}W]u ( ܫy1J+)(*! QYٗpb J(ݗR4ore˵qEx薙k\K3OOrA"@(*ߝusE5Ԧ$HGƓI6S7 K=*^|i<ǩoG' ؈(ӝbZspf:U{8pY(={Y0,K4i7oʲ ^[,(z 4Yuy(mn} 2ejdEH! GK>DO|uD) ! w;*9U;tJҤ*uuu7mB(Puu*x 3bpޭma⡃ Tt E8u066 dNuA/ f_߭CQH˳S10E"kN̋<絔3īEdրlܩ OBHI+*4 ں]UV]bv l/S\\‘GᓟO8ɜrT P8>|BjLXS$ r7~4詴x-R5sϞ¬\ȼybd^s< W\yDmiS(DQDL8p8,I! 4l?].8 Or{{ @u+ʑY]gwF=z*Wmtk`IО[s K;=ƞ,+SY_ϐC*_L0>[ DZ60agy 4Sds4N;44!/?CIQoU_̧K+t}Kc-! +Hd455e,WX,,_oWxijl0 0p8Z h}dTqEQ2$t:{67}]ֹ-wZyE/;!Wn][rz:GO zYbm466$c#Fpy.d֍7z LD$"M "/IC$I@4ԺVPzy2B}k=MV6wG XMVU"P.޽ôi87o3~|i=J&", m쳵u<)+gϽ/+CUuke5TVXNA>|=aŊ\v唔hdvUhqӏ0Įy4G[bv9sEv:v_|FޠO>ƣ`=3ÇgѢfyvu8_K"MMñ"#8iWއ 11z55{}=xXӽ Q_@ss NQQ!}!/(إޕ.%­uT{RQ2"7|ޥWTH^blڴ(׳i&JQzϫOPՔy=0}t_%K2tP=ꇾ@van!isp.zHHs3H=pS{ԨQ,\:ut({Gqi)a@3U !]I*-]JCS#%Ev~We8ѧO>h `'OۈTM?~vm| FRE)D@3}mVVN0#_\;M-]JՀ;u>TGbŊ<_3 Kw[֭3@ }eYAYj~^}u:ژ7bJ̹'@-]ٷPUUEqI1vCZ<%ŠcTVG˿x)7\O>sUl'h+$'iBD)}UZP_@8(`]+ z1[D$yH*lgn ه` gaz)<3xMǸ=())3SXy{#:bM~CXZ}ٌmnhi󸁄zJQa R^UH 47Se=xxQzE z\uH"Nrꫯj+ǎ& _|F*+2`Y{q\8nM!AB G!VD]]k74*EET)˜k8q~H+_^IS$!֨@^ /0!9I[SQsz&WBTEV(-..]D$uSAOCa`0+sC-BK]0v}>ox sQ;D>'fEX?=0WΜIYY6(MXNӷOm"in$ 0֮݇ 0 >f*:Z6Pտ?P.;4J貢ۦL}|>|8> E'C;gCTL̛˸=׭Y?'L.6傕W'kfc\%0pHV?PP0HYܟ:osCeYWUCLˣ Nk$%PTXJXN'$cgn3~+?>hm 78;(zɌ|tQ!]^oTM?>_yO<~hpa qb$:qC"Ң{YS/6(7VW_j/^ؽKdA0#0 -Q :xI)ݨ1]>L1F,-X:hB>|DIn3` 7⁇ILP:V^McCc>.̳aj e;[<#kॅ 9tpFd2e]]}Izkԇ3zA9]VdDc)$6/„K-^,VߔD5\ZddMS"*Z\O |w֯_O~~$!M$MA45[>|X_c' Aޮm,x JKKXp9#flH4"lgf0|v (J² "uB** _~44ԣǚvL=pvT"oGVXy%A/DISxM*:ިwQ\\̘c0`z $QE&(I(+- ,(PPsu\$huR",D"c)H5# [I$r:]2U$3ɧB(p(iKر18EƦI;^!I@PAXMEьZ1uE~e>v$L9 aF{ ۃ}.$p3N?}+q*-=h[[Q$e,z,B's>|l;dYV(%:|־,ۊݎ NbH"^=lk}z}Vw$?$:0 BUd%} -ŽvG4+VԔQWW@*V,_ા~y] EI6l+U@;8U,oVbŊtS0![a3 9Үa;!۲(W:RhdA DÇGHNL> ;x,a'2--QPEToڔ5B6M!C7Xu_0[/)^c/H 2_`+PS3f 4Eׯׯg. P5͞L e_YƇn]O0|8Ə)AP IYoVeOA  ^{u Yݣ,$7n\ QhinAE ĠGHrw^VY֠Ք7a*8EG75bDOzKX MS׬RVU PU` `7+#bvJ< t0 "f"p#NtY>6l`@U!kY6dܟEe|l-,rg}4\^$e2kԇŦM̜y%snj믧zEF ڻ'|9c\T{ءSy$k籷udhT `c�󶷬'ʪ#PgIH]%\;Dc'M"1~mۛx,RX h8u\Kymʗ޻d2/Fҷ}JXyA1 NŸ3}J펎Of 5kV> zN .""K9Ӎ&l={Ze&Z/N^ʉdBVcSmch,jZ꽔h,F5h I7f)>HHw3MxͶfdu|έ:&zcgeu=aWؚdкouh˗/gSuuz,SWP@8>!/0#R*4#a21#eWqok\#_ּDZM3btLɂu|Y,\Z_ёwFٰ~={W:d(Eo $S$פf&a&2` 1أv=5al8bsa& #wˍ$߭$)`f^w݁% S1;—Uϕ] IDATUʲBDD| CO00MQ#Gw,]XX$Iv2rJh$LV^!TTBs*CgFt/ϥd94 $TҦ뒀r,0 K>/ ź^_VrZ$Q^^U  R%i K w\jHFL5]mcHөf&r/EZe2IԳ3`Do]kĔ.vY/+6eIb͚5|ti/|(&//ۅ>k.n~-unSXT{ۺ `Z|.ьcJRV@[#g9w>{\#pOWTh\/ :u>n^.B_V=[VDHH-[lR СH&({R%n/0v=0YELϾpa~ .Aר;`0C>o sqGR[!/(dC'rAmSx[9bAV\mInԞrVsYsߑzoW/(QYXt)x cF j/.. m#QD&i"w B֬Y#252F<H)@rn뭑5{V^mA^Anrej[dզk4ѫ$ϞT:ć-nKN`1qADRb' =H "MMꫜxV8%vmK8_tkTo֜׈k%\N%wB۫Ҟ v-_VGV#ޙ2+VחM'hÇv1=Pu2~m~}ʉ@ e%!=e%/;sdAϨeTpVqy\aֹۻ+xU19u]@Z}YYt:/e83o`)AB$^褜GGv>b}v7vމ?=p~ {m!ՏL fALZ#]sV[sͽ8RJZVETp{kyn GJ1ĸ]+omʗնȪ]רŨkrq?oek DQ_ѦkT'5O"3fΤǟO^^і(.Tk9v[I2Xь{*\րss,Bۧ%=R23m*"iٗ/mU)(Z &z&XM߭ /v-B` Fb1ctq* Djl!hs3aDQۅڞ:{KA:;HqBξvmgZdg1zU Z4qn_VVVaBOP 2Ih?=,b,Y3 lؙ3w>$[^ʍ7ސn!0,{Z^.+gb3]4tILvar[abf^ncY\0yk[k]yN]+S|Ym0a;u1/sfMMot6zZ?CVd ]go<:'EEUV,] K9,hf25p9GܚB ] dԄF҂]q$9Rμ2k'C勞vYD|YmU-ן>l;3@1̌dA0B|0ÕeG:PlE ڇǺ6+VI5^] UMejkeզE;0s}wVZ^8{wp6>58,wV{NlO/+_V-6#u|Ç]6$Hz>|0 zCy~y&wQ$+ rrZPARQ@A[[UJ}T[[GQ\$h•@ d1;*>;~}}9tWQᰂKLMQR 0"PHeMQR$N(?(E)JQRtsũn2ӷ~~C Gۓ#*"/{EBFVtަ]ϙϵz2Ja*U Vm B3|kz9=ߢ0"Z.8=~.ǚX緳I5z: gTs.#ԣ&"빞[/UwIa*U V?>dYF\nZg/aԥEVDw¹JA 3UU(tijxlef'f7HayX%3X 6亮 'he;7]&k2d+Eq# VѡysЌU>X>Śh_7er1'Lkep}kXktY._%Kx $ܫOa9XY%0 Ԝߌt>\oqi| D\$ULQu+}?Ǭ]Z5i3 QQUavx?FbrUG{" QnĜ̨SXuVZc`Emma3uFń5:vI ?,0$zkΗH$®ݻٵka3VӽtxٌTd+2ڧXXKn$h%T۱+QJϤ_z_`be*Dؼy BAAD\ ;vUСC 5@7uuu[]ҳg/vbPDlqmKF<|ȦnbȐ!t͢98ʶo>NJ>f8f1/ `0 9$\ G%o߁( >?͡vB3rF!H5kAH_cjus;vZY2W)6kVج)ͥ;#aoFP$):+Jm^N8piVcyhhǛ% !񿖖n1' Ц0$8U F w!R# ׶ul}dIֆ*--e7eK4hdŒDu鞟X} w5q%ޅ$Ljտ_dIJ(& W{M֤f`Xk2sra] &:MvzZ 愭άa<jjjɱevdiu %4Ii҅`(9PȓO>ĉ@e\N'&:_l55MO' \t)gޝyEQxs}gnۯDB> EQ69YSN>X7_3wA1^zΝ;$9a>Z =E%jil׋JƠ{SVnzX1y1ZYtxڱ O:8X%ksE5;^@q3CaۼI$&[CфwŔ3ΠUSM?DAc9n?8,ǶopHQKႍY a?NAh8fdf`9NLwUm$AUG\tF7م $\'8N*VND!G P' ֒wPֿsMdw)S9)slyQ*hM?I_[_gL09n&2y91w03D ]\q9Br"n zIjZ(ܧ1dތ:5Lp6Ǧ5d`cjk+Q;V Ư9 G\Nw(_d͙đ{Yc&2 |;X=6!ԠmX6Q2kZjj]QAqq1mii)%%%6~(vO$3fn R2A5ILw^=9bQBa;lg#ʚBv] &$IX/-dHs֒w$M5+:I=RUG}daW4$whdrū< CfB%}Ka 9Bl1laBDEԘ×ܸ̏on&;' /ѢŋYZ S8quhP ִƿk傉q<1$(\Q?vA0{5HЖa&˖`}zN):ڄ]58s~5aE!(ۺ -}0e${|¯X|-:(0ϝ?6sMh+ _7]ԩS8$.`;#R|њ-^̫ lkirVwo%p!6n4~_1w,N;t8\!6m-OB+W1x<ܒA ɄU~ߦM6qd~FNׂP"ӽCQQQa/q~|;|mN٘#Տ}[Ht@4pCNN̟;w…owbسmw%\~xkgN?f志z6m_ۙ{,EN"|E[LP'Ӝ-sai-5`۴ >bZfK#":u&KCc33:DQƒ5gy^AXg!c4dIbMǺKpP.*"kΕ Pc.=Χy<s;f0 _fk(Kcʹ3n@:@MM !\GnE*&ξ)0>b!'xW˜b0xX*Ϗv`M) #@-_).&6#vSw/1' K0e+546kj'r 3({LuȪo{{o>\• <\;u G_@H䟯jgaQ=xu&NH7)nb(_)/i\$JJJ4i"˖G>vsӽ{{goYL6-A%wVM6/?'}KJJء53P,~&)an֔W3.7PG瓭F3$=!W4` & MCRjЙek{Kzq݃11/P Zê}߬EpL\ªBP@'&ekȝ}1NAD ?w&Ysd{A=igSH΢gsQXMv_9j\Ma}7ᔉn{o75>p)pPG[ 2dԞt"O7I9e_40@_~yy,yuƟj;3lڹ83fTs2w<^~ !)eeeqmrUp¹<cm췅a\nwM {DhZˊٳcV|G<=VREd<8a[ǃK|vDwΚu/9FfQH>}@7f?JٿޛJEVvWaxPY]Ÿ(mc>g8MWc$/:YC!|MFE `^,|ݵmE&d օ{ ۏJsrL0+gksx/;V뮿y_٦ 4389L3eMZt[eqs[I^k٦LkiDU"T *RDD `ox\Ff! Ǵ;z#$4W"4TƾK0хj8lyfU 8.<4>[{vG%͕z%* E8IIDAT-7]yu|J(JcЪ:2g6fj Bbж9Y{ڗMd3$ɝ:t!,JB\ [* cHace[$C] )~^zD@0h8%|5t/dQ= :;tp]'}3K5 <''?QPy&3e=Ŗ񐛓zY?& ͚0v ""'MMŜs&QE1[A_e -3o͟5e|W?E&0{v=V0Ѽc.Y;ims5)Z[UpőUGeURyO"*Au^V]F?Ͽg[ 5QV†( SY|x?yt3e+˺ϖq΅pPŘϜ^/Ԃ)2n~gٰq#+V`YٻG׳O{^ < D$B̬,6o̶m]QAZqq\*ʾ=;X{;*a]0l=_m=wcf@l^R~'F=>#ϽY2~*=٪lV2ȴʔe^zECbǎl߾ @nN4y1TWŞo aT~.s >ױy:g,P@Dʲgw0Ƅp?k .DmӴKī~Y<ӑe@%T>Pfl[Tg7Ȣ[ԼӮUmNvU[oVHuӡ$J{JژZ J.sl"U_ %sY习9ߠx֬Y@щohW4l]1obEg2f1/Ȯ9sE3/(Ο  y/7q∣𫟟M4c츱uz~(fOB7f:3fEic&8l‘MMҔu];<33> F` ?c PnVw+(v^wy'/aѿ_Cҏ774<w=Ĝמk0Nx _>ϼ2^h18m:Mj"Yv-oNvv7fV˗STTDvvf} $+1R{W%0(֮[gh}oe̍f ! &_kۺ1ڽ1ϛ+2/QQ &5EV7|t&X+Jai IR9-#qܹڇvy̢q~9/3%:.4LdS/czKhpT~h/؄~'\.֬^MVv6{jw{ ^#'+@0Ȇٵs' [nnpݸn^yg%M=i1?XsE(M(!m\4\?"qjeH▢Zb۷r8㌟5j$`UVQT-UreŊ̛YYYb1GPx-= ~sg¹3qI- FN1[)vWtH؏R (bάL m23O7h"jմkU EWlҶ\K|* ozoZD/(c>?ARƺkq~'eP7ACse㈭21SMM =hB>jcft$vΨ@i߇oCrZ;p}yo6^,hWHqVߑD}8.\b@AD5vu{3h&a"AGn)J?hu-B\YϊO ""8v؍@A k!sI(vqq]dee?sطz57b8οN&NBc@>}DD"M~9bY<yo e\e@N9T 2x ogsH;K4'jiժUvi4Ut|_1aygv0_ӎ:cؼrQ7wl3([F.CofJ(FU!B4-tء\ fCDR{RMIYkN DO0.֥b lªsj/yn}b;w$N==rY5bu>tqԓwp fIΟ1g6N/^c""_$iǹ$\]I%b5Ӑl0U0ԥ}4Bw.15>ł>wAgjS&,EF4aC$𐑓`#2B uu4w0rط_!^E'ܻjuuAT9\6낶qI x-,OZ@ GIR(QE%'ÍL40aÎd;IKKCdEDXA ZIX5a-F-IY&Ok +rkL9`Lhvj+sVӟަ5*w{ N؛}B O}GAUSR!G[H9(c_ӂew&&(Tck)q9bD5H_\rTEq|YqK@Wu@#94-X :HdpD ƌWH, Lv߿p}fAVg_HZw D!hkn\8"vlSdq3rS8D\tDU.g1}#s$vjQ$;0?V]Dc$jym!Ah9Ĝ)$Y1kN[&iS F{Rq}ª3[i qgm`]Ef'|l\sfy"ۙr~/ Vb ^@FdBSr  -@=G  sɎBC9X:no &DK<ӇPHZVV4o9f0q =I":Pd02{KɘuoeROkLQrFb H,߭1fDs֬(aU@LYA֚z):+ X%s.ka^љP[ ۯ>uhɠCUPT6eK c89:B /&3bolVHO ( '33<,ج _~<\233Qqhxfz&n쯮6c~޶(-隗G0m S[DҲL"!֦i?@2S_l ?CE?6CAtX8CDghvqea5ٙ4EX[ZU?. Z*4D'NaXQU@~^! <̿k ~ȫzsݹ͎J~?AGi[~>Vd‰#`}A.YY!K:c쿏 Eɴ@af2zc8[nTTTRSSLnn,:(--EQdgf4jjbf񜐚"BOK-(&&$1dHLe '֝51p:|ƻgNf.c1=!C(JrA Э[7}1|0f?#$#3ƆFDQ4ۈ裏b-,~E #8-ЛJR^VvX^yU@I !^g^455R0CJ*9*p̭ "r;qnYEtod+6tlsKa9XpЯo?{kWQ%t/N&_Ap|D>&e{ o]ߝ5X길ڂepp(0 Շ4&9k`0Av4ښsY[1rRPvgK|:Bm1by8ڦ2|^$og8(GߏHkAĄဉ  (-UU56V\|M :V9CP(rЦ l-6]Z|f1 ]0=Eq}SXuV‘M\a( Z0~$J0G -Ӊ^D)JяP"@HQd Ie شieee444$mU  PT*9K\4i.&wfz{uEQl}>rri߶a!r s)1ѠNX|}CM|\,^^$+Il}Y<27Ϻ}MgHQ^XL^$HB8\,O:-_m4EypƏ\|?v{Bq!'I{x֍2tJh=x^ a7l&'+ 碸p|1Ydmy8#Ue߱,~aQxyYgan֑^ ,XVdzrjnk3}x6^^ϖBTOq P.?`% i;nz&c__ri\؅z9yk8v0]iU^gWo/'h&3?Yɱ<pUt*XV%EqI @bZ0nDFvV@?<4kwny_ld͎d3mYyLOŪ2e,u#%F3@~A!nHӍ[wVmI"eÖ_ҋK|IJP] H!^^^>m[&mټ77qg!n7oItx{Ɗp]}g\LlDsǪ ڒ醷7DDZXb7o=<>#1[,L̘ȍO-Í[-áxzzQ\RBDmxxըObs$oJJJrdv!TZ5 FI/ZqΫ_a4to#:a_ͼyfL뿠q-l57)xWhA9p᧖M+@oaЩxPTb"%1:6s7M!8A),1hSMn͹Q;>d_P4GrL~aju(caKߘ,V|1Myۂb#5:33~`HXuSNYYP@^Fp:7J8xyzRX\LLi9xxՠؚi͞.q|ZLf+)?`O=)7ΡWB$kw$Ū/ LhZJJK GJ-*.)Yಠ*E8uǪC7^~B2k9@[qk8'{NiZmb:@qUW%;>W~rC.BQ.1,vOW込|eJL?\֖e돠~e_*#޷ KWÝNqa%o-Bii ͂|~dAjj:1͜s&BmͥZn!t&.*T[:wx}$QTpNkn~wob$: aDw PNo6[Nՠ$gQmoBq$_KܩcRy/ PNHyR1P\Ӆ¢"ڶ8UA)dSoX\ݿ-@V^1eq2#֭n[obta)#喡/fޓ||;Cٳw?,"))-&?`AiHD0mWoǤzSƤ,VF!%jtw=G2 w\iў֔cBQUhPPl 53,_wEE-FS5(!YRjr "yy(eBqtJLךtJLv\]cTo>̩4N7:5*V*֠T띭_QB;v%a4777ܼ<=#E$de琖AqI z/Ob[׳-$H!//ŌNׇ`m߶}fĄxZvbбC;z= ۶b1!v*d:iiX z>ddf)=ZM[墎w6;wEiN kX8~"< ?B@qmq3Yw$a2JKMP!;Z 7uچWt}]砸AqURt*BgۺF)<?*mq=E!**_.!!>MEe:vl_iZhh0Nl޼Y.P5(E"##N6;tp^&y(z\VUಉWMe۷UR80BW*8<#ūN-SpW)v!B!W~ZHb!uF?|(1Yj}/l$>B!((*eî叟i R*R' !B!Daq)~^\uuZdE!B!De6d%B!gU; [ Y7!9"B!8+'ch$+B! ]U3}$wB!   B!BԻAC>@9݊B!BQ[>>(B!Bs(B!B PB!B!B!DX,XzݦNU!BQSF׬$-= EQ sbgBP`(B!BŋgKX07o`W_o8zu)B!AУtSޠd4H(B!BQTRL>]h4s"YYe/guN$@B!BTh4h 6U1 *vBS(A!7Hǎߵע(JgҥKyرc'JfF=͙UyB!B\O$Sj,?>-&.Or5K`RA6ͤp1͍/;d͚磪YB!Bԁd+ z`8p}ZVvGyWS覆&^5fd.\W_e?`w߸FķyzǏ_,!B!ׇ˖Цu7mt:L&yuAtDGG1s F]v0yҤJIfF4B!"#%=չ [XRLN:-Ąs'@qk`EEEeўQB!BFCXh8>=u4/Mk?KbgZ(^>c6nHFF&vt~~7= @-:dGppVNSZZʧ}?@R o>$&vW!B49|-#84k7ӡs{y/9t,pw<@Y{Zu9g;oylᦛn&##izRRIII|W|t%%%nŎ;*MnB~X_{QF,B!eK4|ѭ_ٴvA!A*yӞ$? M, ^gi\.;og9|?$77ѣo###No8z0Goc}mٷWI3wb2رhw<)lX'OjÏT `B!8_\O/vqNvۭn0a= g@=֠zJCp=w׿_?~mHIIm۶dS_K/=z0hG'6؁oٲu+W]u߇Nt'ߟӟw,B!knO>[ntґ|~ؖ1LzAF a[|gwGv`)S\vt)Sʖ]ޠgfjN\'oVZ%gB!8ٷͣ]vtݕ"~'BBx,8zJm\ԩ{o>U[>oϞ zʛm :>?yB!u,9W̦eh^ϋ~]ΣLݽA_w3|nlCl}kc2B!祓i'LB#Bx@,f | #O{_O\rrr&$ul ˋ\{ڀI!BAIi ׭cD6kNT(o_o $7+g>C`@` PX~=Wfȑ.YߣM6 vڱn:V\B!+ol1Ao׎A?É#'c7Z4j]~+_BfӲ eDYPҬ)((Z!B~m~D$tIM6tݕ}3黟XJ˃'*U Pvؽ{7GBVX#سg͚5ooдvhZjERRC/ŋb-[x뭷B!礤}{ۯص#-b[j=ХW, {&!Cm'|M7b\*-̧~oӓ/oERRc%gB!8|4k 228c'[nzvh˦ 9+ԝ˙صkWVoǎ:DEE1t|[ll,'|)?.=MVۧ\sB!ST\āCHKMb*];if?ooo6oL_Rt0}v:>;޶_yw/+gB!8o?m\GN]j2deyIvnYINB!M[Xh/tFC׋cNb(gFB!I$I"+#qJ~n>Qg%]R"B!d2}vo͛(,*ߏ8z=)SPPյ(B!BkHڿ?G7'(49 '+{sͣ:+i&^B!B\ n Z-R#9Y9ݹ-m˯dŗ4J B!qm3 ~']/%%yQͣxItYM(B!B\@cm~h#$(oos"}!BqR ΩtI!B!(B!B!B!Umoo%!B! P a7KB!B :LrH!BhB!!ABqؼ7E+8dIǵѹM39B!BAґ >y+.[Bj(M`,V+G?mb,[Bl!k*FɄUUQUA( EAףh4cZP-V (ՠhQ*wA>>m~J/N~::y2$// k}yv%&2v.Z-Mb F3njƜcMꘞOcZC¥(JIq1ٜL=A~~~#\84xyyA`P07Т*cصs'YY GvlNq!U~J/f~ffds't!(8V.Vtl܀jҹ{CB*ݰi?<EjN4JϘfA|OMꘞOlyZn܀N'00HJBOd"??tHp#V+)'Hڽ __|}1-dD6xz, c?ijNI-f~ٽ^===hxzzPTX<==PPq3h0MrZI >!;ӯ8ȉt؉P[u{chQ4ۻ~#j}6 DlVcMvz֬ZIxhx M煙yxy`Zח‚ b_?HjkǦzLϧsח\YbUU  j17xG8T@NN6-="[ gYfK4I_OՊFi٤6B߿sJǦ|LϧsB(V4ZfQ*݁QUrVڜz,]$~ 7?/BhmUMǦ~L/hR.Nj6JYGX:l+xN^zyt^1B:$?%@i?HV6~J`'gQ!89/ +YѠ( :VchZx{{ˆUPUj^GEGl6|7\>?ï @ IDATMX˯~-֮YGB\ tMr( HKK;䝹sգ9oOOVV&`|m坁o_0Eb7^CSAa3S K(*7sT}gwgy7?HMMˋ=smۧ}gL8wv4w/x_ͣSុj4:AFkc9\n? =Y_{&iG\,eYlؿPtlſ={pwrر}X8W_euѮ]; Cgٸq]vcWS%Vj+LSWQQ a4b1aZU.|^ [yV6o̦oܴN_NpzM:͢M\B9waM%l'0 :$0y½7񁳖ӽ233L9'봍LO}V~~f~. m(j)l=?^2^}ĉ0|޹]ΈW1w[ryVtZ[ e1q7d4ȣL&>.h F>d6Dҹc;}gAqVK3SnqwQXTrb$X{ǟ:M8s᪾qM;5v r!nVyv,YԾބڥ kV˚UrQNL|`wܿq!YPlZKZ).;?Pje? 0||()CZ@Vf]tٓ={ѻwoW>}mMQ11HKOZD$""aW\NTT^6k݆,z=-ZwlMI؍a˞&^JbVYxFul⇿v6z,VcCκz]GUUQRu?N>_+f+i߁~ 䫯AUUb[j\c[!uf_MhI)((Ϗm݆>K\J v%o໅ t`ڴkUGN_ڹk[b(:vG>7Ah@(h `U`V$';v8ʚuXv'=E3`-b%i}~W۷n?Vc^<=tuAqun}oޛϽt.TLyq1`=֧;jr%^}ï͹{݌u3~~z:%&9e<ȸ{79B4ǗĊUUq!??u2p_f֭[ǚukYfkUg슆A.l6NLt,\cmۖ]FlL+ZŴБCdeg܄L.%]hBA!5<# by?}FM0TCb4~ҥkx)6mDqqqyo94̙6oooLyIL`|l޲UUٿ7 {ؿ7ɾˎ;X"֭Y^~ũj*S6mXψW1殻k|Gl޸a.gړO)@/}--FgWZw/ټq='/ߟ{xtZ[^|-] W-EAh4Tzn@i?ao}}'NDӔ_g 44f4_0;/|i}9Ϙ9eGFyyy{0ڭm;0hPy=f(B4\՘$l5'х;iBCCqwwg1.|ZϿ^]}+eL{1`;ͯn[jP/ rM7y&_];wrӍ79Wtc쟣IOONKKeh;w5}jJ }z 48@:ķ%##>(rEQ;f _|;5%?.iS $(('VeRc]&ʤ䴩o_i~vvN<9m*}]ӥ[.\SOL߷g7[ˎm[3 V\̗fI"y;Wps(Wn_ilذ>QP*FAh~e_}JGEojqۧ'Ga}( |e vtZ'SSYFnZ9RF=5~U`t,YH /Zྙ6a4~ũDuY5*5Vh5ud2UY9遉Lz`bYr>&}] <7ޜØ;@a2xWy3w>,,_FfjU9l2~Օ̙;/!iyþ|M4#=0fΥΣ>;i=>>>ti?'O$$$NyqF}18\s-OLܹӦ>ε>|9s梪*OL~BBo͛ĉaTs =8^ETT{W_>p9CRz=2ǧNcN55`EXrǯ>]s3Ixy`׫gO~Y+R6nb0*OQEDT+c,⠒s?P{mj-@=>KߺP _~كr;wo?4?_9?`tz|Ɉlb1c6Kg1sK.E`00zm{*ޚ)O@~~>yyUysj^*c:%&:sw1xn3t:)=θ{EX*>LJCٛxuL,S<{ g˳4@Y/tLHDyD:t_3rjkIuX.Sjo._nu֧}{ؘN8̗f1x` Phbh4:O31͘L #ۃAEs##vצ9Wf ۝Wo ie@yZJ;ѯ_?۳P4h4N͛(Bާ`46XW~oouFjI"7'99B>BQthߙe~m۶:t/ |d$]Q Z- ;1΃?upU;ңcS% /w=[Tw|4ƒ}8?wf,d"[FRl!=Fr SZRLFZ_ϸ3ת {7_~5=ӧwof2iFC˖-#8&=0Dl̙/qmp(ؾu3cwCZz:{] ^W_1axpuF ںm'ϫ˾M<>ˋ[oUkS>K9=/绻{0w<{ JEnnλλi<0>1:cƌu]|kX]I6vy4rߕ._}5 Pt p;nETϟϜx7())m6y^9g:ub.ǧrA|8A!bRepw=]U0h6[ XU=yD׻wo4,xGLnzV7aa*qm((,?G`b 5E~Ue]N;.EWiXXXc+c'WW4MS_pC&iZ :N}>X*;NF9S'5hQlve4>{ZZ6&&^[j{11Ѽ*ig6yuMZ ?ܘMf3Ť;-W\\씖QKz_Y0c}IOOGd_SZNgvzΝנ85-lA|F?QQj&#yi4a0=lZ( ĞF|nm$ߔABz PNw9p89}]kONm?|~1x̴_>~{[ j{'5Z1*J=9֨cj;\u\b8 >62|wTUDAf:SŝCzs!N{a(BqZbXPU[V REIub+u)~-n)]),, %6sII F*--EUUQfzΝGȱX,.d,eANX:kJHՍٟHi~6wHp ikzsaמ(BqJEVkf U:tv_4p UV@b,O|&3()-!77i Gxzzhnn}i}}7hΛsjok_^oSx5Oy>wyRj25UɄB[ZRboNtV+:AS6Q[OI҆"().Fբ+ J)HaOBj8gt:] zq>%AA\wH/]Ʋ_$,,m˳5hڥInddesdNrkՊݺЬY5>!>6<$*M__OiGT)_O=/_O.jl6sEHBFM\~^n79֍!d*kVC.] e" bb6lm:j#t(VeZj):1!ĄZ0@qsV'??_ùhcVE=,Mٟ7`9)]=;W~EQz{McMC W͹| !繮=zwnz[UEQteϸVy~Ǽk4 }8F9Pﭖ6'ZzN㪑ȕ]!8O-]=>>dW;]!DӠOWVbi`Zp& IDAT@ZޙLƕo%?%?Bq~jG)(@( ޤ٨-*,l ؑ6jz23 <^/))Baz=ͣ8p`/V 9p`/))-=Uj؁uV{RSSYv J_B!DTe ^ߟ6mq \VkM|B),ȷUh4D7ǘ`d髧jCaps;}_%?%?Bq(坶}|jr<jht Nc^OLl,͛7"ԐG$t{s_$~OO!B\`JyҒFOŒNed|r]B osDOqz!-mw!,%@jh>NR!b6|v$+;K2E!Yjm|;ZFW|3P%wulܴj.hZڥ+-%#kj-dD!B!ęX,8V%*e2@0K%gD ֬YŠӢeKZ-jSUT&sY?+CzJn"EH֐j}6 DlV!B!VK6kY:(+U /[F^}EQ,f3fɄh"())&,,/[&Wvy1b//#[ '7\6eqꜷޱ7 D~VXP`?w#ĪV+ֲZ)--=W_}=s.ɇ j5ေoBUUFŋ%cBȚUЫOz`7_gȑt\6d(+aWX0&^#ѫOJPhZ! NB-o7u0) !?vɌFqB!K}]ػ"99y^ޕ !Np}Et 1ҩ\qB!jn$6kOkRXXZkU'۶n&;+eYL?UU1bkƌ\s5DZʛP6kŊDGGۿsWK/y$/y5HU}U?Pi8|wQk~w7ɦ@!AĀ BI):ޥ Q(Ջ DZ@iҋB*)$mYC>> ŋ[4p•ʭ0~?{ڽhҬ9)sr#($?&<< +ĉj.?˗)&%I:u,r4RIOKsgQ* 1)ST/2}kywh.{.\A )Q3G8^kzI$Zꅍj79ן?w޸`iiI-عsAnbbbp׏x#yz-Ϻuǽ)舫+*Tsss^rr2777f͚Uhmbbz֭[Fz.\k׮+WrѵkWΟ?'L/ˏo_bM4 ''' ӻ,&rppp0ϟ?ON .jժѢE #lӠA 5RJNNN,c~'-+Wz!IS݃i_zZiӧS7. ~}Dp•uz#}BRDUZZXp|V?1!Ąg'uIz*۷]v\t$VXmی~?FFҥK(J۷(ݻwcWy|j?~LJJ r]:vg}f Ғ[nqEn޼Iddd]Nj5/^f͚hJBxswߦcǎFF1J[䛿}ѭ[b>38wbݺu&/ _Ѱxb>#\RabbRuqӻwo+Y{IS֯_ϤI8tǏСCL4竟{aJ~7piDE(I5{6θhرę ,^ww9c{O@PFxƋ 3GG?z]8;gϞsq>LRR=zɓ'LPPPKnc(Y`͛77O?n駟JWbcc)_߬YtNڵkܻw t%QF\t9Ç[nz776la(SbŊĈT x EF5jDTT݂:ɞzBrs m|}Yhu\\<?wwwtL#?كhܤiɰ@E.'0 lܸ+ B.7ٹk{vsYϛG=9sFvΝA>o\? P_ݻw72R y/Kĉi׮] eѢEڵ 2zwo<=?:!!WW<\]]IHH(^I 'qFa:O;;;s*W ۷qrr*4L~2WW;p O8iZ (,\0復߯__.\Νt"7| yJ^Je,'jj5l߶uܿ[^mmmyͶ,_(u~}0k,6n- :9V60Ӎ_WEDpU>](.YBpH0^^^0lP/d֬Y˨#ٿ.Fbbb.^n nޠRJP=߰$%&`kV3%%, & 9Z߮cN|||]9^Qׅ֭[Y);/@) xR޽[7¦LaLBKl >aa^={2u4'lJQ:k ^t)ׯ'11 JũS8pS󡡡$%%2jԨbߺu;w"2r}q=222ػw/ ,`„n=zĊTZ7qYn=)))~zÙ0aBJUΝص#wϸqcwL0 ׯ?f&&&f͚̀<<uW$<-Z4/2_<7ҩS'Q 'KKT2h w3Hę3tރAT*y+7cXnnnβeKq7_cٲF֓ar_.™ӧ]l7iڌ&MI I&bW 6j(e8*{Wк%6@rg9%H>}5ٳ Qcҳgg*ߟC⊭]׬Y3|+{gi&||| M7w<5j_~!2/}||ؽ[G5^{oJ*%+ǯʍ7 ~&LZZ+իO  >x-[мys7okƠAJM4Ja$%K2rdH(ׯ_ĉtED 'Kfx̜9N:ۆN:1sLm[K@#>!)1!v"@ kWhZkR%Bÿ_GR34zO Z^/wQ믿,C|oW?kuV۷me?Kqik1`4iBhh( 9rsx5Oƍ5*˗m$c֭|~~o]9|uv:rm>xkP@&g_lݺE?5-]-97ne'vD*àe˖x{{e˖R E ^Iزe@P @ʕ]l, @$xq Kwټy(@ R6oFP@PeӦMI /@ylk@ "3` 6m C %kFgc OmoC 'p%vL&Cg~qW kG)>ŧ⳨jk,xZ- Ltm[~ ӐSfEUiа..@@Iٳz6vx+>E$^:ujA._X  APP^mNZB!N@ xt:= >u bjjT%## [6m6RRSp) 2t{B_~ p666|帻y淳gIMMAӉ GPPήk3l(Μb(-xyOZwjM ~(͕xGkϜO[߶W'dRt:aa@ ^t$011AinԳ^yf,^^K.>pڍjLiu-6@A݉c4A_^ 3RLL111!2 3P~厝kwoSd2 gVZbko=֬GEڼ㄄9>RG @ J)hZƶ-;_[n_m0NW,OۮOrp} ~={6s̡cǎ @ ^5e뎭s*1}_qu,,xg;y<}wa;v VkƊ+prr2>9*Rߓq hK.$ D /\5j֠ffx/waǎ.Tn0P.%ߣ; mZ3r'#& A< q&>腻!3//@ͻK.] ?bkkԩS;w.y3g>4 /fƌZD_@,u:>M7ī7 B@ ^8:7urOO/O&8ˎ;5Bk<{yI}ZrpAZ 5t 32nT*.@H@HoŅd-[ؼy3نɓi߾=7C -,,4i͚5O@ G4;ǛSٻ(@ 4 UUĄ_ +3P 2RJbh|{-qpAj6Ƀ?Ɖqqq888ccc=N:ܹspE B$%'UI@ TIJ#4Z-O+`V\Yl 9UOVΆ{dg`dOZJquBb\"[nEPPa-l\ܼy3[6\gʗ/_#F`ڴimөQEO$ ^Ӻ@T;r.v[OX)ӧO/qPJU"Q*zvo^wC~]hвLVoc9*U{##9>Unff&.\`ڴilٲqd bܾ}V˗/0.J9Jw2~x#yZOL8lmm~7@ Ok)%2N5i*CEBl/%9]bbj"%)5L&aCxB ԫWPJ%AAA4k֌>}PJԩSq.Y3fC޽iڴ|}&.djKʂC'ri$FP_ݱr9+N:1`>C:upA#oȑ9RcH{Qi]llCH+tWoʗ'D 3zI%Ik1?=zģBE|VcK=?^zRiӦر dW\9cLFڵ-Zj9Z!Q*XYYQ\9(_<ӧVVV8;;3cƌB͝'7NiР/H %4(vޟxUI&nTSQ D")>0k,bcia7;wXYZc5p 6TӸvm۶}\zTVZ֭[$qUJ%ÇҒ}޽bԯ_Aϲeppp˗J#R:t(vvv1l0X&pB\]]?$++X7x#w]IIID@PfQT[ҤI4iYnQ=Z ʕ*b <ĈGPb l64lАg0?#>f %ϏxN1ڵ޼y󉍍<+g HLL i#G><:|5O?D߾}K&^z/CHLLgϞ%ĉqvv&$$? .=sΌ;d;v,ESEAٲe ˗/WWWٲeNŅ˗yb;v숵aڵkqx&MgL:1cFcj(4@OTg!^UJ%C % 0aÇT*8;;swprr2\ܹkĄ uRRR72|"20zIKy]7۲cǎ|e9@D$.![lH$L \/IxTL4>_ÇXf R.сm۶ĝwM682n޺eqf-u6...ŖK2_!CZ 'p$Óۆ3gD 6ddf+ާLܼy H ʑ2Q$:9,Hȵ*2 S',=&R7o>ooQ#G2jdѝ)S_aa ճ'SNcŊHDؔ0uj&"b509lJz'Sٵjժ\i^0zJ9={ҒϳdRlٜ+TDc0v(l˖ѨQc?~LϞ=:uJr  @J(ڵVZ\te˖2c8Xa"Cǡթ1 Hs` &nkKsKF<+HQ#XaAysssVGbu ׫W?0~AR./ի<=~^hCGj{o7Ha料zjV^]`ܡ ͛V@ 5%nV =z( wў^z$ \JBfl*p7{{{fϞʂ! /7'R  94Ez=_~7nܠW7d=8h Zj ʌ"IML<ܹs(J& Ν=ݻwRSSy0XYYa4EB_O@ xUr [[;<==/d7l=XrVǕER033eƍܺy \F: sssLML|Ԯ]???z2dDDDp $ Jx+Ұ%55в+LR] ʲ")3V[l'g'$I<JL)D&CVsiN:E>151dطoffJdz- y<<<˼ >#Fpu,Xy15k$000)9ܸq)Sp)6mʜ9sR!'ɝ+Ws_޽{ Ņ/.QQQ_r^'FP@PbjשGZ骥NCPLF'iQk4dddFJ$,-:o߾>|m۶aooOtt4uE7ffJԙ mό3ذau5=zi_P\ڷoODD}$Ӯ];vmO>~\Zɓ'Yj' F rvܽ{7@@҉=r6P2u:4ܓ\tZZ2 WWWT*Js%NNNbanA*;zTߟ5k1NK|̙3֭K,e>-gNʕ+L>fΜ 3gZ*vvv uc4oWgit=|RaCL͞nC2cHz2)M!IViذ!UTa퍛ԼN/֬] r,\q@-d$&&PzͰaÀ5(Fb֭y^6jժEDD%**h@  ʻS^F!5%X"B]9jש#"Sk@˦xry_xиqc~9v^][7P՘.e蘕ޗ뇽=~!˖-cǎ믿ξ}2dH K5(5k,C.G%#**S'_ Ԕʕqw@!I@A.cbjSQvxutY y06[!뜓% խKVV|-^^^l#IIxzV!*z(%VӜ%_ } 8*ha@ (Kz tA9~,.b6n?UxY@ ?a@  ej͛jDZ9r]&jV'G" VZ]rdd"]DG@ tܾ}r6:IACѢiAAFFAѠVe`fnӡsS J3 ,H$֠41AՊ<%7.V$&о;=E'I2\&C"Kz$]vzk% %5 6bO@ @P'<„b׵ mZ4j܈Z5kRNN8bem Wakk ;66 hxWG'g^kz IhZ+{m=*S ʃJ=?޽{₥%͛7gΝ9::ү_?˷<֭I}]XZZbkk#TPOOO z[[[ܘ5kVӹsg$222NBB+W.2ʕ+GtRŋT*YxqqֳZE&)L+H2y>ܼu$ҹ}+գس%׫D^L4 fJS$ :‚owﰲ1""ÇsEΞVZ|wL]Fi׮.]"))pmf4-LѠhtJ#3{XUj5?&%%bcc{.:t>3biiɭ[x"7o/(0ޫWҽ{wJLL Gѣyf̘䳨|?SFoחAt:֬YÒ%KXvm4'xrN8{6$22I&q!~W:ĤI,vPk%$q=wBR81(A&׎k} o6JFV:J3'/<|%!!F~*QTMބJ2ȳ 5kfUF)ͷ~C.]?*Yf1n8#Jf͚m۶|]\\Xt)?رcYhߢE7nSkȑԯ_β:p/,YRhOݬY:u*=zOOO>s#?#Gh*Uʕ+̻cƌF'00GGG<'li@ :y'~޽̟ ? D9C?sǏOy֥?z]0ճgO8~8&11=z8O'Oٙ #z.^X`|[[< fr9Q+ B.7v9sqvvŅs.|Ν̝3 7wnOJYsɞuD? رci׮]3f…;6Oyܹsdԩyd:ub$''IOO/0n޼ɹsuFFϏ?HBB+0O>o]hMMM155ɉkײe֭[>}}ЧON>۷K9 LYӃV%55 VfT k`\q[+Bxrc~[Rf4:HOK+4ͨ(BBBXr%oɒ%2x`_F ݻR @HHk׮-QDEEѿʊSRV-D ׯ/ .d]\xR%/uJ^F 26 񤥥vɾ{KVAwpp =܊|ݛob2Y߫Tӛ3gq~wnl{wu쪈^ʧkŝòK   c̙= kΡFcDz|24,0JsR}?)0#In&?S'OR^O▣@ hIOY$Skd=NCѱxiW>ҔLrrdH4\rk3b舤!%$cF*<#y!!{Nؔ)0z{=@=:u 6%(|ڵXMFF<`/vիhZ>|ȼiڤNqKR;L4K~}$IIIT*N>Unyhh(II5mΝ;\B(P/00{޽{7o>&L(PLf6q$:ud9|w˯XxI@$iٲ۶mgǎ4i҄+xzzҰaCvY*(p "wR* wNtt4$MyA(綋W%u%-Y*5cBZѬ;* H`kdQl6{U9  -}_8H쾰Yp!ƍ-ZILLյ w 6 k2j(njP(U2sLɓ#9 FbڵTRE %$ld&LHm&OdO4cҠa# ~4ȗ-[Q#Yd ˗'$$={+;a\r{{{ڵkd 7{fL6LԩèQ#4L@O/1VKufJ#5kƛoѣZh-)0r4l؈ :t@xB$nnn߿?j5?Xǎ3儅M7!CpBg-g@ xn?ٝYбc'j֬˗YxyQf ZZ+zΜKy3K?HDAyΜEˉS,eVf$g$ӶR5diPH{{{>C-[Fǎ _}1dH+8q_~5k/먨iD&MX0O3 'NZ`m۶m۶t;uHN$Q ^S7ĨQ,_<,iUtVT lp+ۄ$I(LOѣG7+? px(l@ǎdȐ!~3OQY\Xq{tSA3gAdd n'R1.Eq]^Z$@B!ʕf tmvzptddRX*ʑ@36NbP+Y9r 7n(!/,yB!ą]Gk"U܃>=`PTogVdMEdxr8}Yx;y,8L’+BQY, Ӑ;(B!.ͷ4Tveݦnz}(rkTS-[A~Ot8QP8znNƉ]s 9ycF~A93 !DE( ?vjR!B!t Rfk*@x鵗,<ѳ `b%1ͣĥAsy}ҤIBThӤ ;lIՈjX,TB+0L23q&no }~ ``"ΛKZZ:i%hpzxӄ&11\.}9um4BTlUFHbbbر}yyE!ğ@UUBCBnܘ\}ޫwoz}R/lԯ_Zji:)B?E`YmXS66!?ȑ*B!B\-*CQz&ŚhāEsG/ƢCWc`5]:J>e !B!9rRPX똺h&͍nx<A3@x4ǃY-zw!<<\!B!$@0ժFFz (`Q<ѹ L,if<3IB* &dB!\,Ň&@QU+'O ##~NaanMAAE8ӠEÉ4m`]v̀xer$ !*4C꯿wnN園 BX,Tֆ n]yPDQXTSCc&ii%Evsx:kf fcl00Gw,0]vˑ$ ]'33m۶7ބR1B!8]9 ֭CԩSE\*Lܚdgm`‚ Wtn~&#|y?l=ihHBT;ƛBBiTU%[Q66_Oj  Ta5F7L4*X P\Q4 <4 4 Y5zI@cyP-OXV-iӦ̛7ϻ 8hիGYreOIIGDEEE=HIIyϳgۿ?Zok׮xDGGɓ'!u4MrrNQN= !W7!7/]Ŏb Ѱ( R!`ЋX|йN8~Aʕp84܆Ήi[laL0.]p!uFRRSL!((={0w\:tPvh׮7ș?>|<-Krr2m۶`޼y 4 UUywxYb|+A^!۸!w݃(mV[k;@qh Oq@.v+`hEnHj4&HPTԓ1N~Fz]‚ 9s&mڴ.:u*C o߾e͚5㭷*s[/n/ѣ|OSO=[&B!* KhEQ((*yp9y,Պ. ZAU\-J~阆UV1b.\_~0{lc>y[.s3gDuof}lwy֭[-B!*sE<e˖Q-,jY=%#MXVxU_.s]u 幎"e8Mܚ lrrٵ{wstmď XGCUFX 0 q+e޽;:кuUM6HHH!!!$&&iӦw 88cv ! @!ĵi4nܘ Hr&kNV'Ǐt!4W? ~ܢdl9#+wߝ0~ML ]v,X#F{1Yfh"rrrp\l߾AoYfG^^3g[n?iG!));"Xnn.)))z'&&/iL2']Yx9 2MVwMxՈ4\R:XV4iRG!$!!n+Tau@a[ &8TGjC4ܺݭS92?g%`hFCy,Y޽{M||yZW_vVYCP`UWW^B~O⋓.i;m║G}֭[/j[@@+W}.\鼱ۗݻSZ5R !i'1j(֮]Kll,[n|?wE4M_cb0br.݁[a8]N2)*(``BJIHh(LX#iԨ۶m @4h;þ}8rW.s?RRRHIIaɒ%>:v_ͱcغu+&L $*yיwoAժU%o2cLe3f$11gdXRnO4|8Nӛr uҰQ43P] r \j庫rܹ3رW_}۶m^z̜YR3f"##\2zf7$**@7oΝ;[g}꫌9ONxx8>g 0j׮ro߾};5K.,]-_.!utzjo+XV^ͻs*#Ǐ̛gfZ1 nCQf:u8NLbLj̀"ر#^z͛7ӢE o@NΩsK/Ə7a&C&˓8q/<,m݂i MH7~}C bsҥX;/t(~+Mi$RƵkג}Gv-3ϥvwSN-[FV~7ܹs_'xyx&ssf=9蛱٩Y;vY6\<dl߆Ŧbu/Nam'Ӥ սL2>[={XsdffR^]z꒙ ##u}/WP咷yy|^)(ڪZJnv9yG8q"-d׮],C:S+uȚ{_YOe+K/,*b石ٽ{7tJ^yi*@QU[l {ÉÇp{t2N"4(GP0ˠ0 6k7}LBkngS2ѣGaѣG_>GUZ5GDVO:Uݻ:tYv󦘘tpl~Gsќɓ'zj>Czу{'5k"44gyƻF|DFF?=z~eg̠AO1nXl~~uNVCM^O#G|ַZ೿J+ڵk裏Xrwu }0M !gӜN':t^o.߱c'>,+W~5Opc7Km]W01JVLݍpkaݠMy<>@uiҤ IIIr4 q3 ;ٺt̘^`3]ᑮ];vӧiya={Cē1/lg"' XL#Uѹsg:wLFFK,aԨQ|>"##Yf5:t1b8'!!W_ 7y|Oйsg.M}vv}s"v;Vec,-b[Qѿ0Mhb{kEF1fh{yQS=j7}Ԩ>YnoڌJ*1dHEDD0d R#5j`ժt0IIx7С#iii4hȑ# J.6@c2rv^3aÆMJ$$$W_ygΜ!C2e 5k$)iԲ_^!uӄvFÆ ٷoo?؜1{..C !.@Ҍڱt08aJ~i5+WЫo-:t"].|Ad\!l ̳h" K7ѻwrmwߡVj˸vkw(12Bq &^B!#e_CzEV_H"ƥE!Hp7^L PGak,n&͉]BtqH*= #Qq ]XB?.@*LG@^~!躎{pf覎ǣa44Gy<Ѣy}B\  PBHr%UDvvi覎b*EQ407 Ģ*`=n6m3$rBkb!!"#W5(jddѯ__3),,qv)((Áb(t8&U bk.0pキPH!DABqn(nz(bV,C1M4EAnOg͌l{ ?FUf=EV~vbkn9*(rQ""I!ӝ", rm(nMNFz8\`B/ƽD3߃ Hy/l7[`:v?9~eiI*YW IDATJL&l{%U#a(R1B!80͛Y3l~[(ǁEw&GCQ,QEQ01t ~6tD7f,n% A-"^V-RSSGϞ=yL(Æ cb&/ҨQ#fϞM۶mJrrO3'/(2Z8B!Eq{pk&`u1jz2Uf`tmhR+M'~WR^h֛a5(ra.$X)C L6vyZnʕ+0`@˿i&{=>( 6,3biرcgo}L4ca蘺!5 !3+ j^|Qqx:jUܩ1$}14V23eD_(nju3J.xk׎ 0`rssy1b<vz@˜9s(73k,o-M'11(~WƎ,77bccD$8 NtMٻgrNI!SX,B*pkÆP.~<(݅147~wa Ħ4 FwT?xɬ%1qNy,Y޽{M||?L|hs%-- g4>=SiB\.>u\k qxW ;+i^9jiڵwuցB:r>$**JzWHqyIk7BQ,X8ΝK~H !FEަ]g>/uwsd&Wg qΣjҤIRWLL VUB'' vm$$$`?=/*]j+֮w5k >ju!M222裏Xp![l9g;V\I˗/'u庐Om޼9}{TVMBkZi_5k֭['|+Kr>EipAde!-Gp~;ٷg#wmdZ_~H^Ç-GWKm═03f,1c& >˜N'Òwc}Xq:tЄDnS9kwB.׶\.};w&::;v0eʔ2oݺz1sfIΘ1crՋo~7$**@vq=쳼>^}UFyx饗IKK͛ؼ~5_Mdggm֭[Y?gTQ3;lɴ7@˺͛73tP֭ڵ+fw}j*:vȌ3HH( &O̶mؼy30jԨ2wݺu[L:uD\\yٵkW233Ӯ[SNѥK|ƍĉ۷{r1ƏM?~Jy隆~~H.iӄ={ЩS'JδiٳMbv}jj*7ɫ(O3W 4MI?Ek.wө]+vHӽҨY'첕V|r>CvM׮]ճy?BT4W9(bV,C1M4EAnOg͌l{ ?FUf=EV~vbkn9J]v;D!= ~N=J8r(UVWV'c'QbogSN]gX,qQ뚘tpl~4&OիӣG^k֬桇"$$aÞ.Q|5>|ϲoٙi6??3hS7wUơÇ馛H9toz}>⳾jȻOYkGjj }ȐאiN:kqyرg}+ÚyU>(nMNFz;~ ˅館 Wج*=Ȩ>`Ϻ=?߲Ғ8u*aÆ޵kW{y222#O`˵k:@<,0<`Q,`BsEQt ~6tD7f,n%fyP-OXV-iӦ̛7ϻ 8hիGYreOIIGDEEE=HIIyϳgۿ yy Q]njMDDhA;ZPFuF{Ԩ ͸M[nM5MCsOrwqԪ}DTTL|qwPL}1`Ȑ!lذ@FZŋ+8 U}VvxvisOe_;Zo$o_u1ҩS':utI/9mTVM~^E!))sܜK9swaۙ;ws%&&xӛ4aݺu]!ez oLw^y(MA7Jf+ϧIP|vEQ04"Z$5bi(JzI?'?#C3/+ HLLd̙iƻ|ԩ 2}z5k֌zmiׯgܸqTxٳg3p@LMaa!u#>>UUpl޼gHRMK(B!obיsE<(O=Peذa,^'4jԈٳgӶm[o QI H/!\Qۃ[3[Q/ԓyX*5 m@Z1l:#o|? JzDA4py%W2tޝ0ϴih׮7u֬\6mҰa2=Brr2cǎ-w~!*:iu)!{!kNV'>YΝSOH?K0Mj%3?\A~X7d'h&kЮ];,X`Ĉ<#vz!ٻw/s)7̬Y8p o&r7=>>D_;vwD\RRR-W~!ī|EAU-.wPB\oiȩ˺M0._tfXwax 4M@Fua@5~64Mí:*s>^2k|fb~wdzMvv6ԯ_%K0yd&MQFǗYf1zh)266֧{:t( "";z'۰a-Zf+iU cT^M*D!ğTvaaUJ,M_#/A@.aa85'9yXU ca䧢:]#$4LʬiԨ۶mY֠AyrA|'ewؑ;VZZ M*Mٴ{hђU#PUTB+0L23q&no ߵ9~`ޜ=4axpLEG,8].04Ӂ{pDFvb*9DrrwZ MbYnvnN~~K!TU%4$ƍ@Y])u6\E8.,Vr( P(i⌨夠AD<)dhFVA>{B|7/;ī|EjqcԪU ]ea!bjx۰Vsf=9蛱٩Y;vY6\<dl߆Ŧbu/Nam'Ӥ $M.0HڰZmRB!* ʭQMYl=DAC=:'NRv@#(CW\ePP.zH/!B ^nD.躂Qҗİbn4[ EnҿwjԮK&MHJJ#@4B!$@>?L|hs%-- g4>=SiB\.>u\h q&^B!(}ޫwoz}RE!RīL0tL!((EVJ!Hx?85_g=9%"O*pK[[V PW%iU>ah{}Ի>J!t]'%'CpC] 7*Tr>jWX`uM80hNXtp z CGRgEB\ŤWO;vq_M7I!Ө7ߊMqzjTqm(G r E3Ւْu7.]Mۃk[ǭy4 Wq|lߙp9 Ir(@nnuՓBqU]st֯0J*Ag3(n${,c w.3fT6K^юT#H4*gb躎22B qC2-eZuK&@QU+G!<ZLPPU#b&Ӎb`Un7[lfk*.+WgG14TKjժEjj}ٳ'O?4L<7RTTDÆ 2d:C*%%^x;_|~uVZSR%/G.]M«Fy^ 4/jEӴkXuցB:r>$**ꊔRQ*b@aZODa~FػƑDuV+~~~,Zoͧo߾Ջ3gv08q2ww˖-tޝqyCѭ[7;ϤIX|yۉylݺ[ҴiS驩>ӻwow%00 B\,X@ƍY`_n{o]mۖ\nun &&5j: φm˯xhug+^u%MRORzu CINN&113gҦMS2d]֬Y3zF_|vDϟ_j^ͻ˲e![+jr 3`iuwk8pEjݻ0l޼`FE^=+VFssW&MطoB?18IHHo'!!~Ai۶-k׮jժ]Ǚe'F75Ũnf*. 0xiݺ5m6bbbnu]Q=()1N$N$3b(ɌFE9LZ-4kBmh 5֕ː}q:u*GiooOzzztkFLL 111ߟ'?P~}|}}/CP_/^{&--Ǐpa233J8?8qǏD>dQ' HOO#:OzpFءC߄:u=>b7o|z<~8ǏӓիWD\\tڵ4wwބ,X@tt4Ǐ'11KKKO^y8HMMO>Djj*G1Ƞo߾&fϞ?牉ի̙3(3g\t(Weuڕ dժUԭ[`}%O+juR8B54`>3Ώ?h"ر#XE9v&L[[[&LcJ[r%ƍ A~xrƍgEY<ƛغm>|2>[m3ʷlʼ?6ϛ1==x3OaiiŔz wLػw/۷o租~bСؔ?<ƆaÆ/e"##С C_urHҥ=MA^.qn-p8)yso|$:$ n%47 GDDD0W7xɓ'ӯ_?T* VVVİjժ2'7hЀ+V0rH֬YCÆ MXZZҦMqg `ѢElݺsX7%⤦R^=ORS)))xzVVVC>yUKӡiKW[} hoO>X[>dnҥ@6ASx>11&MxS|xTt&|G[-gΜa4'''fJ'ؔV|^`ͳQF8`aL@j,p8%P;>,7of3vXټy3 ,`޼yg6nVX3XjP4o]cC TJŨG1v8f̘nW''' >>GGGDp!To̝Q ɪtRz[iC6mX`{aL/ܓw^ylm8]c+ nnn&񋟳Š3f4Fٳ0377ٙ+qq5._(wqq1_7IT*3WzzFe߿?6l`=oߎFҳgO}dI@8q3MVӻwo/^L͍Nbԩm#q\_Y@SΎ~DS"!TEöd2$諝A!3RYXPM_Ϗh0___ ח8 Uc2w˔> trf̜IPНy5k6˗/C$f~0$}V\Ÿqcb*\79sh\>5ݻĩBbnnN`` yfO6ƞ={ի7:ɓ'0|p'h"֭Å OM| 2W~(Rf~AAAZޛF~3} V\$I{&6mL͛7yekƌ@'' ]@ T]WWWvdƍ,\I HvmyWqqqeĈիT+ى[мy \]]F̙3߿ m۶cǎ&/eH<<н{{Se?twƎpE*6Ziʛ|Tfr^h.AנD^BÇ!7?q$ 8S E(@ xXʿgz&HE[IJJ&99v)!iS پcqMј a4@ 呠2T:!z@8Z( 5#Q!O.2 Bޠ=(@ 4 66 (*wE dZU]B@HO޾0Pշ=<| z5KKK@( ;mi \(F @ZZ*8N-033ʃbSqV9}_ \;&N>&]T$?7(@ a .$dfV}oE#f6ff[S_NCS B.?bfiǟ}̘c0iѢ1,66#GOzٳ'e 8|||8p /_69[Æ o߾}x{{IKK+qR4tҥ'I;w$oŋM <___|}}cj||ᇬXB櫯3sq˚5kt0?W}C@ Mz=q/qJuz"BT- 9} 3+3r(+0 aM@hqHA2H +k+jĠ5`omO`27f> @ff&*ܹsӧK,]ڵK@xx8k׮pgϞeΜ9|wUoi{ݖѣYjX1cƔa֯_3f̠[nFeΝl۶ͨ9s?߿߸oiiyg*u}&ɩD'''222tAE'Oѵ[7 P(iҌ#삥0P*€~8v97sptuĦ 2%35/+W$QW@zJ:ziafV-bԩԪUmۚIOOťe ^L87_>?`ĉ^s^ARK,aǎ?qܹI:HIIx\N'N`޼y={"˟$I$$$0ydΞ=kޞ=VԪUJ) I̠nzB@ x,SYhu:,Z(?N-Z,T%djqe"F`nnN~^>moklecLDxvC`ooYt)=z0:vHdd$#Fpُ;_m2q%\yU(ϝ;w2w\"""h֬#Jň#0aZ®]ڵk&ѣG3{lyjԨAnn.5*кWaaat :u;vI۷ӱc*]@P  BLA9r mw2P{([[ UJ_Ɠh4 'W#JI%6&^_Ryr95,+=z ""ɓ'i&cɓYb֭#33BN<ɨQ̫AX, +F_Ғ6mڔGށիW3o<6mX'?~l޼ j*ټy3}4lؐ3gҧO2YbGe˖lْ'NV+~Y|G$&&ҥKu>L FMUCy3<믿N7n/Q>m4iӦ ]te˖(w: ,Y‡~Zܽ4hqΎ6m-ZEٳ7װ9@ D5a.MԤTr9 Pqejשiش!-IMZ5 nagkWy&GttI/_}U_n;v+{NŽWr\Npp0Ƶ$,,766/A0|Js&sad2)@ j@v^'=7Wd QYj^'3-$~Z1eΜ9h;wn D *N>$I=ET鞾@ *ҎGll,>>>JYOSnXXd2%r"w&׭_scB#81N:tԉ:P IDATfMN*"ٳkך<{d-eÖŧQס.C˅'޽{8t0&_$N?cG~=O>Y`ӈJy7mL\|?~ի "..vZjݻwӫW/BCC,X@tt4Ǐ'11 O^y8HMM%00ѣG[Π RRR8r1}zz:}57{lnܸ牉ڵk̙s{Μ9q%طo_u׵kW"""o߾Zuli‚ҢC-ZpA,,,ڹR&d|P@#7va[-˗2~nƮ;qr*d|eزu+v0ϛdz@j0Xb~M zСuekY`vuك-n>Z*m¨U&Mb޼yɓ'xbmƢE2eJڴiqղexYp!7n4/]??ҡ CeС:t!C矣jM "g7Xh[n#9֕bR^=ORS)))xz4;wLJ T9VNWyo $ AoO@Ktg@6ASx>112$N}k+R!GәFS_cܹ[-gΜa4'''VxVdqRRn]Mwr'cn=gϞ_P *zIqz0P>\#jH T =*Qobq̘1JU" x{yϊO(wvv6'$\5}*'sgddTCpV C)[iM6Y`{3e4^yeH.]Lݻ_~;;;}]c+ nn Š3f4Fٳ0377ٙxc}\(wqq1ǛW*ceeiR_}lذݴoߞQFҳgO}dxDap3MVӫWo>S7of ?u4SL!26̫ IA_(-T MlG&.I7xw„R}2HMM%553gtgC f͚MZZ`I&\|nܸ)[oҊg}TyE'ՁTfnnN`` ?iҤ ӧO7޽{o%F +Wj={z$mi兕& !##'* bڴHII!%%Sѯ_?tRSSIIIaڴL7i҄˗Obb+\3f̠iӦ<͛ӧYlb؞N;bR:tDGG#I2tT*U}0#PoY.;ThE =̜1'''ZymՅ&O>vv4oђNuC&.]ʞ{Oϗ_S:⍑ƍå ƍYp-a"ڵW޸2bz {g͚͚5YԮ|`Ϝ9;;[i۶;v4IJdd$bw{2~!ƎxV I<_ƥjljyҨ@-lD@PwC"w  F UCѣtBRAÆ/էP8),d󦍌=FA9{mw"778֭c-[+kbkg_kpy5:mH3PRikX _'»7)7Rd4nޘssi%eCjEt(׭o<Ɇ sCB?̑ӌaWS2lkItj\j)27v$|ϥ2bHV|8(@>n[exn6n W2:sNT+G.c ^AiаћBo0P(tWiqReliАCQzb]ÚSGNѨY#J_!;/&eꭉ-`OIL/0ԮAJ-e kp11D?/eнem{S%?_OS\M6hЋ(@ x( loG,,-zPrX9y}Q.ɰƊ:^bnQsBvy~_gLMO[26* 3&?-K\ gl_/wkƭQ4)qLΩJf`gOvHDU{^tcff7tz$I(@ x4erfJ,,GiQ-8]IO.dKlL,M|KLֲ&/\$I2/;\H{O\gBhuN]ɠPkъnkRK,&!ʍzJRNy,݆w??Q>.7my+4Wlg\89y_NޠBiL(B OĜJOG4RR4 hBElejשiش!-IMZ5j9;`mmEZj1SYUMkI|R˞Y@Y=\yr]{ů,M{/}_C}-ˤ.u6@ aTݛ`a}˨LCz=9ye2BT*xLxoٓ@:?$C 2PɻVV8:Ǟn\:K@wGG23 1Ã#|{J(APm1ubF@ "v5,%'7 z=^F$: zIVàׁ^:NNE’ 뾤{Ͼ888@ T G'RxAT*tO_CWzZu iG#66aǹ5Yt{?)I%=2I2dh:r9"%  # -Z跰YC܍@/@ x`̘1G(Q(ܸ))I?HNI&77V&GKNr,Ԛd@e@2Hl ϒP3Xը#o]'xuzϟ+L;8:8wiaqR,}[[[lmm¥KU^uVԩS,^ԫW"zfΜ5kdРA㛙Yhݺ5O.|SL)Qŋ3u;G.Q_#F,Ybx9 }'OG߾}ٶmFA@VvZCVnڵkM@i 5ZH:98ȶ!+PȈCQ46u9 oZB^4%66#GOzٳ'eƿ|2˗M,yѸqc?XpM OzMZZqԡÇ0B0'$%%q1;|OFtԟؿ?ؽ{wBC&++塡TǏgxzzzj#""]fՋPcw $&&baa<8p2zrDJJ G1OOOo߾&fϞ͍78<111\v9ss!--K.ž}]A||<}eժUԭ[`}%O+}ذa#se:t޽{پ};?CƦ;]vꫯ#""X|9ԨQcǎ2 kkk&MĩSY_'O6,Z)SM6g쌋 ˖-cӦMFƍMK.zaС/lٲH:tk A9p]tpӹsRe:: B NPNDڀdɁ0 l PkYJd^7r O(K,aܸq 6ֲeK2?R0aW6ʿ{{=\]]xOy7*Eغu1αoJIMM^=Oqz1 RRR4?(ƍ7^g1@qƳmJj%߭@@ ں8K~ƛo$i4w7+L߷2+rt:n4jx5Ν˺ur6nXoLsrr2nnINN6'%%VD~wJ+Gyܼ>GGG㱳y/t#B>vm#e˖-ߟa߿?[l)8(t zdv249zPː9ʠ@yrdvdzY[me!!G0`@}̬seƍ9&6m⣏>2򰶶Ɔ\v)<&.I7xw„R}2HMM%553gtgC f͚MZZ`I&\|nܸ)S+\ lrbe4n$NE'K~o&*O4iMw>tQ6|p'pZ-gϞ孷2I[~yaBBBHgĉʃ6=RRRHIIai(߿??TRRR6=M4a瓘Ȼ[fg̘AӦM9y2͛7ѧOճ&6=i۝v4\R1tF$ d!T X(e)1N$VPhssҡEnKdB\ȓ#D%ڀlR (_da=2$ :UYuޞ[_*JHH111п&Nh[[[wsQnnncc899Ѻ3n .(6{ytzsK.e=xyק˯ЩS {s#7i?vW^+xcĸq8|p+wGqF.\xpHvmի7..1^z=p^YfDfi֬9k3gڶmGǎM҇/؝{̲:tc(^b&6U;E$ܹs%:wB/1w\\|¿Jq#%88 '2 h[Pشy xRH ѝPР͖#)G(h>9V;Ɉ#*رc|&sP7n\+jCN>mlHϜ9CÆ ś@PE5Ғ ]ԸZU+?޸дĺ%Ë-`U^Y4hZnX73y8;;sQc2BBBJK˻Kna",,rT* 7&L6ʛ6mÇ/@P(7x @b-[s_]ҥK{9^$\tV:QEE6|#J `8rdPɓ'ӯ_?T* VVVİjժ2'7hЀ+V0rH֬YcbߟEy0`J4,k@ yrE!DuLLQaݧ K#@1 tJɧ~ƃ>ʊǎP8u2FǎC@Fq)+cm4w!ht::FXXTB]QaAAuC(s1IϽEѡV%QhÉ 6N!RJzA"ѣG !Dkc0ޣ~>}$4,^'#SUSly K @̳U,~s1yVpG4ѽ;6O~].C!Z7@DHwή;(+-E(B!~@vFhHV=̮5{F:}t-3Lөi!}uz&#^TB~ oI*B!Dr B!-A(r;݁9>C'B!<=irrful~\O!B!$@i>0o<چjor>>Ljj*^{-=̞=5kԹرcݻ7۷ogٓqƹҗ/_ٰ͛aׯgӦMXiMvv6۷o窫b„ n骪l2f̘|PkpW_}/ۻE+c޽lܸ&|ӛCCelLF7ưa$@(v;{ Mvم%Q7yx_\>/QX/!F P1 nL&z$ޭ{QS98qF};޻;޾ܽxW?~<?fRRRXdIdff2a`ĉdffW^ɓ ""ɓ'jժs'Ǝ[ daÆێ7ݕ 2~z{nzlŊ 8BCC>}:[nmt7`ٲe\qq 7v^m2ٯT|c󘒒Ν;L46ogŹ:mt:vγd˦05xu5}k#z״ϭmqQ|zjr{{NS;8݆. n"oO@pI=BۄˮM#*GVt| 6I\,\2JKKYp!ם!##d|=8z*++cѢEtm<ҥKkl;d \?|3??6mԻw}4TMNk֬atMom2WrNVCcdd$yyy( ?~aÆ1m4v؁(ڧ_um_Qr/ yff|HiZ|G u`B\J9CA^2q`χASr' i63f࣏>rXr%3gtWVVI8|ΝYlo+رcڵn.ﭷʮ]roTz==.ʂ ;vۋjiFcC󤥥/70gڶm7cǎ=;( \4gEW^^ΨQ8r>,W_}u} ̛7mټy8OLDkϤ'jm6HLlteYokJEQxY$uLtL,Cy=ug'$4.岞)Dݻm_sMkhe=S6$4w{^i5}eͬX+q%==Q5,,9sfߺc7#аw?z'1{t܅88֤:,տ`tLD|B" ?P_X߅,kSڴPwy7(P^RNpX0I=܉NɝKp84MpF˻ӭW7ƴjRU^ŘƜӷGAAA65œ&MbᤧNjj*O<+LJJ|EEM:Fvv6'N$>>Bwٲe@TT lٲ>|8v?'55cSkO?ѣYx1 .>Wyyyُbէ2xIqf9s&<3n[n ~"zV"ly ?ỏټK_|vlo7?s^ v͆߰:^̜1|8 Cn¤'sݦ仡|?g&cGض}[ʴqwl 2!;||'>ɭn,gt5m߱ 뿡 T̻qdӦM|FvlF~~>/rW/ϝˁ|a=;wld&6zemJBjߧL}HW[{|0f>כb;2Y79}]ٲe 'Nt냲eWzRRwvٳ&MѮ];ϟϔ)Sjj*6oѦMXr7fz'c6VS)mZ PZ N ġ&4"шitځZ5xyr&㩧b,_bl6;wd̘1unӱcG,X@ii)̟?b:55s璛Knn.seĈnh\q|駬Ybbb։%99>&L ++ 4~z-fϞʕ+4*SsXv- OKDvv6wy'YYYH~~>Ź۵#?oO:E\{+r=ZԹKWc5;n)n(_Kdž үz~eږ5}TVVpKoѤڜάXN:դ:,^^^綡6sFϷMiBKTUuRi!s_&t81{$&>?[u ;;xVZK/ٳK.>~`NѫW/^0`Fbȑ[r7^|Et:O?tw}}a?df̘#G\ccӿuP.Çm6.\(xSrUW/8f3cø:uJwD8v՟GsF9<<-1kF.**3?mڴ~A۶m>wSҳ'~Mo}.j(VC/>qwJ;>9 iϺm߭kW.\b!''ZgՃ<'ȑ#8Ny6 )#dddp84 S] s՘} 6m:wy^U_}]<3e 'OgM;55BH /^G^V s;a4( b4YmzwlO:c0{,OLe#[MW^5\ӢoS_|>}H6gN%,ѡޗ_ADDNJ2g _Ϣ_u_}|oµXDwItL,<Cn,j(Msnj3ysߥL򼞫Ɯ>WgJ/yU_ߞ~;~I՛*_Sw*Dk{|cڼ)*)8$("*Y:bZXJ?D^ぜ:_'m"!~us5ҽG2& CufZ7_|?e.sKUyYK^̴_p ԩS5fZ5c:aeRyB!.|u7ȷ|cf8Β߾f2lIYIgMryzyb2ELB :K,tjf|F+ !7\g̔O!p0ơ\s5>]2a ]Mog)))ɕ~$$$лwo'B!$@iiOfm6"E6-zwcd吱7EQjENVyyi #'8vvt;фDŽSj-/>or>>Ljj*^{-=̞=5kԹرcݻ7۷ogٓqƹҗ/_ٰ͛aׯgӦMXiMvv6۷o窫b„ n骪l2f̘|PkpW_}/ۻcW [6l2 HKK`n+9=7mڴw-i՝׬Y馛vW_M۶wN+9K}cdd$yyy'B%}<{fˎ-MTWRU[*K>~>vm <©Sh:?աmCokr> i63f[oW_E\镕}}}h1V><ƕ&&>Nze%MC߾}}cWmlĉlٲŕݻ]{q{;Tct:ڵk2e XVVZ͛7ڴi+Wjl6C1qD~afsMNNfǎ5Y &dzP7~>sرF !BHvU=k`>|0F4MCdg^ϓ#G49O= ,`cعs'cƌs;`JKK)--enө̝;\rss;w.#FpGS+O?e͚5Nll,n6a}>hРy뭷={6+Wt+2ozso/(~ڵ 4H>B]r}P<<<0 'Ri!s_&t81{$&>?[u ;;xVZK/ٳK.n=ۂ :u Yzr!{%++0j(FJߺuk/^|Et:O?tw}}a?df̘#G\c̜9{A|||,7{/Çm6.\(xB!ht{Lp1EՃ æxe+`G>=fO3MTL&rIʱcTW7UU?*=|px s q\T=z4)))5ƴi?G>_){$c`04z[lf護ךqY:B!DO<Ͷ'/;(}KLT L| :'RJ:ՆLQbr̗z_zu?.{B!hMj#FCXD[CF؄X26` M(A!A o#-H!B PΟd"M$e%eeDGDLVfV=҂h&m !B!$@0^2rK67\{jW 7K6spxKKB!3^ʅa+ܖi7%%PY^ Nxt}x!B!^Nc+IIJh!{e+B!(UP&LB!"B!B PB!lÇ҉jFu_Ձ^PPݎihN+(J:,N v'NcǎqB!BssA(-+EPT Mp8hv'DS8=MӨ8xzzb{8x!! B!i‚),,fͩ< Qu V=jR.c؇ B!(Mg0%//FK~),+6 AYym6v;NEq**U3vϗ1<ҥK+B!R P6nH~i[1Mx d:A'TzÎLEAwPN'iFػg!B!ZqsPp8 YmRV^NQQVa 4fv;8l B!Ts R_Xm6ڵg…lݺm /_έJ~A>]s R'7۷mO>xyyܹsIIIj(ү_?Cas>)g;qG%33Ν;0`ۺdgg׺˗yf6lٴi+Vho&cƌa׮]lٲN:zd!B!ӯ_s RlX,VN9y$?c2_moYf 'NСCic>iҥ fL<"""lXYYkח&t֬Y#V!Baoܸ6QvzlϏpV\IPPG駟f̘1sNG+>Gr{=?hmɒ%=z3gS}||tWTT!9p> O>Z!BAٸq#|Ǎnw`0س{75|ϐ!Ch4{nN!!!L4 oooV+v?dӦMۮ*))ݻwڳgIII/???{1͛'V!Ba];(T F#m#h*Q5 ɈX,0(VRO>>Ea4{ ܹsuelĈ~ĉ/8NN:ܹsիZ!BuKp)v(zN'p*# :=NET,UС;w**qc'@QjM?g_r{/YYY 0QF1rH}շA;v,$00oJB!\(T|񦼢I44t:v`MFvfh: NkRF竮1Lt:ӦMcڴi--"T!BHs N"Ϗ^dINaX,( 64MCt*TYBU !Bq( e8[O}faXWc/.PZH|m:e{=)'3JEZB!jr8~fCр0yymq$ ͊W`0`2PNVKiGU2,*iB!B ֔Y@Ğ|l869f%I<$N;FMCU).˥E%;Feq1_!B!ZckKSQ4'@QRm8 8UbrGRn'Xy'!B!ʹgf~z!j]?k*6FB!D P #99+ ŊfjSQa͆nǩ(Jvڽ?_<K/@!B PF@oÄɩ'ǃ:rNa 4b,{MMը̯BEh4`3iFػg!B!ZukɨͩáhTUQQLtg[nt(܎ x5nĻbp:TψP, `)xxzJ "Yf nJJJXnTB!Z_8@q:#HGX:n& ї4=/gr;+}\W÷fFovvTWzm/_ٰ͛aׯgӦMXI5Y`=zL>onݺ1wR9B!hJ2.{"?Jᖟ({.u FzM0y74 < daÅwL<"""<?K.N׮]ke8$''{AFFۿ-5HY0>o.^믽*B!jh5o񪪪t`SX,"b0T)8+eNBR⇽ĉwr^7↶#cy>,UVTv1vŒ%K[5kYYYR y 1cFSYYkח _#]!B]+̪Q'ANҘXŚg#p*Wŗ>0~7x:FYvCeٲe@TT lٲ t… 􈖏 |}}/t:v{Q5^Q]IB!EiVsaw( Q%o1{ #F 0xɞ3ќ`#FoF=جvGjeժUl޼, _Whh Fͩ:p8TZ(*8k5kHIIq NbccINN>cĈ7'ȉ'>}:CmtyRSS;w.̝;ە~v7qzmC=M4M#/Gƛos; ՛@ TB(BiI $jQ*`e &MӰYmw*zMmշMTE5qtR~Zp}o0b̄ 8x aaar-Lq%oS!BbH"B!E!B!V4!B!EѹK+VjI!BqQB!B\,E!B!B!BH"B!E!B!$@B!BF!hvÁR-^h2a68QMӤZNGo0? PBfbܜKLJQY (*. l/?N;GkO!8v*9~ݻ'`F^N6l6[* رc; }ߙ(9 7n`4s"u? PBf`9}=z*8NYXzA߶ PEa] zڷOk ;a0 o?E!hRQQAPpg[ *~WiN*Ӊ?E!h Eo0t:2ZШ*@&׎煮?E!hV\'r,V Ádo %w?qQI"B4`E`2p8RRZnT xxq:=<ܶ)++j!(8N''O䣯0o& Ǎ}:2A!E' nEY hA!cY[Ldt0A]En}k"NIDATil$8$ST(OяuxQ4NT ,N^| PBzX,GPTÃb*i^^̷^ӋȨ(8~(STO`P(r%@i,`  wvLjw1I*ˉB"u|<ٸ+ bԞRKB!v&Eub4y`w=fc.h@ΉX6_G/GӡKV+';M(nυln~ϩO=ba!t֍u7mߣgϞ7XM y5effr5E޽l2=57ଏ#i8T;5éa;t-,q$@B!;Dњw 86+eeOH|v;%%SUYIei)J'$P^Zba)/_]<Ɓ}t~ǵwAYYRZZJٶ}m޲V>}P^^`kƍǍ7Haa!#F੧_&XU?Qem\SECQ' PBQu򡨨B۵b'%%9r:~GPVVˋ*ʊ UUDQ_HQQ^^>n>o5k e8WZV?ڵky[+}[B˘tJf$̦VmIcxށV(ǡC4hXr%7p} 5ʿyfRSSyW9rd~(B!D+0=ˋ8JJ(/-RYIL䇄; ($|8Çwp82e ~!NS2i$Woܹs9y$]tw!99ƱNns{QQQ-›o89/-oh{… L}kn{#%v,|fF= :< `60xMz頰Ԃ3gdҤI3Ƶl̘1 /tRk|A}_gBьo4SՆلl"4 FO3Qq5;Aљ tz[NutjݖxPF^F^9y\7aN8yO2yI/ /%pz-E\US33E_Tv{E+s6^g,'7tVtww^૯O?y}߿p8̽c=vKTUUq!z[nֿ~'[>`)H}(F66G6·5-|uHߜhq}X|y-_}ynΝ<ٳg\'R!i=q'QUr]'3+ EU{蹢i <_'nopD"D"0{u҂L^J}m ^oBtRE5^S*Z̝;oHڱc%%%\矯q>LeٻSNQTTH2p` 0MOہꪫlGQ~m˗Q^Jy^yeӐ?_F3~W{ol߱iSm__i(<>]ww{-wޡ4n!駟6֬Yo?O~w<|w_~Ɋ;`[۶9p񻘏fipeq.Uan3<H z)ɡ۔L%r,[9b˔L.!Q\\G8ܽAfl“OX,FAA> ,䗿|+շksļy78k㰎T SOwy ̘1gy_ Eaڴilذa럫_:~#a"6=x=ZS2l_^Q +GQN: f%֟ڔg***XY͛ݻ)--p͛޽{ 1 ނCUB5F:Q\CMNE}_0ƆS׆|Z L7͞FƻG<>>htדooƣo-Bqq1]]]jjjXz_q=G;8ΖW7STXDHgE:|p_cwʼhiq^ } 7fƿWl#(B!xEn^Z-`;n§NQP\Lfvvꈈ8$ P].4]2r75 7~ܲ/!-:;;產I&k9`ʔ4668eK`_1i$::;(((}1[/Ateٸ*G~!{ d2uCM]Yo(E! i$247`Z-dfeaxեaYݢ=it4<^ƲTօL*R_NO 9~PFt:ܺ%aLq@U>K{~C^^dg\$i=g~F} l0 ,4MeB:~%NQTTUrrz>.=Qb/B1Ω.DdfaY6̈́22Fu<]Qz."NKK @, #rMc). 1n0 gI$$ ,ql/[NU=sP.bb7L0gXDZ[mUUqiZoA::ev^oE!|^?mfhm 9܌ix<4-m6b1rrsp{usimiۡ%,)xD"I2@4^o4tM#33R+ыH8ԭOZm[STՕ:춪^V)PB̏.AF[hIe:aM4s3~Ji$,2B٩uZ#alJ w8hF0$p,+uL˲$iZyAb79b۩i8Ӻ\.˅E!E!!I$Ҍm. K0swdHk3ej>oZ@ B 7/Xvfv!B1%Y^_/ IOH"BL g^yGبؒ1mi¸oO !b`0HsS>L8KamzN Qsy2hcHkK3Y*E!STT‘0`0Me qf͞C2b~?璓*2ȶM|zZsI"BCzFWL;rΎsb/FAf^=:;orQ0YfQy(oT\.B!jr| ?)PByISXdO }b>>^g$9Iٽq&&oO{Rsxhr̾+`/̾23cY =%IBZP+,m~Y p|ur38[ #9y~1or}Bq>'')vdu3tԎ}Ƽ!=3B^N&7=]# lUoA4Α$r+4ᵯ%)摝)7wϻjw4o44gK!NMT8o?t9|ȋ8l5%(90?*Kw'v!8"ڵ `,<=9tw_)MAo`Fr8YHFѡ~\7#e& =V#iddPZV Al5PrYmMFf%e zZŴ &*Fg#:5 YV}roؕƌwDQgսӓs4g[ADbZSRZ~I|FfnK~ &`_Lf+RHHH`GJ Kf_jM> QǺiLc%"ԗɎ鄅R\iݒIiVTbge@nrK )kMlt$Ȅ{@Qq njs!zhf!O Urvؓ/ KMږgб}k7nɗeǯj,}e& MaQ1۫öm%IB :^Зsq&$''&| VSԜjABS+(($U'"C|;2y>OOOv=và_ײ%{{{yҮbu{ o QA_+7raVseO|BT`;yjehē bd{|1^$D[ۇҲ2Bw[9UG$\] c4NĪ*V&23TYw_D's?Y ՚;.wEbB q(=^HlioI.Ãbg ʾqjpt(;BP} $)qr1(&`Nx?]L&ݦ !f(++utfa[Sf0˵j3`2[-kbgضc#Gvpmb ;=WK h?Au8[R xjoiWU8-h4_D$Icx{yQTTB\E]шlonS}{ukrk#ٔiB@?Q!>o7ѱ};s8xu:ZHԁ˻ѻC4s?]D.-@ *a015()3[m#X&*A).3j>(k]nʻ ;^ P˴r/d+ !DZGש8Wћ361[ړRs{e`׾ .3JЫ*-*2&!31zxQn*MԉdۛR[WL˳MXV!θzZoIr|2*iY6uî4BCC0ѷS զiH̨:eˑcOJh:"*DQTvmYcz r!`8} 1)ztqNөuj>Aq׼5@#6;?y{69 !CQQ'{Ssq8>Xcc3?00d"ė؈ lZDb4Z-zypʹ/\0-f&&7ť$t @E2MB?ҦK~F4Mc.?>Օ{?YhÃ0bwK.dV /ϕGӿ=i{[*WWPT\gZV6[lN۲BTPtZqKrr yGң[rErb]Z}Ǡ8w 6B/A)]8rg2󮋘 <=YN&\݋{˟GrI|ӫ}ex{y%1][M"yo6[*%(x{{I| \&@{w~aH >@xvf='XoKHHP X @4Xc+ץйucF&sx=Hx32}(/v)b=т)P~˄ y7J&n]:;TJPđӅZhA "(0Դtfc0}֤d`t5ĂGSPʞ#9*MPZWS\qxg Kٸ8-JpvK gDf}oj1q"&E,ƿcҵ}+f}JVNUH.M`Z+{סl"~5-p4 ZưM~h'nՍR?vѲU<:Ul",D JXdPu]ȷ>eoB9(];9[M$w:rwUp=>We=]sHVNnAk?(lۑdcxxx8q-c $'7,J0 x{ҹb%XXz~Di_;X$wjNg˶XV:wl`@`Xm6:wjAov~ť~;$a4QޭR0[NR:Baɲqu7hv˗0#9ljw-(ZSN% UIn~~~tI2/00*먼Sv]u9MCstܡʴPC]ݢvtc~u>Y'7(JLL11Q5և9y;~6u(x\тS䶋Wmd:U研T8X]+Δ<'ɫt%hr`B!(3[zE$VuefkǠ@!B!2=\<*~aqqȫ(7Y((~B!Be^˗-H"B!켢3N};,^ԲB!jeoAY2:rFB!g#wT !B!DSnԎB!+**{ϥB!gܐ#랠ԴB!Bԕ_ !2E!BdH"B!E!B!$AB!BVvFשjB!BԖd⇟U+@QC܍C" B!윙AFYv%~{nH"B!h8%%<3Y)D*a003:$(B!BW_RRVJ=PUR#'3‚BxEٻɉ$(B!BS2LOZoﳵvZ, F\F.ipb8%$4Jzܹ3^{ wU(tR^ mNQQ9;+'B!(X*r9~8^yIL6 ~nƎҨdnVVZMaa!ɞ%B!D=syJAAsN'㏕X-T-Z̜sxͷ瞻_}uwxeB!||(+-//X7m 8p zL~A~AZPz=qqq<5k&yV;Ҥ*IvVtB!"'3:,2[7͏K1+Brd;%7*רXRRR%B!iPUH=HIqsz\8]Џ!@9@nŶwxU/~z4̌dffꫯ>|-[2|0ƏPפ>]ʀ{IN,{B!hv> Chx(Woc^>^/eX֛nw5xxWnv3`y7mo ++ezJJ )))||'t%--oͶm۪Lr"^^ѣeB!Ʋ_~b0d?aBB B4 H &*'L#(0 ]V+_b)\s5n?; 7Kp|ƌKVV]$sA:FΝ`ر8wwb61l۶xї߷i[? |J#B!Ĺj|ه."23Юz#3 Ls3x洒8-(0|0 Ȣ/r.iii$%%7߸%袋ݻ7CcϞ={7qbm?M7seqyK||}|AvY'ya}}}y+>A7j8yӍ7rJٛB!9mמc:Gݗ}hE.]N߽{7vYǼ]v7rt6|s'G !Bs֑T^7Vmp&3?,O'0 ]nT}`6<>TfB!t<83_ExT8^r!VSϯc7#//\܏ou~!=kLB!8U>zFDz7eȨ!3c7JlM6AILLdڵ\qn?b}G۶m4vڱfVXQdB!WGj!08?!?7s?c1G lԦZq#F{0g.U3g\6+f?OQQB!y*~SNܖzk@/F=}+`<0~Z7jM6A曉`Ν )..g嗳k.Zh-7ܠ;6[#Yd YYYXV ظi*]|B!IJٳO=:2%:y'?jeǖw:q6.^{\h6nUwuτߠx{{'s IIIq.B!) -[HVFYdz8v@R$6@hXYSߔ+GO^}5~Z#Gxbcc>l;gZBB+.]K֭п?W^yB!))-a߁}dg`Ziߚذe#%xy{/7mULs/AOj\DD3fLgƌglww%{B!8g8ˑؖңKwldgdsǛܳ^6B![DxA骪ңkwXmV WWes !BqlܝBʮrrYmsV!B!f۷v:o@qI1$O`0v4 =H"B!h8Ͻ8 :.x<>sVb.^B!B'Z=t:L&rؽ}7e#.e.8k1J B!牤Ķ̛2eeyѱRjH!Bhd B!ɐ!d4¡fS&Uѭm BIPBsAʡ,a3#Օcѩ:fP.ơuXM [p iL&f36MCӴ FQTEAg0`0PUJ<6j8QE:;ѷ@rkO/ygeǏo.AYUif\̎ >&ofm)[0iۯ)gBk ic6CLJ(CB1z'-aXH=r۷]_IѪUz'QS?sK}Etޝ0t:];(l623ٴ~F^ rF|?#!: E[NTYm!|]HN6ׯCo0"gBK ltLh# l6ӎsyc*/?1/#6pOhxV+aş눍m^$3Yv}x{{SZRl^tԉ]);52{{{aTX,rt Z~^ԉ?p q.%(cGSܹ 8GD**{vf(gYlݴ!uF:h۶U+WYR/y~gaa>~lfp(Rf :U6mW9'?!αŦiji'QTXRyXriӲ%ya?AlRg}l6TUm٤5?)s㞼U@iOrlߖ"AX,F J\4 zV Vi$3[ &(:r?L!D&(~*IR1V9f]࣓]= :䜈1|>%A2?N` ML({S!!AqM/ qSUEQut󽪪l6|}} UP3s)i|lLKnt0>gĐAroXB IDATiW_M#MϲUޯY+xBQ`Wɫ(s?z:Evx9JPE V%';]۰llq+6JKOOJKDӃB[R*{J}xJ??Mncg-#~swKaZ $M[:vīBƱ#\3&Jr:o'{y⥏Vg3LuYJm\s@{& ұoV6jѠZ޸6ٕܿ.[9**ĶI,moi ܟ{vs%=2A9 !FR ooo4Ms٪J@Qrb6`4roܴEutξT$mr_Sxd~ ^}VZCk矹kѷw&W{''''UU /ΗyeM ԕ߉'^С)ewa؆jeϿ{cпi}g|Dsv긆 |_#?ĝwh1طA[w|D۴aُW96b${;mT2էx^^^2? ؗ=FR] v[nqq۷9szKh׮u'#G<1}oG<5In_B{NyҪy:I4lURR@iiee%LlL%Xm6r'w/Xglܴ7aoX^o8jZuzx8X9t_.6ƒas(--}E]3M,f>;nZǙLV}^f;;ܦңK"~nhX5g#kbDM8 G[e\>2/xlﳵU7j1m>cWue_u:mT>ߡ[P7/ŜI`W fl<7itLM\4ンb|Hb| :,RuDҷgWb#>d0;vls[EUk6p[c>64MpM ߟ_~^1 YԹ܄ѽ;VŪѵK&ww߻q!YHPvʗf@QZoFSu(@``PVRff^ӧ_~.ػ5Q???Zƶ"** 66.xRRRHlӖܼ -c[wf$ưiW,%ckJl p4G+fu]#Ai^W摇$&&UU ⒑#4nͷ.uYѣ/ ?>Rwdgi m- mڒЦsY/̡gtISTT䜟Ц-~1 >R֮]ǗqѐmׁF]AJʮz0vMOhӖ> v~;\KÏбsz ߬Ӻ꒠yBoe2&OJr$wΔ(++s///GsƼ7]i?[UPTylYYlX:`r٥/U"[7o_~gێxyz1/̚INvkoW_,_uZo{p%ȃ-R Ju+g8F9;` `0%9Ws~f}ם{fNͰrbæixxQXse q._SX,YUkVj*ʿWֳ+= Bdd$q \8"{C%))=zAB|kZǷ܌O_.xx[lFA!=:&0_yFbtJ Jݙ:q6l@iii}70o+`Mh)ݝ)e_}um7_/fͪxzx0\N~V\}uk|ev|޻l\#G0eڴz%(~1cnMӸqh>*ˮ^ ׯe!Ls<{w3OqхT6/2/|֮[2TK2|PY~CERܼ\Uٹ/|?ǎK/Ĝo.˻u)^UP U~Me 2*̟2N^V\䱿>Cf~(}y'oZ%ΜIxxa<;9._Ctt |}0q"۶nu[U=q/wÏxlTZ{\r /o,|^c!_=z&}G kbEfقrvao*/u3Z,'}-(:ԥ)uо=?#$ķ&M[BiК !ùd%هvˆMٶm;y5.^ Y׹xv!~F˘H)4zeSPj]x|;Vn:h]6[܂Ҙ]^?(L{0hE|-[r٥i^2-[regLp<==wm.-(ʕǟ9u*}ϔ%(( G ( ƍjbvl]2_Q߷7ӱ}YYYj|W֓6vb-(5LML#8(Ĵ)Etы={hb:9Ϯg5۶lb޼Yb%- %{dnaAFOԭ:֭sXQ4*ʿ5ٹ/=_eؘ\{!nz Cݻ jSK8Naazz*٣rFO‚)2n:e"ć6-gޝq5ݒX&)Z]ZJJ-+_妪-zZ;j[ '7IMH@{1qBv^|%mނ^l6Ksy77~<أ\8j7q(.qunYjT]y?crrrЃqӧ 1y)LÝ#"]f]fQ]ʼ z7y/;?vV-"#r9"2e.wR>~ӻ~;w3eT<<<\eiѢs!8rIj.pRopo'2qٳ˼@?NXXXq🳺3M8ܼ*cE!?7]_<((^mxj!ʸ'&&bSóIJV">uH,o}>\Qq>ӨR)AQ*mxt'FlD>wgHUq<#0й̅/`ٴy3VtؑZǟ~{6ZR畗d~ZQ'ԣGpxImMߕ}٧E.KBBC8v(1118RS]f]M0 thxu|F#wq;}S⎢Z"DKPN8+JYJF~qÝ%6IXZL:YV:8Й8l߹~xȅӏx7][& V|c[[pc/(,`ܞT(hd̘U{i ^8(,,:`YKM^Xʑbbl{1Yr# ۈQEd0FO/H|ti3<[׺%f׫Jб>@NN9|̵tzmsuҳgwߣKr2wq;?(OM^qwвeKl6 ǁ]ejO%**ƛo1 |ÏtNLIIEtT;vqN]&Nѵk*KF/a'y26K0[wۭ& #gy̚5#F~~O?5Mxnl哒xr-7SPPs_R>ZтROީ TJ`_Azz:mڴᡇrΟ6m*?ɝc„ ,_e]Wuq)HP4Mc ?e&= r1frmF vwT|mt#mڴ9oǸIرczn6CE映XL&4łl9mP#hdeگJ9seg_y򥸸P Z-.^R ڟAQUeƍ*w9 &SyU)7g'&:T9x-[ұC78p=u wmwrzߎ䫞h#*b>ȕiTl ۇAβSKω3O7r0nƗ;J"CN>g5g~ĴdeJxM,>y-a]՝lu|g<3J~leTUU;9\8&= ĵjŬY:rX~4%%%lݼnwxqIFf&qqqu ނɧ2ax\{ռƛ\>S~-[ؼe S=WMw<3z!CM7fʕYW]S-w <;9F^jOԆ  yxzi j='M zi5HEGqCUԊEWӽ2^ :___""4&RT\D`P ! шju;Z~u3ycnw;[oRPXPephDDDx<*uRy;;3k{3.:]eP2Æզ{ubWT%8K>FDt$&Vm#edgWѪEѻW/zue]{εk1|\l2[6mkm՘|apA\0hlPwեl|if>4djnSSFӟ`'ܮh4OO9rXvII|Ǯ5W-]gR}fqRKLl˗U||]]֛oT;! [}Bs)Aqw*w۪|9sEYJK ρ7P#j*-( {0sV*JTT{%0 s}':@hXYYYĿ\Ng\%żN$ݩ]27<iG kNÕ8O=2gi2g}c%9|ΝnB/̙]wށlfܹ[72Wl * 1Zи[HNi*6΀j_.ڥ[鯾GŽcPt:UQiЂfWRRr{7шT. Ng=--Њ$F(זen{kO,xEm1_ <00dC#Ins[귮n=zgV:+Mӏ3* 1N3曠 0!h]UC4C~.Rn.^R233]>WZZ%ĉ@E2co}DUUBBBjkKӡ َ$(Կҟf %([Gd/oO1O~`44t:DAVMJNg|w}6m 6uo7\n-( )QZP q"pD ׷:ꑠÍbRZZJvI;noY||||jiiix{{[2Z jT쫕rXV}!iNj_/)x{yc5)dW3s*=]vՍAB3h'XV4~bmoGEĸ&*+9y:~1[PLV{/?vwppii8a2*(Vyy9UltNĪӒju /lsOZ1t:s]l$h-V` s JC}vIP8( l'&{8c@wu(hn?LT^f0I؁7># bق2]pa Yw11a/K罌f#00ŧ5jS*;꼥#A)7YlvR[^VNh6zAq$1zh.12ge: $(BBSK~׍z9v.nЃI;ƔpWd|ӯDD>)‚{(UG'){xˡ-)/ ukNQpeGO~tr9>H].T_V o#U*o3w,j8%}b &9!EQ^x{y營_;4dMuRŹ ]Ea˰iZō4M;>Bq%(AƶD9gԎfQn2$'P10` >!h]DzOzfK4L&V~kB8TEAWqS55Qrv{R7\EЉ|7w!vפ!8]~]DBBkl6V͆fClxoA\\K=]* 4 ͆cB U?o65E !Nbc:-ӡCgn.tS!9h?9J"8_V9:=OE(B!096~"Ț# 86>!O` ~;2M|7z-[ߺTBf}9#!!d28z(Vj|AAii:Zhw3MPKLʋ/K/E|||]v'hɖM!}8Mv6z8+(rb! ";"aAO,xzg;wzjĆ4@4Bf۴!K$$ %׾؝}3U@N;V|,nބ೏>`+Nx/:t(p9VM۶m;oYpL<-)-!<܎5޲ n[QQAQQ==ze\'4BQln&kPcϝN'^x!s>ERґϗvZ.~}Jt!N>Z]ɠCu VZȖOZQrY4mA &IUw2wڍN;V(!T^wy=LWj48rrrIy6 0pDSri R'qhjEA9M3.k:?L.(JJKKt$z#ީ#fkJ"I'5-^}ki`Z֣n$&%S4zݺu\}5L0opز4MQQ! $$$Q]HJK.-1X* 9Xdt4qq _J!N, U;pBHKO?$R/ 0(--%W(*OSRSNllU#:&We%&$..UӰZmWTyTk~L塇gp8}Ȍ r~%Y}Pj_'%%1Kne1X}t6cϞB*]|>? #9sp88cqPU"rg6m]yxLשK2goLZzF°Zlr؟~ߏ3#C8&n Y3GxUqtIJJ *sqcfÑnent6FHSNvlv܉DGIjXmV*IKK'&:upiKcJu,i(4M9BV\)(G4UA>>'Xr|-q8L:-$?_99mkGRZz?s%-=h:]י9:wJVlz+UuI>?xYSԪ}KS )% |9۷Dnܰ?ߟj劐B'g7yj*-x.?ԄJ~}㒏HtX,hJTT4.W%{jMbન --ؓs8˽ǠA,={vHw}??(ɤ?vy9dfd͌#DQub>IwNf[ 8p`Ⱥ뮿?6guv`inȽ#;Glf;iV3_ ֯_36*[eMs?P V~?QhZ/-..bҥtѓζtx ~m[|^YUY+MN[6[b4&2M݁jyVo&ib:i`P Sykn5O~eb♧nֺ7|wy M}VޛNKbԜo˦_ # O539g,j7m۶NuM,CZz:׮&"2 wUaeX"8-.Wejo\X$';;p:kpL\.222=>fA)-)>6o̎;h|֥٧" !Ϝf>Lr u֙!.]ʌf5TWWo|_'st2k#\2dH 0z7TJXtDx*FWңQQRQRP`_ѽ=Kxי4N,X\;vv y߭ƍQ՚>Z'nM71宻ؾ};n:zkp}ll,l WC˚JN`'f ܹ[-i}U=vץgf|ܑOQmW_Foj5֮LӤ44UTyx(,,pjfT{HMK#&&,vp*v{8Z-$hV+>Y5ZV PB 8˱0gl,۷qPG ) ldffy !ӚďbnLdJJ  Rl6Q/f襗7;y}Z PZ6Y+B$mhբ򔜜aHMMnhibX0 aSYYlheyz lrj !B2XVCV"(|fm1fEjPBԿ8AʋR5sБ<ם6@l(oB#2xP9B!Qtpr*\sݍr&!ȾrNbI^!ZھRx[q=6nhLItԙz`XBLQX.BxaMv=iswJ(΢.U"%=g rSbe#ۂ!8,Btt4%DFEB~V{4Y6'-swrrwRD.Үs;:K>a_Y/'5,6lݺ wUiABL]U֭ҵ+>E֠[]tγ',,L!B!ZB_gl믿nt׮𓞝^o]bj"'.1ueC9g9IuUuq:"##ѣ3gdԨQ̙3'NufϞMϞ=СǏvja233wM7Dǎi׮_={vnB!Bl5p@+*}]`sejR2Rl?h/=OIb?w8J KOV{1f9$g&zj7u]e]|իWxbN'SNe֬Y<޽^3ѣG# /*O<ӧOg޼yuJ[q_FBt(Aʻ`Gr4Ybg^x&/:gjCǚk4aRȔ˃,X[oEFFMs3x`}W_GDDp}ѿ9ۄhau!qU pUSZkFž s1]OJaAamt]G_}PJJJHHH.**CjO?1k,֬Ymr{!D(B49W ;gmvpo_BNnzv"&6]ExrUǖu[nbZ֧;?sYMMM?$==Y7nӦMcРAv@g~Պ%""}ə%B!h(^AC=tX @)+) YY\|v%53gfue#/3OoGNm;7_˚5k6m ,{ H~~>~zƏhZ>ÁngΝ Y߭[7^x^/{mt:ٲeyB!BiRx< N?>EFrt la8Hm;%N|Rѣ/Y?zӻ;;B*iU41MSBP/٢(X bp#uۘ:|( IoNJF i۩mvFӹWg:tW>oBR^^Nq!~(2HHL"`J'<=R?>f2|p {ǮK#!9T}o'"2ot&!q*UUڵ={Bq*2 =lXgb)\:R6nȂW0yTUg>}Snf,jMt F_?ZBqi{vg$b:ɁBRRӰ(6oĹe4;)Ɵ3{uN'c9sP*?,oJ1;N~!8 vkD! }%qŧsy瓒"gBPD ZgTCKO`o3B!aRBte;~BT!B!Z-[R]<&&۟<vٍ$$$+++),,fNdd(ӶmJY^[P>X4T݃E߇[5~ߏo)[zJ5Iغy >î8_GбBX]j7m۶sg1mu򴤴p;+{P6mEEEEEc&7q@ EBVo"Ii>\h]A T-nf6]E5@4M{cpߑ(V!+;"# IDATi۶qADDDT㤪uػzoJtƏGΝkBS36t v{8&?Zh2qqqTS5l6aӬNTՊrT~g]tPa\8xȯ() Qq{j&Z3L%陘>u#F3FB73acģZҜBHHH\2/8c<`QZZJ|B|I8E˱_놎i{}Wa+C)o'66AJmpiX6+*<5?ióq8Ȍ r|_VX6v'11#ib(|>Tfߏ( ̙`k˷UaߙL^OLL*.Mܙ+-.&==]08»zgNRRRPUES3/v݇,v;NY5GZ:vdsNX4U%:@M84UjRQ^NZZ:1GM'NEQL,0t`ϞBVZnjj*v܉gdffRYYb i3g&QQQ015E$_˭ʢ/E oVe~>0a||>>t*5 tUгwF/ V-_Fviۮ=ayFvɩitѓ0G\rٰ=z}|>?1tݛXgl00=TZlݼ[X(BzTU_~_|qGdd$5AJӉDEErUjMj⪨ --ؓsh5J@Stx7ؾm;Ep8aXx޽;Æ ]S{-[b6B^co[n+{%$@iʣ>FY^V,_iLcRΞ(EEEGLw裏1c4Q筷mqqk{>>kWSr1 aՊelۺN猍UQ^UUqֹa l\glۺɴv>NB;{obb&ް]QyA6mرs'1jȨHTItbc'UjO?ƳdUnCjiXfffӧO^|-[0vXwN۶m:t(qߺu+F"77\F֭[Cy`7n3l=B\+Çr*v4?#$''Yٳͩgfo}MYf @Nx<~ЫObڶmG]DD4&L`mv}ȼ1pzK"wKfVz˧OYiҶm!KKKCַmCihF 86x~MҜVuu5DQ,Ȉ PNhdgϞ:{Jx?a˖-TVV*gq&O={M{vG?0 wUUIxg9˟|InvF\ַo_׿6֖-[裏L41cԨQREXb9;v!pp`x<ɬNJJ ;vNҵcFm~N 餬hgQk?b⿬]3iu;/&kCsҪtaARVlv4X[j`mdӼ\.BUhFDD$.W% tS#x<`M ЁkEϊ+ٳ'aֻՇl'0}t^uznɒ%L6?x`{9Ǝi\x!tMvv6\s &Lj#K2o<)Ih{G}CN;7>#GG<~\.?`#S3Oc&<@>w(BA)). iRRSSi߮]pA3g )deeiF,\.EEDGEl6\DSU"**1MHII>y֒QyOom(TUU( a'));Уg hzD* ?~<3f̨3f`…tڕnݺh"~ݻwvZm Y|r:vHIPW7ipݘ1cx0w\>SڵK/s %6.rg7d~sz~szRN )9{M i})ܳ= i36իV/Yv )iJ㩦UAvN;~|akזN:/n7itDdd$MӨvWaf{>uCmfspDDPZR)_!NAF2M $\@E9CBjf.OԴ4bbj&bgAbS^BQj5Qcm˟S&@Q*JRQBO EQЯ_?[F\[6lJ  <, YsWr"#G7ܹs 9-1m^{-J׮]bcԩR!Zm&,<။ `AA[ujw}o-k,={Z>$!D YX{៊fpca߾}>|>/IID8hV4 phnlQ PE3b *l6uvu_:ڃppڧg/-ڂ&VSsI߳@C52d*r \{}݌1e]Fdd$֭o|N7ocǎॗ^s&L`ҤIk.N[r !8gE  8ʱ0gl,۷qPG ) ldffy !ӚďbnLdJJ  Rl6Q_/f襗7;y}3̰G X,a_7Z3 8{w!%-GtՊ 8 P8 ~mnʘ0a۷c֬Yx^uƄ Mg޼y</СC8q"6m"99aÆ? ŏ >ojb!BQMVmZT1b)vt]4-m,NeeMգ=jz1h5[>]L0/MPL$LiU 4 bi ݺucŊ!:v+wؑwyÆ cذa k#B!'JzzzHPRvDQ#<<(l6Qi^%`܌fZ04 TQ՚D0+@U j`j0^.:\TCTZyyyE!ftB]2vۺJ@}Jrse]~%%a{>(Q wKzIqaޕ})`x=oDB!8 l)C\krM@ҽ{'dfSbYYP^")Y0+F@7WvXV5M*~9B$68 -5ej%!q>@۷(SbhņhJ vqUԛ]!D} L"S!h<0z89k)lßlann8`b%1lzMhaIMn=.֭DZVzbʔ)mB&XhJKJ" T{3]K*O? P{v;o/EEDv(^={yٿ\ !DSaaddaMkׁ("F!vW}Vz}.'<=Iroo:: !đ #6.Nm+n܁BvzBߘ'<=I"\|q:i&"'BQi&E!D( ~OF?BC-X4T݃E߇[5~ߏoB!MDtS똺J@4U :a*jj*ywDxp,B!BÓEY\EIq (5Cb0 Lft.00004U$ӧ/wXgB!BHrV{())b̘vWPpWz(a1M"Q j~"cbe-rqXn!ڭ(baZ1ضm;iRT\(X-V|qn'߮ގUQ#8tƏo~/_ӧ&Lf!1p@^z%ƍիq:B!i5MniTVV ҏnCQ M1SAZDiJBk׏ʒ⚀FwU!ǤIxg9˟|InvF\ַo_׿6֖-[裏L41cԨQ,X <**Sҭ[79B!(ǃ EQ"<N=`DFbMG*(RIdb"={0 S _9'|yٳgȺ%K0mڴy;v,i/slӽ{wn7\s5L0 @ `ҥ̛7_~rF !CueBEj`64M C P*(V U&zjPtMUQ5 ׾*rԏAdƎOKnDtlaEn?aDFT joy'=3+x'>'~ap}m.]ٸq#={eƌ,_;[/5kCoJ !8&TUe][}!~Xg,]v!+;C'ukOyjZpҹkrrb kAJ PLCbj}t6d`3ΓwpWxBD*a\Z$o4Ι3{ .>>2RSS)SpWsm0|&O… :t֍{ff;&OСBuJKKX|.v탵Bqum[WXVs4RFAQI+W`8uf}fMl&^f˗$=<݅.l6+)1,_A̞'£)3ӨWc~5V9r$|̝;!Cםs9|r-?kk׮ cԩ!|̘1W_}޽{K !8fWi^n!D]V:cn7ඦz/?h0ӍeJN]KHKIkJk-,`iNwž"W/O?HEu9{cvm|̘3`5?MPM «w͢En͛oAyy9~+Wr뭷6VN7o. ų>KΝ'L 4|L_@EE[n c2|f͚ŢE$8BSiRQ^NvNaÆ/ujUi@EE99m<+; WrDŽq_{}e5sh$$&ȌnZklbĨ1dfeP]ᙗwb*ج6¬ahF@xQLO0"x}^|G|}'v wݺup ;68͛yzt֍ &m޼￟+VЯ_?fϞMnn.}< 6m"99aÆ?>-Z?<6x6m"]cp尋h膉a74 ì<>&.n0>Gq~y{wL+x1裏!A}).6ظFӷ- '" q-xys^[v*/zxiGt4H<(w}H^8| 6] nsnEuT]#6.Lj&zlst-Xر#J߱cGyF6,' ͓"ǃ'BobYGzDFbl5J~bcbxy޽ʹc*SXPuSA3躊 ## _2BKR"Hyx (^~-}!R9#SWWNJB߁?& v]}Ty$uaune諭쭪dm6<՞Vr !b,-ܴ9/.֛Ɓb{NH`/dde*P^")YK#pJ.KxMJwMB#,&s56އs>۷PuJ |G> 1X*?ܕX L~ IDATBqĤdʁhb仯_o]ׁ xrO EQV[SՆ8F,}S<^^~eQ84->Si.~}qU nÏ?p[ 051YG~@1EQpDDamDlann8`b%1lzMhaIMn=.֭DZVzbʔ)Bq۷f߶-[),E):e!Dxٞ  )\3rD93{_RYYItL.={l2zAJmprgPUUITd4aȎM_~o5Tlp&Qe v7x^|bu/Lz'''' !NjDGGӶm Ɠt`4<^K] ]keiҮ};m\MTd%pM=s?|'DFFr3}t qTK6`q (A?U%Gʈ+bqoN Rz`B~o/TUVҥK;io PooREBjWWWu6,\٧}Ru㥡i555J0XrP]]ݪ㉌ɓ'ꫯ2f qZv'.XxN;{Ȳ#bYYYLc2yiGn]ӲIfF& UTT~`ٳQzIAA]w۶ms潿ENE!***^zpB.]j[oI?1)9˚JHanMaӏvՇK.ɴUU宻"99x|:EQ3gDEEq73؉( oN=Xd ԩӇիWGO>s璐@BBO?4ͻg̘1DEE?buiuL6(**oі!IwLfŊ儇۩pӥs#o.x}⪬ "".epƀzؾ};<guQK[!)n뼯\7?#;ao]kGdΜ??ܹO_~:0ploi5NK800 s 99N\\3O>kײrJoή]BzjoNqq1ӦM YyxTEڿsI'}OXpAEp8 .$2E\@uQfFDuF &&,@?-!;I\}NuYs>US2 M7w-[Fyy9C Gnow"?SmLvv6Zw{ '24p`8}G1udff⊉Oҥn[Ss<3.3LfFv?oM||<3f̨kJjj*q~VZt:?~<ٳgWI[fM`U8p O<eeeOcd?/--_d_>ucW{#xBA9Q߰HRx(֭{NW}?뮻.j*ϟO߾};vl_YI~v]Q+xL 24T-4]Ű 4M4t04ttD5tMC bw?p0IIIIJL1OzNM{X^|n0 ?{=zTn 'Tn C4M̧~ZU/ijUZdgg󲳳(**R66ljLu6[la|՗DF:yo:G琕ElErrRm+**ҾVޚ=׷OA' ]| ok9uAe8M1 㨍t#ҳg_erwg}ԩSOwnnNJ0,ɒ@Y Y1-˰Š-dEBTz$.%Tyׯ_y={࣏aY|?΍ |gzmz/85U=ʑoՄو̺DLzz:tر]vqyMjjjjR wyVZU)…'d?kiiiUڷk׮*e|8N>R}mC@ zR6PU?ߟTceٳ=*oOvR>VE]D)+/#66˲x*hӦ +_XzmuL4+P{365-KQl6nG0~C=<1q//xx <8. W|w'aoWɢOh׶-r"lݺ-[b٨кU+X7j?Hy饗~w}.Z$YH YQ$((؅eY!I*X^oڅ"I|5CQ"v,dƟ@p$ID;m׎뮽[RRj~hx@xAvM3je26v '&x7|ѡC&Nf1p x}pLHMiS9tr)vҤIL4K.˲‚W^y=zq3ySXz5W.0ֻs5n+Eұcj30voر111端 [<(^~2hĉoJ}D }=ӽ^7jtxuر˲;_zR5j,BZnC~A>w JJJ2o͞EVx5/###Ogt7ѦM[,hg4w ʂO>&##Kzz:,k]dK$.J^|zm6I&yi1E6A3@c&#Kq0\Š4s1:ip`Q߻fFs==y2m4ټy3gϮU=0gΝKNN_uDAsG+DQ{={1,Y"@ 8M7ʛ!CXhQ!P@Zr%ƛ0k6Lxy1,bѢM:OII1rݵӺUkJKKuYpFE1[lɧHJLnR3T^$'̈vV .a:Av**B86$Iuq/婙wh]GR ҷ]/6,^LEIq6+ƍǛoI߾}ӧOg̘1<ᴞ={;ZΝ;q87s6jq=T{8xGOj}@ h-,E V]lRkoXlE$zZc̨52.-ZxR&4bnt لABj(aDDرLd~\,2 m_0 yCE75$Ij޺We$%8fCr:Tq h 60vVLJ}iaj sҥ}YX n~[\.6!w !  jFdddxcIPl66 wyDGGqVؖ3b蚆븏x萞?4M.N!a\v,'z&m`kأl؋x=qPuGn̙38(++kSL[oe@;Xܻ `۶m<:t)SvZ:vH\\\zU$%%g #N>.d@uP~ Cbbb0 00Mèe9l̜4-PPe⸫LA ,u9<-/. /h\¡gXEqڴi<$&&һw*y >|?77!C裏1(Ǐg'(t҅Yfѯ_@˫fvx B,.(Ύuu/UC-d횽dD8)"aSl;*ɒ~PQQy^GUA>|8?0999رSb ]t!''iwIի/:t?_g0h ~ҥKO\wu<$''')}>?~ô*}gM Ӵ:iUKOpE׿b >P~4U^\JzXkI j׮+uB1tUIjZھC_\+6Y@Ͽ}op>yP!CdǏL&1H  enl8lDG(fǃT҉t%,,ѱcG{cǎզ>A1hРj?@ 4%Э[wV~˯Դ&[-X Z:aPR\UsQ#"j-+) ]weժ\zYoSP4СR/i(!Y3),Gd0 LSC YH>LIA@ @& %[ C#1L'רx@ hJdE!=# _ȺRvc#'2O DdTTTLBPeúuTTSuJrJG㡅@innr OA` \R79iBhPHE d ush}Oy*ؼ"~ʕ+/(vvړX(@n#2Yg9Ikߞ, XӅ$IkሌB%ÆͫyQ )t { Hfv6-Dɺ j`:n پeVA(6;N]@ 8E`ٱ {ZkQ7GE=% U= 8HbTMpnt#CI:exp}˫.@ ,^} ]a1 2Ĵa*i2TC$^NzvwNnn8@ !PNO,p8|4o̦ǹ[)޲{nB!>]6mM @ B_fwp>j As,TU4)- I% nnkƶO@ q (++G@ 8,DGGIbR2Z;τ=mL@A@4< Knݏ.,&j4):x[~&6>Wd,j-3Ş {ژ rl!;- .#TB7dPD@3 BA Qa?,(@ hrp?ݺ]Drji1@pԴtdIf\7VpiC'J#ٽ{;(^<^&J6j阆nhiA?Q̟.&))I\U@PezILJ4t"5A#LӆO*hvsÍwRR\aHȒfȲiXF6MS L USѣ'zX,4MdņkbA Ȋ 4=mH@i$b1bP55x$ -D'jbZ&,qF.#|((@ hT] Z׭W =$ I!+ ,"$IBTUe߾b|c~MP$O5fr AÎ%l8qT@ 6LS!PT]B-,à@U= ^yַ+ώar]òXv;ikpD3@ ۢҮp1-.zY`DŽ=еb#)$c$!Ia#ŽaY&d$!KeT  ,]Ck:++-[0l0{1FΝ;:u*+Wѹsgƌ7\c<\z饼 wy<m6|AV\N;r  ͍ۇ 4-iZbT IDATa@psg>>Z}gMRxC7HLL"11/m۶u `}.{ZRZBD%JCJZZZe)**"!!4)1cz;SB`ܸq̝;Q //{'yǎoE"hN.^Bx.(k%*ISnW~|K4]Xr?0I;fUlu4ذ~}ӦMbOuMf&*nj"qi(ԤcqWٸ\ÀS*!IU3֭|r/3g ) 6ӉzKM@ 9ٷgRL K[ .]{?nݺUxgnYfcY._}2]vҺuk.rrr«ի9sf?ϓO>Idd08╔ʼnm6\wu&999\'5F˖-cY'%%z$1)d|>o's˼[pQqD11SZZJBb sφitZ GOLӤ֧ P겧ii޽xTM']QarLǣ:b&,W._y3 ” fSޖ3b蚆븏x萞?4M.N!a\v,'z&m`kأl؋x=qPOc=9sT'eee^qʔ)zL>9YdI8{al۶g}C1e֮]Kǎ*GS9m&@p#? kKiݺu}o͞Ø19|ػ7@W^yG}O?鿵3WZ\LFFc8Jqz&ؿT4M"{ ŪY)MzuAlllFO֞F:n՚{iD2pDRTtxtMG)+&Ƀ hPgxdddNb Lw]?.ǼEee1ἱAK8Ի=C6}t,9m4|Iݻw>\?`M2d}Q2e,XPEQt¬Yׯ_XUq32e /2$ c#h1.^tލݻ/Oe췀#| >7|ә8a7Z}o`}۱cyG1 ^zy}0c \11ᑜc*1񯭞_sҡc*eΔ [n_.g5mמc&;op> C'%-vnϹ7^؍]; CĸzEVvW@\B;v`G"iz5ڵJ;N'[WWl,]a'(IO >>9-KPu 0Yf/N +g,Huv.-ݳu#b(qmkp|IHSTC%!!z3f0`p^>}/9rdۿj*>*1(;w,U\_|l^*&Nd`G1udff⊉Oҥn۩Գi&~zr}x1tzljsml'.ݛ:PC!G=p i۶ U4=/ W@OzFeeD9U,*:Ư9=MT+PP(D0Den7ŝuGL3l05]W\ګ5W®DT躎jAlT,[KӾU"*O.lҼYp!Çо}{.\ԩSy t҅Z9s&&M⭷*KzU%};۷ A~˹˪)Q\\LR-Lu:o+/pq-gaл٣Ghe7x|ܸys8%qmoǎ W_qJm;z>t1OO̼y⋛qsr8L`knϿ͛6yqpÍ75ja:RWM\|fX eڨGؿ_С(¾}i*vSTTLtL4]_Bu+g8LMML{\.ޞ5|tK45Ԑ$AÔd TdX04tjKjzyyyw$'+N~?;w|{nS<(OLHv, ]𚙙ɒ%K|`t]'wxF< &K/ѪU+ogݣk"űcN:v9ޚܷӿN:X[\'&wI(ӝh.'74L2diӮ{w˅j%5UZ\LfVĪa*?^MZZ۵ /8hcFH)//#;;S"bT͆~N'Iyy)gqj1妛/`H B%xv!ŁT`J6P?@J[7Jl>䐧ͻ -ⷯ\RX9'oI)HDIvku7dtЁ9Gg:t>l1 C7x≉<8^ ~EEEtЁ&;f 7\^/,jJ|t+Jݻe_ vp="n0jE6(:xM$tҮ}q7rz}T}eBڵq$k~VLMM6'Ng>۷(t]'22-"֒ۿoذy5<8 $];apFs8(Y#]T ,X׭!7,<@,9Y_s-ßeY&wʉL˄ W$o5`EQn?q~.An8feD y:t:]y=XUeĴ*عmB\d9HY, Ӵ+7UUeGb벧~VIKOr}D4ʎ(2M(-xlsJ(zK1A {vj%WCGGQg7&.GR2w o2v*@ h>4кm[cG)/+.:7MC'(ϋ筱=}miյE'$Aa4MnWE96OI Ar:8r#`"#îh""tpp&($qW82^ETl&YN^} ]a1 2Ĵa*i2TC$^NzvwNnn*fʩx N4Pv8lNaqqڵ'lj}P?ni AÞV,IJJp &YIINJbٚ4.7gM ($`]h[@jy=g6EE;U1۽[7B.^L6mj<>P\QA3Dx5#kՊkw1Hay}ڕO." 5+{ژ H$BRlȊ%AA.,ˢIPdUUٷ/Ū|.IbwpͨrrDcI&7$*"\vx: z-N ~ dY&&&].$1)Ski(D%T2 JK().! T 0wm}I!w5,[ekcGfpj^7߈bbiժ5,FOx,$>){ Ht-lH,B7LqD1, Ä8dI°*KPPVV[laذaʕ+T^ h$I!B@PlLKblf$?4MTMG$$#/,~3ipA$&?@ll j8XTY#Gs1x` ;eڴiDGGyffϞ]@=z4 `Μ9̝; <'@x @pnbJ@0Lu N;!$a:׏Lһ]H#) Ņۮ/S 7no&} O>1cz;Sk];w?p0n8Νۨ}=#Z9pܤ8KnjHA ^<4RdYBِN,C\jщ.bSqEULJ ,:Yt)'N?"N;nFn`֬YTTTv5k_}2]vM6\}ռSUիWsUW5@.^@ @44]}CqirAv ㊶g?г7Qn_e^Oٴg߇TG_3GfΜ9t֭Z^YYYx2e z+ӧO*cN,Y?e۶mgСCL2kұcGT^ heYiXY !I$zCic'Jcnl鄂*]edj`A?1ovuL8o,y($@nϐMwWiU mQ 1m4|Iݻw>LZZZ۟ː!CxGdz`*EK.̚5~G^^^ -ռI0xqs Y&==Ĥd" {ژ Xj]'l .nؾ{V7VVNtD e2m{ NzB:2 ijXCC=Č30`@8O>|9_j|AΝ;y2?/v^^'Onpy#\T^vNrr #TNTt[Ll|,XZC<1LCbY&-]m^B㫯da>eaSlVP^^+xF\>7F-r0`>#G'rwp8o~歷ު5PSN̜9~~??øqСgϧW^ */ 惮(Oni.v@ %5-Yٱ};WͬU){ Hd#JTT^Yb.W(v%bGuTCP bbZUU&uA>_~9 .d>|ڷo… :u*/"@.]Sk=3gdҤI[Ջ3gرcپ};))) 4w,_. ޠـpj>%1) E@ @Bb^Ϥ=mH@i$!CdǏL&1H  enl8lDG(fǃT:q}.]?VIر#^߱cG-ZTkA4hPy5şU^ 8.^˲0MY!@PbLӆOF{\.ޞ5|tK45Ԑ$AÔd TdX04tjKjyyywW*u AsejB47|7_~CЧ__ԠFWN0B.)ś{!W4(S xRںQb9'<l]o}ʕLsf+Q@0aO@9Fa<(v=AVfo$3;]OdݏvS5X`^l@Tx+GWADx5;gTDQ.ЃO?]ˆ سU3(9p">:=0q9⨐BKx+SqtWr%Ν|j.۟6JB 11Ą:WTTp`Q8N!P~m^z%v 0$,Xӆe蚎EPAdX!:vS 8x}^ڶm޽N V]) IDATJ¡ÇP5)**"!!4)o's˼[pQqD11SZZJBbsφitZ Gh&>R=MMKc]ţj:1. ,c$>>MQedee5ȏeY|r9>u 0e2o`Ծ&NU@9c_w͵|nݺYf1ӧ0⡑|Ob220tQիp7/HibMS(VJh68bcc4|4uݻ8tM#&#ţk:M \11M|oF 22Feq HSxEGGӽ{7^~%_;67pUI=y5ַ~.֝s?ο3٭Z#zԟRiSo~p0z(6mTTINM_.~]@eO䶭[_~WK?~ߞRV7q#+G#E&izfu:nݚ 7,1w}}>Ū?v/ C(V7hߡ`-7Qv뉎q5]^V)<Z\.۷meϛ}e à GuE:" ("s{ Ӳ0-iZm[=hyԩؐӨ(ZjŞ{qźP5gIM9)wA\\YeZJ{*9@BEQ#꺋U׆.MYj]q- ݟؑP(!{ۧ9<#w9sΙ33לFuu-.w=ojFR dDB")!B*(ABe^^_"_x nz!==Wrr2umY,*++!##_/"O/&)"M@w8e@ H  o˲z-fw86+ǃ(BSCthJcC6Uc^o`Rco&(*I~BbpSn}EܭA/xx1ƍk3lb4MϿٷseK0Kᶙ3|G={͌y'zyv8$s&ϊ/>cƟHIMk!hLn-,^7vpĈiANj*RSS˞=۴7ՠٽ{Gl.JQvBE4dYjQj$ʱ@4t#wo96ll67ٰ~v"0m4qt K4v;& $J]^/E,Y>xz+;l4MC#_^Xt)/,̙=o9w?zLoO< ?dGa!y,>}gNNN555,|)FvZD#΋yDvɰ# 尿fg)#Jjz:ieo}񰫴!'+J*i]JtPHA ZTUVEfG/8njhaR__GFF. vB 6r(bM<7%(K &ŋSR\X,#: :_WXB⩧M54-#z%+>!Ilse/ILlx_x\ 3n'5%%Kɗ \n}~I&_***ew9cO :KUL<)ʶmۈe%$&R\#܅%FSFiz4T3ME^6nXj wg&dgosf^Ez^p0))F+S8٬B!=))&vޅjEe,+'9QDq#P믿n%!1MӰ YAYիWsc4)SF Lf$UFkXzz:eee킂~SPXX?a̘1/nEo^QF2`pŶmۄIWW[ Zƻ\zN%''w߆u:sfw;tY:3i$&M#.:IdM <EQwބk N= }xIIMc@@l6:Y46iZľ-7s_Gi #*>HY4 Uڜ# :t-SKyy9Pi.KrJ M322ص{7VP(l^G\/D]ZQ-S`sh>c*1|R?\o|d31 Hŋ xfϞMAAv{+:w͚5|w}LS\\e]Ɯ9sxGl޼E+PMĉygxg>}:| @ x稬DgYGۣ05}ի(ʾӈ/-m=?X8I L(h4F4en[C4驗񃩭l6}$$$bX]z=))WT`1eLMMm I81{6[#D18b@Yr%sNXA>Y"闕I~~>)))(lD21 ?O>Bn7P388sSe$''@J4_}fb}a3c ȑ#yXl2f3fgmWKj,==μ jkʼn;Ȇ9NJJvm\/Hd4q-(&Q@l6"N#1!JL&b0zt|fe=%I;.GT7+Vpe;)>V\ax & z4 - W^y%+W7$66u֑F(L~w}+Go{U&L੧bʔ)h /ی;0f̘ÞH 8Y@ 8̌ 232zUQJ IfEy[d2mg }>>Q#kܸq;m=9@($I"99ߏb&!!Ӂbe@[CVRiiӦ3ϴ'uuu^gҤI̟?hstVTUeѢEKj4@ "zQ$HuId2a1=ҽ7pTƠ%R#N4UAh-]Ӵ 1b ;RS ̳ςN)G;$..ѣGGRSS.̙_έ 4A={6oFDe˖1`*ӈ.^. ^mz #e/@B*ʨHy%N`R&)|ҚJ0$::SO=*Fvz}4jM|{#ꪫxǹ馛ٛ9묳3uUV1k,N'NYfjժVz)f̘!,z]Z/!I:N^GׇO9x5s9mSߪͣGۊBt䐫h5 cIݻGG]&N/7L}}=W^y%s7 f_l6lO?@pBL45hР8_|VQFQ :3H^ z9m((azZO :[ h13x`I$$cJAj!H g[oŵ^KMM ӧO'''z~y2dӧOo7 nZSOe…q,Xa@p,hzx ACS[&{ڕYt[ȊX(BS SIBS5YQRB0[,f$2d֭_rx;{[ :tDTTU6Q!@^h4U+P(ݽX~۫ؽkCe4-D($LB?GSB**McR Q :wXBjM_3F#im';{(;#4Lx=1lp@)(䢋b)\ˋC<.*@ f2IM}>08ٷ~$Uz6x]%`4q0pI؈z|ACN&.> OcCt=N@9&N%?m[n Cb4IOKe ed%ajjtF=jPW 3çi4 )k2p8dff!D@ DSU`/ʞv|BzrGKHH,)&R[7 nng)*f'n)@F7:]] HD v#[ٛ2-x;!Fv2"6%Q hJ9$U#Ahhزi;)6lsw@ @ ʡs f^]E,ʊ-ƽ7i0,?@ G~A@ (dkk9uM@ @@ hF0D P5@ 4#I:IBo4b4;] hO@ QWWGe^O4"v;))i'`2s,iw'J/FQ>C+Nv RV@' B44ٳgC󇑐^#Tek1-,eq,iw'J/οIym9h_/煅/}9do󇓐*Ȳ,*F Nұcvƞ֮8V( O.z5֠7frsr),#)+ [=,p[?^/' <;n)H@p£jǣ*"mKcCC/K{ڕ {Y84M闞fHtȳyAYD((/|^܍G4TUE7 !Q!@:UU{=J@9ƄB!lB i4o\9Tơ`Wag zwRYZIMm q}E4-,%֯e}^aO@TVU(M Ր@RrFLɦi^{$Q@0aO(xЏ<s: [ټn3z7FńCAQoΦ50Z,O>fg]]3<3gJJJ+8q"֭cݺuL8+8@ O?rǬL` 4f۶zOJ&# "%=7( UU)݃h`H:EE@6<+L‚ ~:逸bƌ~Cπ6mpNnn.Ç駟hعs'7pyyydggs5״j9i"ZPϟԩS눎&::뮻Sq = u??\IU+"p]מk4үgpY+ñUULfWvSw/'Ve=Rd @cC nw\cCCLƠd)m"gAd` 4$Ғ3d̐vxWϏo{U &SO1e4M^`m}w3f ]NSO=f痿%<WfԨQ|wqEE{'ٸq#| ロy{VZܹs#yYhPw},\Ktݼ :4_׿Uɓ'sq W-* G,˔3sZm4]rſ4x(8AcZmUQ)PNv֭h3i>{K~w z%TWH`p:PC*X.v6mmEU>Z(>?))KmcUWWu8X IDAT#{Lii Ng LTt4. "Yezu{MoX,_[ /++C4vܹsٴiS8X[XUWWPWSp/_=EEż;\>N|GxyGɗJRSQdVCvw.Ě.AS(ZJawcccl6p8Ԣ|b6Ů]p8ȡQ-)fr䐌ޠTz|0(c}s3qqd&b"/ʓPVZFfvfK-FfN&Y'ecRWnO>$"쬳pƮXjf͊܍%ϰdfΜ?ψ#1|̚5)S`6[INNf͚5ٳ'{Nʍ7Ⱥuسg[nUe#Ig};v,n.gu! ?zkpX˱%98k,)i2b$6lυ NLFfSnCs ,ؾ};_._δṉ;vՓUϊ/?ilZ}gȆ"ew,G_jѲYZXjkj1MBz@ pTav!tr= My&"t:\c&],-eKYvM8|)W^u>}S O ?/` 8ЊS:~{/U<6"w(d9ku?Г>Dq.ϯ&_b0b_3&2ןm[64Ӵ4Mbp w (jj*`(5|zžZV233q\M BrI'Q'9%ѭza2.zD9HH$15BfN&[oUۺt ';|8 z-yM999[,_1c0h ׿2iҤvYp!?#Gdȑ^ *=x8s"x<Yz(GB~\q 03fp.v;Fsaȑ rΟ?\.v\g\s51;|nj1#FoV9AϐtJjjjWD /sqх*?҈➻|u7+VPSSo.8rnFM=܁x{wf؈D;}^ϦlVkSn&@3|4d֭[ᗗNj/ow01q8ktg tvmvmmƵZ,X 4k/ApM7u|ƍ 3dȐN'q zJGp0oރ\0qb8|Ѣg+yPrF>3¯eѮt^{Cp`0G *[H$5-4@}yh$:Fszf}U/ ]Jb2"}{Y ,?l45ñ!]x<TE! CTYBuYdgr[Me._iW$?b&{`6P<#>B{w9s [ Aŋ[M#xho͛˖.a%m-LNN擏?Tmtl//U_o69ᠦ(U=5 ؼ'RRZ3.[M+i].11ba@FZԲg6;}5zvCff-墢{P(7,X6]M{@9HKMe'1%r iYQ Yn.dM]zP*Idff2vX~?>wy>륰7|%Kчmw[ܹdggi򚖖ҥK|ddYfx ̹Cdff}v ^ؿتdGa!y,GDts\|"vd؈ ?e$?UQIU45=?@/v2vEI[e4KiUWV WAOTUVEfGw״}H###P ҩ r\WTe 1 444`ِC! uh$%8 Yb4IKN]hzpUA@?uՂjfW.2d"I^LZǔ)S2e>H|B"$a蟝yˊ_N \@Ii)zoDg gq6~)}QqG w饓ɝKNN ot:̞nQ9;wԯt嘏Dw_Gד͛4x0 0 z46ƀ܁l6tz=,il@Ӵ}[n`*.AFV?,V+Unq}mi^IAt:[b;^r, ` ^`X-BfZz]kz>>Q!P@ ^^'555B4 5:"IRؙL&l6;u}mW@ 8$fMLp"ӅA@ЫXoa]tq[ B_O MUس[*wn 6%~`@ U!}P~$VS)Iv<x-Wq>Mw Ao";'Y==^J,MUض-*٧\Ltlȵ4-hi,g疯(߱%'*'y5&K $IM3@ ^z,iW׋J߹~Zml_]Ɔz&n8/6TvY6ӻz\?rR??E?kH"z֐TEIADŽS,(9͇o~HGWj}4n1p4&+Kṩl7(Mnw8ΐ,''y'$?@!lO^?^&Od*4GddаAqFE={0 l^I'Z~8pEf^ueW;Y_TpJ +~edEeWW,iIN _T/ |SNKquכMOغM eKwx]k駓$'Gcoc8lcI=QYv4 l,t@ KeM5[o}^h;z=%K*BS5fu, yVv͹ټe {y[b֋ݒ0W9d uA.* >/9M3yv,nћNؾm.Gs_5wSU80F4V\9ÒgŜ;,?Wh@ RHtB&9-Q>yյ :O$f_f}Օ5j <2tovqYYx2%ab'wWTEUGePSURR~_}}"<]Ar0]f4H; Lf{>kvrTNɉ%5˟`&Q @ 29JHVNJtrfUX\bEE˘L&/$ [~Q62U6 C߉f^m rÄ^[^¦{o/ssr?'_]!;9g>؎6}xM8y;wx2|KsĀ8. `wør}tug״vGBʍ\=.5W=f@ z('zwE'Ԧ8(ZLBJ55MQqu:8;Sil,CL{mhfMLHVP\K `c)iaUbIqޚg*hh3OϬnX %ҭTvHh/=IORƈ8Ϳ?__k׼0@ '('FB ps!))DD#d3̜LBVNθȕ>Ri[F,ʴ_"b TXd+ף31uvgE\qvƟ4~^ˆ4> dL&*?"ϯ%(7MQ`֢(]h/t (֭>@ [ȟĖTWT4lf-Efb4)QʠA 9;]xvplon{Lj}^u>^hG^Q%׻[: oYY};`nWĹ,96@ (}`-D%R_d$1`p/EQhlWo^Ll1=0EQWGѶ=䌾 gr^こ2B@ Jw;=FbJba.cYرO 4M;@]]-VtEQ B4 J(*0$$F#F1bAo-_/(}#L8c*@&kgZ0YLl/(!H0CZ  qb/ R`?:NJJq ̦v|BrFD/gNE!6c9C I,hv=& s'O hhpg.#!!լ@WQUl-؂#AA05;/u, UE@ Al\, H8+E>^\@ }"JgIeJ{X6|^ܮngK_HO>!1%?>!',Cmf̻k~W^Euuu鷗ggp(p I>]sJK/۶ga}?`Y;Kj||WZt36ښZ FJ & qꩧڳ=f#++ ۅ!!(\.7{4U_OJJ*11<7E48T&Ch: %4T@ҚR UBӫh{$5jh!dWt\ve;m۶1o<,Y>ӦMNcڵ]#F0}pŋX|9_~%=AbO?/((؂bO1?.vY8QU_d5TWWÏoO=[` {M<;;#A#GE!ˡ_3GOM&vvwx~52, E:1ƌ=I^Nfl۲Nii߇^XNǵ(hj \s)M:ȧ'j%33:`(ntCH:zW=))8nC(+WD.+WO566;Pt2Z~( ؀>~2 \7~!l^6!Y5fhlh1͟?3fplfȑt)V:%Ã娻M*zxM o{τ xꩧ2e /0~pm>|xx{ذal۶M _=Hbnes><y䂉;>2_gzf2$I ⊊QW\DEw]WU.%Xֆx?kE]PBNS~ C ߷#99g<3yZj8K5w}Ǭٳټy nѱ۪s8U!j4n|22HIMEQ$|0`XTGl6B左iL&@zZaB:}++Bdd6)CRshJ03xΧ~+nmqɼ ILl? w\rDEEr+R1hΒG\}INImqŕXڲjbbcea!DhhT+rpo9t0&~BV]]MII)HEtEnwPU]/))i7jOpk*`կ:+3gr]> e?}jzB/MєvÇӧs 7O~~>cǎeڴi/P7CNv3ٻw/ϝ''u;v ?4v2&&4ͬ7s#:tC1cL^}|"ll6 ~aMuCG|7'$RXXbkpD2!_Bi)ij QR|=>Q7ծ}Nyi)IݓQAi/,t2jkjASU;~?Yzۧ}ЧwzwNs8窪*p Fjkkua`{DUUd 7 R>,XF"c6`z g{f6bXǏ@E`=VEYkD7j 6l0>&LYW_}ԩSׯ_(=7772l06mDnn|wS\{ #m}y)'3&d{.5nѣG?=g9nRRR2^}ԺΡ5sD1Ԅ!Ӈezt4R2ыlް׋WV11Tsx񸩩 !WM~%TUsq',O' & MJr2 (BDP~ ~yPꃔÇ_98j*C7jTWGXtp(~ /l9 V=xU8!tՈ!BJǚxf1j(5QO>,\;>,;v,#''yqM7I!Dh42}47lm2sz}LV2+ua|4ֵv& VtV3Lg}rGUU.xđXf} x}^.)dp`4P]Þ1Zמ]?كyq : uMC3ɷU h4tVP\\LDD@ DEEN#"lV*++0wD& צ3Y Pǃz-(#&n88MG躎hb*Q%im&4Mh0 PīPbٲe<̝;KÆ >… y˫5vС,\0~뭷RXXE]q曥B2{$2҉jWҒPi:&(r]Mk܆7} 8ظ8\ѩ`Ŝُ4Y3T͜w3@(SהK0~bb TVUc6Q h F@GTbbcA.8EEE-w޼m{޽y뭷Z|g̘3BtYU%ϡB^H!Nr2,:&{ Be\ѱZ̤w.(c4z}$$Mk&HbDJZܩ}M;]r) wYOjbx~BvFtEAӃu|7@nVGEA|>t.ՏC!O##=.D4 @Il6TU=hDӌXRRRk٣yLf|^/>''MrU_Zje؅& wW1 þQ`a(9/1GKbjLѻ9ajkغoGޙB!0L%u ':Z8ͦl^, PQlo & j#-56N׋#60ZLh-:5!mӆNBѥRqБlF3ABeu**(OuUlB!Bt5шhd2a2B)5&2l~f1r]hft5T(WIPuV\j$9 br !DBt%rPS P:?tlt)]LII)%x؋uC 8ϻG=C!ZSRf !DA^Wmɟ(dB2nw\B!Zf4p:tB&x^QQ%Ӷ|$%&Դ vމ]!᪭eׯA~=*r[ !hb!&6>}ٷg7. M E!nDIUl+oAsra쇯j%:&L F|BtM*Oۚ? Pf<@qE1(~!+.\!)`0d(!hPTUeݰ]ә dPTZDRf;x<OLtB!Dt=#sO'>#h ,.^y{7;I[?<{B!sAwUyf~zA+ѷ& ]8,wP'?>Ǐ2IKKɏj*:б[{Z.\(7B!N lҲRTUEQ棗!='w 3 'lb]=,>H|\̧I</+V8ã>ʜ9s53fka„ 2؃0]  .3 !D=`d`XZ .Oۛ? P~&O<k7갲}v FYDFcZFXzX,h'~]~99{:;--fk.qVZ_~L`ҥ^+W0qDx HPSSK/Ĕ)SC隦df͚ /=(8|'\veu}G3~'92l?=9眃;{/˖-k9o9~,Khѣ%@ B Dn&Bq4lߖOtl4Q (Oۓ? P~&۶od ,V rfEYq~c뺭&2́v~v(O='On 2d/Bٵk>6 Ssυz-|A낯|Зh&M3<?'66orJ.䒰m^E1ydfqFz衰uoFHfΜI|Ǜd.\Hii)N=95ׯeky2dO>|Q`tKꎦ5BQ'{2Fw_6\i[UrzeM!wP.Ddê $&'֣>;_5G/1b-j-Zر4;vt:Ԑǀֿ~vm+;j(:jRYYɕW^1޽{|W :|P)}l۶+?zO6<(yLMMT>ADh">!MU5 t]YdEK\|'_9Ӷ䯫8jPzeq3Yn wJzDFErod2w^ʊ5 tԈ㚫iw>*++IHHhsf͚Ř1cxꩧB7Pv =v:\v/IIIa/((`Æ Z1c0g <s=/pB&MԦNc ,8֖-[_믿s>t{ޚU:MSG< :a4Q\!hWMӺlyږuky*@7]P[UK|bׇOWn/bF2O_Q^t #+̾yrUða5k0uTbbbaԩY&ƍC7mDnnnf0ٳ' ,ࡇrXlWknj*|M|>_>l6&L`ԩy睡~3-:)VsZ:aݺu?q)",tOUudq5 x}^"L߳}ݒq0{@ovi`4`ᄑĝ׮|f1j(5QO>,\; c2ow}ʐ!C&33b nư)S0eʔ6_K/+Vp5G=s⋼ݻsZ;M?Z;ꫯo88!hTjb25q{صuDFl6"dde>̬LbcwjSTTDVV˖-gܹx^h^.\?L^^C ![o.qq7ҿ{:v][no x&o3<(@iQF1k, e >T~C55_+F]M0v[ IDATz?!g]Wsbj.]Ǧ 8 xa7nHϞ=i8o峭>\5Zj;\`0b2!::QN())!..Mp]pK~? v{5zOyUȶEϟ3;oi5.-)ݵϏ-F>PUC'8cӮydNjEQطg\tv/QQT`Exן5Onn]!~豦xPf]g &66=zT *fM#:YLz hp b20`Ԧc@M7_lK.qͧJ3uwqݎVefgk. d2ѭ{74FFIh]gbڐXp}=v\£&11clSRRL|BΚ#GIQT @yQ9TafQ FjJӅ~ ͪ:Kg<^^;\^/O>uݼ;Hm嗹RRRPZWS]i#9% IJJjSs5!/-Bћv\- 66(w<Ȥ`gњ-bbbbQ &JSr:;󽪪'N6 Cɞ~, .c=Sr+(=%XV~iy qQUGCn~gdrĉ6O?W. 9%k-$tK I ۯ?=oT~޷o2=z΍f1[;cbĈ8N_š ۦZ[Rf?૪OٷwPKa{>Z)?_Qݠf}Qq*o!D#`C64Ww6Aff&55F%Hd.hbcc~1)DFF2-yv<}zauPu ]qո@ͻ.o-y,&!>ABd~6l?c۶|""̞5;~)?Ro/?>TިvfժU/YZy'<2﹛۷}[>99̜HoCkK:̎]@t(кz%;6bgTWsŗpc`]aύ ]S[\Ęn GOvoh4zu[>",%ThkG 4MWj8Qv222@0#AtL4A%hD:Hr1 ,xrCrph!22!][}ñK_D9<2s#""(--ägiXs!11DΙ5ݷ|ͯ/Ntt43gV~Eϭsh͛1c&O=Tng6>jl۲=>xiSUY(~V~qf@}fq,KiL&@zZaB:}++Bdd6)CRshJ02nHrFV#]5L-&&6VBF"Wp&˛Cc2ؿ'4oՔ$ _DGQvUG3IJJe&r[ !Nw~;￟{( 9qb(}]wcJa'cbbq׮F9:ġC1c&cc|>l6l6LԺXyyYk68is'6oOHdC8RR죤 {v}BYiIv n]ykuR'._Y :eeP[S|w~z"OrO>MzdEUUqAi=UUU,. 0R[( *)--EA&ʇ}W|NaV q)))!''7F^1nóBiS&Of%#paM9]kn7GOzc0s#~0e{-uCꑺt:;wKLdϮCMX <}[6GG#5-()> zzeKu;nm_*=~OBzȼx|NRR".婺⒒$d6rIINb!vEQSUU/(Mx`Wr?+ʅ$RoiӘ>mZ]w-]wmi?o7m}1Z˨+dԕWOlPZ9zgZ_L&ilߺ~QU /q:gC||^ErJ*9}p8M&EE6ޱZמ]?كyq : uMC3ɷU h4tVP\\LDD@ DEEN#"lV*++0wD& צM&(KUU/ k5 @NVEE$eֵs8(зO_~bc.ٓH'ʺ_JKC隦q蘠vv7=K6ukqEB,KX-J#Mu}@:***lc|^uKXo2HIN EQl>\ѩ`Ŝُ4Y3T͜w0 P#sxt]'<5r+ϑdo^xa B2o KCeEB1eXtL {ʸfc+ 3iiAi< JF^ l6~Xd4IHYY)Vk]b6;aK.z2S6@ 'Oz(BLJe؜TWV3Aqcb(W2ac'?>6lॗ^IKK'=U:u*ǭ;`СL2EnN!ieޥ򔘘= ͆Gi躎hDӌXRRRk٣yLf|^/>'(^eڨ*='ңq9r&u'Ո]^`̙uxG3gN(hqkf̘s='.\BёDJJ 8NL&ٌbjbXX̘fv;)c~ Px y:VuVj"OՂ5ŠE *u#}~vnɖ[-&M쌢iii-c׮]y 0={2rH>f߽{77|3999p7{iܹ׏c+JKK -{7 ;wl]^^5Ç7 /l|ᇜs9+nʕxdee1`L¡C|Ǜ~"4Knnn(}\|m~ܚlc)ёJeE_0'8[*Abf-V5ͦ6(]T"nXKrdRzpڙ>cTU%gŅŔQ7ځعe'=x@ҳIHWسgcǎ .?;v`ܹ,_L43<~~38{7tRV^ʕ+YjoFOQEEEwyiƒ%K5kZnO> [G:'|ȑ#=s=l޼/v񦟐{5_0nܸPbq[=Z!$d00FL&&)`0" Pm߆>j!wP.il~3RV\Ɓ}0[l]3pvD;Xq}SO1ydn6:? 2^h]2e 1110uTv5$99d|A-[֡ͤIՠ|2~xXre{mjW-Zɓ[<ƍ:thغ7x/Hu̙3|Ǜd>lze]Ɩ-[:~ KyZ+-=nk xwEYd9ٖ^Y9w<ꕅ6ǐ;(Mm[ndfgaIt$G~۝ѣG9#F`ѢEP]]͢EKB;v`ǃ bǎN5551`*~;vJ5CoJе>]y5kw^ʊ5 tԈ㚫iw>*++IHh`fb̘1t{83<)i,^SF,;Qyh0t:)/+ "M8Лsm_9o T%>1Aܗ#JPAUss$&qx@Nz))<>^&>8|p3}tngرLk0tdd$\.NgQTTāo k*d***&--l***XdIp lذ{m۶1vVDqqqi~-Ǐgdgg7gQUWyΦw}OǃvЃaXHM`jkuM.BZvI~] &9k֬W_ !7uTJeƍ V7MFj+@Ϟ=Y`W^y%\pfe˖zj222B2j(?Zo٘0aSNlӰwfݺua1˗/g֬YaͱrǛ^3eѢE̝;'׭[g!"C, 1˾=q\͎^(ш_ӈOHmQ'L^=-K:fW.z`ᄑĝ޾=_=6QFp8'//َ}a…?|ؗc2o3`jj*g}6.V!C' <+Vp7M2]^z饬Xk9d_7ls>>nsYg$W_-"nVh2221rQ]~ӶOjd4ib*M~|k$11K1-m¾;0M(UMBRHZ/&} 70m4~_u<.XwJqQg 2]YU_|]jmTؒ׬16VpmÎ#B>eUu# ?jAv022k]%Ǒ/;EUUܵQ-F>PUC'8cӮy$B!mHJ3İEv?Ifv& d2ѭ{7] !B!$@9~TՄ֕6[|=F FjJAB!BH91JPc]pS-6&+_AяE)O#B!D'3''燭uA*bcp׺Aͤ;'#B! $`0 ¡}LdÆ$B!BfEFF2}tB!BĤZ@!B!B!Bjgw>iЩ+1 *Pu] z1QtP PPP--B!t̾};S]SFtTMGuA] TPU] FJ]z}BD7#G wB!ObÇ+ʱ*vcڨ6@]P_!wB!j0v)ZOXh=Y٬]6-]1cP~#Ijj*o3f@U54(ٳ'999ۗN;O?!CmZZZh9̝;~ѿ{P<>뮣W^ 0I&Q\\,wB! RB0pڵ1wyc)))a޼y 2GyGnPU\xᅤѣGF I9ցطovblٲsE=lۢ"ҥKYz5+W?gժUm~>ĉٰak֬o߾} ,B!$@4^xaE0~_Oee%믿tR^^b{RwX˗/޽MP{3f̠;y뭷xINN&99|e˖#G$&&]wŖ-[B!Ah@QUf37oOÁDFF q8Ġ:HcƌG]1ڦcϝ;&LЮܱc=4h;v5x< 6LZ!B 3|r}1|pnw(h  RS]͌3Xr%^{->Nʾ}>|xt] IDATɔl&0zh6;Q]]iTZOstDFF;N\.WS?%!!˗]+B!~?ׁK,X_|jp@S&VYMTToHJJ7$..0qDX~=۶o_ /= ۷ٳgw###qݡ. C}v~kB!/R_2vX~6ϋ(&6mm| @jj*:NhFEZZf7T$$$0}t>@0b|믳j*핛ƍCͲ6mDnnn=B!X?y JGMSQ?b2INI&9%USh4*u3:fMxܵB!Bґ.0awFtPrSߑDG`0' RYYb&bY@7`2PA@l|,)mWss f̘3:ZR!B!ʉ_t(8س(Q 0T]A?߯A QW445A^!B!N UW.G5zx<Z㻡ށ<@u#;IU4 6څ;@!BS5@9^#/[c҄@>XVRٿviSa UQxsf<[jkjxr!BхO̚L&[o3:O0`~AEx^%Y74*kJtPE++1bB!Bt!-Ï?&+n+U3֍ͥ UA ]Z-IKdL6M!B!$@鸇gfחsQRRJIi t Asy#33KB!BHa6--[ux_!^!Bqb!B!$@B!BcTMJZrBG1bTU@NDU}T(:(AEQ(((W_B!e(n'6AuM . +j]wP @WHP :^UQҗ|h.y?EEG *Gkښ.}M.B!JחJ.r,@u4]ài*kz`0!3yrqi [҄B!Nd2S\\BY!&2<?U'jhaMS?j׆r2xW.B!B1t0Z-X#[ىh K["w]Ӏ)҈˽hh&,Qf""l7m;@!Bdɨ_1Tu5^+f*Φhwf>|ƬdV5k΍ߍߝ=Q=*X#"'TTT?#B/@Q^Ph Xoߗ8YTp]W]ʰ kX~D$ڰ4 # x̼<222khiicܹsׯ پ-dsѡ sR.B!NEQuj@!P_ P50Q T AB39JwnUc 3kƒ%K5kZx–қtRV^oãŏm.I2HHPJգ@+ R[czVڊXZ,B)ۊZQE"ZTn $\&3dn#0%x? sAk!f:ʧٳM6Op50gKqq1@˕eYl۶~z~uR?~S? ћ믿>u!Bvmte*{Wǝb|Z_&VhJ>-Q#d{u_)r>#sW!Pp8AyillBJKKill駟>i1ES-GKKKf~ ۿ($c4:KnJBqz,} J2IJ,lݦ ;nڃ;Dž?ۉc:8+@KSqevKITeLm}c{nٺC _K@ u.,BqH@ &(2X;k:<( eL&imiœ4ۖmXfS \qƵKN;v, 3f;஻*z!Ns2w\;w.3gL=Y/ĩ6yʕ]^o%u1Ķmjjkٽ{/\iag־giTBXE>bűXIDzTJ`63hi8C<o`ڨzC[e۲&3-]s׾1cW\qַؾ};yyyL6Yf+K[rM7w^&L7Hyyy|w/Do6p/׭Ut5K4sE (i@ cƲk6|B!D*3+(ʝw,XƆz-!B!)',AB!B!B!$AB!BO;b?nZB!BgurEH- !B!NPSB!d1(B!BIPB!B!B!$(B!B! B!Х B8D+vǑJ9EAU40 TU=jl±ll](j(";M' BCI,% R[SM$J9TUQP0\\nW$qLJ4O1MSHdgQR20$~i$AB!z@2$ SUǐiR1mn%#A'D;w'w27E9l,`;!a:$-K$Q׾$(B!Dg(N.Lĉh\ZJK8LS]f"A P kiapi)PXkd"ju.^] p=7;KضM(bѼx?Q - .H$i.Wxvv_q\~4440}t ,~ixh_J@lL,L[)9I!^^5P4h-̈́ALjjOv0nh,FKs3hhl;Ɵ_}ܔW*D" &m%+(_͛7vےQxKR**ֳls|'tP{2<yyy|+_a͚5'5D׭[]w݅ .୷ޒ|ZcI=qR'%% "-1Dr;ߖ-[:u*@@ ԩSL8?Cȣ>ګJƠ!=pr?jgqL=--!;'Ɔz:i^/(8GFF&d#;##ps8#'aD[[VKQQQw,ϸq)ĈG{p<9?|BMM3| =㔗3d^{5ill7dΜ9L0ۯ<ߑX,FFF/XjK,uSk.̷}JzpFۄv+h—7M>|Dv_C}Y/_ɓYv-eeeGĶk甗%AB!8EQuEx^ KJ75 hmiaqƿ撑Íq\d䐞f"qO1)WM;1=a6;oc_e%eׯFcFEYiY*I;BA~}VyM}鼻a7pv7|˗cL>=U&Lb&> w}w%K0w\9r$O<s:446{l|I6m?8#m6=~ `ѢE:l*j&_|g)`fd3U5nCíx47 V,FUpws뭷[ B̙3K+zjoSO1iҤ^_gK!Iq  AnA?t’btAкQR:闏qh[mP}'Zzh=#3WN`71 C!.8i_ǻz ϒl޼ C)Ȱa8s x(yQ.o he~uV}]vAUUU׮]ڵkko?qy6nȆ طo^xyƍǵW_lfo`_`@\vV7c[Vb{UYb{U l]CMC`38믿Nyy+//_oK/7MV\'IPBӄimqAwMVv6l(@یN8=_˱5 5d̹璞I,ʠAٿ 7ǡ$eMx<jjz 7r㻵^xbn6)--{! !?0|̛7>.\Haa!>{M6O>dj?_>ܼyٳ,똶?+j^^.%hۧSUQTPpPA`6〮ē&iׯׯ7oƍ3u']BND'i8+mۘɶcw]q̤eYضphOqM&.@my㯯ۏA"5,]U-`:$Mʽn0yy~_9]0M]َǨQHQ({u3̟z+?Ne>X" @rHX6$,B-& 5޵7_+jkzc,a9 )ԄדG}??] #Ⱥʗ)S_4dٜ2_={UUUAf͚vq wy'v"Lenm+߿qmc';~'ryhB^߷kଢt4Ua.ݏ/g-gĠ<3`W { |Y{c ~G(" [a쯼J-{ogCQ\AB!|`&c[O  X_&_?ٲiŃ'rQWSCK$B 'F9Y8s3yuGq`jWᦍDQii RFffP'S=;*x+(.D("-Ϯw1cLrE,&PTTĺvM5{,Yw#0qDzji?C}Tt~w_gڴٿ?C;lFF&0x`{l1oy GWp4q9e;,(07&:W^Y?̃~/dʗ)++Ǐϫ_:oiʝw,XƆz /B p7/N&mc4I&޵@4x뇙L܌s0P@V.]@m-͡vSA0 >F+Om纳~'-- Uk!x|֯{|p(x˗qmwLvoL̶mY)**4L굜w^Վ{vP8D2e_u5WL„&Lj2Y',~=%OI17+Yk쫪%K BEi\l!R?EEd䤮8C"HU rsΥ@M*AYfu҉_htj4܋kߟbIDATH8BKeLA843d߿?-\v:@'tpz :Iw bTUcI,4qPU4iSa+|(9ٹ> 89l&LbYi2,^!UNQTTUA44Mkljaj}^!S5d2aƲl dfsî(m444󑝗B2@մ:8n6.d$\3j ("IXe(gƠĩ_O0Md2Z<Ǭ ؈mۨ0u0- ~Ӝ$(B!D';'Ɔ:2z=c6iT4-8M&"y< 9y46I,lݑN''H$IPQ4]u(--:8s8u wt7Aض⥪Z{ק˪zF?$AB!z]-i~Bud0 d2?Ok4J(v3ƃ*mH4r 䤶i a;6449.B,JӲvMUUuݸ q jb۩4qT.MP5 əE!E!%m!6MTM vx`c=e:^OO*5_7]7%1;O8\.W73! Bq4ܞ45Qy>$~B!;ԝG>6ciup=,BӴ.I"BUQ#'{֖(t dffQg/zƆNP$~}:~!=@3 d׮ \CQTSqlZ[];X-͑NUU$F%áT%F 3ȑ#vwk_ߍ$(B!D5]. Xʷc.hà 05g8uDuo$~};~!=9ť2zalSF tݐ 1MuB!B!B!E!BkƠ쫪B!BRʝw&!B!z8zKnSIENDB`KCemu-0.5.1/doc/sys-a5105.jpg0000644001050700006200000002725410527416074015043 0ustar glaubitzfbedvJFIFHHC  !"$"$C,"T !1A"Qa2q#BRS3br$45CT%DFc&EUs(!1Q"2Aa3q# ?su Jj%;m7C☄4nO֛i+`QQ  { s)e I ?V[8xcXQ_1|0A녅yX>k*2iW q~ixy ʘyWQ<*?|/;sZ-4fHc¦/\'  Lg<6v6sI[%-0'd9τHi&pSGX^*& fw#)ܫyWG d۪?NS-4p+ -N;!`A'+/g=W(oG;S9}W -t jz*jjs5x wTƣw.[OO-UX}õP֡cN IVxX$Ϣ9}HOl-**٩nDVVe;)k%qdO]Hֽ!iW 6`1 "IXFwF^q x%ǥ# TŮq2uaHc؎+]obQ{v9\SƖsխسMI@WE B4%>ɯ M \DZr3˥ԑHCb˷':F[`\Ee3V0FMkڵY$W]g6VZ^ȃgnD`|XYTC sq9GPS&WOf:6yfiWZC,=/J9`=ݠ"[ؽ"kuwg&ܒVSp6-h0OJ h<,@!уa+\73NƆtfMhef kJ:GnYm@-TUQ{Q)rqX'N M.PfbJT\WT4Fzze[WOebfEFzxpBor>hkkszX?+N!yGI@(>LMnzN配l~2W{{9Pc?Cn+XXpn Vf%GdR|YLX]2CHښtDC~.^QM'" h$a.q\ep?D+[r\ VIȺ5>-WI몒:>(d#^7R& FoLeH,vjoK߼ I}^KcQGātt<0P/ukDUPVO x2١y|AtZɰڍۇZ\bP]:sIPd]<&˂mͱpM ҳuS!u2ڠf74HqmՌ)JMk[@gp>_^꼻~S k{YeGNnSZmcs5>LZws}eˇsZ֒C2Sk wUfRnGc (| h$-R碑ipK$RW(- ysg}5MR>>lG!tw*=eAZA([Tf/Dž:#)+:Mu{XpLn't.~>`8:`o[87~+!+g>K(] tN.'LȲDu,OQJCh_;sob $b7QRlu-#D8UuW^*[jg>hy$?X.vRBL(YjtC6DS$rW(eĆN+4.q8ZK:,MFFQuaGRO: [MˀRw_j 8i[Mn\i-P0f }7 )r4t\Y䍭.v `@R>&mo@h[͜iq6YZw0Bg$OS6N^Ǖ+d*LȤl'S~q]@&P.zPJcN,]$YQC3k|[c+H62] ட* =<3b:L%2o$ku#GS-p =ڕ|#} θ8zDZDp7Xi}zHmsY>N#z[B$ȩZx&:ٚH4m{\;Չv>rR7&J ]]ȶ`]-oG 3c`k:o<$iw+1+6 h>i#s9 J>Pζh_Tvha9$>5N4վ™k!|M7q䦵{rVb;AT}Eknh䥪Ag9/5<bt5OݬsGVm/^@ rzEMsEOu)QMj &!%dKRk(w^aE4}> ]y>1}?T~k[e?2@׎4o߂U+݅RXWz&1ͺX#IAZ`XkDMF & GGxZ`|O:#2KV0 0 >ӛa=݉xLT"&9&GIG'^.FL0fJs>(O&~_\(innqؗ& m^3}>)~w;R퇦ef!^ DNyKi[DZvny@4|'Kvh0GD`Az(D/)#f&݀k~wSSsJ.qT!l:&zW"c8v|qrFRyOsV`Q,D2<pw~&(r96iۋ]&JDx1oXY뷎p r5WVB-Pn)_e{,MS;;yBiVDzVuX泭JOVV4DeUMt}, coω(uA[;*x>k4Ac"w4]? IX@渂Ԩ$jtaBAfYS#P7Ul險q*c[92'UhqnTN&j8NRܧ WAg;/`>I{|$K*Xv+#a}}UJHUH9&Wx=_7xӑ#$ ,OKCF77 $e Z, >td7T6VRS0јLQe8S2 s)dz604/XFuYsH-ӊVI3&GJ:̮SBeDVf=˓1:4{.6R4&MRj)8˜ .J]I;Ɯ! |O">@,kC$.m ,4E4-%hI߁Kn2zdͽ'1iQ?O@gbnhȿE0USxqǴ>Nb!:ݭSie1N۽8lmVQS;PW5#.l]}xiࡦ&xFJiYv"#g_^=AcpҸ{QXO[lpK~+sl96e9Μ0aM؟U8M1 C&o"{4 #JS+9w 'юadxpm?"ySa.jx#ʉ姈d:0K27VK!q eB7;vqZv}|h3fjJ)憰TSSݸ^8͞xiemN ;]&6ݻH={`ɳD]99Id>:K6w:(Uxct=qkc$#v״-qgȱ؆f?3ѦԷW՘廩dՋI}h6d lh0MC~+iț&iH R!S}6e¿YJveHY_)QaQ瀒֕Ds?*^2}YI0ܳgql0g|QRTP, ΍n 78n^NaxLKi&#stM~UT,Xlk7dj4%Fcs7#:rt~+`qӈ@h:SϯJ1A12xǠ卆 cO,'Mcb{`p^41aIhG +:Mw -ٗ RJkF*l(ݩ=S{,,??c?e giOG8~/GOH cNlI?y(s _K.ؽpȔg1GE~ 3kx|r2g %1M .Ȟ857> `<.= Ϛ1D;5& ) .1nh?cjѲjHhlq5aƺZn/r瞭1xcvivOָKOk.I] /mc %0JlZT О G+'Ae6'ql`$+crylH!gD^0[f8Wu' @U04Mu%g8VUiQl$'; NCK$IY˛zZ9ُ#7͇sAˉ,2b7p?H'fkI68ܑČjHz8rUhD~) ؈HFL1E[K8vx\qOaŝ]hspb#=~ W^!q=SSɋ ⹜h[^J͊MCfs/HH4=ma')u񪌌! +]U, eV*F3s^Hݍ-{M_WnI;%c;MvдyXTc;⟻lDJ7KiYjNK9iXOuh俤peq8dvzn{M?ru.#8G4-$Səiqzkcb8Amp[G& мru.ekX#d}/BVxZN^Pfw1y&?Ae}.S6=c^Cf4+;(Bx9cycXM1cUq^ !) ;"1zj )Ou9 M:j= J5=) 4lAn{hމXAEV cctoͣޛRپSycŒ ,ICbM6*{cֺ4w)H¦9f0c_ml4d  `\*Y6ޅ㯭lacu-ņH ?&6m<me^ 7Ubбi6KCkJxdC&AQbl-.K[}O$uQ5pmF,2Bv! $GqWORar5ܱX:ru.%<"l#Øs)P@x 0ᴧ4&']jZ#9ZHk>bJfUO.š%c&Eck1oq."%H(c:㈶bt+0&(ce ps hK 穯}=8r$ XaLV#x\C.42o3"!XO gkХ37*6lmtH d,VE]grjlUdPI359hA hFZzR@ NKvgs{IĹǴI;\қ9ѷOORE i'mGsZs߆s\\ 5;U,Rzc-ilu{%tFL5KTZfw:obO $'QWJeBI aM6#")@#x 8i;T54\xAl3e} 4U2j؀g1"EUXkjә`hsYfz|2፫$U 2iv7{S_7ј2 7=t'ĤRf'쥒j{)#C-mu6j,XQM3 $mC^O,z=Lfë0jW\[7:AB v,8MKbŽakril%=JE-t4ϯDMc˽%4QW&!5<\oZ۳M1M4pfGupPA,aM4i~O+>7X3dvMSHlG=+rE)1ؕhC4SI<Z;.I0pRK{ 0tEFcñv>3R7>$*ycɤk nZMPaԐ՗xnbeXu(B&t4oL,=U{bF4ԵǗ,1KWze;o{\oj(qc1v1Rb}>^\.:Xon^ ~HqVch'bk|u? n+Z 'ctҼtq{%rjV5FfRTKKQ< $ ) \HnvHMTL)ZX:(@)2 35ʷf{˺=)͇#@h`272Nǖ4!7`0ѵ̆6E YcE4Oc,RA7Y"WFH-n-p#XR>jE[>m }&X6:HR9$6&)_E" ]6~0Y0(&8l:tTU2]U(a"᡺w"rxoߠ)i$ԎCkr8n=қRBKI[V8{8:fo#溅p  vOD1#```s٩2a?4=W!o+)'mcU(7FkxqIgG ɗH7>kfk`}Hk8R7Gt4T1-,pQ ˇ X -n\\x跐MW)l$J$=Dc0baP<:-#ǽ=r* ii &Q7 KT>(iZ$s w#Bv/JF+lHcXXۓt㊮xCfp\im,TtFZֱM:G}ϥ@ͧ04A @N0:MSƀH[&Εho I {Pƙqw:#amu~f}_9+HsCDK<.OQ8aԀ$_تalVY0rceDg egzMFbvHmYQX0h+d8ͽ&qXJdHi s 7&q$[\e íũ_8LގKI.Z9#Ќ]NGsga=El;,Qnr4؅U[*=[34fHˣtdh_CcZ4N)"9.8aR492%jܸ^76FT"d::^zHXcrk2eo4+}{6M_ 'Q[W+ɷ ЪLCc#.^Kȡ`Ds#He627FFK]{EW6;$W@\y[ņF\JJk~`MMR{*|s@]}?-H\F0g>=`blB6-+p7= ;ħ3!Â3pә-'ߠb*tF&:\TW]Ѫ7 ө^ź[m+ujLB+='s'Os2M0'>ʚ|<{,+?%X BSSE~=l`abT"a5.(  ,}CCaMwQR`PQUwfEvFvʪto.@ C!(P7M7|;`0:ڪw_X:HPiG{>wَ1]]mXPwzd7 9j/:lH,=ƧFÐG- 'e:|OK+aoic)He2={;jqzzhHp~^ ÃacnF73 q STO0X1<FmDH/(-0gq iյ֓Wnϔ51l~ ^ݭpn&~L9bt'e016Dm]2>JA4墪#|J GcaoiB[CUvajbGbz'q))j-((X:m+W ꔋ;nH˷VLv$`?oAUVVgo{#5{bѧwav.G>Υ FFCx\hRKw^]7Kƕ;5 O{~J1b~N).=^nV`_YZ a&v{9?;1WO?`DzH+j>p3xi1*$6;Ӄwp_KIX:3WII)*1}ն]TDíxQPOMuטE@&P__ iaol¾_nL)Ja #@}3F9&\,6>֨SOpn>,ZV54pvvAEu@ |rQ]] eWTV }==4JSWibR Q(€^x!5 Irt|c|&x{٤t!}X:}̌ ُ!8}=ㆸA\Uk'C7c.j%(W*|AENM}cz5LzO]ZOaOMR"7qEw{3YL pC3QFc㷉He035ISf%RS&v0~qS kf2ar3{T !nv&->0hhl_7!:ں5h h/*O}}=(MgdRXCCjj֏O\eJ q˂EQExaOqqEAbq=^"57_>Eլy5HQ lhLn?Ƥ@@z{~ 6LZmk/ ))&%kR*\n^j\5^P]]CÊoq}<}D. cv#`A pnjD='jcc*L} L 1rC!akaL+(IAAqQ[[W[i%5M/ JO7nOgħ3q֝v f(/),6+!fƸ^솴 8s0OK*qtpy\CCWiT&krڣ( Lb:?6t^r>^*xM*ȭz|P5enenfݐ_TWaMBRF)]zUTaܻ[`nM'x%=Xaf6li  Ff upiv8}L}2 Q`1(*VDߙO`fi===T2{ 062'o<VL#'>+d2)Ar/*jpA!RX,&ŰۏFJAhhZ֛ޢehi46JзH6WV\yr y\twsi~°prt4Ifs`bb keTīIRx{Ɯ' Jշ6!l V|\׋ ʤ1 )(dz,&y='zE^}(|8;$FT =ffpu޲ Ē#6Sf:EQn?Xlo; ISs -[1OӳVe[zw׫XwmkOCQNiO$333ƧńƧgᅯ:(x)yYYYRN{{[||<=m[61L88;ã^)6W}ڌjAyA^1 H"|vV[ޏ a5gF $M2տ6cRP9"r0<=p,;LOIV^z) ?B>VG 5| &5G.FYyK_ܿe,įg.@ t)z -΄L022&#C ;UOůq?"ϝlm3߅ZÈI@ tU"DAQP((@ @ E ] 65ؽ2ךo];"?UUضg?ɄJLM%ނ#|J݋O>B˄:vq: DeU%"wnӂpvsS2)˲9vNAƶرXr qlߊOҦrʸ ql6-;\5=70x`ynݺ,ؠySXTEQ04EQ(/TnLJÁ߂u *((] c-y BfˎH#"yTBnV.jjhwa *8x&}9+n%yCC+7z>r .N}C=1l6ܸrYj]Ƃի뇊 >*ӧ߿?zn}6mưWNpl Ba劋Kf:06vpu뎩S!!A|%!M0Lp `h3p vt7+8x&RoƱc6mX1:O{޾E =v ǎ{x3(eeetD"˗qe,\\q H(@G|?X[[JJJpC먨ܹoA(6`Ȑ!$lܻwsz /] o?(++C~ j6AoO>W_}M4RoH$:H$hll>Ru}>}1.7rHLHjjI \r J:mll544 fJ qeݦչ)A.b餜eb0Lx+#^Q nnƎ> ܾ}(ddd cƌn|ff&`ذm>̤+#=;ӯt*_.*Bo022R#7+ L&S;MAlf |7 ab[+յ@P_KB\.\=\!HhS}]=emX,y`e2=9+uS,:Fq_ 'N$ 77s羥"_|9Ku-}?kAuX p\p\xxx`ҥ|"R_?\wyp8֭Fobb1MMM{ァTv8r{o W$BEy3)'qY #< Y"^9kkklڴ6mԩ^[[[l)SkiiOEmQ:%_$LVS:e(  466Dt\ @hf߬ _k]\T93g`E :F6l8B/ѹܛ9>VIvu!^Rlmm3O}mj~b`ʒljk`00cZ'?s"^R1 F J'Y=b; ٜprqۊ~:"^b:O,]\H|PB@ @ "DAQPᥥeF:,g'碠kOdtB׳N'#C q@ E DA |r PP%%%Xz w3kJn؈G t!UTT'~=Op#9 |QЅTԶmxk\^!p`nn b,/</oXڴ6,,8wll0r(ܻw744`}b+UWW%Kiy}JKR|Nxo|TUWkl<̞=N.nj3! U*bI]@AgjV-yRr N?<K9FmCY)n"Ÿt鲲چJ¥H$߽{n߹?ϟÃ00bͪmQ1_䥥%xͻ sڪUJjB㡩I=pvv..έ[ GGG:$/**+>]Sr lڼ wCmm2q4M6&Fpq++kyTP2fllpFƱcXr c٨k>HSy+++T^%9ӧOi e5i%.>ټcƌ1f3H h@*L([3 Qv&<|`g:ׁ``՘:$ fΜ{{{#99݆y@hTTTtX޽{@QoX$>}#>ƞݻJ>@Td$]w oa`}=y-[(MMM ikm<zyQC }2TVUA]]R)=qttę;|$;8o{nv7uo`WuԺukajf~`k#0l0eڵ024Op 4`i x{aC80eTU/ 1c[<A Q^.Arq49:UBppRn$W뙪Jt\2^8~xum++CQTo0Ck׬!W|Xp9¿5@@ E "6ed&H2> z X,&Q-DA) HP!ȀLǘLWptvQPg9I!"%Fg`Xd`-J}D,899{((zǎkw2 X,{/I IDAT˗ame aǬ22PX'':- % fR bHh/CS1,[(B@@&_穷1pd2YݘSng QNrB ((t[g((P'NuBdd$M%bBuL:۶mSJ_筯D"ѪĂ2e .FMM }WFtt4Hx{|سg:OMM'RSSeaahJa]eeeSN8Ѧ,##AAAǃ/h9ͦ!jKiK/up8x<pppSb1abbl޼YcfٰD`` rss򥥥aҤI033&M^S 8~8^}UX֭%|>֯_b-tD٨sssZ~}L8x{xxxO:o&LlL0)gx\.Μ=0lٱ+tM2E隕cb̘1HOOH$Btt4bcc[DDtcJr.SNo4ύAEEB!?111tPx<"-- 9994v766"-- {ƌ3<7n<`)XDmM#N:yQbbbpEܹsoƅ pNk3%%(_"`ǎxhy}}=lvqm'Oqxj⥤@DDOl"(L(P ?U˄ uo(___AQ~K RsΡ)cccꭷROiyaA>Bx<ʊڸcKS'W ׮^\]]S{wR)%H !!!Ν;5/)) Gח:vJymŋݻw+QJ6lH$TUUOg͚EEEE䋊fϞs>Mn\\\*R˗/,--)333jϏ:{,?{ҘwTڿ?Lq8LJy>hjb\\\ǏmOff&r(ԶeܸqTLLRZLL 5nܸ6w*';S㽩IܽB-[zf j vS\X,¤IEFF7tFμD|1֮]quL:UmS]M>v 11eee6m}裏tRKPݴK[m_߿v9wBBBT򆄄ܹs:ӅU7oތtܸqYYYϧe8p 0`;M.?o:u*-Zګȑ#G0bek+S1m{PTTuHBBS̛7,Qxfd2${FciR0Uc떭BTd$i/qqغe -ܺ:w8}e6Y|>_<,, cƌQUV>l߾aaa*[nE]]Ud'Nի!!zjTWWߒ;;;|طo- V BP|aUFL~#ݻ033Ν;iYuu5踱1:M탽= rd2v؁0Huީ~۷#..ii8a7..J3괄_"I >((Wyѣgn44z̘M6ȑq]=#GXQ9ߏL|ڵ˖-31|XXXͫx)+,,T[|hjX#''G)**ڲ`l<022vTޜGY,&4;Mqq.*ڋkj>5:W׮&ʨ.aA>/%XpU|Ǐ`iiIۙi|t9l7&M%~f'O?7row HUU%*QXX#GWqfaE?,Y ===gJc:t/^477?XM%?OO:+7'rnt#߫]\Ӹz{y!šiR5f$AW:ooz&y>/R@(dg¿yW扂R3œQfϞ~8Bu.b |nEq0Ldԑ#c٠(%^Ai#yׂ=Ϸ"ښ@xFBnbذa065՘/oo\z~[d!D& Fr ٸw,ll۩)&tzț',-,`ՙp8MMRPQPNzlp%QPlxl+(<2B,VȤMJed& 0 XL0YZR@" ?C$!t1051E޽ =3-')R¨Qڽ/R''g0;x0wRocرpuN@w^`9v254UF Bґr3Iok bHXPNd9 =;TM_GH,(e! @ tY’+ϒW[LԛMS SΤ][AYX1tث*ږ(2tc>~L{xV222+++x<"..Nڐ +f-{ZWO(XXXprrO,#88&&&͛۵ZA&LlL0)gx\.Μ=0̠߿.ă4O>xw YYY;v,ƌtD"DGG+ 4JH$HOO>/^$r8uR'Ne4555P(Dqq1 Xk.Jaaaϔ>3|Ԯ˗soرcann;wСCh[XX`ѢEJ`ǎ){=444h%5jX>yNNN ?E?BCCw] j HNN\rb&MRbHNBru *j-چ2!RnD?q忥555k;TSu OR\v 2L6M6}Բ{ҥKuxux,#""PTT ==O>ҥKHMMEVVJKKqF֭Ö-[ SX-[l2XCBB͛6o<$$$t]d2$Х`2-[aeeH_uZukw’'g8nҡkc Ø1cToժU}v_{lݺuuuWM8WX,X,իQ]]ݮK1#66v킕gG.[winK>~xeggGhh(m"CG۷#..ii8a73wqqVrYYٔ W_}/ǩ'+H$iSnnn|ش{1F={vAqj[3i&9=޽GeZX~W_P/%˖-31|XXX1ZJJJ`ggKlQRRֆڠXkyXX1eJ"""brXL&tƸcAcX @___%G^^8J>Ey^-][[KEg 1BC %#G@|vUUDaa|>_ᬧŋaXd1Tz*q!\x ަs?JKKQ60bkۭ ?㹹*SJkCOO#)) o6qdN@>|X) Nr9+/GIqZiS~|~=O8}:#  !~ͳo_jkkQTTUa;, Eff&PRRȨ( 47xV[v P__7obΜ9ZR\"QVXuXСoՅХ/@mm-N<(Y jXz JKKQZZ?\tڵsfZ$ ޽{zp8D jƍP[[ <<7n 7-A`!Gu F`ذaJwލNW Ǟ0a<ޛ1rD"1&CN?~jU zEqB"abb ѣG11a++>||ǧlmma~~~C߾07>Z(XLt!!!D Ǐ#22 6ZSA;[hlhO0b466gD03r3 $d曁d@ٙ8ms~:t>>>o19 f4#wEQ~xvư-L&G ''ӦN! 7o//$]6 QP3{UESRWtY9wM{GEv5~V222+++x<"..l:XXX 88Xl6޲yyy[+ǃ ,,,`mm 899' `Ul7͆%/-- &M0i$ܿ_>bPꫯ]kkxݺuU;u`nnN߿'o!!!ᙔӄ  &<7%řg~;}< _|yK0],XCӼ,;cƌAzz:D"dJ$H$C__/Vs\:uJ'N2~؈TTT@(O<qg(x<rss|wry޽{cƌtl7C^^0~xdggO~,Dt춦N”)Sŋsn߾ .&lb% v؁{7F\ɓ:MRRRTTT ""HIIۧxXdEQU&(S *eB:7RACiOsPƔ1[s x<eeeEmRyե>ɣʊ 򩽻vPRH$mjΝPPJGRCUK;vL6aݻҌRv 6LvK$קf͢TEEEQg9c...Çjkk˗S}vZG={={Vi;*@߿rvv8CݼySc4W1P...Ǐci ڶ'33rssS9kEQj2n8*&&F)-&&7n\ܻk=ٖ{;Zdɓ! | b&M/22 Ÿ/@T6Z eeBܺ ҥEu!1ݭ ҩpӧOGii)]HLLDYYMs>jٽyҥ*il۶ J搐!!!8wt666Ji7oFzz:nܸ,Ӳt 80&DL:-MUȑ#1bi벵׶=(**i0oVVVD\|<-%.[l[-w6lΝ;;TOYY|N7yXXƌ2~Vg}ؾ};TƯ=n݊:&NիWC,C,cըn׿%vvv/o>Z. ammRBP|ap8*7޽{333[]] ###:nllN}`ooCCC|}>hjL;v ,,L1ҵ=tIT\G 4ř8+9KKK,l._Х8t[kD"ASM9 UntE=zhٳ 3faӦM8r{ܽ{GH522Vao#33_}u@nD IDAT9vIJe ccc̟?j;Fyy9}?}vvvJ 6"66QF`gg!D27aee%7q&NS{z\zpJaccե755UFmw 1|, ł #//?~KKK:nee${kkkHgP .w€yNkt29]RUUJȑUzzzXx_%KCOOO)Rŋm:7?e#F݊qSSS\IIIJW|! 9rtq?Ji666Uw޸u떒wޝ&WΝΝrvǨd 8H''y`` >vavuP+/GIqZiS~|~=O8}:#  !~z}b/P[[" Px_|6x|4Bn:ڵ H$B}}=n޼9sh})W\ +Vк|ll,pABC"?8y$"#fTEEFtڵkwo4 *++QYYahͧxYBjU P^^5kҲl QXX͛?ٳ:MBh4(9s\.:~8'ꤠ6n܈8p8p#qC0hXuhukajf~`k#0l0wo[wUcGD ??^%0o777$$oo;`ժ0. Y-ƅ J2dFW|G*W^šC]T@@_Gik֬AϞ:t(@~{^yCb_ :s4((MmvbZ]*l$%%7&餠qx<"#`mm(?O;cْET/!*Sv\q4P{[ilhO0b4665ٵk7n޼ ̚5ʕ+Tdٙ8ms~:t>>>߃br@Lͺiז)&[Q"uYVX|9ҙ|iy{y!šiRA^&҈R@E @$# "# d2! @, :mG$Z`0033'[!T8:S Э9b" /oo\z~[d!(~C6yyvj *+* % ff K pDAu&nnnGSS!^= 6 n|(O6<6 U!T+dҦ]QRAW X,&Q-DA) HP!ȀLǘLWptvyיA)RRnaԨQpviTGYHLLwqQU2°o*`.fi!jf>aK-SbZnk-KDQA ERvd`f~#lzs9{g9zxx"m3$&ğsѼyKad2[E&7!AQXZ6U&zNGnn^ǎcG>T=ϥE >[٫t:}'cj%@wW^ԯ_?ׯz, ~gc?ۇQ6;KU.ݽeddrJtRXocP(ݻݻ韆>ytBDD.b3]Uiqqq 0ŋŋ0`qqq3$ "#W\!JKKyk y f̜Iij7BIXUjU*zبjoN`` :tĉ|揋ˋUnL ֌=۱LLL >]ooo,,,#!!͞=R}>c~J4ivvv1yJ?~<666|rwֳcO6l;v1BCC gڴiXXX0m4 5R hrss4hAp]#9̕+鄇/ӧ/#;;LjqШo'_|AAAn:[eAIH _lqqqƒ9|7QQQDEER d53((Lbbb峳6lAŋsUOΜ9CZZK,ѧ/Y,Ο?9p@m׷o_֭[Gjj*Æ ?Ã}$0>رc ;={@IRMoEEDDƴ7J O}>XJؾc>`R}zzɾ}عs'?3*VVV_z5SNeϞ= 2D|ݺuDDDF&M c׮]՞gժUbii̙39q=3k,}+꣏>bٕuV>SpttdʕlݺUe+V4؆VVV߿o{V y/0|c ȑ#裏ؾ}gN6TʣR{yyR0aR^^NEEy6m$00;ˣ:4K˪V_jSzz::t0+H B/I0H-%8%}]+N<͛enYLFF~ڵk8;;]QSzQQvbM$&&ѣkj袲Z 4h&N`iL433JyJ%.]罹^^`~J*]\\ɹˠ<ح+Vܹ:۷uL8T(ܷo;vdʕiNNN=Daa~+(ȯrp˚o2ed&LԩS055TT~JJ JRhjP^.STTή`ĉj՚;w1a?9w,+V|_W1XmÇgÆ 6lÍwo&׮UH…T*T* BC =2<(EJ"tO|sUf~ʓvoLMM d۶o8~>>>̟?\\\ط֯',ק7\xr;vl Ncƌd[oUĜ9s$33ߞcp̛7JEff&s5(CDDŤoV[ K|||CESl+P-f͚5f-Z;cu7 T*$~ݞɑw ϟ?[[:uS4b ~[d y^usj7U*L6*ɉ˖-[o [3h`?~< jtWEppPxN8;;pB}zhlmmСˠUݻWW7ݻں|4b@P/y[[:`ogB!1111ERQi9cE/"7ch+@- 7Bn" ! !P@ J !PqEŻ22NH$+`J^ ՘UVS'>6\N<󔔔B-(t0372O^^vbȑ"X@y߹䰥%]veYxmڴѧiӆ H գg/Ν;Wsy~Ftt4EEEoߞ7OgȐA c8b 4M┖ %.>FS?;KE⩓ٓI p*+o>}x"Cӽ=r>p;vxݛ@ ),,W^!%%Pt>kkkyBddUFιŇ~ěӧ3i֬ftڕ/׭QՆgDVWy{嵳Wz|;>}=V=m6mlplM̾^IUi7wBOG}z.1z+xxzJdeeoݗ_ҩs]x>JLԧ+={= :w᫯W;tBQQOrr2cԩ >AA"Wcp|ATY :: X6,<|Ƶ8v4G~z=w~#KY?,6o̮]عs[l!<È#yަM#VJ25iykڌA)JYt ϙ[jG8h+qs ӷD^EE~8pw~]O?5]G xΘ1c'==N:ň# n5]%{yfjf=ׯ2qNƤI1_O{j̣T*|vxK C7o}I<}7a^;f `ƏSd2IMX%k;wƍ_sl>\VmAA "u'65\\\η۷WJWX;w+#"Xaʈc Ȃdee BI]ևbL_a|nj7R} MVv6 yqp}Zii)fsef̬۸τ 9{,t:4bԲe\1cX~CӢE vFWnxy5gy tPկ]DU.ykV;7oa„ 6~9ӳg/:uLf͘?>-2b% .݃Cd:k x{xfjA=zbܐ‚v5o0*33WRwV ~Dz sS.У0@pu }}~֮NT- 'drJKJ(?}@ !P@ J &PR^k Amh4H Tkrs&@ -41X9һ5ǏŒ#ZRQ[NY*Μ>EmkԗjA5kF6HL~^ZVXV 4TU&iW7qR3ffd2D"AP.EG JX,%FkK@ !P@@ +yFDDv}j(O + B~^nuw@ xX1(@ J @  "K=j*hFD"A&"UKkp9j-m72LNUk _™DrrsAv7@*چ鉩iABR*2xcTm(.s4TO>x6oL&yh4R.'** \'һ|]_OkT*{t:$ibf\TC}97o) bd2[E&7!AQXZ/rC+a4#6T&_Nlݭca~nn^FyW~N%ek, edtlFIYyBjE111E˫!k`k\/QlD}"fV-P6X@҈eF(^FRӔt`R Gaӆ #1gPQx&VMppTb NNr̕Sd~C>;̅qB #ThմC)Ȍ&d;KA[߽' s%%d29MFƏmXzc-$T4 ůhg'1vMFW'8qsGբ633ݓ&޻Kی$L«ۧ$&\B<,}186oD&M6ˆ D 7`~o4,P{I%'o& ()K):˔߀ =K$sOauQZu+N#** ///cskLvvjܹ3|?Err2={DPGrrC(#ҝDrZQa~)҃l22ۇL&C.#ˑ~IB?"KLSMNB+r1t_S[^uc{Μ9DFFR7 MVPPV%??___?VwalD),,@&aRlE׾4uTGvv6̚5Kգl113ZwE9nU+u}yvHED _2cfl17i Pbb"[xЋ$$$`fjvC||8vH>Öx'),(Ҋأ ̜9oooQ*o5P/hOBߟ?CA=ݼsy$'^Mqrq⣯!3Y\+ i=u @8ukߎmPqZWFc|_2iJ.Rr#꾶uusscz[DZI.]ϣ}=Nŕ[7ͯyyX5Ì9_ߎ^gԨQhт_~wwwrrrYt)}i>(--ښO>k>t1)E ˑy,T/[8bccIOOܜ?>%R '055'7/֭[ӹSg07Wp1F|УGLÇ)))2{Ǚ3g8z(ϟʕ+QQQDEER dnm}#HWK#Laa! t:RT%^]mdL&C*07%stV֭[GDDnnn4i҄0vHH89׮]bIDAT%t1z+\۶mÃI&@˖-9s&|z;ڲ|rsZ WWW,--9s&'Nh4,_ xb4Mק^b >PQQ@\I$R$uRjl*#(+SW_TtXZZt:tP>j~믿Kh5Q^Q9.ӥKZB%Yd1:Ɉ#ػ;}եZYYYrOm|SVfĈ`F&"" &fZWD >PVVV#Jgv2g6oe Hn@++*47.u:NNN;w [aa̓a۷[nEn^.6X[PXX'1kzշUV|чDGG1%%~囻km۶z%A_z #*$ u͡| i, 32+/{ӵsef23U8::w?~!!!\xryF#P[nJs//P[ğIIr pw'P4vȠ4/^Lny^~ef͚ŕ+Wcܹ {μZU^cЂTK-A XWy=8{eeeqznYSСH?K`y} *P3f?ȸq4h#ۂ:|FÓ|̹p/$dZ)))F?ؽf;w.~]瞣7o.[! >>5X[y4Ɩ9sY)Pu&';KN-(Sf&NJYY}Vƙ(Ɋkmi)Z ivNbNGzT)l)sY3LL9y}Q?cп]!$VV8;"S:v !QLaA! .ѿ xzzN’Fe&^t'''gS:䗼,v'%X6IӋCѣ'Ҍ hЪKL.0R{{49S4{"˦>[ˈ47[[[233015ʕtywT*t7^@X( 4{v@II vm-';•D,1ޙ8?]hҋV{;ƛD(Ȇ}(Jzj3 /E(\yoxddd0t\\PV)ShpgT(NăNːC@=ހ6w|h"^ux赱X(L𸐌#tP\RDff&Qw>8v'7q ~lyiKVQVD.\?Q" 1iڴ)-[SSSy1(3I;:oqǒ #9YG\QJJJQ535E090^~ e.ƾEVs뙏SWrԡhh47 HR)rtĺB`0߄SܟB^f.Oyq rVNEf=SyTbbk8$y ~d#Ifqۨ:QxטJu1o!PR)ZVF +tB%`kkKK( FDNvM6C*V7Pp")vXFĹ(LM5d2;sݻctj2Z,U&GcЩK*1շ%;ԫ5<ɄjI=x.m1 jpN&___NQFy_6tsRw;9j;#Ya8#TNWߖ8n'ТE \]]Р z_)r9 ju2 1HHLGHT}&XM!%) cEu~%MXC W0ddF1IUpIENDB`KCemu-0.5.1/doc/sys-kc85.jpg0000644001050700006200000001716310527416074015060 0ustar glaubitzfbedvJFIFHHC  !"$"$C,"J !1AQa"2RqBC#35DESTUb$4rs%c !1AQ"a ?j{bwnKRNhr[e NEA]Rcyrv!wZtE ; rɮ9D.j:dhpDS5-h9:]jn҂9t1֦28GAEK،`4{U9_P_ B264Wk@k6Q$+Tt;$J:jk.;bR iخcZO(~[E#/[lݪͷiR OT k?HWILhINUiluՖJa6H6t6:ۚ$:XOVvNMc[kf ~R)1AĬ3fB"2 JUY*Ef@^; *D,V2v%MU|dV2%]hb bijXDW"bSE|bD)]Y"_* C*++P,WE|+dMѸΌX.P= pEvlwS*s/mձ<ѻ3AS'PD" [zu5ۏ&1(iD?+ #;M)[t `cM&%儊13H܊v&(OwgeQ:Vp~ LB4gP~av?!Q4ÏğLp'hc?'!Xrj;wn-ZvSOUpJeqYV"F[pK.&*ݯ$"9 hhuO{t E]ebƆQ"c% ZEb˦G Z+3TŘ\ tS´!;0y d}6 zQx|yC#ڼl<7\5]>>RFyˮX%tM/':6(;pYiEp.+H%GzaAN$avܛ S(jeR6-`K\yYv%Ќ e xDMψa TR<R2ɉDsogyM[ƪg6\-?tsxWoŋ0x4q6Ax>hh0S:X&pw۟/cxNFC.!H7_i&ái!J޼ֻD )N4&<p agF|9ҝmMVN!cU ¯,݈nk0:=Ra>jK[%:@l?Cº+u(vUT820^G9|U>j 7EhoG2f!_)r7*A%U3ON54f1 7uOX롁=Ql5] GK-W[UKfwI$(ٷ%qMP]!uXNuyx qCIS}Vf:zbƞGw:X"qs̗"s4m]9:J~H-qRۂYT49i*JU|2[F[Ui ܬ1nf֦riS%">Lm"α \eLϡ$'F7~ͦ? \0n ك`D-M+ :?VqqXܕܷ58uH<ǽv&$*$x;Ty>Yދ{9?zBj9DiSО[]Xi0rG$#L]gzEؘ9~`pm.lAjj25ET:Dcԭ[>ܭz[#xhh+%?V,d,o' cܚ7<'X.x/bYsx&mjqM;-Q3bpm㪘9YG 8ږ:ހM5.;kjd.[rtUQ\0#ۯu׆7V@sÛdԶV32nٓfDҳ6vS29۔;zMS" 8]ƖQSC%YRlXsUKY<[Okoozz[Sf$ꪰ8YktֿmM.y[U[ƽu TA5$4ؚ7{ƛ1X/cKÊ-pdrŎdݎʁ&STѨf[3z^3yް[3ã! -&)K2&']@S\ frI=VPIlw+Dte^/:gHqRi.r]1t Ŝ7M7𝝼ה0R7F#njDI=Ɏ'--# 95<NZa^qP0t:f-u?'$ <;X~;=.lK^ZoQTP+:wB~ԟf{7["0N ǓP]+ RF*2XmIFJkTl[)z1jcޟkoPp?qB V:;BK $-؃)đǜ jRk0 d- ҹmN+R$ZHt(Gg5ŕ9clHkf;B<ǽ'ҸJ.'6ϳ](7QұJx2J|Thkw Z.%$:B4WH#/}ҧЊY dS=oq] >I3^NA@!?T_*)\avԽМϸA^0H洍dIv9G֍C M|mnlHfxIqSp2{s>(k(q)O_)[ ,}TS@\uDX 1_FsO%9vFYe-6 wE@(@"GI< emS46PlepRî'!!`+!iQ8\IYq߻EBӶq^y[Ѧ}pQ G/`H#r :QUEtˤ.WyƪL^Z:EP +ޗJHʱqk-z,W7X =78[j't,}&vz2[Jzk奞8'vZǼ,wzHh_yy.ejM*H~cP5EDjlp TCVeۛfzRd]'cN2I<^GG;$2*!y:a.?}3bĦ %d `+N!'BDR'W oM43,u36_'T9FGsxQc14o)ERZکh HBg%y^ğ=S#{6r>i]~Xm;& }ŭ؋)戺FI3)Wfۻh7Lcw70-:k&0ʗuLk 2i`X*I)Ɨ`, kvOuFcyFl(M45Yf0s}dopB;k_8?i#^j;n)el<.[T꩞-lo￳> y۲j7D *!M,, zm} S,}K?_֥ qR)_qcbãUSnF]8C#9zhY;2XlAKTQRB =m9U,I٧!`OP O=-;(;IH&b%uÃuY\XdyB3u0f2Sr=Me>"f,n!طÔ5"rÔ]Y=F/4\dBo+crhw)dZ9ƨ d՟A{ R2"J;F1>pf`dʛcϟ cZϟ {1(XC'),2n|`̏P,dBk]}}j[w"8#H.~ֶg$8[͸[Nzc.*i H}ҎvǻM[<gU >)RXZn$h{H$Z%S kYa8mx_)1M'{e[?i檿VII%;e䝺qhR6D)[bD蕒2)^1jTE*FjLz͙č-qڵ^*2xWI5ˏvi:GS~WPiq 7,s*x7 1~B9]Itjje0?jPj150}E*u8>N6v=oulv&+ w[Fou4,7&Eկ<{0_b$l_j!8<¨<b'_G #Oj"<¢|bg?G {|q~ع9 Oqڏ!5Oȹ|y1ި\1>W1OP6ļy1޳_Ej^8ox/m:q,59ǵ$Y:dC] I%E#lK<}WI%'TP+H/kI%(WF$#t@J$ѺI+=o؍I+HWJ$7I$ RI(I KCemu-0.5.1/doc/sys-xy4131.jpg0000644001050700006200000002020511163412576015246 0ustar glaubitzfbedvJFIFHHCreated with The GIMPC  !"$"$C,"?!1AQa"q2R#3BCb$Sr񂢲#!1AQ"a2B ? Ӏ 8uދLPodG` m&"6D5Сn|tB:W'AV}((=+6׋Ø+ɈW`U0(& jid|gh6㾗復Xyogf6NUzjz Áy6+p '*HD]DvR섴]ȸU2 ¶-kY"EbLibI Ž;,L9Pm5F*G;mۼ)(yT'A|l(,V(BTjD@tpdy>\N*$̼by{vmD=c*i#qZ gp`Sl㎈@$c8)Ze'R#dN-k& JȸAbF%nNOn Y1EҲv7t[آMLCYA4WeduHNi03i5fhsc߉L rSG}o@4D'7(y)$0Q* +GqU[SW[!oN?D,Қ*vgFuR8eeۇS} >H鰘C.uL!kl,(NFz+sP۟`ɴ-a}g0XT i6E Z56quݔ y#8EuDK_k0E X<9)'-&N\QmIKW dtRnc~xwmU}*T{_}nWF6:UF? v'˷2&Jݣ\$g_ofݧqW12[Mh-*YKBw$˹/u'h,0cZ^_#wީ6C53FTH;d{,wB)-s:ZFcH çZ4tR) XUISg=Wsv[Z }6TbS`:AUP"8wϚ6C&Af{~fia]FC^49.&{ X%gU}vjs#Sm̛z)d5찈skfG_R~kNpPۖ?LTx'nZMPkSc =DMCR nWI#_TQS 4Q8!Ǥ8&yl">J!ۏpJSP%վcq❉Go!rXeql>NLjRsMt,e'K@hd?\=hCIX[(0A]&2{GPxL<>{hҗI. ~'{[qNcl:7  T1٧e]1H>4gNlFF!-<\(t$%3\ !EW|//k\,r)QalG$hۼ~bZePNIf(eKq Y@d򽠋WZ AU(;7#)aj 9ϒ]ac'm+fTŤlJ9FPvSot :%}5;XIЀJGdg2H(i1WLk/A\8.C/ru%zIqe5":ֿFO]HXj7^T&(驭F BЌnp7{tDd7dn.: .0ɬ8aDoVZ=w{wQ`w;@hZ?E N'n9;Jd9|Wñ~JWQnֹ ,>g{E6Tz{%2O1 bU@Ioƭ+g \n%F'oi.3Esd9CqpSmMM$v_frǭ XKX)L.{yh;1[C%D)3:FA.[^!}^ 82ku{M}{H a`u6_u]ƨH>k)`ek +cu =f2vx]a,2FBbFkw %bbFdy KMM ~#1*cn=ڊ6~)[w;4\)S)t#fAg8O4R)Y=ĝl|b7 izw9T8jYIM^AGO }0^as y3Ԍq[PMW??Yx5 2ixuV%}saЎDl}WvgrEܿn0KORǥ [}OjX+ERQ&}O+%X ' ܷv;/F%nX1V)Ιvr[FȾhPC+$Fi#SœԌ +E5@ '$7%I3uVpIIժ-2@渒<„syi nmeWQݡϒ$VDE5;;[- ω$ k^k/QVU3=Zу:ua4>f;썠r!$j.Z[uoU|R }\ lc NnfHhC>jf^4dB]ҒۘuNJldtC4dbO\B:@x1cP6ٚzF\% ֒d63[$q0Li긺blw'Ɣvc3J>I,ڣT;tC$%1AtSJk\evw ]sݤZ1CH\e}ec˪ͮ` rOH%4ctDp2}>%_Rw*bPn彺! ^J9̚hIL\lij0a0Rb4 :P[6:ۂM?JE,lOpSwֿ벖jDN`@Iũ%d26sgv-6z^+44zsmpטULBE%E[q\/Nc4 boe:pxT L aqI'Cy6i-'brC]e;Q,SEN|R_F.J\wrP4tIό85(Ersv͢U I:r'vP39,u:&ufck~]X,d\xb :,-N4+Tfoe+]}UaHd,Q &HNj89rxf*)CmEuѿE+M)4 &y|31s|Lns|zh{j<ǣq86'ɗٵQ!$, 6,C#$`7#B ԭp궋!YU#~]b:ޫxH^vK`&G}n.4 iMmaAyG kV}<>'A-6 XabY%o+)nqk`\H^>аloCR׸ 3?]_(̤j]fv3e^.%40j\ 56\]ѢegðjASU29c;Xѫq9${ ZGW |5nʹUTU=_[Sc+ "gt$-. X4m67u*K24Y]+ɯk04 v:,ɰ6*k܄H#\4-:N'8"2J֍4&)p2CEINs+7ų1̉#B[{s`˜}C?Fh)lt.?57,LwBN+$ ykര\:LB auR!gc٦: $THU"cZƵ4 )٢EֶmpgEr5 m&iH Y8P2Xkb!F+ *Y# 4WSXOe6TUC_'b\ Tl*0WS2V5A-a2/FpGg .iͥ`x,:*nxT%|1@`WiEL2N=vI4O|oa^bEfћGCSǷ|ǘGk0gum"!kFXāk_A; N ]TK9J\FxFCg]ԧԖ E΃p "x.sg\y!ˤj 4;x J ?q/w!)~x6T(AO3hӢXN0V2f9ydu1F_!olk9Hs?#5/8H79%q$u-SK$s;B݊EC({%5K"l7Cu`jٻQ)(¤p@[]*VSF֍J EmRrfP#'H B6n#."d#5`_Q7{YX 9T '2d 4^v1!(8oEPbs =PguHm;Bt=--ee;E0杈:/I"ۅveW0Cp=WV,R2?ƪbtw'+au]hhyi:u`d얶CrHvO#ETS~Y;h%-W$'ri5#xhI$"mJ3C0BiF¹,W|Gsqx?vg8ghHȱ$@(ol-robx)("y7ꄻE dICZ $ liMv @;iv/%TU`@T4nma5M,r6͖FduSSAd:؞* ǚdM<+[]qv&H\AD $t`DB[bE Dn JE{qURPmp0Qrt%GIS:&J{;_6Ui|mx.پ"SGCR۰9+39_+kCx*Vsן뎨0O4;+X_v㚟iy7KQ DBX$oCu?\ LuT56[ ]k&xMat$( smruRSSU(&oRW%<#w. 4y+<6:VEZ4+H\nܠ "H 6uxT>R4R@(ISUdYZẢh"Tr]tcc[T`$9:pn a TS &2G%]sAGY$#tm3[ dAΩENh4ak#ӔN]tmm yvRcSo6>]U*L\6S|fPlIM^1LD 8hWT>KZesLu- DY3Iz}!BicRكU6s8X WG)N#.c?YL*TqߢkuqӽBZދr 8uok<+f-[56I4JӳWMMN؀&Z5?@d, k@a`tEMxt)&HӣKezZWHnEׂ&G[`,4+Qc 4T &[)WSFV$;'ia k-Һ(v: S@MLT/iMJpNT^)nRhR'n#BwH Ɠ $9%:^cY+'hRIIUatXeE19]Y]zz뽱a+nyVKm>GlXLKִ0l)T]# e(H3my-F 5yzHcAR4H!sR6,6rDl)=æ"-a!X<-;h)Y^*!̫EDrmmQikh@^ ">*&?@+(d$Ւ8 I @hB$$+$I0twI$ $!G4E}_IP?t_uE6JPI14K4lt.F D\EpX.zQz]bpQ>ɸRI$dNpAI&urI%WHF#lM f)$A ؤb%1)$WI$ KCemu-0.5.1/doc/window-video.png0000644001050700006200000007235511340261610016101 0ustar glaubitzfbedvPNG  IHDR\>L sRGBbKGD pHYs+ IDATxwxtHZUN4El(A) MP#*6Pl( PC4!py?ϳnޝ](Ig !F骢TWVBZB!D ǭ&EcUzg+/=7 )ZB!jlLfUjxuzֱ`OA](5%e!KYݽ7:Nłom*71-뢱*-W(%]OB!jK9$erlfOh[Ieӯ?д]g8r zE%2zgyN!jS2/}__|ݝ.plf:}?>˨m\H`o(s^݈ϕ8Y? !n[vp=UI:!j`Θ-Wwv݅c*i+]Е2^觳%-:ONߋ叿w[L9i 4D\l,âVɉak[ػ}&F[SyZŔY;[6*چI'DMV޵e(\VA*ܟ7mP9tR^YvѼ/ZnRF.sן)5]ϔ[Ue?lQn!'1C&џ*65q M5w[l3' Z!+3(ZnaߎM@ {5͹}څbM)KO]쿢UUT*k;oL21g]zW[1g=;^-^J֝)# Lx1'9xrMlKv{FmÚy@УSΪ۱Bb\4.$gF/A,n@~M$`щzP_ :!\3!笵[U04W$؞׋ci E> 㿵W&Eq|2Y3z{bKh;سDŧgFcg?AT=CrLaĜu%'YYƴiHCLGOƪ3 oNqF[bQ,=wHG]ud_dێC,lٶzV÷\GKJb kكUsFIM$V} 9pl*Ee݀;Iz<;{-fwT+9`6e3ww.Cʋ<[˖|vhION" D9@Pp^zNȾlwZKPC3J*WK/ KJ_^s#欳/GY}Vfn5tq5؞}}!qjҜP'-p69a={3hֶ: PTǕu\QX;ZOv5Q4N=p~2`kΒ[!=9nمoSC2pA}CU5YOw`muΉw.X9O[qRݵK O`hv#!^8jz=xmۡ͋hӵ36LƒdT.wَ/rze[m]Xr2Wg>2_2 Q ~ U0Ӭ@B{C Ǔq ?#dж]@ujC[{m9@ r8r% ya:oЦ> pk'u '"O(fLhTtQqKIgw{x=jJ&?տ4k?Bh|Wk2܅lz;pV*+e2V-1}"a[!u@6:ekk0o<SA5*,4SS_&bI]_oiJ*S&r*)8DEM$q+HX.<٣G(<#Kԩ:tSi;{{7ؗzs ըٟcFR1"ctX5{2]N)~H2ܖJ:/ٮxKXvy %t$gR7m C=+v½~:z95GoFelREӫUTyc8]kMxmÊ ++ ݶV+//&GM9-40vtG-,=G>?W9]jG~UC-zB<)<ڱ) 'Q?8y#rcgМOt6rOVGņͫܠ|^I?/okZMY49T6ZvIW^;8[YYKvF&6d=:q}zWlhD %/^DWnxr[,w~IV{ye6Qڶ.Ϻm0E+M\pO}7kVC!r((5:i0EQʥ LIN TEG l[yYɼ5W F:{<|HE@`gf;iJw$8Ǹmh"kh܈;#]-hz\=i P$jsk-[6PޢK^^YvѼ/Zn+%K Eˀq=oYl{S;Ѽ[ ۢw?}Q!׏Km.BH@B!$ !BB!$ !"V@!ܼ\~g" 9%?_?C8|D׺ЅBĩ|hiuK]^eύ97w<ѱ,t1碣l^O=$]!^E㝹P(̘3iOhf̙`aӆh4ǜgm,|9Y'ЅBrL&~LG{[9JEt3.ŷ+壅0 z[7NKp`<5o_oV$ !$&6;ߎWi7oLӰlwΜbݯOS{ )^ѣvzR;^՞G!؀[5/3m{:XZ~7hڰNt# gǍ [Ӌa;.xxzlB!jC'\$pPmZqַ.7OMp¯~1}>nuiW[&KNJ$9)Q!5ڮ}{h44P Q`FMhPΝ=GRrM&5r&.JMwi3"SywlB!j  @U(zRK/*Qs5v̹E12qR_8 {组idBQk$$&~)@ߊgRA`@*~Fǯ@cA{$LJ Ww-R),}UiɈ!2y`hӂ ?5cx䃍M_ > m? CK|IيB {{GvfvłFWT5=Xn1tsx+2)mW8%r ػǘu+rrXF㌩\@12_ i7'?fٸi G&2go)'-<_ͿcOf5 !Mbb:u*cޥK8:;V(O:>vbA|o[S3iT՗]qbԤ -#΍W?\8GEQ$/yse+u9uM-u39h͓k ߌJYl9of 5çG !,++ ^_|zy\`6IOOʈ|~;=s<m9 vzQa:;'O<?M<8<3hNɝ>><ߏ#Vb n|7/6`ekBXNN:R U&ku'sssoL@9ez+, Ƭ>kvX2$3f?$wnp dHvS% gù8jJ.gOf?!cw7/73GG`[=7?Uյj家'O/o,S`_%<ogDÿ /gH >Y;N35 !MK({.mr #G.] {[v?|涶KY_zc:U*b7ʫġRyctJnlЇwBrCv2~'[bAȢ'~I9X3)?/>ÝX<#\L)X3<</[BHMNE(g'{!B"flN9ɦ7b Z#;?s!"ٸ~#"O'*ꪭs+0l% !MNVӪEg=q12321L$'̯~Eeӫڪ\.˩bJ{ӚJ̠q0h`Ƌʼnod}O+Tm۲s./7};2rsh4mնfЅB[uѩBeWD1M$_L.7b!7'FYGK@B!^G r▙`~$6*(QzJ@B!ѣkw\]v \b<2hѴ9۴*rA<;x(Uq B!D%x0aX,223[Ny'!D%;'T.B\Z]n0#ڶO"B0 B B!.BP8"CBQzffk_%$Bz=BZ@ !ЅB!]!ЅB!]!.B B!BT!j ٌlFQi !n2* ZF[-]d4ÇIMI&VS.͚5#$ZNg{sBGHq0D=[BRЅA,f3"ӹ}ԫ@DNQP4:-۷nG9E!55i !nbb4+G5niv!j[`XnX*50VN Q{B_.BD$ !r]HQ9.D-g˒r5UTSԤQGZmSA$3#=n3/fraxuı'awό@J)))tޝݻ[{''%ʯ# `2j#Ϭp0OcNmosPD iiitޝ 6TKO] !n)_aK\2?s`j=nv\iev$W4UuDFFI֭^Ӌ]̡=?8Op~~:KN,}{5ۏvxsŖw :m?:1qɖbiO{GŞbu/slX:C=iSĝoS1l[5#09JN#)QECx=rxzqEt~ "~͡i=)ΚCx}Lj+Ylj"{cl)Y 9mu۫M_˴{`74z5EїxC`ڿBFtzD:ζUS9N<I#DuX`-B. jE`*_jK/(} KSpmӋώ),zp8Z7v3=ܣIJƴ˪}LnQx! "lhU{mҤy|h } IDAT+3-ugD}Aۉ\`g,[ yy<ܧOt Xuz9qv։=YpX\:;&-6z`7t[yZ$OޙFl]3)<RY q%+,Y?:3ϪvI5PZWÒ!Ifoy6I#Vnj+yһO꺺..6%WϠ+9֮>fc/ۢ ~PݚLNr{ ?PW4À?IV,,zGGOK05dЀ7!U~lL[Ajz|T¾a0,llSsd'`x: o}z2֫Sq0Y+;36[a:/^LœJ~e1Z`k8\fNV*|0^x*(%tf_+ :lfQ=J47+p65~g{}Omz}. qksoky h|0w_"K,y,K⾏pR¿ J)Qv!m--={`ShׯWu!qdG=6Ҏ!GDM|dK5 +o3N|Yf{:Adͼp|e}|M~84(Bl4vs1)ِ!?w@#/HIv|r*F&cPȑ#6l8fsl66l8#G3|,${<q3{h-"DTo >,,デYsv 4mxK}6X0spzc%oLsNr <=bD Q+zuݳlzs&L̐0tk~ L|3ǤԌG~Ì>A5kJ^~ag>CYK@p#{( ͧ̝,#{B铝l&2ѻxAM0r9&>mMW4BT)wWWW֮]C߾o(xxxv\]]|(w!D* /b09?> NU^vv W^S!*n.233JMJ~f͏Uϖ/QBqd\g*㾗f1{P깒p|SLKklʮH!~eO; BЈsf^yEۀNǗ[ش_EqMl9ےkݺJ']ax4x *K#DuЯ BD!$K@s BH@.DmV,t)!D$Y%fX*7@5JՕ$AI%''Q.];hh٪;oíJ%/f( ٳkmڶEK@6h4ƁU!^͍aaxxx`g ]JQa#128NJFX|Ѕ=uG''i!D{B!t!BH@B!t!BH@B!+d5!/(D,GWKxnlb6_[6U*jX#]Z";;3Ok0(HtjY'*C3rj> d4ÇIMIuVԩ[f͚RNW#]378[[KZu3~fx.#7{= vR\;طw/vBHh4jh$2kZ}$ Q mzӤI(N,wbom5lv눻c~/b6s b?G K}t:iپu+>>>88:ۻKb//o ?]ĥdk(( \hlFVK07zsE83RK[,bjZ}$ !`DWj jKjK$ !Ï߳j~?ڻ.';^Z->oob%$$'λ$ !^TrJ2ظ7osCťĴ999,\ Gן#F]eu$2`͚͞?g ޭ<=DB*5zYupއxyӮ];bcc2u2S&O&]vv6ӦO&$$>}Ç>bUZK۹_uVnŰxz37ҦAfCa :Q:Xfy^妩 ^"z|=¯FzY!tbci׶-Ν!((T,s@|:Kppdep|2))W2󹻻Э['v_eup@66Qk%~n4[ߡCQ@"i1J݌/AYպ֪U8'N^H0qqJŔiTj5ӦO& @ΟǗ'N:u+%%U|W<:τT8߇K]<~MiZ= :!>ȋs?=^AB!jr}if{ٲMm o?Bue_a ׈ۻ?kTTu '$(ݘbk4;?}f{֍Zs&T,OY߉?/ms;QQseu5偶!}Oʺ>l͸GYOc^-1?(Umو ^Zn<g= Zſ]>+CYL!:BZd7OďiLXЯ5,VGPXW|=ph8r8Xr7c!?j  ֠~eO=` TyhP?} 'OɑRSSprr̙>{Z9俳\RaQ,Xؖ+CG~B&ZXi|P7rLNr{`U),!(&`ퟻILtGR?:QվEڠv,)qcm{kWzFVtM㚔v4]CGrNFumm<0&g=~33 ? f61ʾkӿ_/zt?z;=? ?__\:墘-5jf fs~Ol`4PrjimGRa2l_(Uӵt+wL'fO?/+h H.⩻Wzd!NY?ُ`Osh^ \8/|ΒWna~<53 ؍]5EKiݚ ۛɓ^ ((֬' (BeW])YYY|{!!!sRKV1-^5]?/>=9<.oz{>7{bHNݗt!AR?'x{a =MN|~>WB\J-!OeRrҎ㡫hIL:S8n4" !\9ZrٌhL#3G_Uwr[lloL(3fCہLQ1d=|<1Nm`Iynk3{h-"r睑ğeKtoGNt'= {$e02#Nm`ʹġ?.4ϺI1oכCv[eFޓeay~rxkXaA|$D Y+&1yH7I-)?^pFgO -ZBI{RۿShγdY4 15ܙCݼEQ#+B\3LJĢ(mG~WLg7GQa6[Il?nXP,#Qh0`6(J- 8[,deeSFs=tՈ^P>x)I% qe\ļ2qg+JºCGxsx]7a/ ߉vCX7<‹ b333iז,9}Vf}OСiłbnQf3<&9򿗃z^^AAqW7/<=^_f}JÒŋ\B*{JƬ?/{g_ =tKTjJ8垛KNNbo@LL ))<<Z-RF!=F9>oO!//Ouv&L&YYrsr!''<w77₋3x1h 9qDnݭhb˨h}X~ux^>&';?\rKnn5 &,fHMMC^^%S2y$ʵ8_>:j'[ jNѣGbXPzppp@VW|=ǟdOؿNZ,g[.k`h5$jTZFa 9\%% !(CujԩSg} h4qrrERj}hzԣ QB* #oh%?9e- E c{sm.у+&,qZGGʝ1.U]x~OSZ]lT-W5F>Z?L&jEMVʬ7:{I=T2Z+D͡V8i qc<;‡T*\]]IJJn# $=lhMt!j^w7p,ōWc2L=r[xZвU+vlF|뀶, ر};͚79^S9.D iҴz;;~y=-.>j> ݑ{Nݺθ_6F?aaaAzzZSո2, jl}$ QXf7nB-u;qs@|/C{::o "MFѨI([ッcj#ℨAE!55i !nbb4+G5niv!j[T [t:n%܅u!CB!n"ЅB9.D (reIL wwC|hnO_NIIW*e z  <1b?튢m~#~QV[TԥS2-x8-=KҀB\g)))tޝݻ[ I)! 9ϣ]nDnWJbi~!7d2dǝD_R|$SbP;4J qyZZiiiԯJkGP[kb6aof|aqkPkCCF}joy'^N:tN^|~?</ $u [&22HZn]mAjũ@}eݻr6ǟvdK4ϧ=mqLb^zFH?^~.Ӌ-K&qofٙ+V-Kv#]'\w^˗{+vPS޺a2ۺe]̡=?8OpZU6\G/:]xuϏo_l~snՒr$L_ Dxx8 .DѠhXp! 4e_ >z IDAT ':{OڤI6^XN 8öU82k\I7pN/HJPr(-@t9~_6}3ڦn8>%s> K _S,өSLz{._ZǾ Ut] \ؾɃ3+[=^5b.p*b#v0`jmDkwzt7|!%=s|ܔߤ,XEP CZfѢE,Xʗ G/ %9ĥd s[voLnQ8/[4CkmVf[KΈ=Zg\:rvGߢͣD|ƴ˪}6yO,.sfC6nf>ulAiқ+?R뚜HWx3,^;|l֯KEώ),zpx6X7 ytOj(yNmCس;{{Gv z -N 9BTn殺R>![bcXxqo[ H> lvs |hمLRba#( O;WË.0:oYw9mH/(;k#妲djJԺI^5=`٘R-v&@;U \XC.%:59mCZ',DU׀}CWi cԼx~?^/\SW*~UHLv቟1<6`t5y3?wQTǿےMBI( iRDTz{"傂RbCD! W?Q)"EAH PJH/Ͷ)0 y3w;*؈ 8J.%Y?K`|ǿ RG.D?uYBCC ÕkO ,vC3+K-7Ǚq_X@<[/mfXR{ˉ {|N^OT98Z}X_kcdzKᴱpOΘ1(,sfǣeɼ=kg>9J&3MnwaR܄ ;vV`jeqL0rM)?~_)gX BdÜI؈{E x ÐŘ-z6LәL[! K3hE/77b.$?'66qc61͌7X/zoRip c!lX0u|尿ΔTR"7iۧ+(jgd<ADDNo_Mj+Owt܂0lڷ|0B[䗙twJV7Uzѿ,goX0^85ݠjQޠ/vy1# >#׬Ętm: ,Sc#Jeɨ~k =F'Qk=/ _ֹ)n_ϿAÉm{4qʐwaݝ~KӦP///~{+Lܫf Q]g`2$ BTrbd[&==}\%aW_,[zgg !Ƨ}=t!zƞڵܿSےЅ])KBB$t!2ZMnn-WBT> Yb6ЅDT*#W$t!*S\!IܵmJqPKݳ-Z ]HHTTbQϨ !z"Q$ ]JVAX,f'=FRs\$ QI{..!{ B! ]!ЅB! ]!ЅBBf Q 1rbO[F( ]`0p)XV U@@5&<"L% Qz&HGZVZ SUl6sin/oo0LЅj&;wgGiѲDjĞ>jZGѰsv * ]fq|||%BTd(rښUjav!_FGCX,hbF[I!Bܕz[tt4QQDGG|YIBB!tB)GGGӣgON:E=Lw%=uBGGX }_!~+<ڥ jRm֒Өw-L܃uC ې'%>ۮMaSlDDӫwof̘Ajj 3f̠WDD)eEI~g?O ǣ6i]=% !0j`{8wqI~}ҧ<{NaS:)==cʵG~y73Y3Y|M^~ꡗiRܥ/1m?|õ4$Ȉy鏇>5rٻB{Kߝd呍D:_Kkэ9VPS#Ι׺t*ˎudkK_K~-ZP~ 2\\=M^KEܐoz kK߼ܘzS@Hx3Nzuo{fo+QJRp叉<5-eMxLwZSphB<1q-}ޫXr(Nw8'rhYsz) nYںB!F5eil< [:d8G+(5=^Nً͔V[Yi\zz]u'y'~_}_f ,u !~N/^ -ovLms#i+bZ͒Vr>G OND:ShteSL["r *UϨu !6M.Y#g^הly!jR6|oJ6s jg۰Z,7vS>}lB: E>ciKL,_7A>89hf˷VΝS!D4S?O:Ȓŋ+Y[1H[ !7`SGF꫕{ gW+iYPwZ!I<_'օBB^ڵkz*"##o$ !w<ߚ##u[^^Ѕd4 VU!DubSQ\( juiBT"jΟO`Q {22V$ QhߡnG.DuI7}^f}ކ Q888ޠ!ӏ\ZDU@/[b_/[ۛNt!(8Cn$t!*J4jYЄ=Uʒ% QI_6!B!$t!BHBB!$t!BHBB!$ !BB!$ !BBQȕℨLb\M7 me!=Э$uDQtrmw2ΦPԔ򢼼}*TQUZ=^>Uj->A̞o4꫐|eK-hhw{ыL Kwnd--L95.O^Kc%G]KLr! =AU̝VY?^;y8::FxeK;e30t#tyg$ߓmd~*\ Z&sG^~jUI3ciN;SDW6xKЍOr/o|=G;$ߏz C94 ",0f >)f[ þo>ovR.OuqٴA=;D@H8 #p܂@7k+mK^恖 $eWX2]\|Kb)nb̀ o`g.T]Kqo2x|ZX}oZ֋xE]`{+h.~R~zy0aqf6,XvM2ueR5M|x=\tV]?֞:GֻQEJ^Y*]=p\V6k,>dyϮ^|7ޚ#ℸ$Kdez57UjrW2~#1 9)s⇭x99*LӑJ|R^GX ɭ7oF@,=ώ|ezp_܍F..ڽ/6{ښBieJ_ =|n`Cї3Xnu|prЂ͈o2ץ./\[WQAX݆Úx?'Wlўm3{ٲU|b;mvۅNeTkBJ-o&:-[Mi\#qywphzußeptS\gN;6mD _e^wa\4>qb!ξ+}4,d`sUn{)xuhU*g꺝vQ\wX!ĝ`w#~틸yȋh۾&S0#g,'1݈b V~z9z|z'5Fu뒒r;$;+5J u/!nZۜj왳(vbwNt\θyz\_w'9BB_2C:6jTd~+=[y0m˷xK6Nd"O^Kc%G\st:]nn(6.^//OYv ~b%'"ve{͝=sP\\\J\GQ:]m..NZ|j_o5o$9N!]WL+n!(SɓMro0244Uje30t#tyg$ܓmd.S2INNӣuԨQDFFFeRSHKKǤix_$gPY+ns 䄋Kk8 9>]eA |Ciޱ.n;b^r`cB߹7"j48=qq&Yf<׿ΟǏ t5;w;9}"* < n.q[u,ipwj֞H ֦ )r{y`U} {yy<ڹ%A~DcK1ߴY0ea7cI1 X(/o}}#$8zty̦e ّ BydK1އ?.OPi'^[WZ]^S.U+CeXKA`_ oֳuo8| `lܸܒwؼi#vBs/f߮زq=۶m i լ͹U\1b~`Z0 dgoV Ҿ{f6o\϶;8zKKK8ٲqo)m2%}_IG޽GFn._nž86KbJ _n‰ONfǑ#%nd;8}z3=Xx;Ԕ˅a8OI~ˆK\IDAT q$8ȡkhg]Kω[ ~b[9~:ӱq]lc8|23[~*Xtyv-dB";ys r,zۮGד]ul55Aumg4V<ԧ?zd.O\\oĠ hHx:UQWcJcwl~ һ`ztk_ζHFm.i=No]ĝ?U'--/ްKʚ*_ = I3Qv`^2 G~piWu\{?J689hл1eXgy+˝oX}}O|ƨ~G7˟}]Z]`2jn[`2˾̑Z+ o~]te:hmFr f|p05\ޗ a8،dffaFO&P;\ H8O]hR/1 WOʷb3o}1gKè&mNXqp VZttIti}h=tL+4NXppiJJ.ps ?3 J]}ּqtm!=Wߙн}|˻޽q0[,BZ P|g@ۗuzl>`7F.^Ӄ/"/"qdnLYf^t#66\I~.])&lb~]A>Ճ3nx {M'1l2#t{xzzg4b?) rs򺽯%mb1H_ }q-6ņ!3{*ǾC\J$??#׬Ętm: e9Ϗ{Vo\zQ -'=zwIl3GLt;1r"iw^^^dfdY:rssh4%~d69y,]X.n5@ց lMm/f+]ۖK'К$HtZG _Ztjb2sKdN8@rZ&VE7uå;rns|~6׾MsRRR8w,c#u8_m`λ2walьNMhf;E?GJ@”{th΁WhGOr`=_I}7JJLdء>>e,>߼Y?q&}QfbgRSS-ԯ_G34nԈT2 l6t.pJyy?RpquAբR]9g8?πuUZ]]p-qףiAa-tNZIe[(X-fF&9n]msi$OP7> u "ۛNNU*rFRR;oo^7'U7Μ9sx\\\;jT*, Fc>FCo{s!m*9Q*6e8r mhRNjCæM?a:-Zu9}5Yū6z )ѳ*4f+ >Yew?!ߡ !-O*)9WL뉪7?^Mz̿>Jɴj^FCŖ|p-1Q/7uX)ؚL,z%g 7_q+ЫvOIBqE_~|qo~lULz&>:uWbrf૫(+molEٛ89rԱZzn!CB+xT 'TWoupn;Ro{b{ZD&'tP-eY4y6#7ߊɐm3J|acus4<n0c_km&_PnǣY`8BBʙf?`$t{b{s6.CBjm(6]ޤ狻cϳyL1c=a]}؍+X~ϧCM6,ټ`}N|?K@FNWb썷Ul6=$NGW"Zta UOyڍ=$ !}nHO+q{7>_ 4w!{F^QL7ݨD~;^\wiV>#=[OYۍ$t!$t<<.* ..%*i2ƾ .w.$Ѕ%H% !DVAs+f+'ЅՎJݝ|||$ $55OO$t!Dk4D6iŸvҺM|}PTrRKݳ-Z .v4 DEEq f?*X$"Q$.t:aub ZIRs,.=ug KBIB!.BPzҹDBQE?L?B!O.9qLIENDB`KCemu-0.5.1/doc/window-profile-3_small.png0000644001050700006200000026147111131675406017774 0ustar glaubitzfbedvPNG  IHDRGWQsRGB IDATxwT}مWQ@Jbo`bAX%b4hXc4ǎ,PQ)M/~efvv}}g{O{9o_q7%>!ߧllqpSxrK㆙_h-D̶E@{zf1cӎeIpp`;seOH,|Yb+_ysG_>'L[1Z k)l$ a[@9Bt MK!Cpp`{74PT۶=a&ZƏHCm GcgzV{>r?ݒP$|x!GvOs5{~2u#"_pt-嬽vF3v׿€ø{ Ia"iaNkYYa |1Gƫ'{TU}ҥN ]1`}~>lhZCQE/'ғv=]7S~y; !$t˕+&lLyYnֱN;" sΤ$ 3aN$ib IdL")Ј%hڲaU J`%VDzLbW' `Y6i]G27sutIv4e+NuP9 T:ҟo~! 5V4&It`+WSH ↛2g{8@n#e9iӲt>ΟMie.Xme-1H2RIZsmW9iYI8#5.hjq9qs6,U,N=dzc* ~ kCBQpms8I˴Q/kڏ*n8sn׎\0{}u.>}>[3eFY9+WRL"H1>-a"iP 0LU\{~5ʈj  M[Z6MQTYb ?;Ʀ'+"aLvfdI88|F͛w2vן;LB7̜δ3٤,mHnKbb^H<޾ Ѭ2fvmiNPΪ FCVLTU13`L2Xr`oVQSC7,0 ˲yv 4y}I33qt=X#y5].וr] ,3z|$$>ih ̊MqeKP8I{ 5{KױA_0js/6r-H][eV~u4tӦ*!ku2ג g8@ 6D)tä2FM i2!gaE*c6 Y o- 4QW?>>Rb1⡌ך\(KcGRƱ48 l 4\C7L|m~zN\;w ܷ*dj}PU>>(1aZȒCy{F|nkXu36GO~@(`ˆZ4x(:.2y2eXF%ֆ%TBv,GeM0La}(IRM [/X<Ů4ɽ˅z^+NWks+)ᅷ㧱fcHBcKtk}Ik8 ~~ уjxlT-̙9URûg&|&Ͽ+Ty$J0r`5_BHB*2|ȁ&%ѯ27ئ*|#vZK:T}e)g++ֵK,*uN4t3ha}`! Æ䲻_<ࢼ,5%Km@L9S7Q }\Zr:_(7Xio96Cv$t>ini%1lȠM=Dss3C$ikmEU$l!3p@=BZ„!dY ү-uA | F +2x~ LP[[˿,H]muVJxz Ç FڃeY_3p`|^/AsKXIH+,`YWb|k n L G1|(PdYQ]U鄰9@A]d &IF՞J<. i*>_%-` I%~)h(L@x}LLYLTWʼ~biup m(,˙$+,KTTZCKU2ֶ4=d 43 \H^7ɔmxni ˲QE1MYt0za쎶mIeq^qxŶeUM|\dIBQdٿ׵p e~/}UG`e@V7gpC'8AҤSidYf$J&`´d>+8xM4RnZ2!LPWߟvA4gppmSV^/'c*ςҝg*ul̐S[ot;8wp5A}oȡ#9pL92 HE(IBgr>.-[PϋG7d.7r*OUWr***p{|sp 98wΪ_QK >;Xhe$KTɓ'q7߬3믿eY?>ܹs5r$n;nOUܦ^d=ͯ7yc2ٶRo;8wp;!CdYƲ-TEn@?UU|SV^m̐AC0 kAv8֖fLOaǝƲqF멮%rp݀ UUH2dd")WJ%h+Vll˲1 Ә<>!`[$MWf\!/b}.60^=֧(<޾s?tT;Û,dҴI :_ lF0Ӳ1ldIʏ`Y&k' jjjLǪ*,\TVV"xHDee7xBzk!P :w¥n eY6`!`<èpדg)]Ȟ_|\h>nH) mgf̘y_9y/AuL<#: _?o]~^p|2<,Bm;o^'IE>/ q)zPc)XE1np|c(S,T$_G188wp풹k\~8hZZtXټs%W1a`=x; z,Au8瞛O[k UL6=ܓ7|H8LYy9ӧO7d]wOsqGP^^N XF"(85kpUŋe3gd9gcYVlt}( -z1Ё-qw'1:Jݓ7kͮߕts8owL1UUyW" `c#IR&d\אmakŘ2y2>MMM(+_/SO&JZ)-Z ϧ˲hmiadgL2%G4T@(W1M<]B4Mu D5&^ 'za{s;8wpCAi( \~) c2``_T:+,3|HrD"tq{ &x:tC~A$ElYT:rߖQeWXJFR,u *f)ISJnwm΀_s8$ K>%14nHyy9+/'J1dn@]]~8;4d",IBKsS9uKt+RT_޼W(`)|1T \r`;8wp}ܶmEn" h9cxa@jos+lwL.b{1\s,x$T.>e O=ʔ)SG"<3TUUrq{e%s[ݕK|i1ls;8wp}\et][gȘ!WgdV|xW ƌCZKKcNqp(D4 wU;dT%W$ N?}.7o`ܸqضI5nY[[njj"d.{"3w8r見܅m[SJR/T*͕W\9眝 ׯm}>[)~H$'JUUBcyf4,S^^#HSJhC1JÙcˋ\M=6J=l} m؞]4'ZrpmcTCGr1~8~E  !W{)8ﳄnYUUUY)* 4(bq~?~?+0dȐE}}}>|>>/C^YYY ŸlO8R!G)!=q} g)-/_$sPp. q'zt]q)*_G" tzQ[q:s 詭[Bκѻ8bkpI.fo+*lۄp՛:;8wp}ݬio-~ϾX?gNinnFAaλN;ʞp'l\M~88w༽Ob7kxY-m\aZf 5g^vwz{>T\='BoShe]%bt H;8wpy2cO`䩼kژ0b<;L^(uv!u(~'(f*6$__fP*fok;8wpyi8BH&2h0~6D"۬rKSJdI߮ ?e &[#ab:.[^Mӱ,6ƁAܕx.wz﷥jdH@4RTFv=,4nȠCI$❪H O`F.I^,cYִ~E$&WvǣM"3mY[; 1 ϋ$ui1*+|Yq>91LsΧ/ښE!lۢ~uu\Ӵ:<.e)'Mܾ͘. <wJ:}w>mSQQA \<[[ B 4 &ZUzj %*\c+nz_[Bss ngN\4av{:y-\ڋyIzYMŖNv4yw`gښq؆ĢQG\.ѻDz,6R|x6iJϖ,!vo|bQfdYϗq%z|3s&2A=/3k BHfwFq*ifLaIBbsc#/zV!X͒ŋQT~ TG.bh.3~e>tNj?bĨmwonZASc#GvW}%~´3в2TcjkU>@0i>3Iە<.YIe9 $a9_kMU%d" 0L{[ʪJ+u- 1e"B@ IDATWa`߹܋ɒswigT.[_PBOx}~LD5Dȳ;~o[U_.S0-ǃaH@8giew?ȮfEz":Oa*|겐i2hyk!-Ipw-h4W?`֬FtuMM,bА;Hz1C!v4|mV(Iiz$!ǩ~8,b|{wk˶weeշ u:}Jd6-t˶-_WmٖEyED"'w#̦۸>mxlJoW6`fQD֛5VV(:e+UWl@׾ίpbx,֭LƖs.ӵN !˾X"eی5W\]r[+N(B!N; llj9W]q=)fm^Pz(:,+߶vn|˲rUm@Y\ Hfy۱;!ܶGe-YK[8ӲljL74bcYV'zG7RWL^Xeۈ.cVrp\Dђ۲,+#SHȒ@U]TUؔu%i+Q^^u\{ۤ;:P|}K(S(U sm[ܦ,+nw}ɓ& iii?2F+WtΎM겧:2!EܽҎyi{|>[$J )K/fW@5H nWVvFad>谱ld"L%,2sH#}~ҚƢmү>s:9?=5UV:Ls+4 ,F5 ۍl޼D"TEAKܸ9wږEӖ-lnl$ #Jc%.WO>mߊL墳|jj!mJ]biҵvb I1O_,~1&#%t AeEeֱ-3COg=ej "LX—*%eMb|/%<eFQϷՄJxBFsvь#KΙG-敗C:Q^^,(ِH$"$A:zq;IF[[e bYtT*E rix|.٨JIKU%Zhkk9cOBS&'pɧ2n\*O<(+Ec&9>ŏܓ2^ew,Dl'f-] `&BU 怃#Nko[9D6o" QUUx|>_mr,DVdX$ѐeƑNxēOqw뮻 /&N뮧_m-mmoreo(//cɜzDbIe^z4_[.loS|ƆޓS־xdc<碸mN3$COUTb:O~HrtP~;m9y9V4.*16o¬#h4FuM5ӦNeӦ蚁g 1+V mc%CYY9:wQpuYr1mRyl3$q-/&g+6t:i])6L- IM7MsvV;AqI'ÏCr޼yv_H$8 /9#9#ꫯ󮻸7so|ĜO4M{}~csI'SOqqsAv7q1ɲ׫V:'t/o/s=9#a=Ÿ3h _psiy]nV.ÎNg+ُ]q,g4",e$tYH8ļyug杇i)N?L#a||Uɱ cakveTJm!]k.M3i;=[n~q/V`͝Bz1K헀,˹O;Dr7˅,HBB}L.i>i:\۶qT۫|u`BYg͆fEd7A*Jƴi9nXXuەyxɎ-sq>pgH$8cxG( ӟYgM7g?~]ʯK>h1o6oٳfqDܳO3wi<#a}SN?WrI'qo!/}>~M64 =W,re^"$ ];1zh xr/ŮNC믗re1~Μ}9!~?YTTT(2(/1gx5HL߲@dc4f:_xW,`ve?x~a>]U\}͵<\KH3fx"N,s>W]WL튿^۹۩1:lvߗ_楗^ⁿGkk+X 4:t6m0 gq:]w3Og⏙_gupӦĘ1  @\ ۲IgO,c]'ppDZmb躞5xy2#9cy7g?~<^wlz{Tʷߊ޷Gq+% j(@Kyaz;Ljݹj#2Vԣ"J=6[ӌe>|8UU)4i2^+VEDлJCᎥwpסdY!!Ip[+mSvwJlUk?79 g?DC9 6 +2+Vm>萭"JĊY3OA:Bh4B"DH˴my6.W6ƍ6 dY`}SNXiw~e%NKᗷᣆo`tX _YW?Ͽ\m??Yfim`0D*]&a~?dt"p}^G{c z7xɓ&J]]?Mݝ;B0i˲keaDb]Kx L v+D^G} ˲(B<a~DQv3׬ӧ2sclԈia?: ƟN;F.sՌ =j AwXMu%O<2T3:͝ˮaʘ19cNF\ro83ׯMK#Iz Z8hnnaڴDI))r ¥ h?@,#s30~gOsL6l/YD>)?)~?0B9/H8T6t+{:"BdT\af'bk6MnBm[P].K -;q]RI</3fKuچjKK3˗ŀtFRȊ?+b\T}WVŢSRUY$ , TUq;Znx܋M UUx,zoQ&gڴ,[9hIٲe3S&OA2d;&]ײ82dիs !I8\0( s0tLM:"Lcw#x:r8Tc$G;XO\ǀi](XYIUui;M?_]3/H 0w  X{Ӟ`b~<‹_Oпhދ)S&{?|rvλǏ>>O^/'xm^d2IMM 0D"fYÑ .+2,sœYl#Gdu먬Ivەj\._|wy''9sC?x$SwߝaÆrꩧO{F0axnQGSuYu$!gFdbXҙs$bq?d -zv?ēfB^}.¡0׿FTU / ,"@,A9IӓN" /G7¡B8﹇~Օ455񳹧DECL8ce#8x<=P(Ձ1o&$9dzi&ٸis~?<#WˬYGÏ0{Q3~u<r٥Rׯ_TuM2SB]W,L)DZuKbRrw+W}M&dsnF p|Xz%T*N0(at譋Jd-TVTs%,+ƶ2JU9{=^2d([ŢHBeed H9Eɏ!!I@+YQ2g95E!ʄ v18@B&ήm;TpeeOfyT]8'fcch6/3!fE8GϦ!$"/d!$=K60 8p‘ svsI$DQ:p&:t:M<'L͉'@<'9w9A$eEVK=%Rv=TQ-Fy_R"YDM_ _v x_ee=;:u%VHcq'dlSO?ѳ̂W_bZt 5x9=:ִ39xn**1͌e.X#KR.Go `G燬Rxk:h$R˪躮c{rBo/HEQ%+29gLIu$Y)uK#]pLENȨL.UA+r4T:]Ƚn%2WzT 2 pdH.JJ4;åB!C!YiACrG]%p! YvUTy.d*^{M*쬶˪&5S\G,TVV2m)L<]׳6$r=9鬝:BH֩fwu6mZ>Hm#u_i4{&Eᷪ@9'AE$uQ (*QE% SJU ==CXVϾ4t%,t9TdQ^0w^2AXX𙂃j0"Ք 2T 2Je甙R|`hh`(vq].JW@(E)JQ*/mv^U1<$]d* ܢ8q8i*1J5'9rxRi$&%o>֭WhFywZ<0( ժWg\sm#»<7AQdz:uSƮ;|j`Νx8y$6DQRRRؾ};5k&n/t|~O?Qz 4 ȗ&Հ("~%9s /NLyF(VUvE۴aO?{ dOLHy%>Dul\͚5cx=y+VYŵi|@YU6EEE|fb9X,ԫ_ +( qq4mڔ-6^|*UD&KXt7SNEE|zgSAR+Tthܸ1[6na\|*WLQhU$?)XFywB(i(xWJjW{9ɨm`_QE9^aN)nK}Ҋt HVbվ}[10U\cB@_TÕ^X c v>G=/7"ل(`'7CZX,v Bz =SHR>ptp(E)JmX,8+(e-Z-4oٚ#5 lvᕤ ,C.]iv4Ud2Հ=5 _X|&t Зw>7A𡖩lر㤟9S׫WߨQ.4,c8Ј`5 K*`x࿪}6dEvn6W]ErJjؽc}:Z\\<,]1i=QN(D3gЬyKTWBd 5ssZk|(90C];^6-[Bdя&Z E䥪燋?я 7Z@6]6s_GYQO@ _~0:{F%[E`0(h?5^s;ZU|X* ?׭ƛ CjQTݻvx@ n~sVUT Sb!5B)jizS7R*&=z^s i 0$MHM@Jjj%\.Q Ʉ(o2e[1^^d JEGnwxʮ] p#}\SU}#[#8f3o ɓ\lٲn Ʉ/l2x駟)zD % ?ʕ+C la>'dfkۖW]ȑ#!/'lvAll,YYcQcdgvx"ˎwPXXb1G(ۇP\.[V4nڜ?6F$7*VmʫfcO?QreRQԴ U0l&5hM߱qietS7*T$IL&C;СGj2bڵkW_ҥKlr-L:Հݶm5jjkot҅ݻ3x`jժӧz~tԉM6~LA8s 5jԠK.\s5̘1Q1̛7Ν;ӳgOmۆll67Э[7nF>#V+{SN4mڔf͚1opD)J-fyXlsb1tr}oV-[r~}|MhӦ ?B #࠘t2rH{?΢EسgaM,1uZk㈉aIl%&ƲˉqĞ3/EUb :#޳gW_}5իWtұc |ͬ\;vPJ7oÁbd2kײjjnl:tBV^ҥK>}Qn]>C&O~"ٸq#_~%cƌAUUn7'Ndҥr KxiU޽{ywxwHOO/& у]vtׯ?#PϊҿoNjj*۷o'FѢE y#l6txyILLB44i={}iӆ9s0h FM9x ۴^3@rss 5I?=`Kz ڵ눍b 6lh3u"QQK[CSQ_{B|ńu1z\.NgȲ䕐% YQx[nϏT@f%0iG6m"z 6zW_KҫOo?N߾4)SHOO[Lәb%66tjDQjժKM?S"g^@%II5p)X,:v,q0dz'|矯SՋB6n@LL [lf̘1‚fS^ +UСChLx,f3vXpjȒ,yZ̆M=~ $yuP(2x4VlHJ{!??<ȧUxLR~.dddп`<4U#//>ScưtRrhѲ999((#2YYC`#77Qnf3cyz9W3iȲDvmY~={v,[~:uj7pUWd2,^kܼ|"zY$I"''O~͛`Ҥ<X'wuVn ~jÍ7H&MPe5jcW\mvh۶-_}g3زy <|>P ƴiSyq1:t@=Q&YYYȲn')JZp]r-N:hJNN. $77Ν;99٬]CΝT1UU^:/`Æ8NG5hРp 8ƍ{RSSy晧6EcǎcZQzN']v_ĉtڕ_~G6us=G߾}\2o6nc,ݺuVZ[Ȳ̨QOеkWիoCR ""ժUmL&xt|=ڶuW8|I4jg]IIծe[ڵ?:u2(l8fΜI=ghii*B~}M%.>L?+b[i@QR(̠^?k;t 3MW3t"{ݴwF<].Hq=m-ǯaYZZYYYfS2bSP_yFFq8%{)++d-Y>FKNNEoaW_ҳwVZEϞ=FSwQIHH Fi=o7,8_6YdjFRRYYY3M߿L lX6^X,}99~ӶsdcXgߘHHH ''x&: alld"..<}III%++8TUrA %%<6lu]WlnQdSUv}qqnVEƍtf]ADH`-jjRyj!V1Wfff1d"##I?s`~!U2͆@g'r1fn|~j 8Creddc(qX{9]EΞM#/IEEEFN17~؄s׋7|< xs^UUq$IxnU0Pt1H$4mFBY*|j4 QHOOgƍxPJlڤW [jz ٌbAE-tm8PlFV0: Bd Y@#T?,!+ ՊP~z?% u(\?% ux%_&-?jjb$_,?59@nN6jb {^Qe=(N@C|A]:UQb|gQT$l6] Z5J$(\΋ V%\G#)jSogwJfff@iV_Y@@^+,i*$'PFz11b8ӑj9f$EB4 4nИ'}Ԕ2(2\})/S/) 4PZIhҬ)m'˗E-\QR0̴hղT,sMdzi<''! j'7+<<2<5)nsYP,]LvIjCmґ4MRZ3FZ 41p.g.S"zMtCR M&k{B7 MӸ[mǶԖŮmܳ3x o t`H IDAT̽F^r uVgZ(̛7З%ܚdLzk.%ޗAejG7(E)J>.h˺ xꌩT_{\ORZB'_.7r]h۩-yߝ1 Zȸq#!!nݺѵkx}o[l1:Jsrrp8X~ F*om`E ImYK Le3t1̂=K-\ k#=JQRssE?^f (x$%%e(+*r-(`QJu*Ox@csk8q>]v1zhoNzz:z+YYY;v+Wҷo_<Ȯ]hժ5? 66dl6x1cr-li 5JûŸ? BMRiWš; }PQ܆(E/ҨPT(C#: xaytމ:PV5v;[q*Usl29B xx'Pxv_MN;w.O>$+WAtޝ͛7( vdc䇖2%_ Rf/,ZmY4KY_J^sj,*b۷hٺ5ERQ4oS~U )Kn(3f̠VZ|?5k+KXBC9}4x`28qgOrc|7v䃱ൗ^CQbR:HOsΥ[nRrenFm6 HNN6ccc)))4lؐ!ClḭCAӨ#a̡̾#{6Jse;s&+qm[ҵ[wReL(nz|t1u{y>tEQx':u*ݻwF̛7π_ ܰ<Y]ءcVb`sY]ߎSOq#q5 lJnݨ]6:t0V^ͦM?[oe.=z:u6JYGK2Cl#*c<IY$}i_r|=KAWޚ x^F,IB]yPktpC ɨk-WҚ>uϺ*.|89G駟rQTTD.]޽;gϦ^z! ʄb:ᴭhP_3(N4bcc)***tu8rY8p%ylᾉҊB֢\(% C`ꊢ0h lIIj؊#IIbj #O™ Q b>pQ4!PS ,4 d7-[VnW (Vl"THͯp/lj 0HMeB'K_=Yr֝T%tvkt2Tf֭t:\.y@(t6 m@ЙspK-n0$1ܹ͛s̔ᾑpP0<cn#Qȼ C%?xGFѺCk]-~G V3h`'>5zFPhS$4 Y BoFJm3c *[\(mLH5pG{JCK"SL&:X Lxf?7J,L X_MUӰY={SNS=77#GxoÜ8qhd/Aɓ;vǏs 233yp둞Α#G8z(>]5Vinw[̃䞻)/Y٪d:XR/pL%sxu҅e"LCc"1ŅCm"bPS\~J Tbhq F&Mhժ%,X|1{4̌L}uN'$aX4_Zbb"@RR999$''}%&$0uTߏ$3iDdY&>>ި}nY`ׯ'99-ZDϞ=iҤ 0k,ZhM7{G}]weЭW ,0RS9s&Ge׮]?5kҢE Fi<~]r=̙3INN.R6/d@$~`[;C]gYPs>}:vVZJ76>@UUiݪ5+ɯM8YcCh|o۾@`@K3'" $X&B,Qײ"6l@rr2oN֭ٴy]܀(ڵ^|Qyeڵk[x~xZhAFF&`5H^={5*,,䮻rXmvzI^^gϞe,Ž!yI-ZdXxw@q8۷Mew^̂%"Ǐ7ڟ5k[l!66'b v;/"TPAgĈsV^#&&sRfMZnM-8uK,!..Ν;ӬY3222/y'>|8Zb߾}̟?_›.#f.}~#Si׆jb~"yõg\EEEdggxb}]C˖-# :HCf8a"C!+FՂJ%+\J"Y2x0+>]cǸ:udUx< 8 7+ufΜIn|fn \ny,Mp8矯Vڤ #AaA~r17n|3TMFF ƿo7oNϞ=9~ 8W_}Fиqc.\Yd >~TXg}uQTTĚ5kp\L2-[p Fˑ$ r~i>C.\ȏ?#<믿<%K7n Qgҟb3.._~u<43MKMPJ&MmO+7 gI_F$fLb`_LR+KANo¤Iٵ{7o^YIL򙔽Vj_kl>yUUIIIa,[yrOΝ(x*૷fbv2}Ǎ[0L x'ɓ'SD6mx~8V}?#ӧO3hР>o|I Tf-Ν$I EE+ǡC1cڴ_0?-sqfzK 򻆆iȊB0} ~m=~)&©ӧ‡owBH^o>/10e=Fm۷ht؁#LTZ ˉx%lr` jVcn Wﶱ|rz쉬(߲e<أ|f~in v E)J6w\UU8q"'OI<|Jd~zpzɿ=MϞ=jՊ#G2rH*THAA~(EOUVѵMٳ`0l߿__m{sQU* $+ %9v$U*#p!V%''IDQUT+WRfe}%t7ݔjؒa L %Dr*ЫAqE1ҬyHkr^\k;t 3MW+)ȊWVnZTtӻC#\ ?aX[~w$Y"W<66HJLLkܹF HRR$*NLbb/ܯ2l6޷lAjy욦aǰ~&L&A8&$$,t:=/]{s8 `p\>>m @\\J$I :u֣ yyydeec(\93gdeR&ӧNj)ptK/g^>xη[6aZh޲5G mrDs }fb盯pqPsr0Y,у.]iΝ;ڑ}(f#66EEEhFbbMIIIap84p/4PiRpϕ1*1y$Rs370D0yN*B_Ȥw0سtAk h(K]YtΟR V=>p5M33;̀W^qx0L$''1n.^/1gaۋ Qҟﺢ(X,b:\P7"mMUGDe3#&ar{ꫯWN:/{BSe✟w_xg={66qp8(,,dС\F`6mڄdQF3mү_?N8 Z*Çg…̙3{"`W =πgH[+p 5f݈䚰L=O;'ޑkeqx6mXf7nA+I hK&war;ih,ª|&"h#% a!beگٱ'\E.Lf- ;bUr ^~e>SL&cƌ'4n xb֭[@^3f 0jٳm _ Xnyb2^t;EXq-V+P^1*q(IeRRRQUU03S6G\F(2^C~~>UVAe_CJ<#,&b4j+k<,]0;vFz1͆]{=z`Z6l=goߞロ$/zXikB뿐˲B:uضu+.((4E;w3 edE*H7#UUP%/dh!Í9r$;>{ +U-[P4@biٲ%|pLb2/^̼y=!C0`;}rw{nF]l.>Pp孠IZ1DR)k^zguGw&SVm$k:AiF iּ9BʎixC;Cu& ^ՆfCQT_ Zw*Z#qQ׬,yƎ˫s=Gyꩧ5j n?ngΜIoQǏrFTٳg9qkbD U[ҏZ_8u$Qer4/֚GR,%/!|\o_Q5h@MY%YF R91" 2[M>Sw}>GPTT>ˁ(qS.X!b'H&N !`<&Mb=z}RBfϞMժU>|x1{L>EQ={6]v孷ޢz̚5͛7sus2e ڵwe̘14M7s eRCisYIxk#I 7,SruQEQѝ,JQRX+" ,@^`ZJ\^Oa!Y0'* X]J/UWwua(tЁ:p5kƫj;|0=z0;vl2D_/Kd}Yּ>r =JV0R$Y 2ke>klݙ>yU*b7Ǧ!i Z|EʉS`ޭcfy ,/9CUU#X.2Hr8I4Md]5V0ʼ})k˽;}AI4c!JQiTH@6mBV+ @6r`Ғ4h^E"n8x,ǎn'!!!l2~id pIC5|" Fi55ޟ!(RifN?̳ <$Z$JQv`O;5/=b^V`ciڴ)fd>|ۅ2<^7+Td!<ŅpK4YW^`pϮ4A4ͯz$_56P˩l[kn6[fTUFG)J2 Up,nӖzYϗnӠ^??≗&p\H1DB`C[ziY4 5Ӵ#zTvjG)JQ|d28vq$'_i/"G(BCE N EQ54UWR4_e9UVHX)g,+S,+.ժ4l`BIie Oas~yp򯹪y^AAHLL$;;;hLF$k5e92R0uw!C~B| =T!PӨA WY'."{J׃Gx=Ȓ-r_P ]{PN CC/ZifHD:˱_50}i*ȲlT +effdF £=[3gi?8ύǤI4ڍC zrx$I:ƀ5"q$XHz)VK8q`֭deeѷob_6E)vo\5|acg4M3(/zz ^i4v֮ʃJjj*|bԨQ$''(1oQ3gOG%99Q9|0| cƌӤbaΝ,ZB>} ?sL @JE)Sx, 6l //n-ԣ`kٽ{7hu?/T&T$+7SVMI`o;o!=qM$%`[Xb9996S]Х@*U*ص%K_*D IDAT͸,^q'/5/+coqƌ7,N'v1Á(ݻ}l6knN?f;u괯(ɓO>Ft+?,x e~x֭[8q"Ccǎ{L6Yyꩧ VW^qq\wuܹT|M8@=x XGEZѣןÉ={6ӦM+&8Nϧe˖ߟzݻwc2ذa˗/gڴiFO?41L\.&LoY=}Ӆ~C_ӧO233k/_ d4Uz :N9r2>q}^/WȅfG4?sLvd21i$~wL&W桇^0R :77QF1rH;(<< 8?>͛$Ifv0ԅ1ҘbyJ^J#oΌ3[ٷo_~~Fyصks?ZjsaG˖-5kV K\yy,kZ֥Ww91b+V|oÈX}^ʲ &|%/fij0  !EIiwBOݺuYh!YcK,o|GNhw֬YK\.x|G̘1'x`.f2u]=/vO86!C`.\jEQ4UpA^{UDQɓ͛7sw9..c_l2bcc811o\{59tΝ;~5kְuV~ }U<cL6+WЈF*J[i>QU4MCǎq:].6h@ڵ$q_*!Ņ;(*q)n_5kdkrUk*&x$r~X?vW_}[n={L~…xbA6i҄3g`hذ!999 4d&OLBB?3kצuFz c~VJyeEtC1N4KD5IHH`-LxYbjJ]/#In}{ !w1x]tЁ|L!&&H@(TXT6p8PdxG_`\RR2V[OHJJD|Bbas85RRR@!y?~Ν:׃b2v;q0;׿^ѣ,]#GqF.+ҹs'>L^n"b8{6U_|Nj;ҏ218E<&O̰aϧu6<8b]v%%5p%xnDU?E&E!2e*SL`\{M{Zi,OY+'CW+c & NsSoz@[hEk,ZȊZDqY~g~io iӆ7xf >CxbvM7dcZi׮y@T`܃/kaB!EANUB׼y^5JwOޠ}݋"K 4Zj>}3h@8s g˼ye~<7۴áC /zj23_[@4P֫wf$%%G-%3+;_z6m1Bzjn[nnt(,,wfGfǎq:ڷ/)))nTUYf| `TRŰjՒヌ9sk;йsg| K,2őGIJNfСN[/LuBէH\T˕4}4=EQ]lf̘1!2&E?@ub6W\%ص:Sy(xc\H֭ tZе4aؿ@Vdֈ͖@AA۷ 6DφjoBC<aMz(octkܧKc?U<zš8[hAf#NElSi 5HV yo(M2h| l~q#i}6åEӱC-x}W:uqG8M !#FRpMC(8ʊn (x ݈ǃ"x2^˱oP;Nq]ڦNkhqS*8@%8Z9RT7߁bEAVTTj]^EF} !+;L:u bVc[OE܌Dj+8OW,֣AkHVV3l6Ӽys~zرc9t3f̠iӦ,-œ9shҤ nGyD$_#+EG+0R[6F%+"6Nq> @UU%k]h(##1iA2*qYQ(wa%--Åx, \FHyp:VAxiy@=O>M:J( \r & Isi&瞰3Swh ,G_WQ:I0TƔV_ -LmyKν I 0.p]wQVVC=1c;سg˗/O?=ZͶmضm^ݻEѺuk>LӦMYj;w䀱 vԟPׄЃ=FL Ży0o/+CC9Ǐocǎ?ʗ̷\Gj'Bi|§Pidm?lXV}=ɓZ&N^5_9sHKKSyœ>K^=9x &r^_Ԕ hд3f^z%" GyI())[oGh4RQQOaa!v_4m˖-CUU\._|wĉ}fp5ꫯm;f\.-"55Uر}ڵ WeʼnuAe\.7x#6lѣرC?w$AC|H>ȪZ7ڷR(UUUl2!=8Y$В՟+EQ +R7t]7jeʔ)9Ì3cGa]w]hXM*>1x $ ‡~H^HNNk.MfNGD]wOaL=qGuU5`K77v׊pQ6m[n5kx<ݻWE)izmLF.Ry}VLEEÇnl63m4̙W_}7~VUV~i 3oG}c=ƃ>mSO={o륲իW3zhDQw/񐛛ˊ+زe+/f֭L8/Qz ш YɄeʕ\5ZZ뵿ss ?E TKE1M%ra*~fmv)nEk=nu}W_R# Vl>V{ˊ&4fZc񷠚?K/ʧ~믿ư#ط?G7gL&Oફt"z},77'+%N$ThvSYYAFF&AE0M2re 2GyW ӹiҍ&**z-dff2fh-^L&ǎfذȲš5k?С:tࢋpȠ}&ɀ F %nhQ|3HIM 0yGc&\B '-X'\8APok77lcҘ<&>JeYvܵ, `/VyY)NJ)..еح[PYYU7_5tQiӦ K.`޽̚52֮[ǐq:\MᲢʕ+)))_gĉtڕ~ǎd9hْ- ӧ˖玗mUT N>N.5T{矓`0po&#U+z18ɓ',DQxU8\*ʲWfɒiȑ#y\wShyx,XQ0f[׮ًGf>qܨo'zȂPt IDATk=އjյhT2K&5-\#i ES-kJc<ڴH)~5m#H>8cٳcatҙv0qvBiٲ%,ѤIS}\L6_누QF耪 *Ec2:u~; =-M䭷4i wq;]4Y;i֬XfRSSeBzzn pE>޽{ŋ/C$&MNSPpit҅?>}zӼcrr999̛7\S%^=Ng^z\x 8c=F.>}Y u:o(LN'!+mK? Hm!&h hʣyҷΥvMUeV# 7ҫwoJը*^W+)H^7r\ڻ-.baۖ`2iպM@zcff&#`s ei,-=YuXDIH@Yy9锗ޚ4X,=;))Bw5=:>&NQ|r^/TVVEϧt"I\.f3NٌfJOUȤ,=MOϠ8 $&&Y$jnOԭeeea2QYwivRJ>8d49vYY9`ڗ֭[9p G_Aeee`dP\nƆcx^{esjY((z}dEVM^4Յz(!k=p'ECV{F;q_(`Co( ,s*_R P,;ڵcG~L&N.ceeejMjW{t>*풒b=T0|A7 n7FǣׄlII1f9O1MMMq>TqWTT9WTTρ XP[[Kر##}]4^{c gqT:p EdыG"{H%vPSAв9z*߿cѴj혆?]gX uUQR.cK;P!{"R6&>S/8(T5PR(EQ>Z7z99\n.'5յO:bAvSr[b6!.=sxco!t]:Lo~Lc9}O( tUE@@^8)N* ;,2j0iǪUFwjzXI1D)vb1q{D~+"233Eǽr L?q7"{y XΟ2)))$%!NT\2228p`m۶+_߅@LJ(*%J% 6Kd{,&BQ(v#J };?]W{*`0 u/xڴiꫯfٲe\LBvv޷Rf̘,s=iӆ)SPVV`ܹ#s[oE-ZDII SL9!8 $kS0c r1 У(z9c'6|5@Q8L&"GCreYVqx25")VܶzJTi=/`ڴitM 8>EQXX/Ν;ٳg0qD^z%l6Yre@=ʡCسgvH5dZicie Fr-,Y-[0j(;ZhAnn )ϼ~BP}phwcE Mx8j'-U 4XCHGAl:k] LՌ8r\5<8:D#FNuF^|E ^}U4iBo۷/37kLNj/Ⱥu4hz+v}v=êUOo8p-Zzhk"QC#E4{''I"ڴze I  ?<{0rrp<_;Nq:Iʬ C~2(bQTEtsQ/|b'`Y0㬭eIMHuJTVVīʄ xgy;w.&;f͚L:. ȸqGEEf̘Aii) >Ç>{-$)nѠE^ 6\'ãX5hyjBAFB %H-f *F$dE +4T_uE1TU_F ! ƂL؝.,H<=`V=edQ]Ud:6.tb h99,Nqm۵ޠUVa3ES#՚Z;o$%)Y-ᩬ@Pj]X%u`@$]h`04ZVY^Q$IґZO@Ҟטp>zcbhh(_uFX͘_Tᄘd2rBAj}JJN;y衇YW8NIII iii$&&FS/pB.Bt!PUcǎtRbR*ؽ^oX+(f.+}3m\v͛os=W;՛8\sgѢE 'C**Lp$_Wlp2LF2gl=`m4#EuGhb2)-=4;#3K.]XEcܸ ǏoMMOxL$%6"aZZ^;==232ӣttL:.B$InWVi|g\}$&&޴ҩrwY0]̛7I&0m4z-EA}@>Z{uZzyXh$33RFj89$@MڼF'`ٲe\z饌9ٳgf8Oʙ` %Aji5 H>H>`m I|MT׺0vw0=5R d&ٶ)ykr &==6-رiFّLsq"pi+h5l.@;#GۜMzf?9k 8g?g}Ζ[yqKHHfϬi܊bOLUDHqtt:lpˆén3p D/,!W` ~h\p#G$3+˙>>(=^֭[ꪫp8 22dIAϞ K"M6qc6)=~aÆѣGRSS>}:>B/Ŧy8r%;; \ KXud7_rJ {Ue_p9k}q4>NgF$ ]NTvkn(GL&#yyyꡟ\dr55HBM8e3nEVظ pjTUMNDgX(HLLiӦz?5_QQ,SPP{qTUk]ӉfȲLRR:i s1zo|57~2yA?<=.h>UTTPS]Ov=-[䥗#mn@n,^Ν;}WU/avWП2|eJbRRIVEU}9vth<}> ݇o2X-oFff&FAjҮm[.0?ښZzA<{OFF_LΝ޽ ^}s9~}X6:׋,4oޜ̚5n)`2iݺn6۳z^/.Tq\XmVᆉloڶmE]ī.7#GnF̨֭3٫dffѢEAHJawnO[nۇ^{\nv^c\pAzΝ…1h@tgnO>\?ѴiS$QrXL@uuv{b5\ɷS/#UUl2svڜ}n7L:h$IS*?L7eE&IӨCC\3a ,xax ?@hFՊ,x<өAQAX,]QB75))/ڱjF#iiHHeeu}6$n>Z,NgP8L3;z& pBIjj ikvw.ҡCunz,3}{5&,RVKds9j➃p05⪪ĜT{ݻw3k,z-=ߵ<^/&IOo߾X,n}Q6o پ};͛7gذa|'lڴs3谰٘4C pBCct ̃s8'<_+kK`27 BZi\. )kB[v#]QQ,κ͆Pgiw(VJx(˲~L;xtׅvYi_ SZ{ 1%"OR( U\uPtlɻ yx{KA`fzT$Y mѢ㩧{ .'_̾ |XVƎѣ8p cƌaĈ|lݺK. ?b~n)$cǎex޽tfvZl6ޯٳgs饗qFڵkc/-[b fϞVW, bZ$ҽlc}:?|\|4mڔ?f͚ѿ> zypWٳ@޽yX~=_ [;ĵPh4ݕ IDAT<ީyz>Zr:]XzA}N%IeKݷ\гOh)N a"F3;oSV Wl-,`e8Cig.m۟k ^qપ@1jE$Vh-( C!#5T,Yԩ:u ٬ε~lْiӦRb6ꪫLikXjc梉EC?<2k-+΢>>g4$QP>4SpRQʡcǎ~q9Q h̥šjVg%㙧,Ej I#;~05?7Kp| K+ @L(R6R B?GH;,,j!z}c\QiۖvfqS%ɗ!:"LCCLt֓#EXR00&6|`8FցFŵ8BFLzzFLkVy4܊`FB giE,&6{36OB׋j%#=#G Y\t022uӃn4뢁@C (z4!hR"K=,ѴJ8d˷ƊF8 ];i,kVEc幬(dfdPVVϧPp迵h Pk"(4ȲZ1SEA/R8 q8 X.2ie bO@JUz<ݻwW_1y|i)zhG`0`4>}:?3F%Kp5pwsررcL0dzk.F#&Mꫯfܸq|;tBpu.,jD;Xb'ؽ>3T[!g5Ĭպ9(LYg!z'VE!)) ͦ?d2[B)#-L%##ChO$I⑙wY,HHH8AC?A3L;E#dC]#˲^AM-r:Yfa6O_~^%g?gGܪ ~j*(`CֿQ4_J0l6?ҦM_MI ȭ={al+DU53afΜs1" _ϨQ8sX`eee,^ҴiSn7|e]G} /``˖-|Wc6;9 6rLKQX&o>&{0t$G4t CbfK@_o;.8|DQW^YI7t:}F6 `4[ذaF(¦͛AU&$$?Ыw/_x!$E SO?Dff %A)++?d„ f3 ,`z)۷sWwƍOPApsNqәLY-Z[gv{X[Lz0?X<䓌93fywN@eF\>Q0@<Iɬ^?\4"9y3g̘Iϙ6mns9={ӧׯgt Wyҥ\~',$b\A0xm m'vsn,JVV6,$'\cOLO?4(bYt)SN%1юb={ػoUlڵcGZ}y⎊ ݌V^^hMy׮~iq|x^$I TPF#F2^{5LrœٳGw)8pLFF]w555԰uV0F 0i$ϟSOq}ZlBii^R~8L&v={0i$vء%&?g #G2vXVXAןjp嗓}سgÇ/o7**ɓ={6YY:t˖-[%}{ DzF&ymiÏḋ1L߿3ի)=^vKx $I{G_~uV#FPYYÇ9r&0uT ]w݅Twu/ viӦ cǎeӽ{wZRSSQI)N2뮻0` F1/pb4ڵ+:ubٲe{-J.4ًW,y)F9xN@<^}UFϧcǎ]( Gѭ `֭[/Bg};3(G8S|JEPPHk,4Ljj]$''#Jb@FNoČ30q"MxwoAUӷ~+Voq̜ڳ; 2pE5n˖믿FyY~~EE 2zo -i;qK/Q]UŲex'hѢfb͚HMIrq뭓 2|~2LTVV< /@YY3gdܹ?gm-njaРA>\oCIq1㯻DZjn#Ȩ+[O裏;ٿs` .GEFv; tb:tpx<~AsQւ dַo_,X@ΝC(&V+* N{lR| XN'7x30}t~a͛baʔ)|VG L8@7El>" P4pO6 lsq2~pik68՘{-B)hƧ}#3gv>IumiRךz߽ -=z4$|:d:a.I""#rr9|wy'`08p555݋;w"z=x=02fƌviӦY<*i8yԇHBo RjX 4ܧh墶̙p8p҅ϙg4K&b}Ə]vйSg.R$hrYr92&JItԉd׽lMUP+k~G}I'}q饗R\Rose(B׮]83ů׃v潶w}2<~,/[nY),¥^vCyy]w-{{[VNaa!_S_@Nrq:Lh?ow ''%\BAAv˯WX p=~s/`:yZ3hmG*FMQnTEx6DLeP1EX.A4u :Ȳ3ȲlMy,`cZa[JښjI7\jk\e{_!CRtckUM7kK\/ EOfȊBnE &== =ֱ[tGQHIIAQu[q\dddXZfj'={Bü^/III,!1Vlj#F! "6djkkihh@Eٽ ٶmѭ[7TUKBUUIJJBUU^/)))V]]MVVV#'( N,lBjj*Vx?lwff&;vбcGt]'99LFX?nq:4tdg"z3׿ϢE, 9~:8t=/W}ͦoؾ-64J|&#Fc= ILNA4TTt7߰ 7np 3A &h[ccm%X5 Pji:?|m`0 RSS#ҹsgA/=zIAF|_OFFhtU3r!vAxJ m-sIsǛ2[ˀc km55cfs~BH4`j&=֜)$ocJt@זVp4ηt}s&ڎX\+LQO}}2``Gk7Mܜ\.>"&ס+nےRMѮ];:ukmMΣm]R~9o@KaA9Fu-84M+0"Lʧ:J ߿v`^-5MIk֖lncomh# ^~ysxqMfԑ?C7 rrrz+"4-hs`Z<=%өc y\=H]C&xbXYyY\{ 2Y,2\oMZj#Ny$8v ܜVZ `˗qƢ)7ͬwwX.--A8 0 mJj~3"#  ڟGyi9Fmv~##NvMM Zt]'##M6( ݻwߏQ޽: l߾ǃ$I$%%ѹst:PXXHJJ [nEjs 3e ˅fw@#+++d(RWWǎ;((( 33UUUEJJUCu9h0 JMOS۾RhŚ{osNnMb23uR$}nf;1^ٲe r fppҳgOn7{K._<|I|I>sJKKXx1_5Zc۷3{l:w̦M;ٳ'?> .۷3gd„ yi'N$;;_~SN9%ݼia`|pA( =Swy'֭G_~l޼K/#F0l0.B0w\nvQUՊ?9\[3X5o,DU ǔ*Nqӟ$IBh^xNq¶]C{tUҮ8^w%tG , Ӡ}@AA[n ,fq]wq72p0 (w}7|K.e]ҥK`Ν;3g P}ٲeٓ:"+IS=|cvZĉ@7Yz5ӧWO>駟믿{wc9ƪ-Iꫯ`y<<$''c&1bG}4{nٹs'~zDA@56ݒEKfX'ֱZk< Ҳ=NqӟcuAGMZZZcXk+zNkhY$yz7rs70yuHLJdXLvsUWgYn޼l%>}:C !%%SO=J)"O=s̉3<6pQ袋E[xb$IbذaqS|\p۷O< p}㏓ǘ1cyᇭFu௽Z4iͣEQbÆ \velذiӦxHNNRi>-"--qcEfd%ŷ"MEQذnys䑃Y'*cg2r(t3Ӛ4shF%Xz߄it Ay})g6 ɓyg͵5Ϙ1 PPP%\ng1p@E ӤEQp5CjԄBG3ΰi1}>=z3gG1w\JKKyqݖ:-bܹQ^^>HJJ ӧOK.+|;viw x<q<444xbjjjlΣ8hX HDEE9{|85OeEQbAɡۀBr3FcpAϧ[nغ|O9I)Itݕ}emnC,`)Gr.BdY/gΜ9zxL<}v8qń Xl=z@4LӴ<999|L0N:ѥKl6 ` 89o |^dQu%tؑzo膉aF^Fhz^y^DI"s?RHhL4MaIñ߹dEa{Q{ ,OxQ(zYò;?$!I/)0Թk4V!t ֽeYx.$I"7.mʧu)=?8֯"].(e|[JaB `Oƍ\amXIfeRrsU֚?D*ќIi3$awwߥ|&OQ ߦ} 5'MK?R@~?VԴt*U4[/+;CW_S ʕW^ŲW0wK{U"gBb"O;E5Ȳ̴i:t(FvYn]aCljA3rgaauM:6?O?YQW_} &` #2Ȳl `_郂Ah=Nq ]v1vX=\V\(TbMЛZr$jNc{XdYb_:[y+ **z4xPЁaCl) \kʶFsk ~m 4( !`֜C$ 9֡C R UUٵN;2x#TU[nA$n:Qz\}`^/"<&MBƫ={6ee̘>FEEキs=ec!2a+rJwߏ2}tLbڴik׎nj~gEaժUY|nf+I,X|TTTPVVƴi֭SL{wN:ŋ93we@II 'OfL4nݺY~<` (K|7 e]Ƨ~J^^v;vw˽a(nz=uawފW5SF%^BJJ =\{<Ͽ'@tLHiڏ2fh5=?8wK}5r˭ddf1e͜4j$$QRR_^|q.I)aި(roSO $ z߰v+o_~9 s[ҽaܸqqvnVn6 yG0MX`.o{[7GAǎYz5K,N ;;~k+3fpuYɉ~?555Vx^#==Kxw_ʳ>˙dzl2Ei?`a b tR:5f$m-B iF,y%,EÀCѺ+8q|G`Ϟ^y{y 92^{U{qzI~~>C Mt]g͚5۷ς0M#,Pӵwܱzh> d8 +PU ]\ }iU?,{.zs˹`5 Ĉtx@AN4 @4?7|l9N~Yk1enN cWDlX\&bA֓ۉ>yIۊH˱ ˉ(vDtOyIBA+--9lBFF3~YYss߽2b(y$:pċNn^.&4TUUg ;ZNoc0wuwޅneҤI\wݵxM7Dnn.II$IHb0&Xhja_GEFF/8C78p &77 zɑGɱKff6L{1vSGMM`p!ř9ʙ 'bРAx<0b3: gg>(edwEI]߿,x0#wL]SˮzU$7?ӹbD};$qܶ [̴4 t"2jL"³HJJ‘!Iդt:SRR8֓p\GxBb"|GllMq]׭XxMHOϠ&Vrr_}Mp8x^E1SmzfffR]]fȠM .48IiTdنaJ=z<TȡqF$Q(VBv_lxAJt8x78i.lMOz0o}KA I(/NMM-vv vVRYBXp$|(`W$A/P$)AΫa&Mq׫h/J4"hw&)1AudI@#zi.!K5EW5с"&ij:?UUU-ȤRvޠ6i:e{KH ;V]]]<($麾߱ `[lט!.( @EE9,iVAp:~^@CC=rR Ǽ^Ŕm644XAp\+Ap].Zx8La4I]] `"fFLt0L~&ض~ ?PIFV:qV$KaΔCj!t; Ϋqΰ,fpZfv'Czgst Tj@X&0ixWvwEN.љ "&|u~N:u^_c&(pҀ\Yɮdظyt$ڤ߁v 4۔Noziz%}p͈h4a9T1c }fBs BdD E(C`z,lÈ'QGC/tS/30M1yV(-s1**Oټa3ii_P#>3壻R\YNI׼${DN9TMGTDj<*7ŢJ(n`ʙVZ¯Q5d#AD7LvձFǰ|?Q$%pg4k:6J* IfлC {E$dzuH& 2gV͙m Mm#:!"iE2:?呙ll6\#2bPcƀ~Ҿ6W> )N"2 D 4ӑkn46'& c _#)% ƖйGgnJ^]'eLSFlz4oTGu䅕۰+> ;\ ]7Q$MkUBv2#K":CdN J*^ʝ#6U3Ж(4ƃ$0 D첈ǧQZՀ, ի+>ۅ"mN ~l[x}Sx^vJǝ.%"lFBğBCim!gd{Nz`q{s'&ف2JLHuuui,M2ŅdWG_=EyHWq$;xDS1 t=jl Ihq}?W&,i0LD{(@mJtl&~S'&jgRetDk^HNh]v _n&&IPR\A% 3OU7,@0}tn89vz9ivl@ۇ]zs%W֝.yI,Fw 0?&C5V~?UkN 3U)N3 ѿBRQ_ɿ%bE3 Hȍ$-+^{a&n>/IkClO/aٷ{Xv:9 _1AzYY#rxlfT3Ae| Ya%/GG3 o YvT *k{5*k4tY h-WC YIqI+">UCamQ' vh螟J5r+a@CA7Lj_XYv11I  dzk-9t5WX3" ˱/Ipp<O)Nq͎=!EEbXq.` ahPS[GYq )/-'S>[6n!/?$*.34ڜz'9'޷ڑn|]HNP.n<7vh$'('(*u#ӓMO:qX>P; -7?ɦ5ȒiPy "6I+8ep>w]4Y=z@x`wv>&$zs% $Q@ L3`Jb1+&DGqHZ}P rq=Nqk~mo A_@PKwH)ХW!?D~=ضyf֝hjfHLmiuBcY@K%jXM$KO 8("_ձۤT& 5h(r·),3xFF䰵FMޯV(Sdиaї y Ǡ% :7Hi3˃CoZ57֡.mPMI Mơ;q2ILǖޓesNl vDI$9%=;Kާ;JPcǑﵘbMj=f(`bZNԑ ! X΁ !m+=-23X=Mg3H"v%Ĥ`bÑ G񩁬c㞚#!F"q~ mh`oi)&8)NIfF&YY-ocٽ~MiG#۶ ]u14 Oj3fԶiBӀ^ZoHl_X4#O6cH[ҢD3o*4D6FUӳg/DI&×DQdÆt.Ba.tDMMÖF!7a (a1W42c5 9 CGc95)f_2b(rw8)Nѯ?ߘGaaau^m#Z |u$}%$`&qb"T\SSMUӪcq̛xKJj=Nq[.[JAJJjt1Eh B<7pxIcu,̖+V!DM4jċFjе|ZQ~cx`jV[nTM4!/Nqeb[ICsǞrT!| :׋_z5 Wt/NlK@]mMD>w0"zYP4-`KS-4Ml6}9 ~1|]-&'$2 *$IbΝ WU5(*oΝw͛97n~:ac?f;())|r gAuu5pB9;lq5о}: IDAT{TU%%%+WriOg4khҌ'3B{Q6nȒ%K;w.|wSo^* ZEah>X# YC?\)`dD OQUJLBnn. ,\x]בez2gfΜIJJ 0`c@m SVTޜ\Xkd촤@a,|2-yMZvmseŔp̱PQ{x{[|>.J>cSVV·~ jg5(k\Nf>4GCZz<9gM.j$I|0l޼h?g}ƍ2e < nۂ,X;O<}g{ vi,Y.O>_|~˭/s=Ƿ~ˇ~ȬY0 Zo. I4 EQxGx3f &L`7EQ$%%{ /L:2gvf8q"K,aر""rJ֯_π,fw-;rfenIALy㉈5z81_z >cᢋ. _ІW_qe1|p}Yvƍ4i#F`̙3Ok2Ӷ6[PPc@5` xs̞=>ks*yfi餦cD|nZz:Ͽ"f?B=hhh 99SO;&k*$œ9Ob O!C;t32) w)))Tstq'r91t ' CT:v(/99}7c=Nm0+pQ)..FUL'0ٳgyC&y1kKQmg5+.oC=VtX$Ih x1mE8Q~n݂([8i=( ^[nᬳbذa\y0,[5: .d!ـm2)Gy1OB[fҭ sQ`ӦM\r%0 \{;ӧɓYt)#G lR\f˖(t m|D& $+ZKhA,C;@ޥOf>D@]]@cرTU3yy=> Ox kώ; }>/{4MJJJxfYTUUL*>_;Η_~]WjY|{Ϩk|z҂knb+W '(++端dɒwq:IMKcl3>,z>\z|ͤQEm\q8yo1!w7t#z⢋'Q"[b8G9k,."6o̢E۷/[ `:X$a\^9/B'Tm6S/m>vZia OA矂ڵ%nsk3d֬Y_<ڵ+85h𦌬#YshcZ@K9ohm&4H}\uUJ~ȲeWs̚5IxtlU?2mtÃ<̙?#GAC.騪Ǔs#X̞6dib`4޽z+(PѣIMM^e̙n5Q|>_v38|JCCڵSOa&gF=E˵^c1~BnF=<9s&'x"={@NxAN;T Drr2FO>x^~:\t81t+ZW0X]N:/lڴ0=:=g{kj&t92e C cj+yrcsded .a DADש֡:nB$O?Mee%6Çs3~x~-wuGb Ǝowމn{ .`\$4 Gff&n0ȴ"GUU$I!I6pV_jkk$ CtZiikkkq88I|BI^ݎ K8{RrrNu<YYYv`inv{B֚nAVMp6ݜuUEeTÇ_ڠcb"PGFj40d |5kXÇϳpBn7&M njCJJ ?7|~Z3f'x4ѴЦ ,Rh^mCm͜ZФеhcZ-@QØycAOо(iU eӹcK2ᵏMӈ dȢ(t:~VUUA4f4mZ R6MDuXO L6_}S~d4dT}1V@coГ54VӍ߫ՃnP3w91m6z/uڃ,Y_&/HryEd:a0d b3M^zѫWL%t>q8 mE9q"H\KBVX,{Dk#%|>n,X~KG;{]wyyy(Kxb$Is=`fb;<^xKk n?8Ǐ{o3n8^uDQo1Ȳe=z4&L3 ?oւO>dmfsqw"IUu͚5Ջtv 7YxuYnu쮻⬳bֱ[o .*`ZLd\~\xᅬ[\|9| 7p&L7୷F=ǑGtFD"~>p̃Y']GAr>JaoiSg*p9 ca$%%Ya`0EQyk|-T{r:ai][9tLӤ<` ED2HKK*>pp]wsW4Mʫ";;JMDQINN&33^hkHRSSmV n*WTTv9Q_co?uVkۢ7u4ki[3  T Ϡl6lBFN| YYlްŦ{`oXr!.˂vlr3}tz-:v֏>͢E߿?/"{eժU,Y׳aÆ6~spB<Xbg޼yaom}_f %%%a}Yt)ǏnEtR***7o,Z'xg}~`y PzKL6j?fԩl߾ж UTTsom6֬YÌ3x饗x>}:vb̙v֭[}… :ynؒSa[е{.r;vh6Q^Q'|'|(Ja¥#1;JDQ$9)+V0,JQ0 Qe0Q K.2. $IB$dYcAt2kE8^ l-ڊa(v(9v~l6DQD$E0MW3yd<$v&#APz"**K< ȊA,fqFV\+/Pm[acоQdYF $Il޼6LӴ (5^vw.puV@/~p>C8~}`{{[2Zs:?P~y@ k )6$G~w{lzǭdde.7>Ĥ0Ѝ)=\222r)aݛ:>#~'NCV+5̚57|[B"n-cǎl6$Irt`ӦM|XV?71k,Qb|2`2Y|lv,`_3fؕ/`|t)O= }9)))<>m:6mfk/pf?k#~o_kzyE#ґ{#=[MzB]zHRx= 7gJN~vzT\v:#MmrrZ>CylT2x`>c-X֭[n7#G駟rgj*N;4kDQzL8+ o/vZ6lD֡Cƌjժ@}nz; .~h"A0LۗKh B޽YfP{Z=ꫯ뎰M4yihAriFeL֭[G~bjsjZJ#ibp#HڮHHxw:t(ӟ3gmrJuuLkm?O\N' h#Lbb"~^Q8x+Wj⇑M}}=7x#9sfdS꫼;L g}6{5whOk @ 55rg9䓒ŋבɿܜz!N}nݺ~I|rf"7nJʸqL2ߏe0o\f 8, LbBBi+RR4}橧>iۖRy$%&7PYQNzZ>,cެaѬ\;G's0OIMM]۶Lp̝*K.jKT-HGbCT8aD^)iTz$&b\nWiӡ[ hߵ=;ߏ8BŞưa1b_|1vm;QFx&}]8 IDAT2deee\y||tԉ.r8p Z% nNK.+ooseȑ~^m?;՛7M0_~n/<4IxϳX,#eXHLL`  delDYAZ&?5L2|kj4=8x %^l Ջ>}֛o ( R8j{OZj /|Ca2n$ICUv={#\JU=DQ駟nr,u]u]ڱj%,3~xyIII̛7Oj(Fx93c4k,n(J?*++8q"'N<_*SP(iowMC-2Wz`Uh%8=mc\T"8PrH }t).ZN'2z(,fGrr2W]uѻwozop,-gϞ=*+?.s/2v'O&##C+X__gW O}C-u5LyaFijkڤČ^ #=,.t('Laʔq: >ں{# $/// \.r0 Iֵ F]Mii?OJq6*5/(8vnF>zͧ}mnCe|)^9\rrrxp<&xg`O D1,]=zDtz< ׃b 1tU1V)ٝ nl6ӆTUWs)}8N0[,v9#F^I=O ձj""eeeR233e ;;[FeMRZZJJJ M) ֝:wzGf2p͡24vCEEYYX,&~G[^.վkR]/z-++#99YØ i z{DQ&NngaXp\vl6SQQ@NN6O' oX,꼩\ͻbT dܜ\<^O1 Oׅzwy>hXr]Rƛcza#Yjvl5îa񷋑"΍;iߖ.舏D¥=Uϩ!*G$޴Cs>?8$T%|}f=zTq88 HLLިFK=zuU]2_YYYfdY&++3BU ]}jj1^/6 ͦ9ʲlP߯U}iugh oSOTS0( x^!=!}W<o>M|z֬L>>_ux<44z}#H gQ8Fi[" 9umGsZ-:--93eE/'=%zL۠b'=#&Zup C45Nz5Zs= #wؚkj ̛2[Yp؛0JLc8F2S*qD>tGdK(sz}$`;|(hXH4}cpо 7E=ʼG *ZߖvcΣ^1Ҋ(\?z.:"RSSl* D"8Z<ܹHhD9ژ걫)<0m,0W]Ghۉ9q`Mz`[_歏nc߈> Ua.hA8hߩ7KP4*J9jIx=G'ѸRK̕816I' VoO=sD[犱 ̏2q2ƎET6)؎;xWҩ 6\u+.N/k㼡)9Џ%6v0WuaAYDQd붭L}Ͼ,KV/!]ٽ'7^{cjkG5&hk`PXs)$ ='R-9 FV1\Zr}4{K8BGŷ_ 6p8Z/B=,e˗4{bg&ĉ@oRvɒ%TWWU:QM ,KG,[0`޼y,\:~a6oެ~Qoκu뚄zjӂZ̭u}y"ZhsWOߚ-z׹^#}gVksh IJ+[%~umGEiԡ8S}$?HLKJJ¦*_o5b Nyy9˗/D;fY|9,_+VpС&믿jiP|j؈ TTTP\\ܤ;͛Yr%NSoZIT걢"{혚prMn2_˗j)l'O̍7ʕ+ٳg]v&M[oeʕZ;5VsZŷz愮yu'*M׉¥Č' SX4070?ޘ$2|HE}DV̶ېD]%,#].;ͦP%{wjvZcJNU)"SNO?e۶mL>]#.*1ٵkӦMӈw֭[49sؾ};'O֘bn@q˧~{}i}UU ,o h)>>~r(..d͚5<mxGX|9O>~,]3fh4EQŹ۷qF^6LbvoygGvvf NKJ={VSK⢋.bժU :'x[o"rrrˣP\먹uA8e=4 OfuJ6ʧ+]K@Jr $6=ҭW7EE8tӝvL&rCU}OQQv<4_gE0a:4DB:UVV%KУG***?>={###~[{9̙3q8o^Ԧ:gf3$j*^u}VsVgffRUUՄxt:y5J`[YY ׯ?bR}s91/Z{>N:p \\\_ R6ġGbf$c$#!:4~<\Ao-U VǓHJBoSFn<$-#}GS;~ 0Mt(o䊡Whuuu,\P{1>sҶm[V^5uvx뭷OYd cƌa7T>#^xz{=Mt:)--}\wu<~^z%xN+cskc2e I7|3> }Z Иݝ:u:jxAyWRun1ө|˥1 .57\ =@-&ļd]Ɠ5,Zi7'kX1VJ2P,ё%v =r ]ˬXǾvl,ˤPEQayCգ6`{8P/w\veTWWSSSUW]EZZ6`YYYՋݻws饗2`DQdРAlݺqƑŚ5kHHH\СVl8ӯ_?$IbjNi(ҳgOn?aȐ!L&Oee%NSN9B:uDee%wy'$Ѷm[ڶmn;@:vU7n ЧO իp9տ=={@>}ЦMܹ3ڳ۶mKǎILLuǎlݺ#Fd57ԿnWsNM!j@S ,҃DFffXUykn;AoQGtֹ-Z6Z/s&%HDn^>5˧ƛ=❃?9/z)^zsNuj\uU sTBDz,8#޲| 뇞c8\"=zg;Sኛ9ʘ+9E IjNnuw-(g=Y OVuOmN.h;oGzʩ,a$ ImON~%;KHNEQN~Re~E;M5\}(wPpO>Rl2-r|GK`˶ p8EeVvc9JH?Қ8y[s\oNȼGs6'bMx6ڋ.D**+zP~n)+-?݉)/4:oNӓ2'8 jGXޱ񪤎eUݨ51y`ؐxTr:0070-`nj)ס)ܽ~֎?̚;/.,7715g"DSESĚL &ޅ|,1?^Ŝ٣ '':7070oeÅ iP|D!&@bb"q`b8RDѤRyéɩ~vk`Ob=3 ļ9sun`{<&A'EdPddY(?DeY.NmȦNLģKkg*Op O:ivjgE 10?q17cP[5RļfnY!@}>>> Oao#pѳTYZK-<)dR&UK=20?׹\'A׻ K:}FAA.vI]}((YRSoӎbY[˹5/V<ԛThZ~/zcxsvkGs49]sÁ$%&LFz)I$&&HffW|KA+-ohpqߣQEkLݭ=-i\<7Jͱ!5ghn-scj`n`{<+]h)**'=(2^̙/3|dY񐘘Ȟ={%ɣE bZ4_$PUU$Iddd/G͈#0L|ᇸnV+'Nd<%\Bݙ5k>g Pʴ-H&|Xq-]T hšx;[җoz $4hR8GDvk@lhSІ;Buueٳg{oZ?Xj_ .࣏>&ٲe˚TMs8̟?裏'&\ׅ/ڤ5?܄[@GoцhiEӛ@`0070-`=V0fzw܁$IZP[$8Yv-,c20TUU%K*dp6ʚ5kXp!7pC~0#?2|pihh8?+m۶ӯ_?MIZ&5KErTb/\BUAJSbq)ﭡGef`~0[6x4070?1KzGc@mmmk}>/u5dfeѹsgvJEEuuu$$$F7|ȍwY,6mŋyG_+zX"h I#Mhjh +bsRB"-)歋y;ӀmuXohKMMeѢE|׼Ȳ|DrϏd6puגmQP4bo>} ,<(),\PSJj9RO?K2dN')))Ӟzb~ݛK/TcB#5KR׸]ROXvo:֞^00?vBV5X#^ŋo/MǑqgdp9q{= rAq8(":0i$Fȑ#9󨬬DFAii)]t{w 0l0m.ʸ+ؿ?Gf̘1L2V]M-:f&p􊑼] HRqpVӣ30?~ǒ)#_Q -UL:I&"xnݺ1rĕHRC2I8N|~,!>8tQ4ߏǏ?c'dbɒ%1Y5 J%VŲXc)c^N1zjjNOOE^ IDAT$h)UyΎ󏷺=YZ,EF"Dut=I;cqB:CUL:(L(8}~M&]=?߂OqbXHLLԞ rT{@|jX*PTۯXֻxQK]cU%GV--̣wC K$*:ÕUȊ̬W^_2<<^G:vhKS:3rh b9B,h^Ll7&{k wK%FHx6Dr9Y [ꈅ @ѡQ;WйKwn7v$Jl6+-rw.U %©" ⼛#F<ҸDآCm _Isc|A Qx,hRll }3>zվ-tL㱫īfsK0f<=P{X }!qaΑ5' ̏':7070?1KMMIExON~nۅ+t9x\|?.Át%ŭ 5qj*Z$RZ@/F:]48Dآ(r`Ɍ=, PQQI^=\eP<. =k ~!W"+x~dه,+x=dEm0#g5(7"Z$Wd$*%Rb$@#ևh3h %GhWQ2221&~GII(b`~bnssVrDb`$qV@Y!4C1gK~j;I6vyoѾ)dfdQs=:_#U<) " X)9PDl+Ckbk!FXW 3t9L&;Ip8%q'#Df`n`~c,s2%j*ɽ-T6LF䜕~!AFSm=nzO.[rgTn7+VB.b֭[GUU\pVWWǪU8p wiRb/,lz.ǫ"M䖔ŹG#jeV᪫yon+q[OҌps=Ra$i-=d<\#=0\sᎅW; |xmLO)?MAm)zݏhg7|s5e yqwyf֯_ojޘZYf̘֭[=Cyy9'N`^Yq:ap\\<;XsO{}^c!wk]vak1}5A@q%ַl~ڢL)&~x` eBL{TAcj*~?999\ϙgɴip\<fz^mdffÖ-[7n{{hԽz'H#Ո$@4>f!@F3ьv6ָ_ 8hX /#Za}H% ʮwaI1ivRmx&7x>}0{l>l̙_Wz?ܹs5n6l@kEE夦лwojkkouA,LcX|AcBM{euAp8ȲH"A "[$IVhF3юGENZFb=eQ^j+U6x<0|@yQǍ,+}>*+*r饸F퐟J!95X.sF3ьv@,Դ4ҵd¨ÕYEel p\ fl6'F}\QdFU($%%ңGOl6f&IرBvΎ;ׯ]uEeXAC} ~у҃,_#|^{JKN,o%I +0$ڵ+lROQDQZ_h'wS=11,Pvq#H&Q(Q}gEќP`;$Io2zEs@||>DQbxԡQc*d"$6+*a;7ь(ܱ=H.4#I|ьf4h'dfҁіЍf4hF3Z+JA)Hv'99UCf4hF3UD$d{4ьf4h'(IoM;Bޜ"M%[O3R?'VsoIX jië957'tdcL" S#?Zr;%T'\”hoBeQox&AK .6(InsV#mUE#Z~ cCbe~TE˳L-y`R<fsɃܜ >fդ=TWW7(J 477/m I]nCim YYDmu5+~8;!V#=##P!hhR딜 uoExiwIWdY q8IL&RF_w}\<~ m/?u x6 ?rʊ  biLr9RDi-mRʱ܀7k*U (#$Ok2M&v /BQ諾֧/7m71הӮm;22~wcM8T~ ) "9zFs rp&mFX[=e=:*7HOD"m 6ZnAQ 9)IU6sEihE$&&a6[<պ0; ]U zZ3'vdx]j)#1Vhu0k`YQL1JdMG,q^Š"Y& Q0 w,^nE;ZZ)Y1L<<{1{""~Eykx}H`[;` DOxM;ފk-U6gr_# O8%a)HC] ufD22˥ ?LRص}U$Xp[cMEFOtYz*?X#W$֭W͡It$I8/<ۛ9pNL$ITWWc2}4ɨ$I8^n( kmY}F7x(!C CUg~B }Fgź6xmc pRF>J[ >&FB ̏ܡp#+ ~:u頶Zvz:ҍ*N'(sA@$dYRb{}>SWWGQQ;$5(Z E m ղ/,(//Ggzu;JBE1cPYYՎ]~ff̘ \${1nVƍmx~$IUq}SQcAbؾ-UP Q$bq fj`$E#EAտC9HDvx)mLBՎl.wF:g\#+FDռN$$$wrr,+r}sAJA˔,%/?}{a2(/xnIkאHA(BRR5UU~f w`XXYǧZ)ʾ}ء#/zjkKSOe- MV ͽ˅^ȰaØ3g& ߏdX#99dl6v,55u]&|7|甔puzQ6L"/ L&Vl(ɷWѳK[r))]DJYQY-q5pCx$nJqq1_~9UUUG 8AqkrTgʊFJZiTG #3TdEbAybBbhjv0I&m!33 CN+lφu?yZoM*ph|\5*ܵ6m#";ub͜ 4ǣͅiӦqYgh"\.wqfk6#Ю]a K+lOa1[0L[BCC=~#aSЦ v$Ү=kVGޘ&~i;6?_!8zٶcY r%x<&.^x"v5\ww/^=zևO> &0}tL&Ǐ_`Zٺu+cΜ9ڵI&K/i}뮻xwqM"{(pxU;݃kJ1ӯgg,` "й]6vj;vЭ[7 q\u]<#|L4e˖!^ ¹cq5 UE0#{Fp3&Ҁ#G Ơ(Y_]( Ifl|~Xx6y|FǮ*[U! P]]EC}?q*[4}zDxsP<Y IzN{>ϫv ̏'Zd1 D!))Hdҭ)xkD?3+K#j"Ք .APd,ٟ*PP{:AUe{Ǝ;;wyaZ>=&156^ba9 @RR";vlҭ[7~ dfft:qR5fY_6@ܭB~g2uT=jM`%Tr9[{,Q#%R)J ?^wfp]dm$HEqJ>pꩧg֮+ ҍ~ѫWfioBGV$tG4'h9m&z6hhcOL2TllzЖ$6Gfơ Tᬫ@N^{v];${Ҧ][t Y$IJNb"HVv.( X|>/vc>ڶmGb\sho n]v1Ydee~. kIKKeƋ,|>ڵ+dƌ<`Y,XǓO?CdYw ^z3OAEE7|30h }|<>MȑWp8;]j{M4-9oAu-M"pqjl^Bzv/~Dm>$ZvvWط=vL>cL?W cرȲ;aXϘ0a=O233[_ ]9¨ÕYYֲ)R1B$c57w=jes󣍹8k q~%j>6i8Wv7 n-!''Fmm-g5j4HDzz -&֬!3=صsGl>u9VyEk-8H OS\jZ:554؝$l@B*eɸ@/,<^^^ި)9 DI#NAv;@ZQDf!"|8iS͛9t? }x(**x5ozOeE/"׎õ\M&划TWW#"H&Z[JP~*gc4@eE=O፨ro[c҂&+ .͟tFvټ-H&f J͆f3$3("6pQMjkPtlvqk<1ceˊ&EDPɨu45d cÊKBc,c6xQS]Cueun(~nIIge J"xz:TFhV5^iYss%Dkz3;f:2 e\M68&$Ll oL2R4׹l'; Nf̐!Pג3)jcr⪳ qQYF.Wj&5YO(SH 7,Aw8B)+#H'&9R_qnjXŊ6070?kR˂IHLnTj$5= Om]P$(v;INIkwSUIHHfڨPRjۈQ3^㵭l!wM73(.WGm8{j{u'H1loIDAT-ىhO$Hz2/̛Q<`H^MeiJ NY.X}f}2֗ro Ckkmc=RU]5$pR.mSjE^ʤuijCw͇ S '2Ѐ7V˽/۾f#@t7wK)%"GgPZ{{`!,K2IENDB`KCemu-0.5.1/doc/window-plotter-2.png0000644001050700006200000005573211163412576016637 0ustar glaubitzfbedvPNG  IHDRL^sRGBbKGD pHYs IDATxwU>%9iJRHHв,b{49\Z^>6G,XQDǂ J P$B ]?Nd2kf5y^{j^7&S,U E;O|g}x]@!A8/*I:)- R>_k94:H}o)}u[:E`.mޮ?wjC4nwK?.%FfKgiDKy;Sw.|WA].;ݥB.:;;ޮekeQ7e u6nkm;jiѬɣj~ɪZzT8풤1 teNxNJ]q6n;zpmzq3j{| y R!W>S>W!WXP;|!|>MPq:`ZRgݦZz45jAcǂgVG~GGttWnR.^hE-l[]9 :THNrE + _PԲeϩa)W: -zi^:e($evwc|B?\/Wo_aNU(UvZ567jʕZnΝO>YۼҦm1m&=ic_}jBV>nkt=ج5+iM4hp Ҵ.z jT&Ӥc4a\,IZ=ܝKq{)L@;4rHm|Vt;tѯnЊn9n> q2B1zRtYmK;0|^֮o[r9s9e5 Eiݺu:5IںeV\ #WӐ'48xr2=p%umZ#g>]0I߻-^>L/#95qK6lѯ~zTvpчt՛~=DwkŊ5jIq,E:uXӯy@Ǽj^uѬ :IRgASU,U_@'^1no3HBBCw@w?nIҥ7ܡמy>_hHx;A̓׼FO>ڛhǣϨ3׭kZj 4{l=./ RnNj>~$iERP-Y>ɷa/Z>F-Ն3ǪkٳͿѓkwiqzNL^-L>oÓk{}0=v_Eq~ckTvޙH;ihg{^?Y]kӿmuV3}w+i捛]h3 /WG{ԢQ)cz5mj{eZ4ӕT,lWۃSaVhq5{eqFmR~SZޭnc69U3~mڰAjhnS4y dT,TۃI7J7mVi:P3dC&~ݺ;g|wh7; 6bΝsJ eS`=6lEtF_IN}ltsOӔչs{Y}宅=w[Htxl:bX7޸XG [hb;]z}ҁ7ܡygW:w@ u)˩[---E5JgV[[vڥo]---3zV^?LBK8mNqhU#Џy,~B67Q[^/CPۋ= =U:x 6KI×,{~ۢ:5c>~/}~q1:MgƏXF!^:|A*:OjgX zhܼtFe5fwN٬Kݽa~ų5v# ~d<lzlj7lk-z&a2W~׳ uu+_(h;ΊŢ&N MցVfK%EM-ݻԱnr/i~s4!ԿTeGמ^8X?lr j$.LMKyvJ=E{oK5ӏO=J?vO:SIkTbwh k 1Xז41IMD2+esЪnWӨi*y=ڸx22sYOgƱڼ]yz4i njرBj:xzϗKPӨmYޡso?Sc.54؝]*f2;//=&2g_|Um{SWoK+$te{۝R!WssUfַe(-e2*66hPpaFsXg^v=)}l}^ RKSٕ)u&=ޥQCݾU;7Vˁ|_aF}5\>-5 ++(c2cgOBK7~vȉ{tҿy5?W45nN27p0ЗPw~R|gBQbAbR!W>STS~Æi}FeM:=??M-QƧ\~>soF6R7rL}ʓ⭏-yM4A8D=G%m-H$>u~ yΙ=?|b֮ئnx2?~;=rT]۪֗b[,N&uvt̨ɝE/wa=< =DKt=?~jZƵhꢲCz&'=# wopsNEb>֓+6kgf{>3٢LӮEe[zrCF_ÇKu15ulվy m( r`1 ohqpѰ׾zWipf?p~ 4zx!0 M2Qw*m:UTwG (٭L;5xzmir&m{|;#%g}FhVչMﹹ\~>i?~UW>K_6oݮ͚<|?a֡ҿ}}Aڴq~?oӤC=W nUOftHZ?+Gڙ/hްFI;IgM1QsE=3ۚӈIM:]OzzzݖmzY7H̫;_Q&蓿yN?CMǗhOVwh6nn>zdHu-wky'Mo;K~ooݪG|T߹y9^Oחw5NGK{+d^hF~9ʽ>~H oX+ӳ+7 ܹFVh4rԐTխ 6%ϩ3ڵyfi^u 84 kzG~nrXLE5h5z0unzA֭Ug{ ʨy I3x5ZEuճѠ:zL[:0t>tѡ7{w =U2zq_](jѧkP{](jѧ!#ݫ\)Glv֭Y0h//S(tjnh¿Piؠun:E5 #uKUPIW> 6=~حM+ն-4TCFMԘISռ{=F7D:͗}E=tWhH+I[ҚoMRvuaR3СÔ+Ԭ\^F2X֐!-ںm Cts2M)Wiqܴ=^k3]L8M'jҡ3OHCo1o)Ǟv&'8uO)א s4mœDNkMzQc՘.tg֝XK]Xik߾JoR6=J3'ix>-{ڰu󜃂T,TPAjƖ:C4|@*uu5-W_|K^s?7lݩJuu~WGl:VI^wFQ>wvP,ÿױοB]9uv~Gtw2Ium=,TkjY;vuھo+IMٱWwR{@evDYNT,) %z V-<@/4%F@zްL{#} L<qX&]s<ʗ}?yC?.:T>{=Gs~5@ gj/1ZjZ)q'+˗Wk&OZߨ˾rWl?ߦ'nLo#.E5 .y97W}U2_gRXԊk߯u73uīӷw.?]]G.ߢ&S&ko;~̚uYM}u!k!GK3r{l[ntlzA7b~49'M2s:k^V4MG;S_{w_;~9MMVern^}vEͽF߀]oO43_w<{Ͼ}i]waׯ9}w͎POZgtCAF]=/zW뿧ϼW,3&v{oQ2l/_g]}=TgVt[Җ7hmZ~v%ÏV1e3 X=^oߥg.]n|뚊u_o.֥7|_/YE߭sS]?vGk鳋~6FJY\v7Zv]4uJ^\39y̐+tSM%:|-{Ѿm{Sz3 k5iw!}}mz z{w7mb;$}u?5mpU^U:ሳE 5i4qa/̫'f;tkc_$}CO<@RAgw~A~_o)#_Sჺ MS/PK!fCӦ_XONyouU{u%zØ:ksl㒤>Hw<D/"ϥW}inn$ZZruo IJ| {b}3_/ [+\TjS=jFAo'醾5q:Z!IZV5}kwj˅]e%4. >Wh+u z?mճG*S:Gz#9CNocy"\>k=yjIU}j@OS>/eu9uQGWC'j~2;W5tЯv-:?%⊕zq{󦏦4w_.©e?ز{/.̴6=q6 ?Y_P/\}ktKwƅE˾qw4|EFJKtμG1ީ9h]uYbT3^Ԩeݚo6c={m.ݪG~nhoLFbQ%]mnjUXأ?igԐҐLs}Z/?-msWmuk8wl'WK!VCGJsUs̥*~t!DUt~gբQu~[:Tuh?wܣ;ڡC}71Ûu/4pA]thrV.>pm:s<k>=ue{޶絫\6=o3uЬ?Adž3t}7׮ozz mo)׾CO=}ͧkū'c.* 9zO*Q5}>9vР'sWZAv_aU C-zɟ֮8sv2,g~~z?]&M_]rvP,s_w^7\yXEO|V]IF$i׫#gSSʴhQ˿ IDATv.7~T7ˬ=^/[8|닿;oҷa] uESfgunMo^WYޢ&?v9ub:_a.>\_Uj]DA#5_[6P_wV-ZŨڃqӧ~;kBb4}A?pzV@m\T%F^X^q\\/jP_4Mjv~g1@ЧU$} ,c 5s?TJ H֬o.1 0@ 0@ 0@ 0@ 0@ 0@ 0@ ` ` ` ` ` ` ` 0@@( vir) }U,MB1ogz?ҺZ#Ka#D^&jM]?_DLu/AU`shD!`zWRو|N@؎ m=G=n{D "D P[Nj=nA`js!1o@` ` ` ` pUEPfܮT6ttcjs>+Mգ ۿP; bvm탔T営v8 1 XR:ZvfMwT3ޟھöՖgj"~??=~kžvX8?!ٚAnS=J`7?8V>r<ߨzˮxo}Ck֮$8q2S3ΈE޸zPIt{oW_p{`d=+Z u^ZVjjr˭Dfj,p4qoBnOJt?>/A"j_" ;c\ tkW!o{{SUL?1Ajہ+z/ԈB|!WM/iۃ׵ǵw!#'%J@Akg]5} x3Qm5Ѯn5羴"Wރw 5"P/V!>3QmLRkue4Wރ#P-1:}*6q_"Gڏu#{ P/"fwe/m#@Iٕ]?<~y rr/1f^GVZZL_~/qlF^שjlL|LؗV{ [dcjq?P׌H`h?q7/z_3#m9"S3>W[*SOUL]g|K~j4W2[|[Q?-/P"q͌5m;QǕkF}?[meR/A]A3Ulsغ~(uö_Sf ": SCy%2_Wqse|[P%AV۞A9WFR+ϵBAPzb>>Ubz ._?Vq;I ɲ U"PIT3r?mz{"O2ΗkzV92uqA`6=xOY7~#A3"嘾< z`JSp-"c*:HSok;lUk|XDegrxe2۟oʮF|_v'3 fD1=nj&s/ ^G\V=S# bDe~=fӟ{OӟU\|_jDVIY^B4 A#bQmXDJ:QB4OsҞc=1 ] *0UaYI33QW=DBk}4qE*_TCl=TBXAۻOz ," D J#  ^\bTkm߃^E'{|+qIQ0`P'_J]]ŷk}oAB eGyr`wk9r?u}'}kJkL5]۩)cR_'/B$s-Z]N*6E|m?qRڟOzbTu}۞Wrz˵uSg:mەɵc`\mD9Պ*xseԵu} b>/\?S(HYsAPz:CSLZTzaoj[`]M'\ ~LG\o y9P);U_w5q?~@nǮ@bAW3ΤEb_g~[nicw]@ " eUXlߴރkqi{EHH "[ڌc3__cj $ŕW*>ABϟc#Lj :DIOU|lo9A5~ ~>=t~_i{mIcw{#Q?{!PAVk+UzɆo{o_ {U@ \3qA;?\#OTzg\-~ dCnS[ A(M VTל-ĜH,AޙoA׮9QޗrZA0'۪CdTz(}p6rǯmeuZ#/B}\}i܃X=  ^\bTIkm݃`Iʊh?Yj?ڟ'a=~6u9jQmfϟlW/i|1}ӎ $JZA{_͕|ifIJgr#k~]-(l+vuMS:sZlo-uU守?+?a ZTg\ҭEG?zTڟ.OjOVcW4`zGa$GضgLBu?ַgm+U>=k&EcV;kGu"œM~+a1װ_#DiܛDT }D;I"kyw\5Qm_o9V;qnwgm_ԫŽ7>/Bۮn{D `kگ/3QApAOX=)˿k_Q\vw+A, ;­upO5܃m~\o?q%agMa#0Y:ޞvkGS#\V1J5܃\o?ryگ(\ ׾L{v # ;u}zgMžQ3?S7~|?9Vߖ[}D]'XA059Q^b:D7p~IZ"Q?H|"g # T;.*(GaWG Q+d:|m#@՟uMb$C#K{&m<&| " ?J>\]G~9v]i )VAhHJa߲ "=~ 9w\^`OI}B\smm0@ |pUTE毒֒fm>!RQ?l:l u)Rt&=Bj#˼ bajLz\)Ǹ RnƺR =a\D$UJˉ{ $Wo:BT;^i>J6j''9є; DzWQ8̯plDy0@AZ>Zw'2 ^DUaAuCW6UGUm1_ja]LC_Y϶ت? "gk|'\{tI])Bl@}I"vOsȿ_@ ԋBa:I{k@A=A >A$*>7o/[3mkW/)ۛnGi˿" nZnI)?۫~|*=AڟߟQoR/b=:b9Q~:q?ǵO\Wsii<ͳg?O{Iv{F$XH>4Gf}z3-7OBmַ_gĂy\#zg4ίkF5A}\3yDn_"ڟv1UDRBT#F' b?Wf]Kz\9 ě~Wq_Z/G! =65s5^ėUxL՟B3HQܫ e=+Ywo\oV~n?M! D5az?A_gn/av!|s}$_hKty_oG8]>D\UH*T"ځB?݃`k1ixs{P"Yn+눛5V\ Rq7wߟdr~5 := 4A<BAp~yD! [ ʯG=shv?9~7ڟ< P B3 Wu;SZ.?_lL̀z|WV/z?WVl۟~=)LAH"<2r/?_fۡ8#?%?T"Xi"ЋKvr\A!_~L?@jV?jq?Ukr RVim 0*k?a7?c*jxuSLOkLu }r789q׵U+JO`UM'AƵ?[xۛrΟas tQ:L7-[G$ !Vm DLr*U~ˉzS[Dj>JkH"{&9o{1ۊ VD#Ptq\Wq+?#ֿzĵ*>UIDATDȱ%_OxR@ZgL]_Ao3qW1O R~lG!J]Ǖ;kܪM[lj6ߕY#" *|{mvAʑyRb@/.1װMg%وoIQcz ouJy(t&5^}~M|CoL5d}>,#`_k;IOkO`j;sZ])HORNʓ|+TK925<^x~']#DH "25ZoHD Y^վ_֟lGl#zq7LOuﱰ}BQ{|$xDer+=Qs%W!P/Wa7ĜϵU$XDm?U|vޕU\YE 8B~9k>awJORn-s||kQ9$=[^]z˯/qFApe_#Mz|)%`'IkQ"no_xr~~ "UU~Apmlte5Wf_z]ڟ/*BlJ˯~mZDiD|=U8|}un LR۟/gAȷl驔gܓvbTm~gȳ{y{\Yӈ yW?V1qZ=fvG]ᆴw?=no=aU|^A D5u}5 ApIzJAp3q? )O6w?ƀ 5bv}5 ApIzJAp}[D PȷۇwJ8~N1'l.VQLg{%umjDYۿ/D@!-3Q pڅo&HH=o'FAR4@%F2dIA0߮A`Bu~~ t&mC\[YKo r}YE(`3m%Wvƺ y؈F/ ;_kgC Bʸ j./xfң 6PoU!QB`xQ?\ LzW! {îbTLG\_?=܃! D#*-d*))" "ox'^s_WLۇe*2q? `@Gu\" R:n|zRi"PZWis:߶dw_A~Wy`R>9X5~sL+*Ba_Iq?XoҟPz`r>9Z7Q+SA0$2G$gا)"NGt~`x`JZ(=^3[IqE*]k7B(q?9 %kF]m*>aS+BW0@Dvi]ȕHJUz(kT}"P-"z R܁Zm^2WǯW{¦= ܣ&GuܨhLZ=>F֘=p2>DU C`{%KorYǏU=d?|/?{|Wiqbæ#Hyo޹ `JgZk.aV8No _Ǐ]'a-?o2<*?#b?WݵtNeWx󷾡5kI8RլG]nqG@ |յB;UTjҚUW[n%P5S3Ё'G]ni Ǘ 4ݾ? RDvƸ߮muU󦎯˽|ApMB΀5Q[3`>sK:Һ:W " ;v=.݃w];>鷓s"(D5bo}]~#qIR"aXAV3о?qApu$[3Ѿ"viK?iDEl%=*H<ܕ"[&M[O=/klEl+V@VAʷw5ݾ܃>}7]nDwzw-ڏ.:Ak$ڏ+7]nD켟k]?ǧx^~OO/ 57]nTu=~]:cr=Ԁx`xqt}a~L۪[{?h?6o{{&) "QX5h- NOl+~loo=ԁx-Hy ohڏǵUh?#<3a-۫U~q~|l?cOi?6~ _Ft5`{/ڏ`jGҥ)tU{̠]\v~h?KJAz䝴]M/3ٞٞޛ/DHBEUzڪq?i!l~Ǐ>~^I8*mS>ni)l.~*`[k.V8No ߰ǟ|]?_ky8 ӲpZ*Nik ?1?//HGVRbL@sYa: CҟYNr1]^JZl??S 5" ە;"nן=zWo:C5 D5#Pi*k>限zg>΀5Bw5ߴ֟OGCIRDl!v pu-خ?3@gO{ MOSDbBԈ Blt%S~o;i3'B!߯܂_p=i_gjOԅ#eׁN*FcM?Me9g/ FQ43@SQ?~I?BڑplۛZE'lM[[|3/QK~Q" ,m8~W͗kO۳}`{g{wԄb@/.1VՄJqB:}=\?}=ArS PQvQǷR~\iM??= W:mqzWis;Sq^5d~}_ڵ`}?>ןv}?}*ךg= ||Seghӯy99V125"^MOjϕ~m[u [Կǵ_oݏZNQD j;5TMslտ+wwW?'OFGf L]tL=tGߤKs7+DlM,MA]v~ܪӻ]BAj$:>NZ#qco|?8?'/GAFu0n/D>?'HJ xB#Rٔloܪ=~R"a]vdS~O FItAhlllD+ 4P$z1@ 0@ 0@ 0@ "*>AAD- #l`[k` E} xt xT_"` 1Ap x{B AJkS3A( >T{ ݣscADIF]+E p2>D*^+qO 8,Ժ|C 8,09Ǫ$A`>" D!_ $ p ^sUGzA "<#A!Ck0@ 0@ 0@ 0@ 0@ 0@ 0@  ` u'A@Ƃ0"M 8@PDø,0d .Í ?J4R`\,`{ހ$۷+ +0كE %;sTf-#t#5tMePهҥY \|-:p7yU3|i;GG/HYۢsڽ+3k|G*-1Z8#6N6E)jSaeؓ:_ºgfbE3cK:w'-]*)V=ҽkizo>Ѹ1nTztOi3hMYT.u@_#%]rU Fw>>c\sp9Kh)Ӥ%[ZeŬYxS},M6Lʼ'*Vm}kJ Ͳdv&=?QU2mܸ zOU#u9NMT4-; Te@MڃlUY|}R{|񾍩 }ɳ͜9 3𾉩M0"˷oNIg>*q8Kzf76f'ef?U|ںDR|yٴ;4 @ ۧIENDB`KCemu-0.5.1/doc/sys-kc855.jpg0000644001050700006200000003073510527416074015145 0ustar glaubitzfbedvJFIFHHC  !"$"$C," T!1A2Qaq"BRS#345CDTrEbcs$%U6*!1QAa"2q ?z#} n̈́ONLUd`((P,a[ L5/%+Cw}̒v \6k%yq3r\8//r:d踈z#75pGEyoT&5bgl=;6>7!xTcX~4m<t@IPH xaCyt#7=AEwth>Z{m$|c>`&>}(18H;(|.?Q Ըscf:A<𩑣a'ap8` AC Py wGF1"quMağ!C2/cC^|M\YB aD+d5 TRuI9Cd\ :|(-FrL&a=cL B@ X`XcqR_OM/酎GgH@n)ڝ9ڧR)%Ԃ6Û)3QA47$#L券;Sm=+aR'IsoȭV>)?HAMb{dTOS5,(B*7䓨h_2c7]g,yiő a=Eӷ䛮h94L]Se40[D:dP*sW|)M͜cCC,XkyB3gˤ"qˍ6h~n2# mI"3`@;cJ`jxjvjN8nL'6d˓wq8T!]QDdϤMFriːwp_ͫ =p߁-^EXrI>Z;Irn{,/䫺 Y_=ѿ9<{aj|#w0K*0Rҹm5L4{R2H{l [1LQ6a9>l /)BA΃2AHF:|Юg OA0]wF56Z@?k+vُaSfٱ:?es:HMp[PxˡSwZJU=>I;WJ$Tە섓;3]2E.j`t McҊ{ժE%ǟQLnw0<.f߄嘎 PGJJP^'65JyԉJʸҢl-+\fJ+7@CGԾSl`9Sk@ᨙ2k]OM7m@y]§VRޗUTa0&yZL$3mn[JTQ} }VĔ2% GeK){c>uŁVf]n*۪Qh|Q6­ϡ!79$TW鳲Bvf9nXwVI0L?B{XE j!]w 9k o &4aAm,!FyC9¶2$J' \FNI3kPJy)R"]ŀuί\.Q"KsOPD&-Xo-mR]zq$ߕ=m}4|rxЫ xt2"F!QUњoywqk -2/86bFBL8jxZ SZjS 7 XuD*4/Itsvan8:`M1&_K6֗Ԕ·%w]j[\HPiMɱD D] U>X*RBY\Χ -tG{@oJ(KBM"00J\K.Je^RRv.驨Zn}.b&쎎+JJc<u@i_|jc(ձmҩO=l ӛZbHk "JM}G\B]0```*J*Kle#Ij鍉d:H;LꨏA5uPLdFN>:X{o76hyP`#NS%'?wބŻDFj.'Zbki*\4Ͽ][s[,L4z@4͏Hn>u)6qIo7G6dYNN-&r8ɻ4{?$X~ccX iguz*G &X=)c `}4ʤtׯ|x`ՙ(>د b%T2y8x 4U%~t}UNby zU&Oi`HVpgq/ْ`ˏ7*:3d*+ԥ =0%>,> f1_eoBNVH GM [zrMQF#e\Ȝ-"ia>Mflu>l7ҿPOTf?9kF9L4~>ߔ#Wة{ĕDM; nj< yZOldgvN+p? f}05 CTqi'"AVQpN*pL&3Z98şL.?CMYe񅯟81dTŴD&9BT9n,Jy& uqoYI(e9kWN,*k/mѿ5'H>VHH/'Kgp$eODC'5IŒ wUx*G\Y-aEʠ7]*t4iJÂؓm%ą/t lJ(Ta%hL9sŢIQG/Z$( 鄒aD$ő 7D,( :d&pD؜nNB%O|9(ߤ2 C(ZB ̪6R~AۘNhQ0tAT:w?ՇsH(m5eijsi$ nz,ͼiAHZBFt0&fa30o6R{ 3ZYKjqPNssuFJVb-i$'WbE\|bGoi Uq{sFh!a8U ׬+ r!kM-a ye)%@8 =&9)0CpJtyfjƾ=.2 {=@E4T66lbOran:pʔM/~Mop5LInf>KiJ |bFGD:tӼTZ-sQf ԩPDoH<1#+:)0́7q FVR#vB+m@i )YZSha3΄8@cFIq@O%Ak[5*9S`ad9bMri6S,jud 4R*I K Oܓw$rἚ:1Y G :2h}JcѬ.6)ѐZȨ]ΤPԜ8`g~[m^5smBX^j(?L]I) '%y3sI;%ĴF`-*>q FoGP!Ȏ~EZ}]9˸2Ubs,23̵ 7#dtߘC\tTBTqcx}pOyb*MWLi}@]5ee'hg)&7:͏B!AH6]Dt Oc rgVIWܲ< F Iey&տ?\I+=f!1M0;p#fǒWPo8dN*+5϶#*n3n;T)_pJr:)LL%ܶ6L̋S{6[8-7D]D7&*6R_`ə? MIy` Ln>A ivzrطbrJeNM_:s݋Gf?>S~=P:@l(d^S~9.FaR Z$W3j>c+R9;d*3lD-<14L$" B+rc 2uRĈ%LN$|WUOdK,/1&Gn])l']I &vX?NmM*feeM:n9=moLJ$]jSrIaJZ~?7ˋ=߳)0 SVteq^ YhpD hIxvM&,m0=УMUQ<BQA«$x<IJ}>poH^iu?'žKxeBe-zbGDtGTrTx' =8ACWZ`½Ob28)e96?No\l:~`VTa6%I Mz#Z~J 9É玤8%Ԡ 48gnFfxCO&[`Q.5VVB^J-Bqf6VfgĖ-orzsUԽ8ݍiYHDP C^JoCKs" LLR, RdnP&j?QW{j໔SBwդҥsEpa*\̃Km-Rc{$8< Yyq+i*n- x:HPnIn(^;S5)vT!M;b+g32-!j NG_US/mTLѱVddmk V(d\]jX:gbpa\ʃ4vWeBd62aKvl./Y3KR_y獅䱧Ɠ uC b$yN]!ԹyѸJNͲ rOǚ}obu6*p Bi'N!JOMcfe J:.EłJs#)R埦NŠђ^ݐyK"E h&B _Sگ=2˙fSVACtb1b;TZW.ZxJˆ77X˛6ul hK>PJRMmtHf5*@slD9olH-6~߲(24ާ%{ԓlm^Ѭl ]l Bᾰ9MznkʧayYcwEII^c)MɅR5sXؾHv6z:xkeY(!)̓`!5 ~ c iKi l)!]F/|bf"Z q;AQBZD H-<Ѵe8nUĂy0Z\6U&SM|;8 $֊Kl iI$v#tD$Tw ЍSeA=T@cA<\-A9b^^1.P $oVG-w8,^Q: (4ٚk53QvxWJZ̞'(i$|o(oHDłUHxxeE q>D'H (Q: a9EKQdRDIu88|Ld.wwVaH)FloͯghL=%P+Xi/ckF9lԎ캫_ =q4e/hI7vxLίL_7  4tpi?73.l^0iݕ=^Iڢ[XS\$ <3=N TR|%3 V9 F3N,082D> \=4rm29Lv)#W _ 8[KZfg0uPZR 'tsɝ 4=В^cG(XS)3 ֕XzAbL29L' lFzL 7{"M(+)%'!GEV;IH\e^sG{!㰌*3B(=0Rl@ B%".p(Į=Ma=d],>TrôT|l!٧l}b.?-O&z4)To%*.Ȉa'gMb$Sr6}cRb\-:xC*(ZLHj91Ra? X Ro'-,qUnRM r Sr9b~mU4TJ4&W?iTyŰz%R̭yD$,6w֘,2=.yQ%0U-`s1zLsIq1*&s:cؔ-^4)n'6*Tu7n-B0pxΦoДn8e"n(uI)ʋ Ɲi:Zܴ v]%Y wŁ8&L:BKiRlL$XxeN{'R󥤑(;jRRߐL#Fo$[ %)XvtKWJgR (, %](Sn-HBU1//R^JDrHs׸-5:rh2B$+ &E{SzG p&+O&U0Pls~V)ŀ-eLq3óSwƸ\ѷciSt$kW[>h1r,Xw1.IB@tDiXjB*p#$~6̞fAi =.txw=~,ifVB EZOb7iaR,FR۳xK< dJsOB4<)EAV+֔B~>+ؕV^T۠ :\cj%[ң)>KԨ;5,pu2MH߰8W2mx-;R.Ի%ʱ|8eNy!++_ 3cnutkKi&*8AufS{1`ɮW3MK$ipmrbbn|s$^;\m .eRS  P69mA▯ %I3HuÐFlY]t<7Kr($h6]oDgDqqTm68^V ImMӟIVE}v_SwsCi\9NC)ٰ9]DˆY+JZ QAɵ[M|< 9>_4n/:z)JvEX270jCØE|D$t wĥ)tQ % B$ )X1x( 9)$Av.A/km A 4ds\Fխ+:͋i dBv4e'""bI"#ke ڈH [d^2)FD/P ZlM sp:X=> W(f۲TJx*$sΛ{ >b}NKO-e$A9.#m$tz#ku%R@U{bx]{OirVaim6 FR"JT\¶VS@Y*8fR|LNәu魵k!$Kr2 !655("A]r>y+J2mth%,D"%RsFFa3Mck,`\6Ԅ؃MQr˗a\NSL8hXÄ* q~ez+Z c=Ti,N^CVB P6M>Ke$&nR&Ru$LCgx79L+R.&]5|ND=fn-Ӊ{CG8gOSݍQV56 a2Gji!C ݪM'ƕ[5528$YD[fO'Zr*煕[iaJJIL=>3b52K0eaPR9Z0Wȃt0i1/=LXj۳r))vR-1'~-%IramU 'b3&_߄Tߟ?RGAܕgdJ<(7tG.R&FbiRj\4czrU). @Y}'EUPfuG.DDٽ+Sk?֊u[_&W@ϓ +O?|}"^*s첊t}B$p7|>O5M?2>ωe~B|(.e-;+iC J0ͰZ|OTK/M`b~l*cSZ'Y?HBJUgӅ) 8N#͈r01_I]2mln'F$G$OS10N(T<*O<@9KJÎ 6yMRn$Y&qgF`tɗmuxGaPIRP3 2V@?0J`J)$E2E z !{jkNx:`@dt T|q0 A@ 5 A1  :&Z@2  1`!ž\pP`n0 Fac @ha- AT+CtH jQAfr{a3"KCemu-0.5.1/doc/kcemurc.sample0000644001050700006200000002630210527416074015617 0ustar glaubitzfbedv# # KCemu -- the KC 85/3 and KC 85/4 Emulator # Copyright (C) 1997-1998 Torsten Paul # # $Id: kcemurc.sample,v 1.5 2002/10/31 16:40:01 torsten_paul Exp $ # # # KCemu Konfigurationsdatei ($HOME/.kcemurc) # ############################################################################## # # Tape File, das beim Starten des Emulators ausgewhlt wird. # # Befindet sich die Datei im Datenverzeichnis des Emulators # (Wenn nicht anders angegeben ist das /usr/local/share/KCemu) # reicht der Dateiname, ansonsten mu ein absoluter Dateiname # angegeben werden, also einer, der mit einem / beginnt # (z.B. /home/tp/kc/Tape.kct) # # Werte: # Tape File: files.kct ############################################################################## # # Liste von Tape Files, die im Tape Fenster direkt auswhlbar sind # (sozusagen Tape File Bookmarks :) # # Die Zahlen mssen in Hex angegeben werden, sprich nach der 00000009 # kommt erstmal 0000000A. # # Werte: # Tape File List_00000000: /home/tp/projects/KCemu/PRG/files.kct Tape File List_00000001: /home/tp/projects/KCemu/PRG/test.kct Tape File List_00000002: /home/tp/projects/KCemu/PRG/wordpro.kct Tape File List_00000003: /home/tp/projects/KCemu/PRG/kc87.kct Tape File List_00000004: /home/tp/projects/KCemu/PRG/basic.kct Tape File List_00000005: /home/tp/projects/KCemu-TMP/z9001/z9001-b.kct Tape File List_00000006: /home/tp/projects/KCemu-TMP/z9001/z9001-c.kct Tape File List_00000007: /tmp/x.kct ############################################################################## # # KC-Modell, welches emuliert wird, wenn nichts explizit auf der # Kommandozeile angegeben wurde. # Es kann sowohl die Nummer als auch der Name angegeben werden, # wobei ber die Namen auch spezielle Varianten eines KC-Modells # zur Emulation gewhlt werden knnen. ber die Nummer wird die # Variante gewhlt, die mit einem * gekennzeichnet ist (Der Stern # gehrt dabei natrlich _nicht_ zum Namen der Variante). # # Die aktuelle Liste kann mit dem Aufruf 'kcemu -v' ausgegeben werden. # # Werte: 0 = z1013*, z1013.01, z1013.12, z1013.16, z1013.64, # z1013.a2, z1013.rb, z1013.surl, z1013.bl4 # 1 = z9001, z9001.10, z9001.11, kc85/1* # 2 = hc900, hc-900, kc85/2* # 3 = kc85/3* # 4 = kc85/4* # 7= kc87, kc87.10, kc87.11*, kc87.20, kc87.21 # 8 = lc80* # 9 = bic, k1505, a5105* # # Default ist bei unbekannten Werten kc85/4. # Default KC Model: 4 ############################################################################## # # Skalierung des Fensters, in dem der Emulator luft. Erlaubte Werte # sind 1, 2 und 3. # Display Scale: 1 ############################################################################## # # Anzeige mit Screen-Effekten bei vergrerter Darstellung # (Scanline-Effekt bei doppelter Gre und Antialiasing bei # dreifacher Gre) # # Werte: 0 = aus # 1 = an # Display Effect: 1 ############################################################################## # # Emulation des Bildschirmflimmerns beim Zugriff auf den Bildwiederhol- # speicher beim KC 85/2 und KC 85/3. # # Achtung: Das Einschalten dieses Effektes bremst die Emulation erheblich, # insbesondere bei vergrerter Darstellung! # # Werte: 0 = aus # 1 = an # IRM Memory Access: 1 ############################################################################## # # Debugging fr die Grafik-Darstellung ein-/ausschalten # (funktioniert nur ohne Skalierung!) # # Werte: 0 = aus # 1 = an # Display Debug: 0 ############################################################################## # # Einschalten der Emulation des V24-Moduls ber die serielle # Schnittstelle (Die Emulation ist nicht vollstndig und ziemlich # fehlerbehaftet, daher sollte diese Option normalerweise auf # "aus" stehen) # # Werte: 0 = aus # 1 = an # Enable V24-Module: 0 ############################################################################## # # Device, das von der Emulation des V24-Moduls benutzt wird # # Werte: /dev/ttyS0 = 1. serielle Schnittstelle # /dev/ttyS1 = 2. serielle Schnittstelle # ... # FIFO = benutzt Fifo im /tmp Verzeichnis # SOCKET = benutzt Socket im /tmp Verzeichnis # V24-Device: /dev/ttyS0 ############################################################################## # # Geschwindigkeit fr die serielle Schnittstelle # # Werte: 9600 # 19200 # V24-Baudrate: 19200 ############################################################################## # # Joystick Device # # Wird hier kein Device angegeben werden die folgenden Gertedateien # auf Verfgbarkeit geprft und die erste lesbare ausgewhlt: # # /dev/input/js0 # /dev/input/js1 # /dev/input/js2 # /dev/input/js3 # /dev/js0 # /dev/js1 # /dev/js2 # /dev/js3 # #Joystick Device: /dev/input/js0 ############################################################################## # # Module, die beim Start des Emulators eingelegt sein sollen # # Die Zahlen mssen in Hex angegeben werden, sprich nach der 00000009 # kommt erstmal 0000000A. # # Werte: (kc85/2-4) # M001 Digital I/O # M003 V24-Modul # M006 Basic-Modul fr KC85/2 (Einsprung mit JUMP x) # M008 Joystick Modul # M011 64k RAM # M012 Texor # M022 Expander RAM (16k) # M026 Forth # M027 Development # M032 256k Segmented RAM # M034 512k Segmented RAM # M035 1M Segmented RAM # M035x4 4M RAM # M036 128k Segmented RAM # M900 WordPro '86 (KC85/3) # M901 WordPro '86 (KC85/4) # # (kc85/1, kc87) # RAM4 RAM Modul (16k/4000h) fr KC85/1 # RAM8 RAM Modul (16k/8000h) fr KC85/1 # IRMX IRM Color Expansion fr KC85/1, KC87 # BASIC BASIC Modul # PLOTTER Plotter Modul # ZM30 ROM Modul mit Zusatzmonitor # EDAS ROM Modul mit Editor/Assembler # IDAS ROM Modul mit Interpretativen Dialogassembler # BITEX ROM Modul mit Textverarbeitung # ZSID ROM Modul mit Zusatzmonitor # R80 ROM Modul mit Reassembler # XY4131 Plotter-Emulation (noch unvollstndig!) # CPM-Z9-BOOT ROM Modul mit CP/M Bootlader # CPM-Z9-FLOPPY Floppy-Modul fr Z9001 CP/M # CPM-Z9-RAM64 RAM Modul fr Z9001 CP/M # # (z1013) # RAMFLOPPY 256k RAM Floppy (max. 2 Module gleichzeitig) # FDC_SCHNEIDER Floppy Modul fr Z1013 CP/M # FDC_KRAMER # GDC Modul mit Graphic Chip fr 80x25 Zeichen # RTC20 Uhr-Modul (Ports 20h-2fh) # RTC70 Uhr-Modul (Ports 70h-7fh) # # (lc80) # RAM2400 RAM Modul 2400h-27ffh # RAM2800 RAM Modul 2800h-2fffh # RAM3000 RAM Modul 3000h-3fffh # RAM4000 RAM Modul 4000h-7fffh # RAM8000 RAM Modul 8000h-ffffh # #Module_00000000: M011 #Module_00000001: M011 ############################################################################## # # Selbst definierbare ROM-Module # (zur Zeit nur ROM-Module KC85/2-5, Groesse 1k bis max. 16k in 1k Schritten) # # Krzel fr den Modul, kann beim Start des Emulators als Wert fr den # Parameter -M bergeben werden # Custom ROM Module_00000000: CAOS24 # Name des Moduls der in der Modul-Liste angezeigt wird (optional, # wenn nicht gesetzt wird das Krzel benutzt) # Custom ROM Module (Name)_00000000: CAOS 2.4 # Strukturbyte des Moduls (optional, default is 0xfb) # Custom ROM Module (Id)_00000000: 0xfb # Gre des Moduls (optional, default ist 8k, es knnen Werte zwischen # 1k und 16k in Schritten von 1k angegeben werden) # Custom ROM Module (Size)_00000000: 0x4000 # Filename mit dem Inhalt des ROM-Moduls # Custom ROM Module (File)_00000000: /tmp/roms/caos24.rom ############################################################################## # # (relativ) exakte Untersttzung des Blinkes # # Wird zur Zeit nur fr KC85/4 untersttzt und bentigt relativ viel # Rechenleistung, z.B. bei Digger, zeigt aber dafr das Farbscrolling # in den Diamanten... # # Werte: 0 = aus # 1 = an # Full Flash Support: 1 ############################################################################## # # Finetuning fr den Farbscroll-Effekt # # Werte: Default ist 50 # Flash Offset: 50 ############################################################################## # # Anzahl der zu berspringenden Frames bei der Anzeige (fr langsame # Rechner) # # Werte: 0 = alle Frames anzeigen # 1 = jedes 2. Frame anzeigen # 2 = jedes 3. Frame anzeigen # ... # Frame Skip: 0 ############################################################################## # # Aktivierung der Emulation des Floppy Disk Systems # # Werte: 0 = aus # 1 = an # Floppy Disk Basis: 1 # Einschalten des 2. Floppy ROMs auf der Moduladresse F8 # Die Versionen der jeweiligen ROMs auf Adresse F8 und FC # ist abhngig von der Version des emulierten KCs. # #Enable Second Floppy ROM: 1 # Tauschen der Floppy ROMs der Adressen F8 und FC # # Default (sprich ohne Tausch) der Modul-Versionen ist: # # KC85/2 KC85/3 KC85/4 KC85/5 # Adresse FC V2.0 V2.0 V2.0 V3.1 # Adresse F8 V3.1 V3.1 V3.1 V2.0 # # Das Tauschen der Versionen funktioniert auch wenn der # Modul auf F8 nicht aktiviert ist. Dann wird lediglich # die Version des FC Moduls modifiziert. # # Ok, ok. Die komplizierte Logik kommt nur daher, da # sich das so am leichtesten einbauen lie. Eine schnere # Variante gibt's vielleicht spter mal ;-). # #Swap Floppy ROMs: 1 ############################################################################## # # In den emulierten Diskettenlaufwerken eingelegte Disketten # Das Floppy-System untersttzt maximal 4 Diskettenlaufwerke. # # Werte: # Floppy Disk 1: /home/tp/projects/KCemu/DISK/microdos.dump Floppy Disk 2: /home/tp/projects/KCemu/DISK/caos.dump ############################################################################## # # Definition der Image-Files fr die GIDE-Emulation. Falls die # Dateien nicht existieren werden sie beim Schreibzugriff erzeugt. # Dabei ist zu beachten, da der Directory-Bereich mit e5h initialisiert # werden mu damit das Anlegen von Dateien funktioniert. # # Als Festplatten sind zur Zeit festgelegt: # # Master: Seagate ST-157A (42MB), C/H/S = 560/6/26 # Slave: MyZ80 Hard Disk Emulation (8MB), C/H/S = 128/1/32 # # Um mit MyZ80 Files kompatibel zu sein, erfolgt im Augenblick der Zugriff # auf die Image-Dateien immer mit einem Offset von 0x100, d.h. die ersten # 256 Bytes werden nicht benutzt. # Hard Disk 0: /tmp/hd0.img Hard Disk 1: /tmp/hd1.img ############################################################################## # # Anzahl der zu emulierenden Bus-Treiber-Aufstze # (es werden maximal 4 Aufstze emuliert) # # Werte: 0 - 4 # Busdrivers: 1 ############################################################################## # # Sounduntersttzung # (funktioniert noch nicht - sollte ausgeschaltet sein!) # # Werte: 0 = aus # 1 = an # Enable Sound: 0 ############################################################################## # # Farbeinstellung # (entspricht den Werten im Konfigurations-Men * 100) # Foreground Saturation: 55 Foreground Brightness: 85 Background Saturation: 50 Background Brightness: 60 Black Value: 10 White Value: 90 ############################################################################## # # Laden eines Programmes beim Start des Emulators # (Nur zum debuggen - funktioniert nur mit gepatchtem System-ROM, # da der normale System-ROM beim Power-On-Reset den Speicher komplett # lscht!) # Load On Init: /home/tp/projects/KCemu/test/a.out KCemu-0.5.1/doc/window-audio.png0000644001050700006200000005571111131675406016103 0ustar glaubitzfbedvPNG  IHDR4m=lsRGB IDATxwxTULz'THBE" "bD,׶}[]ۊ**b@ދԄL&dHo}=O$w{=2]vQ ؿ0IU{?O^cS3:m7TU5f~<|Uڵk7̲ ̲uqYQ 4ЯNO旘Yk^6ZUɩ(u&BAI9[W0bxBZY,~]  4x^[jg[z B^[?P*_BEl^KT`[WkPYV.@NM?=uRYkӮo;&z v6/?mv;oCpŐT:Qܭk]EQYV>}[9MEQ~}o~sqkk/W\>*8.vR:!"ѬbQCdˍ^Q`=ХscN;̎9WLd.n+ǹ\uZ_wܠ$gfgo_2 ; 5uv+]V>[_._۬rqiʭ^v64v ׿>xU_p0^Dƽ/Cz.ONDޜ"N'%EtEWzD&~+pm;CI?qD.Z]nL玞Nj ^U˭[VB8Vb=?] [z@WT2*wc-cڌ%u棩r_[K=|H+Z{zIIY9]<;ޣd;+Ϩ/[N Pg]CFf!/^CV^L;VEM XjBIIJ@t8Yq*av  ϗ"*,Vt:- %Mh mn܎VeM\yـF?fv.C{v@rL0ۏ%Fi4+,V~;|RNiV¢qwG)(,jj SR<m*T*W] >qZBU."ߏ9d<ѩ[:gxv.AHkCnH ˭=~KʝXRox6Vnkh}u'vw?1wshzc|:)RTfɷ~":&ч̣Qdx5tKKcb'*,V>\ zlvgpdNET?v-'t74\.7d@z [p47":SE+7;P2*g9/O/2yWع󅯹t`~YFnإvtOt\b5¢BzeV[[LF _BxǙ"] +#XbXy;S''1*rszN8NBUR\,6 ]((c PT"ML˘[.^ѼuVXƐo7ЧWsևvfjhTI5\nUFT# bڌ%i30rؠFmqZscZY0?݋ry}&uMLJ0nt-Cb|tI8N]{2xH aMy+%Ѝyۈ @Qp W'F3gG.yg:dž{.g^Lzv>F1&ԑaZ 9Q`h44JƁ=:ms]\7$AXlV˛'x3]ɷ~M')&9z2k_g<߉ߍCQG?kjrkBZy. ks6֙KQdRaGxVf#V'K̤Howp8qnkbDvîC'NpӪyQNZ}dfC|w;gz>)~eU}mlZ_kI)r伽d"O:V]> dSl0ZGr~x^zp8.7A8=cQ5.b\pdP_RV&2vϗ>|#61BRtRFRTڒ;_.:S2B&SBd1l;XHRtptrIIMԎڙN~BA=:aqSRp|}t@//6MN 6p)DV;!`1uwNzJuoY't:ǤNǽ MOtq umaszKWr{n%ڼugۿ_zemSZQy;R},}hUAU_pLD٬DF]lڋ k(a:?x ѣ$sۈ4| E "0 ҿk 7\7kk!=C{'lVNpjV|k6/v~Als'zj c֝5N\ҷWvv3~ ;~>GG^qO[2)){u/~KRrr=vj};V@RBaa!u ˩Wi)EQqy]VٍG?VHgH-vN8r >A<*Hu5<^Sar¬OzOէX-l*j[S6WTCHpsryiZ|ǥ! ZSgޫ w1-5NDuv2ax7fLI~{{{1@_#9_ 4jMmNa9IRkLdCW%r{ޫG+{93OyI5՛ >άs ߽7A Ҳ24;LQq yyXVO{_HRbv9ph:_wrѫGW4-ދg.t:~ݵM]i=ǔܓrPPX@znh~m;<{ۻgᣔ &)1f fgϾZzڬiZV;jE@aQ гGtZ3W}FE\JKp\u:5hWT[_ڝyjBrOt:_(^GNIz3uBK*tIKC]Ymhj,~˾]͓n`va7XW&Jܪr6ֹY_ Z繾[[״z% ^kDppPGFM\\lG=N]гU٭ΰp"#k]g=]II .^W͙` 5Sq:v1NZQVӱc ;4yo{ㅅZcjwBgrMO>Xh~T m{Ɠ[T6L޲j_[o HNQﭸ}?Gsio}B3o^ve=Y?:]HAW_7ntcXr=}lǹ"i8 z_0GNaZpuVPApGqa꒚RkpuFh׏ԪNy_.xhB K/r] XllB&P੡}$ %#hM޿g{+b B{W]msGB?ފZB!&@B 4!h#ZYB3bOՎZ" 0|hBXi=dz8|cHLL$5)NɝP|QMb[wncdBVOL\ >F?DPH8*Llزu@}۫zBK !ή2S}ݎ^'{*;{\nCG[Mns Xn5]^gЀ*%Єmd~/e K#)5Γ{guޯV  08vEE:Yv5ݻtgSobry胏@4O ZM.5o]Co(78p$&&2h@f3_ukN|c3}#*:Nw#K,iuoseCO .>K/ٚEKz Ym=v~@މ<G:kR9`*5N;5Mɓ&{M470g\n3`u&Nԗ:VY5kx[U;<:AFF_̙Ü/ =lkrz.n˞ ZL| qIqMt\jhǏg5Fƍ>vF#k׭#++.TSy9wy'ݛE y(ǎp|{rKKK2 HOłΟ7={ǔ;Lnq |fu V5JɌ($'@7o>0z5.:s ,u_/aذaW\Kr?#rrrHKK%K+>oeվvM hZ2w$@;Y;&O ;̞ox'j\WϏ|.[x)zreu66{W,+k2%ǟ<m˖-l09t07ogd78ΥiqhUU̓ Ojktpܜ:ɜJĎG{DZTXP}Ъ30aBVy &zp[?4M˭WN#00@t:پi;tݝ<egX  6[`yfm[Cl|x1o6ovx1/tnsF})))z)**jg b""꿬;0 겎#?~eӒ3?[L^nQ@ c΂X3έo!SJ-]{_Wstê:cxСzw_n][n}?SJJJYTٲE)6* s@VYUY-V;/2~g\b[k HNM`@ {3I7Nkjǵ*T x5K/xO>W\Y4~kڿZmX,xk3^>1:-j\!.@\Q絪3M~n>:Vo?}ťXo˫KJiqbt:ƏǏGӱb ?|fV+۶o{ewSeϞ=;UWc61j70}xAuDu}aX~o+W1cؿ?u睲eRLTPQ_u\nvrj]`.7s"5 ΂% yYtfٲI,Xd5aaa\5b/]…x>m_}#G0eu#o5㏙0q"[n{E+88ٳ?f-}v48|le8sRdT5jT*N$*r-|O)/+^q݄눊by"Hc۱ZExXm XT>Z3((}G\\:Χ~³>`y{z/{=5;l0>x}^zV~f*b412mT֬^E޽e5RVR߷Np` p&oOJo gd%oAJhHh/UM{AͷgQTXPYhQe !xᵗ8pCGqUQU l6oH?z`۳Zt@>)*(bǦu,z1)R٭;ݻv'&*ySdzx;-)!{).(&45z xZwP_vͫ7vuE5+pJ+{={ؽo7,M;]S@BHlc#ؑT*>F qݨj=)RHRoYU7[{_ d.Dz2[@BУ IDAT!C?m[(+?Пi1x.Ym}Okv100̔ʩ(T3QDujѼI !Z,-%Tir-wyB܌D l6ݣ7={tCMqՇ7 !.hB 4!@B6Iy*<r/'KGqЮv;ѯ}B-ZV}vP\nܕkK*$FZ>aGVapA6oHΉ٪G||Bh&- Ngewsj4jHڅD5kQ;n';8#G⇬ q1X8.}w\>|5~!(4X,}6]1ĤHkСX4Z qq Tv1Z@[Q\ǀAdh4Ukظa=nNdb׎_ʫHGjjt׮!*2 N.vթznrss-Jvc|jӅ8MY8מ۞>E_.d >i <Ԫ 4!.e1DFy-/ޙ e @Bk]"4ćޙ Ӟd6fW^1Wot;Ŝ '&&TAޞ[Vf3l\=&=z4e?,;>#1)ZFQQ!7P6n`4hO>?;ھFW_Ɇ |Gii)={d-uB*T?:^BSL̛[ڬYg֬YmջA.+##)SJjj*SL!##VXM7DRRݻw硇"77WRͮ~.]ҥKO{Lf`qqa?UniGOǎ>Q6oٌCIi ݺvcM,X8׷%%}ذan={h>ZhV/?Lfgg֭[2dSNmyp̞={O>ާG5GqI&1j(n֭[5j&Mѣl5kw;wdƍtڕ_4L0e˖e˘0a Wۍ۱cG?msL(۶mE7PRZL.lڼϾ}RZVMem [.[hURZٳM61o<.2kFbccywHOOsG&00~v-t>S VoUٰaOXnSֻw&wUΝ;}(.)&55>PZZ-[p[O+Zh͛7se]TիYp!cܸqL2˗3o<222yꩧjv nٰaN6;C|裏nϙ;3?8+L>Yo9Wfu?իW7{~r>e.ZLJ xCȑ#ޚ۰aX`>>>=-JJ­qV{ؙ ;wCnn'1}6nv |iI-[йsg'!!!wW^_1^p'N駟npk,YѾêps;Ν;;v,?$>>ƸfȐ!̘1?Oty?ku5Rgz9^|WHMp: NzT|gL| ?wȑ#PUMr;]JT\͝>'N@Vއp:1|ʤo߾g/КVCz^qqq5ot(Bff&O<wQXCPΞ=Bk3{ly:Ș1c>|8 | 1f3/_q-Z$h3y2 snV~GF_|`hՙƦ 4VzΝ5ws'O"##߸q's %( &S ߰P;f g}M6,+Cr5RHHH`̙\{ :3>o6aÆmU<2xop7x.cѢE5-j&^c˹v>o!t4; yZfMÏ>r6}F_MKzbcq]6ͅc\`oh4͘?`))-ϟ ܊BN(+3ukQ;flZii)K._t!:=s_Wn[[tt4g~g|sꫯӧO0'==%K0q:﫺v o$00czx磩,gGySDQQf͢_~WgV=Ԫ"N皯ڗ/lܸgNCOX)nNQQ.N Ég 4 ˍnGQRZnV5uM0O__>';&>.DǎYn50օZN Yx:C=ѣR ` 8ogv}ӭmvF磏>;;4:ͺN:1w\.]J߾}۷/=s̩Ӥ=ZU9=:ubȑJb5? iՏZrSf*"+LevN'݆nfcUXmv\n7fs@k|Tysއ#G0~xMlL,~eCR^n":*kְ孺Y5Oӛjΰ~Nچ ưaZG׾9r$#Gl,Jg}Vgx׮] UL/g믿믿^4kJ窩뇢(X6Sjva> 4ZMTT49'NWk!DM6FQa!a(n7* ((cDvtNo7d Mo0ϵ]7KsI 5!/>o5 !!! 2bb0PDbag픕h {G7PTb> 4]ugz6y͊ӦPnlv;rHJN&66_UiZ >Fo&h2EfadP;KH"NCmIgc|T'/!N -4,\9<⵺ʮRոʺW+RU4bUTX 56Zv3[VSavKH !$ЄBM!$ЄBM!&hB!&hB!&@B 4!@B 4!BH !BH !BM!$ЄBM!$ЄhB!&hB!&hB 4!@B 4!@BH !BH !BH !$ЄBM!$ЄBM!&hB!&hB!&@B 4!@B 4!BH !BH !BM!$ЄBM!$ЄhB!&hB!&hB 4!@B 4!@B 4!BH !BH !$ЄBM!$ЄBM!$ЄhB!&hB!&@B 4!@B 4!@BH !BH !BM!$ЄBM!$ЄBM!&hB!&hB 4!@B 4!@B 4!BH !BH !$ЄBM!$ЄBM!$ЄhB!&hB!&@B 4!@B 4!@BH !BH !D 4J%e]e6!eIaHYom6_u=@F%hBjhB!&hB 4!@H) cg@D,{%Eh*Gv% 4!%ЄBjhmbeg%^MQV%#@jhhBv!$D{UI8JSMDMH-A49BRۓ@{./ G90IɊpBMv*!)Dhv,- 4Y̑]jBMUDMj RmUjhBN%& 4YB 4q_CD9JF"D{;JRBT q1H,/ 4!@BH]#.zhBH 4q6 &;,/!$ޖ,{9H A`" 4BHjhr0@+@ZB{[^r0^MHSL$Ф !$^B@H %!&;Є,{ 4q~d`j J8J `"$d#%i=I!d@JɑJ&hB&BMB 4%9 4٩.Ld@̎ iHɊB&hRKBjhbeF{-{ ! GV%ЄT} d A]7k/$" HYBjhB!&@B 4!@BVssݲT煮z4h $8/7hGB !$ЄBM!ڈޡnpve)#ZV`0LZB,E~~,DJK#Otaw-[6ӣ{zLG' * ͛&0(& FngꕎVE%H%nZnr-P'n74ZZ<z^~߁ˁDr=۳311*tz>zGYE/kWcNqDG5+ i]ϰ2 )-+azB e@S|dG3q&2~OQI1n@R;ӿ%tIM :wޚy΃aӖ%Cj|*j,zqTzL4L&>jhh0 p\-/@ӑDHH,Nw>;5̬L>);@Rj$&R0Wp4+3W]AZ9kh8os/N:q wvn㩧S։ȞJ999zbQת?__`L&1&xYx-or7N m{tݕ;_:t ΍;yn 7Y6gyNm6{9.n=SW1ʁ$$h4LM-ϱcDFDĝ!* 0 9'Qt?-F>MNv'۲c~>Wt5IiIX|iwY?:'oPՌnL3vno7+78'}hť%$q7ѽK7z\`5dZ9xfO $00]agnӝw>xk&^C|Sh{ؙQ)|R;5Kߞ(N3|OO>sNtޙ_{kiN=b!tZ+sD <w_~9a\\9rwj ä]o;FC`p0]p69=Gc曯 r>/^#̪뒚⏾dܝ7֨suWOxٿٙϐ˟TS=ڛo0E|L>T񉤥5..c6mj~}/ӱc,%%Y3^ŦRbcbZ]/ee{[=nspaАKq\mT&w[gHy٭'?S띻wjaۯ7wn[/<ʘȣg}k7#:.eT*RX:YHHGƸqcY+ow6G{Ĥdyk3g֥+6}:6 1T*, rKJ0͸R 0NmVB Z}68MeDFEa*+?S!pr.~׎Jw߰l5׏ty4-V Mo#4,1ZF]{&kmh{%*.Y}\M>=Y"ʊkĘ2.)))i/NDD/ -1N ,X4ÎFn*h v FVKyy9T*bKdhNcPkIDATӲeOdϤA8+ka'ӫw0@Nv6~~Ӊݗ@,fPk;`c츛p8F}F]MVV֭yfkx3Z^sxz.tAAA<3<3(ywXpA瓐?!!γ]O^^ّѠjq8UcݵޞŁXr^;xY\uLV ]6O<^ϳ3Ec6OLHhh}m)))M#""$)sϱc1N׳8/L7w~jƠcq:Ff3h4j5AA]./T(.u֝3tؕAik׷ ,uO ,SY*,t:w(zC{<,˹;)f TWZ x:ؙo6m\װe?m` 7͒lX?-VC^Vwe=8n_g;zvIӿd"'+;7ƌ_";;=CF'ld-41av._@BHGeڝ{T(ƌ#0K Ab I^^&0)8w}Klj&&^i-Nm8F!l }8tp?w# jMϾ 2pk-GDD*=d7Z_HϠ( {ӿ"'+keKX5G G_;-nnƴ9s+),ɷ]T Ǘ/]dr s;w/ 1[Dt֬^ 4ߵO/yhμv~FYY9Rƻ:k^J&+|xv2^XwNbDgfk3o B.VKDD'rqm6Ξ%$$anZi/J .W ̙y|L۵U*UKPyδ13ls;7&;tK8-[L.wuYf.cƐd*_l|4Z >}{S\Xo|ԛoT=KMm-K$IJF^BkفKzUK 1*a$m[>"~L}NFAP eِłZfȐ.;\e13~8AV?BDLƁFzr9|_vOS⾻f8<,Z/^۵Q -`ofs8|||:8#1>mpww熸8f3ϝu nIPk4x&Mji,Z,/R%8O/Xq'OZv'^^M̺m:7 m6џx)mubƊz<<<pA /z%ȨKOFZYVJ\tP@P%d[ޗ=+]bJ$@&W@:"={2t(Z梋T.2yj-4[(eA AL}8:%p= 0SHhA7 @20"!1b9K/t:57 1IɊItyAA44@ &.C 훣*Oy-)y@ T_Z~@  "& 4@ &B0kp:8~n_D&Pȑ+B\f>/ r!r9^^ !$, Z-O'TUU{F1IOOGTm As1a$P(DFATw/z~?1(p$󄆆 c\gBBf S AsEݔJw S.[kp*ޠ-ha8U#'֗[& BE؈y R{(YTVTaoyzSvEΞCR>D z#i2h(| js_L4IƠXVP?e#i ^W MлT!)R(7Q򖑆^ )ӉDh41))C+Wi#(z/S՝B.3gNߤLLHpryݷp`֬{=X*!\$I.YJX}C\T& +q<.$IöM|c8J!Gbm(r)鄇Z\~_bccٱxNfegM10.]ټ>)**b̘1t:)**n'чP](,{ű}@P(P*(J %?Gs^LX GP]FҳEajt:%..;ޗͻͨQ0P(Xk]5e;kO<'Oܹs̚5 1 KqV*g7 +Pۇ?yQQ۝ΎVx}k\32Q +,Dڗ8"R1 ?u&XL2_aGִZl,o'jYx㍘ٟV`00}t˫.熓O>N#))={ϥJ-ߢC`p0[Et4'NSx[P'd1D 2AA{*r؅P*}r Dwl2xrSlxO1C I0y罷8ښ=ӧ*3̙3 $ɉb|Gb{0&?*CH$o̙3Wl6UVKNNhZ.]/|qAPTT͈#Aqfsob?Nvv6iy=9~8eee펧NUUwq=Xd2=ߓr A`6juH\.G.s˰{t'[) CP ˑ$ ֭Ӗ҅O_=aӦM_Ʉiii|GD-/?Vߟt9ZCr3>Fw\[n%44G}"""HMM'mٲ͞ެ[9^}UF#zT򮚏֭[DzeXb\"v m:'ɑZU Hl9]#KinvHPwsyy9Æ puN>R.pUfh;u77=[$I?~7pw駟ЍNo;T*];>jnrݳY_~/UD :Czg.;MM2d0p:swhj< rK#s9AY$cכ^fsu8gbEuM5^xzza6FVv&mG厊bhgϒ.s9~G?=yغukw?ЮI @ee2 NEA.XCzsE%'؄8=TyQYYE@@dc(((`޼;Axo{ ֍B),DTRWg&4$ >Q2mFEEvRVXȑ#{,X2jjjXx ZW>qZIVV=/M^ݹ-z9d_1.a&j}L?fx;;G3x}/ߎ9dwq-.~zTx:ujoekiQ[WFD fͼOII *ٌd"#s?-^FBB"~L4F6o~-͒%a2Xкхxyyhb6lp]!hO<&m_8P@?{Gf^#$'&Ԅ yL GF> %^-{FZĎ'M3] @JE F.y׸m4}Dcc#nnzJKK9.[ZS'Od`#6+ZӧeRO W^Vn(\B\>ٰw:q;H8 YSo|9ۦZcY)#;?wh F] N*OYݻ \gMS&p***$ Y3&((zٹk'ң2^?'Af)Gˀ_4e,$'A^QI~8MiS@FϏ}H1Y}bY]'Ǎ/TVVRk(++gBDBCBn#I-/n:M?~=ߥsݜR pJ3P]Oqi8_IBb">3Ng[1d2`@1c:32MOǒڟ4/ʣ ˀr)?)r:m ] Aڽ@ oooJ;/ rqY|| Ʌ]e q7@Vf&F%gG.v8g*ٟ_oOn*Gޡ\jkq80&ͰX|}tB\JbРAFv$*5(UJ:7~?!h(U)U>a@ M  kh k>l_FjIENDB`KCemu-0.5.1/doc/window-module-kc85.png0000644001050700006200000010023511131675406017027 0ustar glaubitzfbedvPNG  IHDRO%sRGB IDATxwxU_6 B%^DDPAT +R"MEC)J*+E@ Bf?B,I6P}]s%3g}3gv >9yܜw~"SA!,xi#&-WзB!D ` J%&-WF,[B!D5$eQ)ֲjCv6浲C_ʼn32z0b3B! HNԑZi맰(ԦzR3k/EB!Du$gAT.ޛFu)ܾ-`kmV+-(/y2+\=8Pb%˄BGA\rGֲZu}Qhs8ݪ p#&aOF狒%^*sZiDžؘN[Tjܼ<@6Zc` Q竳%p"V]VoI% EO X-yo&^ă,77}#12RD@Aϑv` @vN.^'9%uc:m~G ƥl7ٌ<Ѯy ?2oY9hJ QkJU|-_wT=?աJe˛~{e&zc/˝x_.VXBu,[ =3asߘg1~`;w`0b)(( 59>O6YCgMr#17`UK IXf\Mִ@[IB"f&>Ew_KҼ˜~3nE\I %dPkje*z勺϶Zݾ/mm{N/rZ2*{xk_m-r!5=^v1W/_bި.X11RcmǬqu%9+s5>7{+1T*vuhX ##5;Nv$R) sH s ,CCo}HFj:6at~M Xks#nf˔qϢ(E͞QDQZx.]!1)'NF\{o: ֒| G'TTm=ǮЦ+Ɔ=}Kt%7iN`oKԭs Z^e&e5suPp;_gq5 ,o̩+]y^'cb%>/cccS2qɆԴ4l&!! Wgh 43ߔKe&&XX(⣽'caaNff6ff$$&Y;s= [2LQEJ3W077[IƶgM^ +33Qe}1cy,(5 P27Ѷ(BL BhO),p;tIL2PX~ o"eےQB5uߠ nKdZox:{{DertQ2(/(+LBܟ$#^8w-G[bRr]b?l}}[FH+=ĥKWZAO5#Q8v.M\mbnfJPC':6ˍJdH2R077#66.qSɆDӵu=zےanǑ:>[Իg&a[dž)LObS P!.'aaaM։ks8*5~_(sWKO{yz^̥-ԛDc'pqvh[22^P_Kݣ9ԻuK!z*mquq?NDcߖL£n)T0Tp#):.zߕWc1Xp)|n.9s% 7/,-Y12?hNbZ6=gOa/7~7-i9}CC篥Pv):>==*ܯ_ݒQ- d9]Az+^VwܒQ$Cx7m̨϶__n78;N?Pe s3xCQT*<=XK7EP)@6 'f:k+ M04T3x4 ~Q cЇ!N[j062ڊoF(>[4 (}Wr6[_$TwE˫\ۭ(h062Nop;2(}Vbc]QTQc6p; Ն 351pJ|^Kƿ>M+*{ n[ۗ-od@UVKFYNSx5mҨsʊ@?:ulSFCnz?E77F!x<MKMst^N77R5 =Wv+k T*]qww-wLLLmS3_eOw*_x[2b3k|Mm]3gmWg kRò^BH03H_7خkx>S+(,?d\,gBqM1Rsj-ThȺ(j[?.͏B!ĝƂTk2sk}Pt+F !%f<P7JdB!DilXԒe=#B*ȸ?U]'eN do !J]g\]B!biiUfJvB!I2B!IB!$B!$B!d!B !B<Բ B[Ff \HԹ3K!Bn`¹\rJmy INL .!^Iɓ&;οp"fH;pOwrލ:B~3r5*^^zGS[8F55'cڵγfZ9B!=¬O>jU+7:EZJjcccF5wkrvr 9r֭[9Oxx8ΝٙX9B!]tu&LEQEQ_ʠR@FzFFF9ioԔ;nׯ⧟ּB!{>l6 K ɼM0;n8pKM7ajjS˦͛.^DBqF.ʝȁ#D.#hM㖌ƍӼY3ؾʷo/4oޜFUX_BB3f̤ӋwdY$&&\ll0-ZJ}uVggӉ! J)vvfw}=jw}:m:wI\\NNNűknӻ:xWHLL$((SЦM>Y8q$/ $%%ѼY3NBV8r3goɑB CWy|011a76\HcƼ1td묑GX֭K׮]h4[^;}h4uFݺuֱq5◭[ܹ3XXXХK 6$&&A+z*M6_ҩS'rO>$lZ4B!Dm>>r!hl^^ɒ\ +5$&%*[c]ݧLq 0(UniiɄ޻5+33RYXXr !xhܻe?|)-ڵаJ FJR * ^gz7nl>]v-Չ333[qa>9]v-ETTgIʂ LB111Ȉu2wcfnOy3;;zQr\zJHˢ5j$I $%&TK*NN>}={g233?GϞ9svW^y777z f}K=9}&dffCDd$C c?˙,B<-UNV/Ddd$-5=+WйaeeŊ~o~RKFβeߖoeVyWJ[,\H!N2ߖ;ѲeK1c 333|}} ;ҼYR5kľ{6t(Qn]:uw~˜ٳ}M7^uetªU+:uB! iiJ0RxɧMKFRb]Yɉ3>dƌT |2OW׵g9̛;JVw!"59*}ׅ(G~*B!-fQvbeiURSͥs=<`d!_yyy<ѡ#cr}{a@HjZvBQ8;9s9~OΓU=ΈWc``.׻\VFG=d!P!s#.y2U5c[ bM$i٬%d!}o;cݓu>B!$C!d!B !BI2B!IB!e>jYB!0ȸ d! u=#B;"}2B!IB!$B!$5iy;c$_a ;Jjxt}B!*-vpѲwzysgfΜEbb|wDŽ ӼEK]\iӐ;DKRbw)Œ3nC̚[B4(kSNJL 1!N`dd\r宾7xs۳e&^̑ :e~ОXEMw?X_r~Xj6&Q7{3wdx7ioInnn_у7޵k'==]zYXXٳĵk1:to"ܹ*Uθq|gj1r֕^Ǘf=e3ޟKle+GÏǀy9zv*>޵ĄJoÁۯ\8{qo3g.IIDeϟٷon4g.7Ӊg=>tX|;~ݻvr)LM͘9cu~i`FITiNǧSN+պQ-QQQ4oL;,((yw !}f:z˥$'%Vj>_0Jv`-4h  䉿 ;wQ   +U3]5j$}і>tss2׹Z~~>^޸^jf:{WWR͛7 r Z4o^rrv!Uju;y.z׻4;{Ο;Kݺuʢwbo- mN@ ~Jzx"۴Ֆ7kނx:=ٙӧ)woE-9uZﱨx;JU3J|\l!5+U]L%q\x LNHH^=/xz^fb^^^%$>>33f̼yx3tl >qqqږY˙|})|G<ۭ|ү8pΖ\\\L,Jw.Oq`nnz IDATNAAAKrN7h׮nVj`w˜1s&'N$33e‚L~/##KKrvBQM* K++}wt;oIFrR2D?ggW\|Y)ҥSʕ+888T2g\f#GKVZEN,kѼ9WBQv[oų-ezSNBǎ-5:wš5k7*Z&++K<%''WiyGGG}xRիږ;:99$H:uf͜SOuʊ '|ƍb}( rWWWnJHp{$'lgCXXXǗ_~Ř1IKKc)U:݇0yd޽C:m: |%6dy9gٳg|TLNN&&pe>crΝ?S sh!PhK/;/ !s 9w mڵGєQ^7ptr&;;FS&ɓ&@mhպ NL8Qgx'hޢ%ummTnhAJu,&M曘]nRҝW_3f_ٙ-[6nz>l~xxxs-=n4oђ~^w,Xow?<;>^c0qԩC-D':t[XZXԬ9HVtZzMڶmKH>{x2b(yhBNChۦN1cxk!Jmq:txڷgA.&-5cr)߷wi5vO7x˄ЧOo95s "ecq?w#zQѐODD8;wƫ~ h4/cϞ= BU WA.]-A/g21B}/6x1<47#/D 044Ƿ1j#ߏf2?v+>xK|&cDCFjڿňSQRRֳgO+ٿG{xB~AA W=*qKC5V'ii-F~rsYv o(ٓ[Y$YalݎE ѳ'6uֺ}uk }91(dlݮ[s^Ĉ;A *nBG=O2$ЊG$BG={xVQEa˖-w,ZރzXìW^lٲE=OAAjZv\<߷QzX}1➷d_ȅJ&ߟHqB.DmA&Mxx$agpW$A , AQ$5`GFFҭ[7Ο?Onj4Ѱww(̘1>4iȬY՚Ow6m* g<35ht$c޼Ox!UzK{뤢!.. ҢE ǔm۶L߲e w^UY-Z`ѢEݗ"C͛7\ʚ'""ݻ3m4Ҙ6mݻw'""BPVÊu ρV׉g4k l۶+&͚5c…!I0uƇ~Hff&~!ݺuDnĈj'gϞeݼ1jTۼy\6l@pp0~~~;vO?TWK,gɸbmm͠AyGkt_l>>>ӪU+?wƏ_j}>S{=i9999;;;5j999:9l0lllpwwg:˗\O}ӊ_?22Mƍ˓w&88y&O̜9s3f 39s0y :-w)Xf-S&OgggLOk~sssѣ5"22{pYh6>L8GGG8pN|(```_Mz066y;vLM0yal~0|plllaĈkΥbNY"嵔̟?|}}ٳ'6lPM8y9̛7'>1Iƴ155@رcowDGG|rtR2+//&44sAXX111{aϞ=$$$̨ ޽{'%%Mƍ>}SNqUO->}:;wpv]إK/_ΥK ᫯ӓP]('P m2d=RV𸛉FTTNBPPQQgÇ3zhXt)}իXzemF/y뭷={6DDDY?BHH#Fл}!>>K|RR{֙oʔ)\~sqY\ԩSSN%!!h?ή]z)VXkݻ7_|3Ç_:tδC믿>1"t(EQ%)1AgXzSjzRbJ-Ąx%)1Aʜ/)1AsMYgFQSٻw]xd^:2SPO~X~}]v㏫ &00^z^0/ >祗^$ cbb+ՌXr[Xk U蔗n͡~̘1UVO?j)vՅ8xll,..:巯[Y롯<33͛7z&((\иqR<%ЎՆ.//_YrǏguewww#..N;NVz+`Ӧͬ\'Oзo_~YcSbDn:u_攢Nj֭+Z֭X`gϞaذa#1ݻw}v6n… uʜ9s&7ӵCzzZ&K_ΗeƼ(o`ll\jYGGG.]A;S~%j5Y񤤤r}݌1 }ٴi3ÇٳgXsZj).o~vӧ+VЙb S펟;5VWƍ,w.Ň6mZxb.^믿?7Cc׮]ǎaT|x99!;;Ø1c:tcǎ-7>DGGk/^X*>,.#>dV*>ڵC݀72rH.^ȢEhݺ7A_+^gO^dVQiWRw??'N,\]]پ7~a}6_[6tPBCŋsI RADQƍGrrov{f„'>>ޛs۷/|00}YhYYYh)Z&M" ֭[K^MgXnm?di|dee_3u4>;z r7 3{nr#6ٳ ƍ8~8L0O>і :G… sI~rf:N}eү_?my0a6>?^g,X@ff&1113u ĉٰgBB%>$c֬L4/L+&M̬Y3qhc׮]S1c8p@ofggg~uk֬a޼y.oӾ};^xNN 6^xƃHESNсf5ř)Sh'OD:6Ѯ]{q,Y̶mpssgOgPa dӦ̞=''gfϞæMr'n$C^}vmҡt8o%Çˍ_~GfϞ(oݻ?*={舟~~~0}4miSShٲ;Kn''g:w“Ov*w:رc%><$IFPP>;;{>#~e+AAAdg:|1p@֬Y#7#(ZnGZZj?~^GPP~_a9z|M-[#++y;+Š+*, B~Gk!j/Ě~=}CQՏ8>!T $>FܻKrGO?.#W ζ Q件Lj{גq돫WK0^ď?ty)!dvI0h`V^%gxZAP.*FܓKT*ETVZɠAPEGo  kwR(,, dOT=Fqן.N-qppTH:t耕M[.Çjňd qvq% cGՄs:cogY܎OdD!j 5#%|Ν U^/*/_+ĄRo;*:~e'BJ] /ZLvN6̕+Wb<ȁٿ`ժՕ.j׌33Q91bd. >tF|ymлv.>^[ۆBqG}2,,, ` <9sj֬Yɓpqvٙɓ'Ӛ5.z~i,--qpps8,'000KT˗c:<gW5oʕʱta̬YѨq=ښ?gu+T8;߸qvL300(wy//{_nPWl&J>;:V/HNJܙ(슑ފVZEN7&1cǏӸqJlڴ)SjJSoEx,͋99Yg͛z*Eaǎ[>>;߶][ٓ>xuUEWqRWBp&-5cS2˜ t(eKIN2o'{B!o'OR1׮e;~*" #hZq!&qWZB! B!$B!$B!$C!B !BEQ(,Ԡh )TB U kb4BB<4ូ(h v*d9B!J 4 ccZ-\Ʃ'%>Ň{dODd;wƫ~ ,h4/cϞ= BU W DDK|!{#駩_}!j!>1Tqp~0Pg|'?E!%%Ozr"w$5-Z/$>Ƈ{CCC%m;~շ:L A3>#B!$C!=}xVQkU{5]>xT~(((@V?2BpŇG%Q ڢvߟHIsxuk4Ս~[֊s'ٽZ&00T( DnݺqyuVA;-_O~xxzE8J2.\Hpp0:=AC\ȼysٸis7Vvc…hBgzuꪉ̌m۶L߲e w^UY-Z`ѢEݗ"CՏsy:""ݻ3m4Ҙ6mݻw'""*@J4^:mڴ䉿9yoZl%} IDAT>H|J2> }-&&&lْ_\6l@pp0~~~;vO?#""WK,gɸbmm͠Ayv~###-[jՊǏ]ǗZO?{OgZNN#G;;;FENNv6 ݙ?%Sߴ׏iӦqF$寅&O̜9s3f 39s0y;3n%Ν7sK| P$c} cرxyy7лwoY|9]t)s_^xŋ ܹs ,,LMM8qbgCBB5Jzݛx<]>))Mƍ78}4NիL>][>}t9w޽K.,_K.W_}';ٺu+C љ6dȐ;YVF׮]Yx 餥hby# BGRDo'O22nZمkW+}1/7uk0q FFFxzzj*ڷoN###/^ܹsٰaZҖo @\\-[ڵkeakk @VVvvvdgg|wolܸ޽{3l0عs'>>>>ݝgҥKԫW;wҠAmyӦMu֭_/̵k'Giٺ]j"zMU")7nz*l.$>(>+\ʷ˖UV[[[pvvr2ڵ\Mpp0ҋy/X9/"n6e`3O-,̵ㆆ* tK7п?f̘U+E;B\\v<66g׭W͛YGNH|P|':vfӌ.[b={C_cÆ2bv]#ٸq .)svv̙(nLiev*e:W>|Gqetv<::Ny'qZMffv<))u߽{7#FaC_6ms,VZJgZԱO>XBgڊ+ӧO;vkV Cθq:}2:$A X|V1a-Z? %%\"""P!D\hcccY~Ggĉv+۷{wU>p;↚VVjiK澐fjnYfIVZe^b(""+0s~sDs]炙\#AL,>kgY5bhmJ >.;^௨(ЪUbᓏu? Dwegy)b4+HD1C@C֊F5/>TPT2]6Xhj1#AJ!DjU[H|Ň*(AD9$>QC%jQީQT #Z!jf|$CRȅgqqqW||HJR)JMInzUjJ FC`˖GǎpvqEV+I 0&'q0۴AgaQ-C57>TIhp$00Ñdfd`[Մ8;9aieU-C57>T٘ NGÆ H'hNuBPwh::y!!jC#M BJd  FMMJRhԨ5j/y֬IxhRR Z͚7ǧ~},%J @rrڵ+4_$Ľf08s$vB[u5<$>Qsヶv6*0 I Q 4 ۳7W7lle0 D͌U2SQR*U|ᔷ/i e[H|Ƈ*a4kV Qlb%$>Q3*BI2BQ}TͳRy?j)AW~6MJ: j-/HDJ2RRRh٪5N.ժs*kZZlyG( rJ ݻw'>>ݻWj qrv1Mw[oͥa4j܄yW*EY=EQ>}:θ0sLz%ѣGGW'!W'$>oBIƢE0t2L,_6mژ=_eU`eeŎ;̞ﰶviӆ+VxOEsQ}AϞ= !##zIDDD+MIlV!4}aaۻ{vg^6nB,G}_ETT?O>)uܹ3ΝܹstЁAݕ*bŽ>$>T(Ɉ?`Qغu+AAAhтÇx"珈ϏUV7g̙xzzboo2ͯ_v-7ښvUM4Yx1'O6{.77#G䄓F"77l?,]ԬYs7<@߾}oϗ9s& .dرX[[3vX.\̙3+%jȻhlڴY3g;fM_Vx=BCC7oxzz2o<6lP'N0uTqttd8qT튋]vef?___222iժ4nܘO>l:xv^gҤIxxx²eJ?ćʌN2B|iӦbiiYikFׯgΜat֭:ի+W$88~IHHҒӧ]vk. bT S~HJJ",,T?%%}QH/_p|MSoիW9y$?(wu֍sYᅬ/ˑYl߾!C̯2۷WjFll,[6=nժ'*{111mM6Ĕ駟fddd;SO=UXYL>}:h0?>8880tP|Mٿ);w.111ׯ_斯0ڵk^nik׮;;;%/]O?4f#44w}lEoW\x'5=_~aر\Brr2]mqFStttJiQSH|-O!oEeS^OAA_|NPP-[dРu/[. $00"!!-ZͫRkcFMAAYr09z-6n#G_鱧W\ݬm+l;+~:~-׏?)_-:jccױ+^PcƆ333-uСC8ӻ+W2d~{80i$fϞM>ѨeXho,ZO=ճTf-m*Sdtf#PKw9.۷cٲeŝ`ذl w dٹs'|˗sD,YY)33AO_AQ7,,,=z#Fʘ1+gϞ5=>s ...nnnfgϞ5j~=8%%m?xWiğm۾eĈW;eҮ][LUvߟPBCC߿vwɳKլY3+QQQ4kִB,^9t`͛|߾}L4twɤIطo_Vz'Ɂ:tـ͛7s/^Bpppc;gΜ)r2I|P$ѧ7W^Pҍh ((C& ӧh6dRSٰaӧDGG3dȐJM2Ea„ 0~Bǔ)SIJJ"))ɓ}YMNrr2IIIL2լ~@@+V ;;^"}ƌW_mO>+S "sa֬YCvv6k֬a̙S`<`!W\ʕ+wB0B,;w.]ҥK̝;Y,]tYdY( vv֒ͫ+V`ʔt:SСC9~8(SqqqEwР$.^L ==S*~$2CWŅcDzwB&wwwlڴEӹs'zꍛ;ÇW^dT>{l\]]hժ5ZÝYfgΜ-ZS={?aaYrʼn•(h4j5j͞ꩧxT삯/|J%QԸPW2_Y,AVE Ie[?ׂ?.1ʁ$ʒ Z(W2w*FSA53>TIRptt+Gz>~$%^e$Sn=*ul BP%IF!eKcN8V$D W8~mڠ!A$Pk4{x2320ȭZBTH!AlLNaÆxyyQP`@Q$QJVʺZ!jf|һK4ZZB!)@`0H !FZ]$ށTL!wHޡ|IF;T!BDif.rLF=z7mΙdcB!DVy<<-{ₛu,ԮjB!D yyy~Q% 5BQ&ji!BH!BI2B!IB!$B!$C!d!BHaEzQ!$C!d#11)S`{xҨq<kmWLnr"WRBJJ2._LOwns ?aXG5R&B!D%' ~^|)S&N^zt$_!e+]\|sN.SZ?wO{+GMy/͚?3[Vnn.cƾf*_j ͧifxyʈ\vm>{~xzz1zW7䊆BQ$_/ռ"q59߻w/;OO3aOp,$j ##.vmVwdffrp${f˖-pT;'bcii[oͽsݴ̓ fԨĝ%687f֬w\ݐ+B!9UQrT=HxV[Ո'['gn6'[srv!du '' Ir|;4hSб~@`Kv8s w0~ [ƍ̿y1>-|Z~'b'!6Kx֮-ޓ9{<޽'NNHNNãVŜr3OJJ?ĭ>ަ>>>f/_cYJe#< o}#G]h[Nyu !j5vv4lgWb-2HMIXN@׮شi3&/iZrrr2wuu+ϟ7+wqqŋ+.\0 O?4KJ2lp͝˿ ;;;]_EBXFIv-K^B!j4k[r :t`(GQ ͝ #~q'.ӽ6mYcn؍Z|?~ ׿U1c:j՚=yвU+<ڵ3]xqtԑ}˫#GSOΕ+3kl|||':6v,]"V'#= :ES_Ig'331'O /q萼BJO; ?7~{ (.9k$%%1{vO= B{v/:v]8880}4e!ִ9UF|UzV!WXB!IB!$B!$B!J~  FET*45jM-Alz&5-Uz_ R8;Ьys|¢!jf|$h0DD!vJh4* gNd׮]h|}룮Ǖ!jn|VFEӠA#}!*F34Za{ꆕM J~*BZZ*~B%=# }AAl BPec2F#Fu q VπIcmB !B !BTUz(r9TێjkM[H|RPM鈚JHBTP$#I^2Mǟ`μ[lyG( f(L>ggg\\\9sY;wҵkWlllpuueРA$$$^J ʝIU,PXޜy'c%KPN,YR~w/tޝxw^4-N㋷/}SN7᧟~'WWW^z%+ӶjZt:գm۶̘1dyq E裏~`?gϜfѢf۷S`eeŎ;̞ﰶ6G_Ç?OLK.eܸq\W IDATxxx֥ͦⶭiΜ99*kCamxsΞ=ˣ>ʋ/h6``͚5,]?Pi뗩tSqCDD={$$$ BBBٳ'%.4$ji[СC{EXQڶm+oòe˘8q"/_ѣ3x`Saɒ%+e_^O~~>ϟgݺudggӶm[Ξ=[e~H|\I;øq :zQNڶm˧?M4ŋ=xb&Ol\hh(OOO͛dž L AAA8::bgg9|paرfO;vqll,?3ztŮm888opqG֭رcqrr⧟~+3sL.\رcfر,\3gVJUww+ш;ypu8q"q'O7aΝt%cѢE۷u{1nܸ27кuk-[СCy7Me3giJtHMMÃ4eEZZZu ȑ#qrrɉQFk/K, ^y?C4i Zb޽Ҽysi׮%ۭ\v-76Տ2k[NWvpƇr%MPP]i~DXXv"%%}C۶mM۴iSׯ_gժUty777yXhe˖ak+BCCY|)S3gϒꗶ%Khժk֬1%LG>+}v bܐ!C*qdan&ݻ?+$##+VOܗ_SNmܸG}// oaL~m"""'!!KKKONzׯ֭3n:^x֭[d„pe?NLL .\0KvvMdd$'O$))9s昕o$''3p@zΝ;矹z*>,F*qnk.vErr2AAAz쪬!x(EQ%jٴP%/7S&+ZVIrв¦ .Q 닜E+|һwoE+O>fr^j%//8//Oh4.P\]];sssSƍgzŋ2eOxlΝJ;4SIEC7)...JVV땬,E9yd_M)TVD9W1{T^):QE^WoO,//OiҤr2GQHvvLׯ;v,)z^V|}}E+999JSNXmT?nzxyy{k|<~mV~㌌BjڷLLL,~m3)>+9kdMzz5ww22`s[lG/ //T~djj vvvdffbkkk*ڵ,X} ?р>xmڴe/p,X_L˞4i˗/#??lrɷm\(={ѣnիWljV~WE֎EݖVngZ0??1Gx}>cƾ7[WaݼH>3|}}(ߺu+M4A2 … 899hѢ<*\ӬY3j3g˖-t77Wr{6$&&azAbbټ\rŬXQ\AAA?J.ęq#W9/͔nGbĈW3f4w j޼92 ӼyBkkk˸qf>T*F#G /[ͩSLeǎ'[[6R)~Yڡ6cݺ0aYYYsX4YY):(7~NNNN/SvߟPBCC߿vwɳK?,'GK|زe Æ gƍmۦu.].&LA~]3=vwwĉX133T>fV~EQX}ƍ .u[l3gpqq1sZ\YjsI\IƔ)SXb6F^^ :Ps„ 0~Bܹt.]by bīƢr sΣCCr1z=OfԨ( ׯ_gĈWY#zŲeK/(dffM7)e틝}YRCI';wbزe ڵl___|AnZT 2gfa͚5dggffaΜ9=^X  @ӦMY|9ddde4kVb֬l>غOXYYѱcBˋ;oݖlbʔnUaÆ<ӧO뉎fȐ!nݺŇ~Խuǔ)SIJJ"))ɓMNrr2L:{BIFYPC4jԐm۾aܹТE Vw*ҕ:gСC5ݪ гg ʉ'[.O<8ׯ7ݛ_ĉзo_f1#_K.(B=8u4oW.v֡/o;^/3g[jfΜQhÇ;0p _P~hٲ%۶}C>ALnjRVԔfv-+͛1j4rf^|\,mw*6xFEE1t0֯;nᓏ388֭vm!stKzz4ć2+*WHx֮]b4+HD1C@C֊FZʫj*r]Oh4瘑p_ć>P_YBćMdi{5 PBDBPeIZhw*BT;F A$PT8::rY\\\#j=_?TʲRS[jZ!jn|$Cز%aѱc']\QUJFI ?@6mYXT D͍Ud5=< pdv)!*|rvtpE@NNXZYU D͍U6&CѰaC((0(D ZFbie]C53>T%kNz^!AڐH!B !BT$CVc0BqшZ._ag@zZ|9B!CF9w8irEC!+)W>Bf͊ȻK9ÿisΜ'#=ܷ.Bzj[;;7Ӌܲ'..yxPǢNi!B`0W%~OiM!B*BI2B!IB!$B!$C!wVB!D5 $SI+ !2ӊO2nA!R ~9K=|nG~ !jWQO>KzF:B-/_3-S0I2+P |Drt BV7H?Zmѩ|\" GOI>9yNSǶ!. x:_$ Bqw FGaД{{ɺn.X|5:.ٯhuj4$C!j GΫ*I{I?ց'{ILSLJ ''$N~!p. cp]q} i=WWH!Yhua#w}3{q}:/Y7oF#:֩S_46G9>G=a#k.$._Dg\EM݊?p_n;[; xM+H~ !j%EQw6uN;JXef7sf Ex< O{bN;M_vi4'~~~f˩2퇝?D@@[~]atz|AׯgmkXR[/yᇱ]v~$C!:6>\O&5 9wQك-zN4 ZVFE㏨0ރ&:nk/QMMrm;qӴiXr%53331ddd߇f7[ol;v$++F؇0cƌ'$%%oȕ !\鰉\]vC8IR/u|~ΟG}h7Gr ml,m xNMĥዥ> ZVTqQzQ#ۿgEF@:hhƦ_СC23%`8A܌ &NHƍŅ~W>%ۻw/ƍʊN:{{$IBF<_- Vӓw6BRN]J i ӽ=?^OӨiS ŨRX>э=͞vvE|>77V[mn -Ky{{3.x<+W-Mg@8w8ŗ}dckg`[ҰaC~g|}}IMM?dtڵQbooϒ%KYv=W!w+j,ɱ ;^W=sGвo?,,,et?r'HE=h L};OBˋ}UN3o09s&3x`m4nԘq㉈8E3hִi`22ӱ`x8_L]… iР{9~7`N:^'::_r$鷰alz3 HHҚXƢjLJwߖ=zuV)((… о}{< bҤ\x4NZ$u^HXXw?}t%B ]ɸ'LCAV)97MT+Va,KHï]:so'??cۿ.i: <ѯXO˹iS CA]M2&L@N\]6l8z( ܸ[ ԱS xstZ-YYYx{{wn^|1ulJvprrǟl6l4ϴiSs.loo '%yqppdʔ\O?ݫdnjRVԔu5^~^_mĈQcq$ļ|.ᘛ19uX:+׳9v8glhS@c7Tꑮvlʹn̬3885{|EONc5x{{ .\ҮݍgϝeGE>:V$\D=X79`Ji֚_߽ 7)5>ZV~ !jEEiǥZ7]8\Ǐ=\gīwnXڙ,^w*[[WWǑi]b~k8v".JzzZ? 2…s(X0ش <<̾}{!ԉϞ1/PNF%l?jgg ΄؏_kM9 NKK-*IJJDgQLAArcP{puu%''zn&$BQ;brYyq=-뺁dnkWڶkGw7Fi3T*M~GĮ]tLXowM'^'11>ӛ\`0baC1*:;3p@"Gb}jy;K!zK|U:x 4~h^o^[t`pt kksȿɎ8ë+C45ֽ.o9\%//B!D?gm^˴IENDB`KCemu-0.5.1/doc/sys-lc80.jpg0000644001050700006200000004377110527416074015060 0ustar glaubitzfbedvJFIFHHC   %# , #&')*)-0-(0%()(C   (((((((((((((((((((((((((((((((((((((((((((((((((((,"R!1AQ"aq#2BRb$4r3CST%5cdEs&'6U0!1"2AQ#aq3B ?qGAML /Һ:ׄ!i1_rZ2$q>+Th(3%obkOT"F 7>uPBĪj(ԂؠwƤ˟&_3(Ŏ1}#iLRaӮbO7#C}D*ąs@m1աNhD8OIk2K+*"1R:>6 !?fc$>Oi{T[ K]h $H1kbߺtEF3}WL[2&u  =GFGҽέJNkJ->C*dXjZd2K`nn?!gY;3K3yUIsJ$D7k8 ht+i?Vt>h22}i*[",dྎqLQX.="V1cQMBӵkGa31o_S]j,T"o-_B*m:CŒnVK9G5gR>Hk`Upb2c q#Qo2,^Py~aHfz[cڦK?Qd#DU^}Uӎ g,d,'wnqy -yOoHV)M$I4/K $JS~6%ŮkZL^c xIQ{ Tz|G/zH#xijͷltAw{ `sRE@U/AMId64VN)rcw[]GnFOEkY5->Meqd˃,I93=k1w ?f;Mf[iqNOK7A:P6ӶZ`#mЩ$햜HoPtHmټ I6^e;'LJE>p*a7gʎ.3OZ,W\w|Ci S+iW@q1)&ι$N!n,[hzW5^Gi[]ǰ.rsTjԥ/Oe,,׶hC],V(m%ܑu}:EU?J::64Җ}YAoGBlR2kGjk2.%b)6r15b $y{_h[Jl>uQ/פϬڍYYC$:ȁ) )F4*:)$ܯV֘IG՗3}yƝ3ҿgI_~v:0.RU|gSn~]?&vڬ>[u5ʫ 㸻[p˸Ƹn&ϵLfl'͎;I$ת,[0e8zN,sɉ0cN皎qՍ,*O_D4f %{M'=)Pm;mݏ P$ی0r~诵?k쯸O??yk?.rTЀQMQ' 3h2yC41v# BmVKY'eVz=\DS|98󣚎n-a-pj\ $fs/)O֛xh1T:&mL*Lz |* QeY%fo-7kf;ř{yKPÜs4I.\“zqR|^G4%Ht[anpwƓ5ρ*bӑfIe2ET9-sMY"1l)K2&1E4/dn\+["lP 81sRiv!Ix.rIZ:c}g`W+A0+-AY;UAZZZFQVӍ I|*4/a>*wq[6.a?+!eu6t7M>HHn}*`Fƒ*Qf4Mjzˣ(Y3ls S)[V2;KޢPaI>/L7UHGb·cjкSB3=E^l('I6(>e1r2x1Lձ|C^2NAfY~BǀW[ 9cLvLކigP϶֩n ܰ@BD;q8ǎs7xGpɳ3^N*2#|0~{6 R縸$/x7,kt>tB ,b 3E{7+$,$[ڥ1GU% c>Z'\KĐ Kȭ-,Nb?sRqg^}iot򯝛FrHƐ::CVV 0(C\5[@zfwhӿ; iЕDdYQ<<=hG7'=7vCn|ϕS [gg(OHf; eF:n+>Mw2ٍ%BU`*W7DFYeӰ2"Ւ[pp㎵͜ ڰ$Js\m@G/^NU'9t GnzfJ"H;Vر=ݡOS''3:E(${)x"q>PdqT^.O4^2$9TZ7PZg] j+ȏ5軀g4%{Yl4ye`[}8kG W?U֬>̜1=^AH|Ee]8]DQ a#?1ӃVf{Ȼ+=tW LJ"XYwXLqHd=$bRNR,Fd*Q LvJC$2(hD $:bDM3&|2:}t݈A5sjD-+E{=, MpY}3EH}A"m彛 $rUyU{v:}K|];*7&Azqqgzb~N+.enǙSGgcuiiBvLIfkS)5dcAccヌԱK,6qn:HC "}FH:4,$MvduYHgGy_Yttu;r;8>W]etxӾIHRW"Q$J,1PF@JJu8^lޟw{.mA:E *[ꦽ4|h }"խm\E!Rpzj l*fr0:{r1kPe=N8o}/b,/hrIxv?&Kc [{ke 9.+%U>{G_FeV`R{c0vFM[fq ~>晇F~/%l@= uݙNNj# Fż0ɜ<'Qo 1<4dI3תO}q_^q(G?ru (/M~8"TWuc_K6a*0]Z)gR:g_fž};)=9ƩޞFO#EF6z$Ǝ~mhN灃ADȧ1k /מF/p|˳Ut-.ffmF$qϑ5wRz$<< g#.{rcYxgJ Un5`FG&^s4wF 0*DXTih؆Ip:5Uw4|w3*]sA8\Ƞg!H$>== :$HQ4:٠wn$wƎ,b{ : +Ri*;1˕1jOd VF{yT?=;(K;+zZ̨(sQ}VR#բڽwEꢎOyPٖᅢ'$@aMMU"4e8\s75cѮ Vb#FOiXZ SQܓ+I&䃿'͟uzWX|B8YѶ?UX}5<$#V٬cS/e*XU9<]!X. ꪷ7qm? ]Iz0/W+bhJ\n\*@:$[sW/*ˬӾyUȠRxuɃH~mSH]`Uz1;?#ru߀BifT(^·k}ߍFtu5eR]IײW>': w<^V[+aOɯg~w}*y^5R@ltbly .4]V T>Hq{! *@]Zxeii7N^PMHŋ|8&Pf(dzQ%3D3-4Щ@ϏZһrqKRέ@#%9E7gj4ٓVGm"0 mTkYOd*s>J0<&Fs(=OZ%7N208n4ɨZ"uqq6wZђU ZkD9ෳkwɝsk0~n @ё#C<8of8&o(_PrҚ꺓.<q޷G{+JXm._ǿGStg&r["$(A㯶Gc5ǀϲK޵Jt.yNww?s+) {%W!PGےd@ܙ. P?Su׺V|wT%2"ۿnz$}W;b\ `mO׫#ѡ=RP|'?ᬟ Q!3FA[w뷎hNi5o26O_IՎX)ȥX%jbVNwM)9>3´fOx43St7IDxڏ rοEn9S5O^}G~ќq5,jI";VGH%'->⽥9~h2-ēMwO@,FUdC B4j2&.{,> ;E%(YH֙{umj̅6rd>Tomu$r$SP~^msȾ{8Di83*dLkQ7:y9􌃑11P$7/ w_>tΠz qci~5j&G6ҌHV6q)V]k-BI*嚎ApHAʚ%dfr2@yӹ{p1Q|?dĶ Wn9҉Orf,Ҥnsj S?hJ7u_ r:f] ڡ(rWeJKkT1. *kH: ϟTn5@fs@^{ ̑MOƽ_-E e yXYwof?6~kMÑbY'l%Rf׳Muf}oK֥G&OD5_\:ʹmqU5|Es;U# :=WbZC6۪)n%?K71V3Cc+֕}πIoL~ʼE$."l'pGJMX8 Q>#uGj̫dzgj +rZnKDy'p2j {!bh''9/Zjvk#h6V9 dg<}r ء;z+'vl,y<`'<Cg3H1p8ڎj6pۦaUNOEm jʮ7 r[}RDys }rsպH,rP20>| 2[(5Irܾ2V1#kh縜&TI>VZgub4L'ƾH~e[=˟Urrr)FJ;-Mr 9ڄgcdiOG@I*G) (ê Xޓ`c2gx$>_RDU1 I>TДAzQ:[S,Cm7#d/#"IIQhi{۾" ]d>ցvj/}8R cʽ !zzySuڛ]"Kimc$wH<)z>]sυZѻg5ݬ* OMMvݪA(d^isD,ޫʙd :.~#AYOOVl$x F9ϝ4[I1neemw[v톲"}V=*I;#dsӂ>ʟJѵVڍ7xiR|]?UXG36Tgpv j6)6/xŽldc26{ާ't kGQ a>jw 6)[sKUAgv + ]N^=Dڄf&g7W $mh 1nx<ӵҽԑߴAFt#s# Wpa’\_2ʫ~6wyO cA3e8"DzT|rv;ab't[yPFL-qyppO *dLѡ&mal ox-W.+K 5(,U OeSގת-.aISчA/ݿQOP(n%`8iD&M1nVKXS!0FpX]ge|jb'/NM1v%̗{ɖ@bAQx=vN< J@<@Ԯ iאwe2F20״#Y05D#EEyeK޿ /7mvwڽr=pۆ|Wk˃Ќ-XCn=:v#4gHwdw\"Xz:)&f=xҮ!Y-p"-#!hۃM$.1kU.U _g`o&.Ia֌eQT>5GSC RM)dp4 r ]uۉeRݟ|Fy=Ay]q;"vNvO1ElY΀_#Wk(ψs D}2߼ie, ☠ sl$%'Y偑,-V!lӒ|)Qj YiV??!Yk|7 [ p귭\ʽx˸ gAlu8n-+ (',|' g֧m 6ٖ(ٜרbCQת=N&<*} pO iƝڻԤշ6(1Vz~WdP)p̎P\9,s`m(\L.}#t.^1`R;(PH&>P25Ѡ*7y+=H!UPT,G FbsTXOOTFhu,q,܌qւ걨e%W7laxxRE, l7پjB@Ȑp{[x(dnelƎZ\+[P@F|]'"cyq=b?٨vbDwHXjϷU+-q rwrSi P^9O7yo~ilI =NfquJ5;GCf=̓ ?w;Wbf sr0j-HI݀[-y {٬JmǰsR4k@9$4f+/@Wrhq"&q>~>~/fN"ᄌdm2FxĄN8 {Ogt 5 y,)ݗ {Ȗ(ǭUq*.S䷰7qwpU1|l[Xh,Щ2;q9»Y<1o1pqϕ0i;QuR*b+#rHf_꟰3{eX|[GqXOmt}˫^w:U;5+MmiS^UqI 60M8X砪L)-2gﯚ,Q CԦpYz?ckxt.0>{ mcRKqRkӦy$MiF\gvI/s- w ƮpȻr$Rs P-GSme (/U{K lQ >~ߍZh;N?ŵHNJ0ۇvWh,ΓTe@OW@iT `1\{[{>M-1BӰ0q"+69׏*vG_ĻYr=` 6O>t* zB*suI7"=wvK@.}#*ݸƯg?zן!:Ƭ|ğ ]W]v?IT+^ f^ "cAUt-5ѻdx:ce&Q>1}^_;u<&J,\p4dq2cMvO^{Ufinc8[[ Q-/$915m 2KxVpЮ !Ӂ쩶 ]H@<>ڣrגZ0{WpI|*`p:?kky;M"VX" "ns?U200_.LxXjbF36ѝN~i*|TQ4tY]tQ6Ʊ(A%C=jsdsCUQvgsiRK/hrm6d&3㟅XI©v69FyMÉt㹽qҤՌ]ũkPsξAj^m,0$ <ͣ-)4i|mb&_hYXW908H{E(r>DMIss$&c?] d/hm  LC'ƿK|дm&e~ύ~wN-ڳM#4(#$i?Xʬ6q 2vLN.篍LnRna\TݤP(OιӼc=Qݏ:;Gh7v_W CLO2\ Fd&1Pk lvp>jxg!s@\qJU-Kq0~{NJ,`a2[s~qhI8Hy<}6_Et{ 6x#GGgSdJL!;`3[Bƥc]yZ_jFO:;&vM1^01i(zSX|砻 =S7јsYOh֥p?6}}/\~keDHx@Q`=K,B}P]?ѮƒX!rGQJ/iHhhE)(8G*W'%'Ay}z-)}KV>ey.IBquH6|6T1a|Gƈ#2?Tݱ&|,roe؄=:6#myN_}R%e42J4dW:}$ đ؉7vA`g A p,2L1u#FH#(.y O9#8L.Pģ{8ܩx9:XWU&57AO剒P $y خc3v 'Nh]k6H.. C.ce#JA :M(%8=\Ҿ K|Qwpqqw}l^;"8bz [}KPW,x+U@TZhYz^ZE~/9cLԝ#v@YHlkց^h_':|v=y\F:ͻiawio\Pһ-|p_iv{ٹA晍>*Zf;{iı6oA>cϕ}SPlF\(+)s֙ir_m,hȢT1Wt˦v:Mk>o`J`{VfVj}˴_*[,qwQ>0Y<}hj~T5-/MӤ%{ȋ}NC֛ն{@v{MȒIH q5gXѣXiˢXO%N F $KQn+y*V<}]jovtX;W88Ki.b]qv$ ? ٞC.ip.b22Ooc޹Ξ7'7<{)n j7mBg?4{%SJpLpqm?Ϸ=FW}j??mO}=>zC5xZ[ͼs^Яy?eY\Aپ- |Ŵ |ҿs]4dWID?"g_&}P2O=ޣ18]FeN3}`>K׷)1J4;wI$.0&ԼlK},Q87r!CJFQ)oZk.Sʦ3Cna6{$'28Uyyb@*kvH4<,]ʼn#%e}GȾjV( ? ;Xwy@\M4&ڊ m8P#< n: 9O5*NDoHB1,y;i♭nURu+2u4PB0 T`Ep%9d8>$hxmmIJG(F @^.,#B(F مx:/f=?c,d$|\LoVɭ^ (B2 ? S{-[0F 1>+}_p_Yѯ}9JwK(ܜd#yK;M!o#dV<9ϕ'jڽf"T Igku+:B:#q9(fҴ"ܭ1]z~+Fg /҆ D#)$>^Ƶ%:t;~uBK #tǬw07$ (e{ tѥG,߫G8Jbn?\Gi)cgsZOk=Q; >-zfFI`c._ r[]*.Ie{mJmˆNӤ6]8>85uIVi50Wu[CI$%'9kR{hAEF9ƻ\$%mv2wRCgsW4mNF0G|ja/Kr+ 6۳Zjkwiq9¶wFQG2~[}! o"?w@ڌgnxAgahqq jq14Ga+o?C0YaN~5sz0M!!O8RcTŽ"8䝍Z o/Lw+΍˚||W/v1zG#ٽF9 W37ycFѨ RA2HH tY/Ri8]z}'#Pz[c.rA<^GunSd[! ooEm,yr*UOF&̝-29>cÓW^ا"xՊnHdlaųF ]1(2K&q'঻ݰI$̃qAfq1SFďCEԑ~ﴷYA?{9xJMeJ" _#ƢcGJ78KBY$U.="4qkIm܅kg콮YHv.ÎEbc>_&MX~ :.8FI籶5:Sv2 5մn!Y`ӆDžd'݄Ѭ5VY;]˭k 1dBˀWS).JEa cO<2jnu{ߩ3`wy|>Gamh-8'-5^S-TRGA?u?c-[TӮQ;9YWՈ#5_Q. ^XaOVeH8R<SVݬ;0oGF::6;ĝdzk[ï_Pm._12&XpKh9,0zɚM<x):Td7/tEhpoRh8[2[Wyfɽ۱0Sv~`]v5}Nq |--f`$2\Ōd"|pyh6Σs(zt[;@{*lËj< @B*$B#.=Bp=~d$0j0?ڢ곺(8ô/;>T @>U)oDF&y!F7.1V(#y(5d{±L' r<9In 1rA1W$O銰&}?(<@P-Qd- gכj@ s 䞤>J Oh+5%C|WJi2m6rdխ;IѽTq.QO y~y}\`|΃w5&٨Wk{Pe q u{HNwoP$qT͗t=s9PүCB&v/)~M^V)&Y{ĊD8.׎:x`#elO>|TOrl-GdVX~T5 }4{c^)?#T_h+ޅke_3T$?p~Su\ğwR>tk" [[ť޴pƇ~U@SYM?oJ⪚{e5i Tdr@<sS:Uv jx,R3GB WǞźLjE#qU.Iu5I.c0 64ƌv|2N4mgbwYSçƏͩ m,I*V8=r=M.3Mr[BIIo&&D5pT}NMܽ؝\o>abvP{*{Wbt@MVBV#*z Zɳ T9$f"ԌԺQ-t]ыo+.P[XUpv+S=%L-cOC4j^*qUA/gN2>h]K!dv lI{)rS[p$!fo,-\ׁC.Om*c?68A==.|cnQi7 #_a&5_?fx=*Z/.<8?*m69 kpic»hxL2eaIsL'Vuonʦ]{D9]̑#m,N+Ѫ{Lhy}B-M2(VDVC ;@^~v"kt IUWcLrz958AEnb(pL{ 4D[@P8xfSbwnǜg=L*w0<Ő|k]n N2S 4 g2l8xSMجt+F'8&^_4 5*Q5j= }cheqk.q}~$4>cxѫ\طGii$>WϾFKCemu-0.5.1/doc/window-disk.png0000644001050700006200000006477111131675406015742 0ustar glaubitzfbedvPNG  IHDRd`sRGB IDATxwxTU?2RIOH("4)H3@PkCQSkWt])z&- =S?&R& &TAƫi>7 禉Fd_)?;&̪T|e2GH.%b,|Mj5j|<]nH?6QV^.T&?(2!T8{5x{VnFn;~^WU YT,Iv~ 3KV ą6-n i"!L|)fFspݴr* =ҳ i(Z{]R9gnӟ (qH,`׆hz5)ϛrUx?ݴszٰ% !{Yh2}h~*迖Jw Isow*פnE W(³#"g햭&uc4ؚN˟z݂JġcW@QyPRj܅dQj2FmzCwN͕| n5ճ&0ꅥ񧞵Y=kťfxc5u5C#6{-]0YVVسs> [v}kJj׮ ˵h[{r֞Ӟ*JOd yѵsz1ҏ"-#Bnv !mk|< %B ~r.G KLۙ"Ck=_PDTUϦ삂µ`8kͬI߷UkU^kFMv?|~d6Z;;lv;^k=5xuԻ>]snXCP?r sN\|YNkCgi9~>ƅ+3N<( H̅\̦Zm#X&CRCfN.$퉫 W2).)EHHPkL&3wGQӯ4lOޏV_ڼmHVm7Os/=؏ww3.YRj cX0 H^A[=ӗrpws%#+' 2"jWg?ef璕G2q?})x{y[=m0[jSۭZ!v?|~$S[cWk``e|g,Ƚ[ B|]}/6KsøYFm ;FdxNz'f3Ͻo\Z{a2K9~oM6=n$-)=R9K{FAo9KizslI}ǭݺp5ăoOnlپRxj=糈 &,$+|| ;϶1bCn @kW O1o.:ƴ`0pYvDӰl"ps_tq6СU|,ġ#ǙH_Õ~"o 1ļeu@QsVrg!X$|V?q] * \ŕR|O/g쬯s}|nV/8χNqI)mìnjV!z=GG܊|3'.d&:^DrZ&!W]xdXtO}{\P&DNN>qm8|&s.1~@{Ci~sz9ScnktEEtok 8Ŷ))Tbɷ{ 0 btҫU\ٙb"=5&Dۺ nV[Qą,:c2KH gFEUS3 #,q:rtN; ʼnVX$}1GE;  Ĝ_Xg?#vjGDX_J]iSj!Vye5n}ٳ[ŤqExjWJHN< ED{ը9z6~= n'1-%/O3nV,*1Vk~OYY9 ڣ C{[V&LD mU< ȨQȊBn~>#8x*Y89ǤSێnZӭ va+Z$!=ڠ(Ãg/Oz']Y>3Mp)^6C4jgINE޽@햮ֻ=ՆZ\6ٞ݊K<\֚;dG!aG:Wjzhg8 QXXHH_N]\YɄWrq#4ܼ<<=).)!##89$ nzҊjW^ OJaYՅyV̲=:s9g.]Nkt׫ EQl?'`M}|&HL~A!/\dS$%dkojZ GY|mkۚޝC=Mt0~y /7o׏7\~9ۄ\j.?EX-6Evm}FC/HUEmP{ުEn]j[)QQn\lتoE]ϛK9Yw=o=1w gԘ[)#Xop{Jr1Mx[wi^+niˏ@w ͖ 3%DV O0yYa9s6g5ճ&{:,22s8z(bxlYub1WjdsJņ=gnq[X؆gq|\뽷s)'EQ0LcH2GnKlVU†đWiw^bܭk,ݺV{xX݊Z[ao^q]\]`7T\LZq15G3oi2ǯ`Z?w9]&=(_"B}_ddԟs߰Xr J2Eڟ'Oh 1MWb6!KyaxaFύIFn{" ԬBW4V7aa!H~RMeO|1l飫Ӧ:G-d;wX}Ɓk v+ڮoMU^m=_2jcL{N.*yyyY\Q\Us瘫Kb+_^&6c4_}+ V.k:]ҹJ4 ݯSUks} [(5_rZv5{]`UuFݍbRv65Z^W(:@`Wg: ߯Kd`O .,î K M Væ9ExͮPuMqk%#ޞ=7-ox` AJVnny|Z=U뷊B Vy dgef ◫3@мԸH@ p0 dU+sǰ;.ȵ(^+b@B,B@P*\@pSc,>s$ "#Q A7-R^w22v[th e!e}ddf[ԙé3DG A|}~wcQD4޴iތSC=@ ‘#8ܩs4IB EE 4 :&C>~Ҭ/t#00ӧw=oo:def69–@ 4z!frrr8z(+3fХk3gh(_?=ԫʲLQQ/^dZ?IIXw77@Zݝ^-]UaϞ=‹v]&OYj5K.ȑ# A;nAѣcF`j=zɓ&[w  GϞLyYvLwyyy 6_?ZlJF/wMtv slxIgHL\\PGVVsaz=_~9?yuT&Ç+헚ʊ+Yz5sߟý( tāX,Gryqqq={^_-qlg.^8OKۻ?޽{i#==Fsa\]]Y8f&MÇ3`]3Oʞݻ:9dYfmY5]Aap6%.16ٰ&"֫c䓏𰥇N„ %ƌgdvm,[1b_ߕEKxyy1s|g|G_ XX,"v9RZb;u ^_}+||͛KBB...,^ĉrqy/n1c8z(/2/-ď\O1DD+c,5eW:w̩cŹ rE4 ҡC{#F`[[škٶm'N$//gH O@Ο?ӜY-b,ްŨQl˷uֱnݺj)S^]uWj dչ#rmnH{ʷ2{v˥cLGvŊٹsKqK[ŕ$&HllkjWWWtbҤxwz7nO~ "[w,Xh^J:vϿ+^ w!$4<U\5.;ΪU͟?x֯_ow IDATe! YX :&:*gLe߾89ˡCڝ̢ ޭ;y8;{.&&G[S4-n7gxo[|={O<8s#6cǎb08ګU #Tde9| {&""Ak.-[F߾} gС?~>X,fΜIll,111|͟?[oF#_С:tom1m4O?޺4hٓ*kO>]1L8A=zt ҿ\.g…1,2|UlՈ_E Ю];u#//={01^9 yt _U򫯘>c';zE+/ms!ke֭\cǎ1zh~6mIJe8~8#F}̙ɓ'駟HNN&5c\xYfƶmغu+.]bٶg&++$6l+٫k{3fo߲o߾شiIIIddd wb (ϟ?s _(H`0ʥ˗0ٿMD^^CGYm7Ü0kxxxo0|0[~FBwVij~-_8ٳgӪU+{1f͚;S)mΜ9v]|9˖-#003gVʟ9s&>>>~8+W=p}7n/2}]^{~{+W"88{㮫^{RƍnzXX,EmDZb^ZEb"&2yd[!CHL\Zd2Vۯ&{$=R)Z/u-˗Ѫȶu( zӽ{- nѽ[7-Z(lܸ>#Glk׬fxyy1g*yhaQݴN+WVV$33R0233mgddZ)!ϟ?y1g<<ٳWxzҥkxliݖ<<@PPk֬a1X,M =Ĵy ɓ?w._=dShme/.;BsiӦ^}}}peK?W)… ?..EQؼy33f`~cDKRRRbڜY:/^XixM.67n<˗/^'1qseڴiq}U?_IWg>]w[c1 ))5!˒5,e1g Y0M](*4h4 P$XFT6Ǒ(  e( 9J  8_6w|g~RL`֬^c"Y$~=,ƌ41[yi|EE6qV0 nܸqK̙3WWWja9W^yW^yQDGf̙̙3EQxWɓ:ujmeر#}O>$yyy:2f̘?l:H/[{ث:+99^NCHUl4,lA8s K$c6ht!IrahɻbA^~..n>sO?&,4BBBؾc+0nLj5=+q?ǖ_6RM+رcHJIzZ*۷meРAvsv~FY|KʹSIٿl+c\M>}~ {iu٩8+n5_S2c ڶmwA^Lȋ/}O> /I=& łdd2b20LeDф$fCy,'Xl)AAdٳ=nqq_h),, u[m͛2Y5eJvV&Rχcڌ\6MQg9~0w=T ￿bgd4ljxx Pk#.䲅MFIe%kyHhhIIGIT=wWZSϿ¢Bqqu g:wlVt2K&dمLިe-ʥ!!d( &$8ChfuCQQ!RRZJII %%PRRBicci)%b4Eŀ c!EE蜜x",4 IOBzz:.=b.]BRQRRCa1|]჉ť,j=jqssU)!ټvJZmZ6Q*Y  {$-tStvaޜyU?˲ XGGO'IZjut5Ms2B[mh HHj5NZн4[eh4^ h(wߤFkjJBQ#ɒCGvgX,h4JkմAnZMց^,:C,ۄaoovV&>ي orʢU+ʂ#tۏ'AӅ,Oh$I&=-;ٻ7 kd4:uDrҰX&D%HJIt&Ԅ!7"Nz=ao*Ӆ( p.Nl4V^o?).*tw:Sg'??}F:u'ŶGr3ap6СcGb5[FATcl:m$I PGchZJ!xhi!hzQ.-mbCյhip sM :zamJM7 3hZO%3~|۵9׏ q й󋪥%'d谡u=wZC>Ά➱v&%'di"zl2`y7[ 5QTTYdgTcСIJJ^^ٻ(qϞ=)( ^IuMXiΠ<)|}ƅB퉾#.6m⣏>f8;;sk_@@ XdEˏOo~n6(w̞+rRN,[L=(ݝ]vC: <@6+3̌+9|%%0''~OOcܱ ܰa {ۺuXnuiH5rrʑea)BBBxvTvٍ^o 7/1ٽg+V.g$.Y-o!/7gW0~"]=r\]]%zIߩIlܸ>}:0nYSR9 `XoоC !a((,dׯiuٱ˹;pssϏ3I]v_xϟ,X,R~J[cͳSo^С}vNft֝\]ؽkWO-)dOĖ_͛3Yv->S ̞='xsrıcG1y*D23*}V˖-v,Xp!+bܿ.\p1,2|UlՈ_E Ю];u#//={01^18^@@9v dee¿ͫW_1w</N{nWOEX|AeAK0wߝݰ::t^zeKV 72+VO||<>C aÆ L>b ,T^>+ilQ~ƒ,+>&zvxt|}f~| fHHPIRSS|jg<3_%~ ŌEmjHHɓmC !1qj U* WKCU(hjbA7pyw޲yA=wƢE Q7~-Ռ=///ߕD٩qםCXLBJJMȲd5rYYB$fg ͬ{4MYw$%'|2ڴ!7/7W7?(DGE_@Xh(wlGQ`Q/>~T*\]\d9N|!Ξ;Gtt4}I2[z*Fdx<ܳ3҈foAx駹c^Z]v+>?w777;TrEQ~U^rr2/4V *ݓiX$ ق,e,#I$c6ht!IrHe㰰pqqӌ/|1aa[w;FIV,7vƎSgv^!fԩ6*ӧOciueZQxǂCn$SR$YCR ˲ (M&$IBVkT&ȲhM)**a'Yl)!!!ٳgwOC0İyG֦| 8`0},^;'о]C}|g@`f~SmW_(9y'C sX:zaχp6l\Ovv[6)9%Kիf 믽ٲY@ ._";(u?oowHR~'??7wW򈍍e=D\{IAA>.nZvss#""A1yS^ 5}G\6l~޽pqqak_@@ XdEˏOo~n6(w̞+rRN,[L=(ݝ]vC6 Wۢ"N>%?` ?=a7~M IDAT>c| ZayGY$5~z v]e99YujqpLm씩|>&8>>;"!2TᷟRDGE씩۷''=y9th߁]Yx!ݻu'/?ggvĄq"8t &-v&? /7~?w]cTbBBg'`y87qQ g^{J^zVfFUSwϿ? n*.\Hrߟ :\%,_丸:7p5rQ>p ''99k׎nq`pf=LLסb|]! {c7`0NVV!!!k޼J_~scDwvY˗T+/Dy ;NnF Q1 Xxy2d6l`ߟ+V`0VJBR!+I@^^C9==ooy_7YÃ7|bR~ *1@jjj/ZdefPPP=֮b bb}QZEb"&2yd[!CHL\Zd2:~Jb$=vI(hjd: f ޽{e?ޭ-DQ6nsSc#kV3jh3~ cݝs_BQ귆^gD&N 60d/ND_ê sii OD]. M?u"kCGPXI)H/@n =mf?nRH#{ޯ׼r3ssgS;Dt]fڵL?˜ٳۙS޽{yaBުyȾ陒RW}Lfμٳ$))"+\GfԳfHNJ?wFuR)/ >. t89$4 jGb"#ݷڱrmsaRRRxWJɚ50~DTCE0q07Ut\=j*jű}s&c\ﺛ={̨Qx7-]/dL&<_OjCB^Urj:^B*p9]yGPPv&?gd(9qD HI2`XqY1TWW=UY@Ctp ~RZ7HDkbzݞettwLUU4MQT())gӉb׌n3y.n U0Nxh(ӧNgmkd@и蝦[gkʶm?a)h5\ך2h Hё$ #:k~d!>>EQB `ʤ)0ˍ¨(5 `TINNfa2,CBB0~oN;DVkPl6&DzIj7EQjV A"wp/37/yugM-IRPӏ(XV$Ij 7%rv AwzDJ7[η vDڻ@CIJtBA}1 Ȳ_UE&͝# $(;F\_pQpyE'=a0 "#w..:Ippw$o, @``0yG~%6{#"(>B;MM{ &DХee,&MZ+Ⱥ*jۭ>z(Ddxdv4?C4 -CeӟУG'>ҲRGrS4FAsjUw@JGnQ7Tngd@a||je4sÇo,ڕVdڴ =XaI\~B _~|b޽|ww|R.T|M&O\+ɓy7[&i^zڵѭIINYٺL&?JJӻsxR BYy)͹L6a޴:[na7{lb#s!>tmm|Mg{`پc}_~مlx/:X> c1o#fq $K.+WOW^ҥK[]U&ȃ jt6zJw؎d^z1x`J1-la ӧܪb|^!cfNQQup,_!y}V ߸4{φ (**fĉm իs>ӦF׃{Im$e3mtfΜY,[>dndꭷ|#ȧ{Mj>q1IBBg׼_2dHjcRt]gݺ<8AsO׮a1Ou՗DEEޜ|vuPg'͡˘>fF;U*'ȾNg5wO]Sn6yY[=rrY*z@t]3q7\p8ؿ+V`͚|yh\uN0 ::k2a^/sfogNz:O͟O\\{充 y%C`` gJJm^k,mݽN h#Inl,\9s朷W*w|`\w5\44jMS}fM9hlRUÏ>GfԳfHNJ?wFuR)/ >. t89$4 jGb"#ݷڱrmsaRRRxWJɚ50~DTCE0q07Ut\=j*jű}#'{ȧyj[6 bOluͷdqq^UZqMPUUȲҲ2TUk 7U.''=(+/jL2P^}⩨ 66ohQn 7+<=ĉ8qB"""8-%1gZL琞>}Ӓ,cAW TUU,A4 tMݨj k.MA@3͞={YJbcc)//jq!LAux7|*++M'^btK{zlNmV ]q:]N'.IӉpPpPUQUEÁQ]?zdEnq}N߾۰(*+3wcƒݎnf1u4!I2UDFFnO+,A Yu& tڐĩWܨ?-dvЁ*AA\NFxDaɏG6xN8QR X-n~k~Lxx8Մtmv,tbH ~RZ7HDkbzTfx;*h*3Ɍf;f<vq7Htt{wp\dDtCC>u:[o]Ő G[gkʶm?a)h5\ך2h Hё$ #:k~d!>>EQB `ʤ)0ˍ¨(5 `TINNfa2,R/$$ '[;ﴱHLLjK=EQfkB$jn0$vSvXkdK+r 7Hj@^\b^g~4 :5c( VI.͸Aɲ~ݶB8|I0҄EW܁Ȳ\{bBմhNFl\hYsYr^z)ȲQ4a̙3"Nܹs,%tN.9п?P\ܳ'E6O%o%o'(D9(wsџB`V:aI6B=XCsNƎۥ0idv؁'uD9;;+q%PQ^O\8|HOO'%%LXX'NomМfFF<aÆw[mITyG,٥PXܫAzy^w=?-o$ nyHEwV=:vjDQ YSf2"JJ׷:11,_^LYi)flӧ7|C\\lذ'|V-$ O?ŋw Yq?>Lutz=P 0z '].v:̘dL&L&'Nb̏?=9H7Oh%塇q.oF}F%::f̘AEEo5[d򣴬>9/e!bXٜi3vsaz|XXSLai<=QQQp:y,^V+CeǎAm IDAT6z裏8qbo4\/!Ȃ Ǐkȳf!$?5ngAW_eG8t]'<<Ǐj<OS~inJnn.f?w [;c2))-W^ 4Rf [~i77*#F#;;z<ڵ͛7o>=Zƍٸq#'N`{mT nڢ[R/!ȂNOEEf]ב$ I8Bg4xNPd(,#Ic6[TOygn-aɒ%Kҭ[7ϟ'|eqJ؎l81-l۶oaذMkժUs=Nrr2锔ҥKk3(( _&&&Fzz:۷oo5-X/<裨ڬ[R bȂzz=ڳ`0|J݀~N9oDuVzo|U_;"IhZӮ:??3ʐ!CjEuK/-⦛n>}BnmE6jvqMS馩Ku]kM>z YЪzEt I 5P$/“DDD w2k,vvy֍NƍCz{[ Tou 9s6l8]w=y/x9;'PV^0u4f?CaT***%#{֬=(?#^!]4Pj۵i{^z3| H%661Jۭ[A<#,Z緅 fͼW_k*$r}LnweO붟1t(AN'ډH}b. VWH2+ ʫhcޝR;XB/!_}[p^'66Áj#//)&3tϛ=|0|f? ǎqر]5R\8iyxx'hۼ|ɯ7j 6j N'/zp}͋>oC~9L qA%i Z? :Ғh}a=QQQTW`Y;1'!v]ױYmL2+EeU%[LkQeh YpG޶S-x`ĈːvÇQCC\N~t^GelPPrG^Aea :%M\q+NQXhh|F">.'NzuߋS ׏cڏ -ns?ur}!Ȃ. U݆-1TJwqСO hV[  C4LnHC)-1m^fkF`wÍDGr:q\].TUd2k:ᡡL:۷q D{ AܶZ`ToN'岷؟y7=fP2b?lV+* u[ D2R&*.j2i Nˍ¨(YQ0* $''c0L znrht6ğӑ֭vy9g2a ;CR{x5^B Z`?EQfQUUUkP1 (%IBQ_7Eĺ}BtE c0w Js`8Xz1&CM=$f~T?d<Շ1Z DDt D<'rV6,h.No9ҽǭgչ~!Ȃ ItM\Н U\.l Aԍ" Et"N uQ AAeR$+3K/FhX8d ӁhlaА!\N¶dA]Y&2*ToJyYdP` 4$"E'YpF$bbbzUt]\~4H(F*ׅ'YP]]1bU!)ܢ @@  A64O@ t Y3yL~[IENDB`KCemu-0.5.1/doc/window-profile-1.png0000644001050700006200000021576411131675406016606 0ustar glaubitzfbedvPNG  IHDR(jJsRGB IDATxuTϝd6X\:/6*6X`! `lTPQĖ];vYr֜sr@>U`=cB! ݹG 𱯪$%HJK!BRfnfV<u`G;EUUGpr?/uK2֧ԛGQI4rz \gW~B!p2u,+ 9K!ytw)aΑhA9S}ۄl\g}1B!Dc2M{\f ~>Ҟ`Ž(5gFt:-{wGQ܄:@o, !\brzEcxkAN !kF] ^G^]Q0-l۵|&@qI) +; M_t~>޴Iˣ^={sYI-t׳Xf/gьzh EM!M\+l`+[o?XP؃7~HR>Y*{f ˳nA}}xzbMj>(>gzl@)q*fO~I3/.ܘ"8mBT-'-y(w7Gbƽgbyיya$d+8Gd7 jGQOj2(.)AOBl zfnDQBj臗'iYhՌpMh0M&V݄No.|?G޸;i( u{G+.,LFv^t¡̦Ԉ^#$(h2`K[жMd3h;Ǐr<#omEl( nJM&mOҋ{}M'_d͸ߛУMR8CkhM~bTBI.;-}OI$ﲭ+(2r?ҧgg^Ω}1G2iItd8u'&܏"6mnKU͇&</=>}%Wh ͌G~p,7O76mQij AB)^|q/&\HNL&\{UZPT5DƠ!DIl /nĦ=1?ڶIݝr〶|b76W;[*fm;:E0{r][0nx{x㛍Dj~ ❉! ”22gGIB=܈2<%%Df[9[$݇3_/NfbOU`4Yxe@Q~%3l;Ɛ=3>>u7 q1`ώ\x &%77 -(gWlb辕 оm\BA-(t R'tRrĜow3D&] !ąjU)))!>2ʐn-ZD1,dg)! Ih=H˨@~?2ntlF^a!]lG2YAeO-.5hCnA&E zrs h8EĔ) Mzu>ի{ i-oUUs4T=Ml_>q3ڴxJ*!2ćwxmuNљm#Z| r)OZAAAQFx2͓4!(S~ JaZT(.guK": ֕}+B/,">V΃|n7dbل-(,6h]ޣ33۩Cz1G"t ʂm$.1yPj,eĩ`ӓbbŖýMDF>nnnt֩j5VR2l>֍SBoБCQ~,VOw}YeBRRZJh-)YfeAU>q Uog,C7^&~B2{9@ڭ۰B ҽkG:vFdVj^n^[ouЅ®.cY<˟[}? Ҳ iMt9PT\Lzz&1X,f=* fש[beT# ^^)eHzF&qPHcˎe ʺ [|*u/&w77BCf#Niusu!Xxپ>~"lA˪Hh&,}ysd`,Ze&o#ݖ⢋׆M[ۃSRk;x H\,9B\xJ![X6!.u)/>]A; ugxc:Bl?7Ldè>>lޛJ6\ѧKVÝ aԂwnfA>Jd.dAjj:͜s&BmݥvAt!!:Tĺ [wt|:Alh*|_87w?TU߇u;O')m}2CuxGOo;c߾Cx:(L͖S-(Dz L!Nє$b\ɄܱKY*@:ݩ}- ObGxX(N67n۞|*-)C!6~^,i#o}3kuo7Y]KnaclW-(ZSN% Y6.>>>tLj (oƱNEC}:th[a]hh0N猌lVaNWyϯ,ߧk"mFCTTQQg,Ws9۵sާ:e(~\ւUಋWue;UT8TnphnWi3ySnB!B/JL_v-Z@R!:G?|ٵ,5Ǘuˁ'B!B7 Jt70p5Zck(5)(~B!BWPKMf K]lQ$@B!B\fNA>E'+,B!8ZdZP͸ )!B!YqQ B!UGJG!BQ k)=!B!D4tx3(B!5sƆ"B!h2$@B!BH"B!!B!bj9uRB!B2/zii(BhP:3t$@B!B4,^9yE6-‚BV[ɲ?e{ս(B!BST\ 3_B~=NzDnN.M6E!B0;Jڻ+bN;AVzy2%֣(B!B*F^mhll[.k.ǝVuPC*T#00:0r\{5(dޟ3wPPPdf;Ҝ^i~\mB!Bt1J;&rIF^}}&v 2Ͱl&--cnl67j!.Z︓իאre !BQ &.7CcuYY<ZWu*`69v ,dY,gqmB|x䑇oxB!<(). /||}Xt1Z&nz9Nd2[jNGLL '>/ͷ4j!ܹ|Bp.]B!|}IOuCifbc$uK }R PʻkطobQQQY%WB!uh оC9Ǵᢋ/W^$M?ȟ{%31-j^gmw>ذqJzIyur9@:dǏ#88y+{] 3)--?~ 9y7ӧwo>:+B!;|-{%84Mk6Ѯs;ǀy/ٟ,p-w<@Y{\n:u~M7s7>99dk+:vLj%%%o+n~X_ŨQ B!eʢt bZqFB @UU HKM#*"g.NL&r+۷o,\dj C=j呉*0B!BVYg?GB HOMm7 LE2y@=z!C瞻]n׷/  )))$&&NcI.zCػw/ |ͷl޲/O>.+=־m= ٻm :ԱIB!9cLZ>&~^3zw{Qug] >lN66*&Ij!BqN:v^NhD(.lXb)i4jCvv6!!Ƿdgg;mH^^^o3LB!B JJKXv5G Y$ёyxz3Arr6Y%mM6@IHH`ݺuZ+>+V{jժAҺuk֮]ˊ++B!笿V|b?#7;777='`Ïh4Ղ66ՙ(..f9PF%/xB!9KhE.}Њu{ :~'V,_{xx7jlrƮ]bĕRXX_#F{n5kޠi[iOrr2C gѢEddd`Xcͼλ\2p\B!IJ޻];<9Z1]zubsN~ڵil]ƛFi& g۠i䫯䦛F1w.B!)_~"OFZ'38q~t ^ObD6HpHYI)b׮]Y?{|9GDGG3to|[\\~?.M||<}zꫯ+_!B49EE?4, tIƭ(.*@ٴy-{JmR˜6m*ӦMv';{+WB!8gˑЊk.bZdeuIvnYIN>.!B!oaa|1 5 ];uaNjAQpu|\B!B\xV+$;,ǭ+DGEtI B!ĶXy=6m??$H9B=%@B!B4_AIPhcp<@NV⶛n묤Qx !BqyH* hZFrrسc..>ki!B!. xkO_JJKۢ#yx܃t嬦Q!B!. AA16nV#$(oo&> PB!)BP`AAM*]2E!B!B!BH"B!h#$B!8JAA>?,FJI!BqvACK !B!AB!B4!9eӞ2ZP?ߚέ.B!hg[NVE9hZ9|<ZnB!F,&VUEUM(h^^GTHjAX6pZQEAѢ(WvN}>cyJ/RNy}|;WBltVj9nZ⢂1߯܊1(9FK˄D}^Y4.@!εEUUJd ơˋ1UU;z;v_?۴Etz}*Q/ya籴BAМo'6 |ڶOPpZͫj%#=֣Ztރ ?RI$-֣ Rb2ر#Dp#|AZVRSNk'b,-=--M7rqKkX,ˊFNWI-Rfy*Xq3h0YUPPϯm۷gw.<==(*,I,mڷ'yz'5A!Υl4r1:tHphVQ*ah {oGZ,lۼH-ZFճz Ck]!oy5"8RPP@`PVǟ@A~>JaɦELLRT,l}&Ky^ߞ]ۘަ@m?ɟ=Bs,@ 0M(VWUUX,g^bf&Ky^t uY' Pj7IR6Vs[_L||Ӻ_xo򿐮 5c/OK~Zł? -[Ѯm{}NQp5WsmZ _su&,V`ES^1ail1p5{i^^|~&%^ٛ;FE׭rg'@icZr<}ƳB\HJ%<==QUif/UVXJKCQrSqssl2QU+R7m^hjEFe\&Aǟ<:y ?$W\: ??r kV}v\HnF~7neqwգ{}ƓF!8$7_-`-|f˝F:;v=3b۬{:G7X]e¸1h?ENv6V`wu~oYRU ܹxe,4{upչcHhْe,uQKUU ξ}9oo}w>߽{7q'ww`̜55kRXXD֭7fK<3u6lk.<7YbccZB{U+Y4ZiTm)*ʣ"}AQP_0RV3",VQزe 6oaӦMlܰ 7<י_7nWˣ0JHb1SPPn7lXYͤ6m۵2ng-gZ233x錾s 'SOXVy>]ڷԪk>YOll0[TG#kd|ծkm-(e<쳴Aˆ~D(\{,^1'Nkv矿3bս_}9F!* ƒZU+/<'26EaQc{Tx}1{v!y3úukۻ ԟ].h yWb/'W_9&8חʮww~. :jzk;5f4rAn-gۖML ,qwڥ WҩcG&<{طii,(ArQ*V s/0c?  JPPY_u:zE={qE9-}zu-kbcIKOG ""#::K 66dZ";' ^O5Mquyw \BRx Nq8SuB ps'ЄBjV!yFڷcڜmFMRnrPFQh|ͤ&1n]x)bѢh4p~n4pww'=$4oo8-v^sxH|}}xgicf:ёx{{2{)(ՙmټe~4SxZ>KnfTUQ/*T֬_Ɇukc=Ɏ}}ovJܘʫ.+,]u;m\52L6lYljhwksd/_o.Ni?~cEZxWil_UYU^?+6mXg|Ve<1I>;]}U\z39s#77̥ޣk$iǠCy9f P8/[Ppbr*.l.|oAFSԥm6r;J\l< -[J|\<Q۟rKѭ'AAٷ7}rsri]u9׹df>Op<}}7H,$BֱL|'Vn>h],V)OoA.^e-(ߟyWȱ|{h>?2Y3_j+3BQ>SO.1=ue/%%޽zHhp ۶&#=阠 k///f(Ri #Gغm_v)r٥ٺmGu*ө>MXh(}';wp+Wŗ_ڬu~<aaP&MȲ_uY ]R<80'WuTpEa̙;UUy\3Q}\O>9@y'qO\“SNm)PFzϚ:;cFu ʃ=SS&Ӷm ۳s 8})tڝ.z`B~rcݻXo[o+ P8թ n^a0yT:;7V4 UE(h __Ǿ^QyAt|"ɑٷo/(b cE$?VTVFLAQ)/!dZ7R2 iEB挛O]GĈzKA\ˊWbNEQj6iXUG+BVx鴌u?|p^"/<o֥K+TUߖЃ0lX&,,_-YY:{~M/ʢ}R 'M|qNl6;o<;9>7ؖz$C]ZLk;#=P배P9*f2xkh1ɻw37Axxup222uWFzϚ:,w&MM})O=ݺuuɓ' >#F\ǟ{ͭo|\̘eW\cN/!λE Y-Q.NbX+Z h NG>jlxi4ZVmF/ii×S㡉kֵ+iif i֬v"##__f R#kl Fć9Ɠ]a}|(1+|[6Jz!SS&1bAGTT893ϲ)-ZDrdz z |:^|EYmA\fttSU%:̏_@.kAq\q3޽Djj gϦ[nW&NȘ1cxͷpw38뮻4iqqq(ۏc$$%;䑇_&::={v3kk|ᇎ}\=XZZʢŋDFF:;vn[?"effh֬Ӿ!!!|gV N?NTTTY:9mιm^疛G)=vӀAAxF= _Ȁ:g8t"U[^Ube2rhۮm6* ++l>{ad{]Q=z{y#Oxx8 ?v_ϨQ79~mamA?ěoUW]Ijj* L8霮Yu(K:-22vm/pUV,'< w5Ν:U1u4&?88p9>`+3*gaLN}#+3W\5}'cFYiEzСL /<7 g0|ذSit83^MEUU^1D>vxyƫ_UYUj PTU=qT*dmKzٲeWiԫ syN۟{_ŹCLjjEтr-4[h$םҒb22HBT:}|G}~ӯ_;?xbӔ^{^{c&NĉD4-?WrSu{u_sq.+]#G^ǜqUV,lʖ[yg۶m;#>a]NLL ce34x(^^^r(V\^sմ_qL_zaLSi?AC?px\BC=N~]eFzϪWgХsg>7q#++;︝|0w.o~^[;px|tؑ_tl4b2 ((aC%@| P* \JǠV+ܼbptTf 4kzg1FFTq]tESh%Q_t~^Vۛ0V ϑ#G`0`X}{KuC_Y}}|< nj EQy9  U1=~LD2)?FSWكGpZ~NU1V,VWOuS[^O~#' hQ+ve4>Z4sƠ(fj>\w5h3_?.UUٺyc}ʯۺyc׉m_O^ôϸ|MANN.`뛮*~r~{*,*>S%yefRl2ՙ5!3WqI9JH03 uKK8ƼFЪyPNSvHhύgT$ՙ{M&fΚ嘲i;{$BQZW+e;MFcXj}suԱ3:vG3y[-ZB sV"JKm` ^^^W¢q @Z[SRR. b겷 54yM<(qԵ,_/<{#'KZBPH0(Gb4[ԲZteoS;/7ܻA&."W\y5FcuL^ !DW]>N#n$89ۇRn]!TÍl6S\\Lzz~NiZן7WZ_h4(.VNsdg;=M'@-(4-TA|n},(*MF2xlYm…\iAuӍ u O!s*p׶kzrPj0pcv2-i{}xgyJJ x{{W,G(a)RTTtj:\XV|43X7l),,t9j=WɟO!J[P꽶W]~p~ 2ZiWVZ-nI2O6?fft#GЯ_?<==Hf4 w77[^,5/ȈH| V+>?*~{`XSzRvL&%%tNj$=gb䣟uH+vV,(}z(?ɟB*%u7Z] zs=-1%AA\w,ZAXX(m˳uhڥInddesxrHg.4k/nnn Z'7\]ޅbZ4vp48~qfS̥=$).EQ-=.\P7];v\p_L{%MKKMP@G|DC*4VTca*5 P\UXEAWֿVX_+KF`08n2=<*{ḍZISKB![>>dWX;S%DӠTVbki`ZcL_q%~)O)O!B۴ZQ P47ixzy6jb Aj6pBB5=Y֭B*KyJy !T4\ZhCA~>jmĨ|C6m()-=UjiԎkWZ9, RSSYf5۴A}+I_SS!J[Pz=~Jl͡)((pSђF7mڶ'0(‚|ǯHlٴ:>jZ?ڵkGpH7:M_B!m<jht Nl`^Ol\Y}F"NG"KyJyFF^ IDATBV)!)G]UҒRJKJ=c*3zt:} ڴmOY$ {Hy^)ξbǺukI9""%VKhX(=zeV{OB31?~\ZBdZ9z/_F@` q֬B,%+,xA6nHzzjѥkbbb Ȫ+:2z%"⌢7'<~X}{b2*Bɉ'Xz5EZ-jSUT&s8+z* z7""#Jjj "sBQ=-bbHM9QwiB4e,g^ţ( ٌdd4RRRLqqEEEFLLsT X,ҭK!DiZE= OB_Lf3'蘶m;m)k͢vlkEYwnpu&rrHlӖ  AJfF:o-n7ydbWZZ^_X_&6logaر>>?iZuÞ+V?_~oN,[ OOO!//oҬYr+uuǎ < XEZYο7RPǀACOhE= v 楗^?tjxԑnf<ޝEQ." *xߒWijY^iZ'ZR32o+[Vv}˾]^x၊ܰ@7V@Qc3ggg罟5kQf-""&lZqVfk?,|ɓ'Ms6.Q=AAI_}h*Z};s.֬YKmDN9j̞:'j5AvvvDEE1|p.]J>}-ZDxx8>,>>>ТE {0;///?~E޽8ў~ɒ>p~ǎ̙J|{&M'|B%lݺ޽{T~]taٲedeeIddC֯_OvRMSaaaǵbaϞ=o޾Gw^vAZZݻw!YR𱟟_~Hկ71c &0(1cǒgOPӋ ^uEjԨY  2,ZYa J 4a3e69lJj*S_Fǎֿ>{6~_}5s漁}MR;3w"o߶:ꊗ^}ա`Eȑ/ EGGg̛&AAATP鯽M,̜9&MږFJn*YfvZׯO Xng.fb _7rf̘o^uEHMMe޽{ /r#GkQ"##5j[#w(oD >޻g/DEi̚=ϟqf:@fF:Q GbOʴi ,Nͱ99,Y1XK.b¥K;Jה)عsWmw#Pz~TV˗uss+rj?NHHMvߠaa޼yKܹ6._:nd„ <=zGҷo_Ə_(ݦM]6u)Q;v`СXZj뽶LqRw}2o<ͻ߿?|Я_?B]JFta9s?/7M\2 /,\0+Μ1 7ʻ&D9O/Wc=sZZs9㸸8kZipqqaeDLX/sÆ1|p>DʥdΞ9}eCerޤ4=S,Y{~a[x]v1~x>(v"##KbÆ =͛c@رc{oq Æ c > !ʭ"A1+IY`C_J/d_Dr%4m !(+Oǘ2e*K)Sx>z1t^~ezш+qBDDޜ&ժVĉ,^kw)j* kF4i?8GywwwbbbX|y֭ҥK}B미ѪU"d{||%m)+Reddp)"31cZqw(rw)9iMO\\5kٳ]9Em /=>!ĝi98_:{e"{?)Sd_#F O:{xi2@ƌ7|{[?~}=v8isxUrI,y{W9!p̵yl64[٢^?kj;o;o]||MQ֯[簮GѣP s|nN1a&Lpeu#7hЀ;S|ASׯnoU@v}zռF;wBrL 'Ou<ګM(cnjaid$}$j׮Ĉ R"D9mTQm6_ يͦZ)(aä Ąʒ%YdqSqu:ǍcqN !W۾}H B!B!w$^횉6B⨪^E!DtTHŋT^] D! ŝ=K[qK!mY+\]]0B׾>ZBqwSUS'r~>DZp5:ߩ̏uǎ7/J>BOX,deer95iL(H6FRB> .xbF#=ϟ/1L&B+q͆^$B܅խTl[znʖ-[P˖-[#0MV,7ZkQѷ" 7`1M)/o/~Nƍ={6 `m2g4iBڵ5j_02duԡf͚ 8&+BP4YdEY_&P:v;ڕ!% .wر!*UvorՁ]HILQF$'93B¹֬\Kw9:|^O?a;p!6ópuu77?x`9pkfƌ7]E-,DEYd.[ұcGKx K d˖-E/JRr41{}9+6wqJ"+WLZZ5k `ʔ)t҅7|ܘ'תSɩ~BUU~a! 8zMx! rr80-^xukQz7o^^Nbݺulڴξg={6UVɓ;XȼF# Ν;ܹs7lؐ+V0j(ә>}zEll,! dff2w<~.^LB k׎G ■}IMOX t{Aw"fmj֮ @vvǏZFP4VNv61<׻ 75j7Rj0ilc+ .E˛̌t.o/6nLF.gB%U[ ds,0ժWj}V]qrrı]l6셗wE{ǎk?!r/|p'Sqww'==۷#yPn68prrwфR<1Ⱦ#t}+^E::օ 8y$:uCp;v,w&.._޽{;SPnرcϟg:W^~lڸ؛v\rhd[D8ocGquueYܲ%6pT,O˓O=~~5gNwDLX~Yq/#AZnCHZdc1AӸBHyM&4 4 j%7'<*p12321L=_AWIp*RbEL<@YdAgTվBZyyy1yf2.gжs[rxa.]D=Zgqswc/;hX|UƄԪJ-2u*~x3ZӧO믿HjJ UV޺>3} *T^cMi,^Dpp0nnn,\a]tts[_۷ҰqSWMb'fի߀c\?Of-\L4Ξ9MZ2ӽB2V䨺L7w]{pq|descjҹCg,g⺼6UM{Mӈe<7l8_%&F0c,<scر&g .bxyzƜ7ֵkKHHMv0Ws7w*j-6kՆG;ۿh0MLh*TIt:N@~7mdBou3?$%sgc"PyQi=Zߊ:! b'jm: 7;Q{|2Fbr!n(ԩS7̡VF֭s|ٳ_g=DF.okѢ})/0nx)vl[^iZ55kbUDKFM)U8*׶tUe˛r?wcZE'weo86YYY:qa(t o߬*UO?l޲6ƆXxn_Q#FĈBy|w\t UUgYLH&M}ۈsq, z{{밿C13gbZ9+nǝIz+Ҭebr)پF͚?zDf3C݃ӱ'HOKl6w4UjJ zB!(@AZH @fV&Z2ٯ?bk֨ re#G@-[V_Y !Myydee@ΝzjժSO=鰾{<;xgϞ%44+Vڷ=BNNxwq eRr{ҡ IDATy~ yBRѡC:tpt_[+e>}xOפ#81aNc„ L0ٽ$S'tqxʽǧ/99FU[\ EbSL͇MgfC0Ӽ=T%'[jO,ѠQ:=_f?!fgq<M(JbEDuVGnjp95iRSRBҺ_/;vÃܜ2= P*^~:N D!(!EQ-T A תCaV5d$ Ո5 y&#Ngyr /TܠBr~C&@9{ܹt2X5}xՆjFT,f 6ՊZ@5V+<+yc(B!(+yʈQ/aUثQ&fCAfS:3_/< B^!wu^jPn^D\Y|}}۷jC4t:шŒ?W+FyS|||=u n >?^-gB\(u$8BRZ$%&z׳(srFUm\@tt4?9w&QFLff&:!4 \ h8x𰜑Bq/EB \JBͥ'6 PVYřO?3ϠLf8;9iԨzf9Dn ˖-#6 E!3A8u5kƣ"# !(ZvvgNҤY &X-yxfZ<Wf>}4O<̟?9Š+ PFE׮]Yr%.l޼AFTT;v,F!J/o/U"!͆l\(yVJHj4i҄*U*:33.:%33B6Xb\ M/pn7Kr/ZѣG3x`-[Wll,7n`00n8}ݛ*(  go( & $!LՌY1[,1 8k zf'}deeiҤ {0\w(I&zj`֭<7u]taٲedffex4jԈ:tҥKyl6{n>9kB!]Ԡ*>UWC EQBQ0\ 텛kfm`UNRQFrJ4iRh[ZZMO8sLz͢EfY6lo\KUU?IIIa̙۷:u-gB!kͦXhb MPfZhIKKbPV-7lL`@&3O<+W(eKܹ6RSSo#""ׯ111O0a„Bz= 6dٲe[ξ>**PMB!w3قE@L(C3-(^}6>(Μl6L?dcO=>>>Mʟ-ILS䖋׾cT !EPU^Bҽ߶(ۡ>t䄪:Tެ]{rnF  Fb 8( ZKe,yyW%ytzlf> :iYM2#B!(<^~h f1ĝ91H0[,ǝŪ1蜰(V2t_ 7#LB!BSy;9 `p}PU [~_jjb6 j _Ug!;7'R5M!gB!E0L׺(NNbe+SAg~ʊ+HLL"))1?A:SA&M0L|\Y/m4MB뉍%44mkԍ ''Zmǃ]b̻~.@14r^Hq'5B;ƪU5j+V`Сe ܱZd4[ 3ѽ#no:y{wa4ܖA;~fpוUZj,^ؾرc׏ʕ+N۶mꫯĉt ///֭'NpKJo#ƌٳg8p!!5 J'ҥjH|Yb%M6Ͽ}U%y-ZR%0N;s!||TUٳ_^TV#FC?L~0`}ٳy饗x`0кukb:v/2+VbŊLp~GcpuucYkyBCٳ' , ##tϟO=Lzj:vHppMSm۶\quu%**-[:oٲ%QQQ6ź]| <ϟ`׮]Y￟1cƔMCʕ>}_2}t s-}Ew"!"ɉ :$s0[̘Mf&//Ek";ψNlæt>ݻw3s,:lvD*UͿ$ϿcZ{ maݝ8ʠjbZܶ9r$^^oöJ*q1USznP xW~{gRƍ}WRVM̦7m>] 5B%eN=L2vl_(wBף)p4M#1)EQfΟOwF+A(DؗN##IMqa9 M0K#о=˖3nؿn| gY<xzzMJ~|/J@@;\54lt3TXb={SN|75ڶ};֯`Z_jjhb.\XqW_1y֮]C˖-"\{-2Ջ мysh^z%6nXfͼ)'O`ĈeMUlTd9w& HNnU3?gЇ<'<,o&mڴf͚X-yT3Mjt4P_Q ߊ\Q5 ~US 4&vFQF w~̧Nbʀ8u>]uq{oFU5b̘1ȝ77n,ƍg̘~-M{jCXڴn}SynjM8ǏM6y/UUFҳG;\5зk׎70klzm4MVZl?3͛7#8*/"?x_۶m^ԫW;w;Yh1Ǐ+Q1eTΟ?OV/YYY4WFIYdӆ4h3gΤ[nt؉nݺ1sL T& z}Y{?R)7Mt6(flS#^_C} ~yզR/SVl$/7/ Y1T.&$p{eذa̘1>}pix """?>9r+V#ϨQڵ }w g4=(:v{ȑ#iӦ yyy,^p֭['wB#Gу׌U'N`NGĄ DLP3:氾QF=cr[.W.V(ueÆ Mn+==5CťѤaf&D[K4h`\EM{yck7OD{+>&@ɳ*6ZdffkݙL`Zyp@+QIcyxx0m46l(d!D~Q B  䏞خ];jժUff7w70{N:x{{L>>L>B2E!nUnͦӬf&5Z@/Oŧ0rBѹ!m-zJ4ſ祗^RJf!55DDL0k^iذ!˖-s,**ʡU۷og„ Ԯ][>B2&^B!(vق٪6=G; 89 ɾCgsX7a=m<\*Fx T!ǔMamSOs=ǒ%Kڵ}[ٴiÆ +ڵ?ءJ M(ӦMsHw1sLVZEfS,(E+p]BQƗ54񲩨V#NN|!'nLV<+4 '2IOOg恏KE;[íkеkWVZŰaHOO'`ҤI@Ϟ=qww'&&˗QnݺDFF2|p zٷ3n8BCCpӦMΩS||ԩSG>B2( zզJ B kҝ>BUUz}%:Մbj5-Fl~OOk8]p;cZ1fTǒq|nnج}Ѷiӆu1h RSS VZ[soGÆ /6HL s޽{wƌÉ'W^l۶֭[lO?k, N8|>;GR BQ]NMǧ(ɪpPW7wrQI LTh5^jUqvv䊇UUV+Vp|$ 6dԩÇ~XSׯ/v{^իWۊr9SFMkvZn?zN F!Ur{vӼy ]$@)-g{"?UӁMf`6i( ss)zt-*h2`PU ,AAU0hJhuS]4t:cnlR0BQz*zWQFr?(#OP,wт)'c ]%Pa%FMFr𯑁)-I䖋׾ct !1LZFUUrX!5\Q05N婀~'fĐiԨ..9}Udcý/GfVYO3,idef׮!(Y䌓B2UxO" IDATzꇶo6PcLܙ$_L >! B|Y b%-#q\NK'r3 .B!g9pg<UUа%9f+f+`0fU5{s39|*UChڴ)r!B!ʭT`0٧b HJJOPIՙ5 6ido%$$zi?-B!( bAWyZ!B PB6}BH>!(>7B A!D}r>}>hZu<̪Uա䡡1[S!OUd$bI3qlBL򊢡h >}$=3|2Yٜ=schߴbѸ8)daXp18)6<,gB܄#GbZY~=gΜ?㭷הA||<.\?dFz!Ο?/'H)(_}W Cpp8 B:uY&$%%ž=88O>֭[?d2 44f͚|Y{=VZp3I&IgpHV@@\AAB@ dqKu V3& ~Dfp&~gfkɼU]=Cq_|ܹs #,,y]2@{za]_MEw۱. Su4E皦&5aP ÄzBh2JWWt7VK 5^v!:t!BTT4mڔ}q ?55#FADD#F 55>;|0ݺu/d4k֌H&Mę3gG q;vpߐ{j'GKtܙ{;wb^5$**}w^Zhܹsݲe ׯСCdgguV ~mݻwyfN:uEu^xܼiӦ#Gn:ʔ׿ȑ#Y`QQw|Wٿ?7of޽3 ۹T=Yhflݺߖ[W_uVΝ;… ;>:ĠA5j_}>= y睞QyyyPjJ#YԘ9ovd|{FzSjſNeO?>^Z^\Zzdcj̜o@egSs[z姟:FUpp3fJ?uk_|A5iD6mڨM?Vq-+___ծwm23ΪӦZj5hн*-W 5j]8M}jAAf^zC|UieR7XR*//O͟?_vmYfsj*77>JJJmrrr5jyݱcGuQ디KϜ9UjԹ\.ոqrtMjʕ*==V\:tv׹sg?{^gff_XK\=ԩJII/lTթS'l [ջwoUXXI0a1cU*&&m=\]_MƊKm9uZ7<٥a:8 6 05v$y7N 3cOy[և'޴14LLL$**8 ɓyQ6;k/F”)S %44SrUmȭ ڵk۷/TV~k8׳?Ӧ;ҳgO ٳؾ۶rT:>WoM IM!G/`݇r45 $fFfٳw/_%?=U?l"5gwgs?x`(ɇH>t̞=ǫΤ]I|՗d˼ e֬Y|פ;PRRĉ/{5{%"" AnnW0 ̤qƞM4ý^_K]ѾXff&5j(7^owt֍?+Ŋ :o+ٳs 7x#W]m=eBYƍKC@@@iGa֬YTV͓sϑGNٳ' 6=rk!թ: F4 q ԟq;obѰ\ #F0!u¨GQq5kte**y6m"66zs=\y$$$PPP@~~> ˫Ldd$M4Gy}\.oΟ2uoн{wBQfgۗ|j׮M:uxv>C2_ZD  G/蕶gϞ_瞥~WƜOq&:_|իGPP'GK?|ϭ=z@HHO>_W~Zjy]\粦O?֭[/Yvĉ;]vq)/|:up _k¡G;xbvo߿gy>7/Qn]vu燧]nݺ?~ ɓԮCeeeŋ=. x RSSٻw//VkhbNN3?&BHRE ƭ򗶱t4MAM/|o&0lE[p<) ?2q&їoҤI̛7vڕͽOh۶->O=Ÿ~G|r򓒒hٲ%e~kٲ%+V`޼yң^Z13-eΝ;GӦUi&;w̗MuWmsn5kզf6q\xE}^lݿ?4f4jܤ/.p>6ls0 tϟOǎ=eBBB\!v8c8qD/s2o3^z%bbbm۶,]Ι3gx#96B*Bt',̓X0Dr:' :t)ڟ;jrOb roɛc1OW&]{9sf ]e9x C aeYVڶmKBBk֬_8_;v,3f̐-0rŽ1cϼj׮pZ2W~ u}aZYyyG5>u.cG*ŕ~_={ҴiSng2'No߾^_-Zܹs`С~3gJ.];<7 5_Ί4hЀ Ҿ}{bbbl|4jԨ}!**ϟ?OxbLB.]6l-Z`d;vz.6c Zl]wEn qҥ ~;]v%,,/OڵruܙӮ];|MV\IDD5iݺ5՘n!wڣի K.c*?}GyoiC|||ԫ-@:hߠn?B_5rKrm8oYLaI!^/[t6oLLL /O>ɓ'ӱcGƏ߬Y3l_n;Vn,?yVrw3{ln k۶m [89 Ї70Mi25ml#.O7n`sj{,mٲ1>S2b=T^}SuV< /Үeŋ_fm<`5ȑ#x12r7o͟/k-[ꫯ;8s ̟Ϻu]8/~1f׹"&BckXEoKN:k+VT!^; 6=w9f{<<ٓ璖u㧏6خc1 uWUVI%>>իWdLPVZO~~>ѺukO~tt4NZZ111(]I755N:yO:]^B@n7Ѻyfxb,j׮MpS.eo~lӦMk׮ | 5G&rwx)'sg;Cy啗={7aགྷڥt!UOU9Pt躋?BΝÏG]q. AH@ə8Yz;ryECvʚ5k5jDGGӼys֬Ys==W/+^g!>>Yfy&Avԉ_0ۗ)Spj׮̀_ ɧK.zu]L4#GPzuuZ^]|% 22{ry@@ 嶿kb3}:1 g̈a wy]IEWIuBq](aZ5),,AbgI@N'aaqrZ0t__?l>Y1 Z:(Jz,ŗj۶mˮ]Zloq߲eK֮][a0`@y?Ty!A2I!N'48 񤧧+ Th8J15+ \np:Aiʎaqԯ@iJ{bbUwB!B~O7`hty+.gqK9jBK;386pn頰NXCRӑ~J;JIqI8-[HOB!T6{ޟ3ᡉYlqr>7l;?N`dޅ׊2x廱ŮEWWB!*jMD֭@PvcGqd>C \n7 6nM'7?q%yeVrB!BoT^p6_ ah(ҹ$pu\:`* t'5 Ÿ1)*#7lY`K!B!5f,]g38[ZyWW ڷkdGѤI_ҕ!B!$@v6?Q9j5ץi!B!*4B!B!B!Hu! CP[v\B7,hNv݁ nvC"rr4-Dɻ/B!(&-Ճ/(+a 7.n݅ npMܺ(?wWNテY!B!$@:ujϝBfY e) 4hnCb`*eޝ4MLLL]aj`*\n:tdć  B!(Wj̙dfe̠ۅ颰"v;2)*qRdw`Q5qLLebXطoϛo%@!B P)4ѣPJq6,aXq\|nݺyйsr Q :{ﻟ?wWA(B!%L94MRLx]Bmϭs6k2kl'|QJ2 N9{ܹÇ3g&NѣG2d=z̟?WXϤI馛HJJ")):U&==qDz镶pBƌ#=Y!B.T!^v]0Au ()qKAM0u^cGW>@YdfGdf4^rL:8nVOE'cǎk֕f`ԩ,_ 11#Fx^|7|W77oIIIlْPjJNN{b!B!oMt'O Bm,{"~]`F)|]f @D~8?I^(* /0sLjԨ7Fvv6uֽ㏉aС<,_ӧ{C^V+m۶%!!={zDafgE4Ţʐ!^B!(ˍKWI $L>>>V &i1(c+U#$ۛ莣 YLn\b cܸq,^>}xwƍ?~mx7p X,^C_={urr2yAN!^B!(vgYi7n>0xwR  2c "̯:co_@K ӧVbq}݇f&00dɒ 'ʷjՊxXb[GGG3uT"""8ugϦ呚JN) IDAT{ci۶m_(>>Yfd:u5o߾L2#GPvm _W~t邯X!B!JeU? 4 vzT tV 7/C7O0p:իtr\|%m۶ڵ+e˖W|-[dڵ0w+9f!>}SRRy.B P* fEB<iq9bL͊,8NPcn&p9P瞘xU]=0 D!~>tVHrq;dV-8jC;{ G8 Kn5$=*,৴Ts߲eTq))).B!$@4z?mgCA _? }ow~n5ܽ e{)wc݋]) J!*%%B\,U`V+m":n;].; drI?n8Y|pk:''7(+!^B!ɧ Z CCa%1}P ݭS4\;i(ƍMQI>!aڷoOLL!*)%BHR%~ P`x{j.[ٳdd--p++۵thҤ/Jz B!$@l~6F1rԨkK4BTR2K!E!* %B\,Bo&00s!BU+(Ga0%ae(tÂt`Ga6J`74p:(r('Gy`LBTb2K!RKK;B (,*Ċa(Ít[wa([4t0&nFwq9Jկӻ j֬)@JHx !TjujϝBfY e) 4hnCb`*eޝ4MLLL]aj`*\n:tdć  D%%wB!$@ԬVΜ9MfYƎ} q]. )*.n)'Ev]#T&}[ dB!Ji jEip1R8iX-V\.'Ofv??Uӈ}61|;6?l(d߾dBq}2wr.] ̌L2329qNAqI1nUsG2򷱽12b;:0 t7l~.^B!(c1\BwhV f5MC7LjV狡 jb4 e@njlРCѡC-[IKII!**H6mJ߾}ٸqcǟʈ# ""#Fϋ;|0ݺuBTe2K!>U!^hK0M[ǢihZx ϼ˰>7#|' ӠMZ1;!!հu\3g/ߝ;w2~xΝˠA8z(C !&&^x ~'.]J4i}9˗/'::͛7{ʤ_Xٳ*!^B!(]0LuJJRPfA4L]ؑթOx?hV+gY'~^6 :u*qqqz뭞E1yd|AOZǎy*+%%?ԩSY|UAbb"#F^+ r/!Texi tiŅ _ϸͷchX||QBBT#:aT 5Q2JwM孷 N{瞫:;3 '!!^zyI&у8 \.oΟ+*/DU'CBSչbn7n]'?0 4iӰ6g f |J{8?j8Kq&їoҤI,[vڕͽ͛YhP:dÆ õ o#++yD˖- BTu2K!>U+(4(E?d`ŜŪa '9tnЉ[L Q{{Op~2QT|^`̙lݺL^XXWu111 :rA ˔Zmۖ֬YIOLL,s%R全.^B!ꬃr`I?zuI)>Jvz/ A~-1()vc*UT`ᄅ1n8/^L>}ѺukO~tt4NZZ111;呚JN%%Ş]>B!(@ 'D]aU:wjf!8 __?BCi $ dg?{yIuڕ5kϳd7oΚ5k믹[hݺ5O<xnJǎر#;v >>ޓ߷o_LB͹hѢ< ?]t { CBSU? 4 vzT tV 7/C7O0p:իtr\H۶mٵkWZ˖-y7[lڵk+0` (7'*/ B!$@N'48 񤧧+ Th8J15+ \np:Aiʎaqԯ@iJ{bbUw@%BHR?~C+{[q98p؝X2QTZqA`=vCN%vj7J֞dSQJKĹoٲEzBB!(^wLxh"hV"#[gAzܳ mX&wab {o7En,{+EaAQ!D$CB P*=J[cawqQ\ng(q9@44LmhNr3),*/eVrBT2K!JXp6_ ah(ҹ$pu\:`* t'5 Ÿ1)*#7lB퉉 D%%CB Pُ? l6o^eK9{6.~~x}v8N}M4%]I!^B!(Uy>r(Fuui&=@JJx !'42B PҐ!^B!J :z 놡 (-X ;.C4; QAG99c!^B!(ZZr\yʊa`p&n݅ .7 7n Kw:Βb7^j֬)@JH%BHRթDFF6&D7\x.20Mj}={`ٰXٳ{'Nt2i$4h@AAkAAA|Qw@z B!$@\eի9vEr/7|H iX,QFBB))(Oz B!$@t?}=UJ)͂rعs';v`谡~*ƍ󳡙:VK4h@zzurr2#F`ĉ<#?R\\L۶m={z[ǂ . Y!iiup`QV-BBCEdegR)_tt4K.]verssQUSO=Yp! 6dÆ eʙҥKYrNq]x !קdʴiX`o@B]S(4\.:t@TTn7ozp9] r/g ?̙3ٺuk0rrr Oΐ!C8t+7nH-hٲNq]!^B!(YSO]Upܸ .)4M.r`:uĹL:mGAA%%%8vT邎N.1k,^q{uޝ?۶mL6BBB6m۶m+S.>>ɓ'K=%B\~ FO~9'(sՓthמΦ`9DGaUA?*s!^{fժU?9s0l0bcc+Ѕ4p ڵ+e˖W|-[dڵ,#B!Ti'Svc?+ 40q;epMLJ礠\;wut4%=@!B P^' 4p98q؝X33)] ڙtuN۩$УdHfARR\"=@!B PM>wLxh"hV"#[gAzܵ mX&;w`b ~{7En,+EaASzB!*jMD֭@PvcGqd>C \n7 6nM'7?q%y.B!j`lF?0PsILBwtT8 NjqcFSTGo؄#=@!B Pǟ6Wf鲥=AF{?RRо];N'>&M.B!Wtܹs9rdX'~[n_-_xm޼~i$nLKKKO>$%%D>}IKKR)B!oP!6W/۷&A8w0 2dr*>>'4FX d`H >"..Ay-ZDtt4cƌ!,, ???:t+*+%%G}BBB6m)))uݬ\ &TX߻wAPPjbرDGGɓ g}hтI&QTTw8L6nF,Yue>^z[vڵt֍+?11N:ޟ~Ν;زe ׫\\\cݻϟ(,,d۶m|l߾kz &o>G-7ogaa!K,!22ғw1x2ew}wM)BqAiެ97mKqa1b'^b'(8{ jؑcdD 4 $$,mƽp,]vڕͥFWuO=d…4lؐ 6)g&K.eʕW\O?ܹsy}˛?qqڥY,&NHBBV">>I&yݤJ;ԫW:o֬Yu]<_?5k0w\y=yڵU_:u>''Zj٦VZ\y !BHr~pFa^!kQE54M+y.Cj:ЬU3t"Nvf6ɏ[ᾞyfΜI5曽ɡN:W|ӧOgȐ!y,˖-cڴi{^6nH-hٲջeMƊ+h޼5G zʰaXh}dժUeʜ={[o+{p96ly}s;w2|8@III/ D.:m۶1m49(۶m+S.>>3lذɓ'kq7???ƏϴiӈϯL:uꐔuCSNykժ<cǎe׮]:udj]X4MI&1k,ܗݻ)ҽ{k:O!B P~\.vG^ RlI (x K;v}ݛUV1c ֬YI%>>իWbϞ=<ժU+(((W_}m+ܹsu\xu`Ŋ<34Ӕ)S8~xAѣ9s&ǏGuf6p@z)rrraܹ^;l66p IDAT'Nc]1֫WΝ;G0c -[ի),,իWl2bbb<B!$@jY}Q- JzQF}294ov!Q]veڵ>>[ҡC:t;*WV7o7?A͵`t°ahѢ'O`cDΝر#>>Ѹh"͛GDDC0#GzjZhg}Fǎر#~)ޯ6'Bq=^MXJNv-VkԬ?|ϋHhP\NΞbЬu3l6RRA]||I9Zc&SS\XL:5 ^hn1aKIIalٲE@̫3x@ J4_U8\:ʤu,ڻ?ݸڏml\1&HC!bX0n//o{H?uV>'w֝F ԇ  -#{2'sϹĸvFNe;^l638z&tKKKcȑ9>("Bq\ZL%\"lTU(]nl)RæL”)S!B!#pO<:{\{Lw?t}#F_s:a<{B!8,rv; \0 ""i>Ԍ#ށ*b/(R(=F!B3$MJQ>|V$#!O.dB!LHn3c i!B!2- B!8guZ""8)~$ B4k-%%sX¥aB!8 lpam$'qnb?7"B!YP.[(Q~MAE7azew,Oݻ-%*>N ,QC^&ʤ>z0aT& o_rȁ=}90Ov4ޅbz2,~Г]=qs-_ͮcf8 !BOL}.Z㰅f%7/do؎i46PSYja;QL CF NQ4#٧W]O\Ld>VqyUTMūIpVmST>ZGGxǚl@"l8^5$qӝWwJ{|zjr)Qux{=$3zHo | !BǦr:m Gܼ\g=`-HAjfj)1T5YwwJ{tvo3) {F@{0mf-dc3H/>6_B!eKÞ='Djsqy{n ̾=hm P IL\ .W/l[U9>,=n}+^[d`Ԑ$^wEӔ~/%,;9'֓w ;jl?͝7]l#e[ԯ#C44{Cogt^/XyI|wdB!9\RsdVz *'*$Í)Uj&\.R2qyh?Da/.-d>v3Y5GfkIsyUl6eiM(/!q{A!B P.va###dٮjz3r2ػ#NHS8ty-B!߽ƭ̘hij@:Tb҃DžGƞ]ۿ7vzl,B!(G'S%j4IHӞ$&}}\Xx4Fd?nLhr.G!B!tr! 7[7c`3 \m.Z[ zxB!傟`@ˁP4/"m#B!YPd&]B!((B!Bs$@y~U'B!8ʹbi=0p&Lfj&&Ջ?͍IK{@bt?Ow_!B PNNeb#him 3ahT? ZU5P~/{kB!BH=Ivj hC34CLB@S1LzǤv]Ftϰaށ#&ZzB!tl uy$iowhwnnNE b`2}6"k]ʫ 8-hhAՄahz~yFB!ΛEQ ل0SͬRWU.,`T6f$Y2ɍ˂0 ζm;qB!n(~UU(O(;12p płѪ`Ԏ 7$hhe&,ULJ@+la8Ct1$o(ְ0fs۰~4Bq3/UL=`oHT1&HPt3( ;?4@<@Aj sU1NJMM=nYʘ2e  wތ3{Ǘ3aC>}0at0;w. `̛7OB!A:Jpɀfph`f0* YǨQ0+n`6r娨/O?RΝKqq1),,dĈlڴM61l0`eXnWfժU]˗KB!Nk֬AQ.֬YskyTՀهgeg IhS0ދ ;PDT1j,jŔ0Ka(ZVtuNO=?&M">>F~~>K,99eeeL:Á`ڴiW\̙3INN&993gb B!BiԨQ|$&&cQo5R4?*~0A0XmByZ(:ęЧb#/J__40tI ;vlιYhh"`zii)C nQZZ*S!B\p$QFoPPPoYhJ_V%Qe~I8(10*W00A"#wOSSSw={6ƍ㩧:渼;t˅nnGEE.S!B\po)Gqu'80t %@eG0#P~#eëm.SO}Ì̪ qqq:t[̘1SRRBII L>=nq\vw !B PFcu+8P5(vl }a`1P 1vKMxׁ0L:>Nbȑ#Įά_iӦAY~}0=77[mFnnN!Bq9 RF}9'5t͋f0օZ T1ox#Pp+Zhn>04J^0ԓ_gl6n"##)))aǜ(߯_?2e ?|HRPPӧ[n)B!$@9A&""[4z@GUcM0 &3VML~|cubcqt$;;+V3w\< ylxbNQQQ0n+'2aB!B "<"vwP.@Gb%܂lBS5aaMpƂ&nNe۷/_\}rc+¬Y5kH!B!rh_TYj0Tt ]@Ǫ^ im:))x^ EVkB!Bp?xMicz|iOLDm o4>/mn=z`)|-=@!B PNε֝;̠AHM-HIK#L!26_bf[[mwWB! TXL>xwu8z~?U*z4Y[?YUy,Wq5[CVsB!BYη?YM??A $CT*4?>4ɷF{HN$//3fHB!Bol6^[g,uuuyGV7 2[oMffWeB![-'rĉ'}-EQ!Bq1I!B!$@B!BoHM4}>.ʻ)0B!BHr=8Ajkgyi!B!$@9s4Mc ظe#npw'z'IIDFEXȻ˛ノ_qHB!4~TxYb^xLfioo繗#"1$ZzB!@‎Gdyf>4? #AK{ t-Xɓ'3IMM=y]/8OT;3"\B!\VPi?O+VgPL0 .7jbfɒ%<#t;`Μ98.mȬYxx<ɄB!ʹ艧`f-NZ[Y T>?Q1Q>Î;FX9N/DN9_ʘ2e  wތ3{Ǘ3aC>}0a!ܹs0`d޼y RSS}={uŋIOOgŝ^cGkF:n|{#+++o|dgg3h N\SM?NTݻwsWvyDrrr1b׿O!klܲ7յn/E4R{R[]K^WÞ{HƐFRz-{.GEE\~|駔2w\yNaa!#F`ӦMlڴaÆq}ӗ-[ƺuXz5Vbڵ,_{tt:ٴi^z)SN IuK2{l^}N>Ð}|?d̘1!y^oΚ5kVO5L8Q|>V]1vX PB!ʹh]m}0+y$&}v4M,V ;܉bR2bQ_#c"ټusSOq3i$ldɒcSVVԩSq88MFYYY0}ʕ̜9d9s&+V8v;(V"66ɓ'ի:;ʢE֭[>|xȾ˗sWbILLGaÆ ],]K.LZvqJ}xu漒#mwl޼Y>B!ʹ&;+C|#An^.Ğddez$ 5I^v}cǎ9W_}5--ZUW]L/--eС bNTSMIڵ뮻7O~NGu1%%zB!9[%;+y#XzV\m.<'{vn&f3죡C7@H{$1q18{7xSDBBBΙ={6ƍ㩧:;].v=E{{{_哒B_UUŖ-[wyƍǜ9s&##d{eżKQXXr.c}Q^{.T͛G\\ ygN[N'LQ!l '[@6{ēK??}2Q*avI)I >!aJ;|8cg̘)))OL\v{{;QQQtRSSNvvvPKrarrrHMM%''Çtң3~xloͮ](((8aIIIv_0yd}Yrrr\SM?^i =XUq28p$B!(碇!ְ IDAT"(KUNҳ҃銢Izv:3]#G]Y~=ӦM ~`znn.[n no۶nMQz… y衇hoob ֭[2hڵxސkl6.MƔ)Sl'wС|G/..fԩ,YaÆΧ]u,ǫә_|B!$@&ߏ$&'bX0 RVR_M&rWe˖Ԅc}<_~BKK . 2]PP󩫫s7\; p%[oQ\\L~~>!ddd0tА`GL:N?k9:=s_+:jp: .\s| !wA l2zȜM2ӒF mGN23p;Bs>f~NlVX?ܹsx< 80qVTT?|BCVۨ+`ĉL0!a.n׭GEogy政p ̞=}By=ztȱ{nΧ~&N[EE7ndѢE'Bs} =C '$~+xr8z845b2n|W9=S{b R!NUY6 I D#y}hǏg?8g˸pB6ő/(ɓ?jM3{o1$o(ְ0fsa:nN;:irH>x-n|4B.[c?qGf̍Oug_xwPF^:tvqq 4 W+z(>l6eiMǞ`g\ʕ+2>|I'BBxJQvz$,w2r2(bfĞ%3 !B!$@9uV)65:IKN Y-><"[j cGˍb#W !B!$@9=x Vuu8:kv4tr\#F_s:a<{B!8,rv; \0 ""i>Ԍ#ށ*b/(R(=F!B3$MJQ>|V$#!O.y$B!̰Hn3c i!B!2- B!E!B!MxuB4}>.ʻ)0B!BHr=8Ajkgyi!B!$@9s4Mc ظe#npw'z'IIDFEXȻ˛ノ_qHB!4~TxYb^xLfioo繗#"1$ZzB!@‎ORSؼ}3~ZZ쟉lࠥCI:,Xɓϙ򤦦<׮]_D'*wIQQt.!BHr.oG4TU ٟ'ە{+3OBav9P{0&n%K#\?9st:}"fH'B!('~AXdf;imnf%,< ۃPDDسc;6aeΟP8];D.++cʔ) 4޽{3f{c_^^΄ ӧ}a„ Nse 8yu+JMM ssq/&==ŋwzѣGa5m}իWs7͠A:u*rO5Lf;yw͕W^aĈ_O91M6i& }L_l֭cլZkײ|ӉdӦM\zL:5$]u.]ٳyW; """C}DFF7?1cƄ{{پ};k֬!&&[u>3j#G}'}>V]1vX PB!ʹh]m}0+y$&}v4M,V ;܉bR2bQ_#c"ټusSOq3i$ldɒcSVVԩSq88MFYYY0}ʕ̜9d9s&+V8v;(V"66ɓ'ի:;ʢE֭[>|xȾ˗sWbILLGaÆ ],]K.LZvq_dʔ)!J2yfB!(l !BqλAfDkW {n ̾=hm P IL\ z@'M7r455ЭsfϞ͸qxꩧ;t˅nnGEEޭtyByu]g_^x<}ݞǡC{L3?~<%%%PPPӃvnoo'**[y8Njjj*tR>LNNpa.]zuƏϖ-[xٵk';))NӾ &O̳>KNNN|Gޫ#"""4޷_˻KNN}=>}28p$B!(碇!"(KUNҳ҃銢Izv:3]#G]Y~=ӦM ~`znn.[n no۶-P]( {f…#"""JwkO! nJXXf]CD]nvLtl4j@n#<2tJ6#r=GvV1, p:dggb qΝa!"~BmFuu5W\q'Nd„ 6t GEogy政p ̞=}By=ztȱ{nΧ~,\TQQƍYh| !✧?uL&r(UNԞXìT$wH.SUVEBRH}:?2.\͛7ɓ?jM3{o1$o(ְ0fsa:nN;:irH>x-n|4B.[c?qGf̍Oug_xwPF^:tvqq 4 W+z(>l6eiMǞ`g\ʕ+2>|I'BBxJQvz$,w2r2(bfĞ%3 !B!$@9uV)65:IKN Y-><"[j cGˍb#W !B!$@9=x Vuu8:kv4tr\#F_s:a<{B!8,rv; \0 ""i>Ԍ#ށ*b/(R(=F!B3$MJQ>|V$#!O.y$B!̰Hn3c i!B!2- B!E!B!UQ^Bj8 :抸L&@@Ct~?a`^4nՏ?*UUU: !B!ɩClt-mtM70 @@0T4M0 </e/1cOH^ B!(#.C(L tZ t]C3:31t#o `xE_xQB!f uu7rhlljQ5-躎t3[n'&:﹇_~EzB!bfFuR@1aX 3)+¬o0d2ԎD4 :*anPo.=@!BsY}ѣYfI hT GáC>jhmkx^ra 6~TO#,<\zB!jPPPpRA]Gf,-ZĆ aƍhٲe7ƃ‹~ ))),_Yfi:&T ]44zM>}߿?梋."??cSSSo3 s2`ȼyκrG}OS4hJB!.oI)j@%аGFiFj|MODDuuu̟?|~zILLD42235jdffb2)`jNʷPYYIYYwfǎl޼+?O!:NNgYl֭cլZkײ|.?ロ-[~z/~!GB!6F: Etv{~FSS>#**FV+gRO>^1P^^먪.?k,HAAAYr%3g$99dfΜɊ+u1cp8DEEq=cB!Bvb2)ba<%22H4Mnp`HƍGff&}0 L?u)s璐]wխz2tv^^'fn/9RzB!=fxԨQ<= *hmia֬Y^'DEEFee%GX,~ƎK-]iiiFuAZ*Oz~:\.v{p;**n_ !B,+5kְpB>'h~tՏdfuDGG$^u w}7IIIl޼]w#oh/`F?Ƕd*++yNvnoo'*C:Nv͝w/KB!;re͚5oty]_El1mV&}oRRRx׈"&&nT, [n%HHH`ƌDFFzǍO^{5֮]?\౻rssٺukpXֶm=kEGGs`B!;A9@54Շi-{%+M׈d2i3]qDDD`4 ]X X|My/^r1\AAϧ.oO6{* ̟?ÇKB!Yg'G dBUUt]GQTcxٌI1+:q{PPPcbđy'1nL>M4%G~>~mQ]]W\ĉ0aBȵw5\Caa!{!66+?kB!('h"푴82@Q~?qX-lV0f3j (b|t:&0k,f͚uR??R!B!ʙTpPh]4jtcXzh> Ōg`|F{ԔTt-"B!nr ?{n76M-QK1z` 5ŽzdBnn˧0pB!PS5G7u(~ `@\a2R OݖmXf4Uiivc ہPhkmHB!b: k6g+x8>}|^jkTUrb(t:k8xڪ*\MM\}B!8Xη?]zB!;@f זsQWWO]}  _=AX0|ot !B!$@9i6-N['Nvx!B!ęa&B!BH"B!r^ (IjrB[5a<TM߇i@Ӽ(UT?TUUq_Ȼ/䬭Y[' !BfRo71ގM0T?c»Ԁ14U3PESU#X%~4f, 8Cf>; bԯV-{UN!#>C c2uR C7u 0t#o `xE_xQ8t]G;|G !B7l56p}>>?n|~TM >FX:yjזۉ{_^ B!(cR 0 bUM|Ik#Vg;~sn \tt,3h 6 EaB!|B@3zhNnb){2*C9gZfO>jb׋(} M4åq3rHGp_ss3}cN<%B!$@9B x@ co AYr%3g$99dfΜɊ+GĢ"~`B.Rz'Bq^(&&2X[w.=.%Gz@Wu400GQ0p _#M׎+wIx嗏:fРAdffr嗳p¯Rˣ]_s5H)Z??,O) NBqf!i~n7)c1Y<Kߪ v`4f{^ yc/<-NH?svxU#k|[UU[laɒ ƍcΜ9TWW<>^ld&d%dDQDQ+.\ VezrUՊJk]^WPE"ZGwNIDATT6ABBYr I^'3Y$w< ee>O~үֆKimmMe/`NR2y!B.mte*WŝdF>c/eE>F%Uw'sݫH79Ql}3{Zg}f)**f}ne5Mcر,^h|>ڒhk˲EȕD!`YV)D8c92 4W~  *4hx"c~Fy$ݻ~UU=onjƍ 裏3fL 3Y %y7~oMz,u]*X!"0@MP,+eư,GwHAtTG1y.Pl&H֎'Åiv-۶̞^|9&L蒜2~xVXY[ۨGL>߯ꫯf…TTTpB̙|_6X֛xixqΝ;ve;S=d24MB!˲l '5tNJc%lBS+%e[8j\ae8hʃi:mMlޟtOs]wxyᇙ5k^z)غu+yyy̘1w)L[2w\vɓַEeee|/`V8Ͽ5^[g,M .pxa,N=}<;naG!(B Aɩ r-79,~F-!B!ĀSSo,AB!B !B!$AB!B/6H7I!B!Sƞw2J- !B!PB!X1(B!BIPB!B!B!$(B!B! B!bХ Bpxloߞ%;˪vE9h,`;!n:$,'PeоTO!")EU5(0#i 64`DA@9'BG[mѶ6F GIcvDז;'?qg0sεtIp8mۄB!ƍ_CrUUt {D"a4MpŻR[naڴi4551k,N2a^YǢߥ#4Vl"'\=I"B>EIhnn#hkm%҂iY<B ;wbwu5ٵs'pKG4J[k+юhlhz}E?K_AzFfP\VFG4J82WPUW^ƍqܝIiTUeWB$u|oP(wAEE}:@@ ٴiS M())ᡇu%cPBf'f`߾:x\nkk1&n(mm";'&>)tҼ^:;<222I$dgu;L¡`ps'at /~vyч0, cOq e/p gPUUEk7^SYYɨQx7())~gL<#7/K^{5,Y2( 紧!zˋbFg] 4MsFs)4Z;vpe˖}/w{UUU\}rPO, B1)(.-RTVF8$ Ƹ 0撑r!=3MaI1G~m-[ //3g2sdD"=?i{̛7/%KXp!;'|w;ց馡s SOʌ3xIOzx-[Cmo/y e6p+v2m{[?"wBWA\ u( 4ڱ,Uy7o_}믿P(OS~.W\wyN:Lx !)y%N.6-qSTVweP au:232]vtf]3Y%#3[ Lz1W\9z=@ 2Iƍp<[8餓83 x<^>Tι 7LUU=ټy3>۶mWf444o|n}X~=֭cϞ=x<Gr^CsȂ߾K/pX.k[mͻCl &Ķ=A׆Z&6画)BCK+[>qUvJVZW^yn+V D!8aZfv@lШ*yn? 9i<~ϟzp--TW3̳F;9ښj<qIʆx gy搩;%B8q?NLpV۶18 ˲m;yev_4뚹&.@mFy?woP|L֢*e[iv{] &k?ii^oݷqضm=ٳys{x<>~_9]0MKٞée?t+;{,fϞŢEyk eE pCܲ-'nj3QpU1<\wlT "Kvv655v{t)裏p7Ʌ^ B!?t]öm--d}al %/iZiWTrsMKzz*^z%FW%BFF&)++cmջ7Gf$ynܹ^Ѿi7\խv]w<دh;;|JKJX^]!w%/S__iTWW`9dk;3 Z{zZ.z+~)DM6qucY۶Yv-G}_KqyޡT h0.;sO/g<*Jri| ~7zrs,Z'|p8L8w-.eٲ|HaL2gy:ynw=Gw8簮T>o<~1zhne322Q#G#}ױ_*L[cw^94ϨvஇcyE /E̞2/ݟh}^+V`^;h)rhnjB!Q pLx)=V[kD"ή q0MKΰa8UQdeu :7Q>pgt9ΰ~?|~iiMюgwoz|>ⲥp-CeVqioo'-Guu53ڱ],O쩭K.a)駧-3@Q_E7o59,~rV?mAT%K B1ut_@k&rsshG {RP\LVNN8c1kkiDP5 0hjj"7?\%oy\4$!'mmں=.EoÇ GHyK]FYq_Y3t >ֶV Xj%.|D襑 Пc1tu~oSyd :mD"eYɜF2<`kEEU4MCӴϦa+K%AB!8UH$l,˦@f&Y99}s:@v6p&|>QPH$⨚v\'ą~6v4|}Fbc1,2pl\*gU~Ç؝cPNdb iH$ˁǗXZmUUt}BbcerwE!⼞4-d@fV:^ƆFL&-#۝lE,#  G1PPɣi^OTl}ۿnfF3I4%0tǓ(hdeeQ^^õ41pKn}׈tlJvRU-ٽeUU=!l7O(DsK, HA(Pn$^9dr44`;644a_,JӲ.MUUu˸ 1KEr:vr1M3p'٭K4TMC;}r"?$AB!8EQrv҈mA7Z-Ux}ReG8<{ m'.b?$AB!R>:=ikIԇOH"ByG بd,׀qЍ$(B!D~}ɀz:mZ\ݟ/64754~!)`EEl߶R)@kk;3nc^iƸOgrGUd x{1aF8$~C;~!)rSH=UU=m9^V(^ȸqz¡o@iF 3FnNWwO!"E<^ Kd< a6x05jEEEHwLEE7t<4q?IPBqX4F,4 M7"$~X&2RB!BIPB!B!B!`ZjC!B1[oIn)B!?hגIENDB`KCemu-0.5.1/doc/window-profile-2.png0000644001050700006200000021173011131675406016574 0ustar glaubitzfbedvPNG  IHDR(jJsRGB IDATxw|@%tEvEAPDVl"`Æ],X; \; )$!u/fo]ՄPсB!}UiZwQ&OyPJK!BѠn cU;(@jvB!¥bLfKjyp׸-HQMx''2B!g Nصquo }A @Fn0Vul(2D!BZv~ l+]GbT@s,?,ujШʭc&R\ftDzpaπi6B!Sمlk]CXwTR6F uFjf35M,i B!`dCda2G$~s=.E_붠jЧ;*BԄ|RW}H)ߖ!@Q(UWrli]L!\++3dt:-{uE+mb BC()-dQj0F;m:/]Ǜ6 xyyKpw@xw<7pcK`).52M!|z-W^i۶*f(3dw\6}wݞB\Iʞ,}3Eeq%Z{>mB忤edc2mF;FB[s)vd(;͛n"4< /ϳ R?+)wV$?{\F-"} BÂ` ;nr&'F߿<9 !Dr iÙ9v0'\ioENkWgr4YXz>><o?-fcSI̦ZMP? q1tZLFo؂J"4$̜\,f ~xyyMqI):Dֈ&ѨW`0Y!NK]}Ϳ\vIjeO*3 JnqwCwON !dNm1>v̬J ZBhF =+ (m۴`%FG2?&P!UU-(6 sV;Z<.?C״p燮ia_^!sEWkzס ":/%ff n=J66NpZ.@`o ,c7NHJz%e&n[u@nbw<}{vϵO]ڷr4"cc2Н0? I޾ÚV_[нM8'2 xv:*3 hMvY[ $1?ޛz5^:>zI/b)59cE^p;p<7O7 [J E!9v]ڋsV9+tiJJEu-(gPc"cPz$$aHޛƼ%ҶM[.kN×w^ne\fLaƸK`7vq.kgޗ[@Q`:Ff-<=?u'F|<=()-%Bq0V\S;MiMXFǖ%ZAs45'xc&bbb+ #^G^^!'s𠰰"57Lݧzu\)VDz(.M]]W[-#?_ƒûm]֜HM~DM1!-?o]WwG~o/"B\jfO+Dע*xP\j$5q: s7M!9A)*5hST.ϯgu{\!J9ʹO( iVfס kއY.g{b4[h2m "J 謬u 4?#ZMbt<<` nh~:qrp/oAv:Y=]=u1ϼBjf psӺeO*AZrrr ljOHlQtוZF ee4 #5@ҼEpyPUJv EENg,C7Nn"trٸy[8=&{׎iuj RuyţBhϧv&9}8NkCNBaSXXH8keylvŏt|/ z=9E4&*ԏܼ<|}(.)!##a:fn8JW:u˲- ˓;p<">tی'زcye77=q6˿YFBNiusv!3-xYl>q2>A?;GYfٷYـ2F- !D9.^s N*)];w(PNoK[* qdBq(E`r"prwCw&^ۍyKsQDVm<}itoΈXv/tL_^_R+F!@Ӄ ;w2[KEa!w%!*tۜw}$(*^87w?E߇NҷCڷa԰;".>,@^e9d2nA9Ge(eBqqq%笠sKxQ]RuBlAH@:rNBӊI>݂,1룵Lݗ/eޒ lHIz?  ;}Dz9Y@FG[UT5mH{r JH{ONfٻVBʌ{}l"b)-+!?`mA $y(o͔z[TZEjV!-=G s\YԬBb㚡(ɢRXbAI93y%KCtL@J,-3: L!Ns&;$U;q[αA+SfNxS-[R.^on["{Q!ؕ`]V٧sёKzz&%t:<=g69~2LfZ__BCqwn0tHjF0ʹoNwbXhz*T-f:=>dfe(1--[ХSjݶM+]cZӷ5͜8F^^>&Na@q*߶N۴wiI !rᦛoc:mÍ~Yΐ+'>h/KjW-(ZS*vABmDH:vh4Jp\OQl%%OSPhٶLm+Mk,f͂Ѽr:&U{ί*%HJ&223喝v휗I !(?eUm9(%kUvCWZ8=%kO/c|Jւ)'v!B!.F3_i)cЕSj4~ ʻ]$>B!QX\+]iW 2*R' !B!DQI~^\~DQI9* PB![X۴oѶdOK) !B!Ω>o&;+SJD!BqN8~wZB!BTh##B!wP}󥔞B! 2ʙVB!B9cCAB!B4!B!$@B!B PB!l6cXuZ)V!B!DM ~G^tT*͂Bܡ3C&(0H!B!D9/GhD(m#ڢ)*,bƵL7^{J"B!h8%<7yШѿZPBa4c$i(B!Bշ_S\ZB>]QՔpI3)/ח+_Nn=H"B!`ϵѢM j}6݈dbЫڱ -O;gTިVK`` ۷禛nCR5zA\~;vRXX(defӜQe~\B!btq eۧ%q)nz Ll6&tV^=L`;0LZ˗/1cYn=("GB!u`4Z:>-Y08x>-;'_XͣO?Οkw[/曥̙;U?;ĉx-I#K!B:/o/<W7HLOXl)){(,,$88}pҡC{9zB!ob߁}7 &y}2:) coSjeoh"3f`Bn[n%33izJJ )))||tءwJjj*:;vT7߰lr^}e.#G#X!B\0~Z3W`Ķe?eB @Q IOK'2>$//QFIǎ/9z0G/о}=|*/}>q'FoŎ;0`Ks*-M`X!BqZ~-/K Amۭn1cSϝUp؂y(6Cr9~|WŤw+V8%ѣ f߾},C` 4sPjSǎ.ݻ}Tmޞ={tٺm 2>NJ:uJh!Bq:v8/ϟCLX^K]Σ?{~\T݇-00iن XTh4Q-B!KO«hތˆ_doPji3i4hjKNN!!ǷؗmH^^^3LB!BJJg:8@d"X;xz3p@~[yy̜4&$$$qFˬYcѪUMKٰ֭ak֬aĈrD !Bk/?d6^͍F]N㯟䑓L}1š5ZMxy\JJJ*/**bܹN6˃gDaaB!/x eIDڻ+vG߳5ݹ'ME|FMc Pqa޽W_ßIQQEEEjCs ѣGѲE RRR2t˗/'33L~~>[opWQ/B!}{/hߵ=h4||ҫ f]]v&ߟ>[nIrr2]Cemдxzzq#IIIa;B!Ͼ'3=Sc[)){(((ۛ-ZзOZ9B!DS\ŔCHOKl6"]:tfɔ?$oM&&2 P̙39sFm<==0&LGr!Bqް=#1zk.bXJ"26t˓sV.!B!.lB+MWtԅ{v:(f WWB!cXؽ7=)dgf8n1[(+ *2KZPB!HFƭ؜"HhN D**TS!B!Dy٤߃_5 Ìu^^^$K!BMd}]FPf 7;;߭\5J\r9K!BqHLh)-+ϋSҩ9M(B!B\D3r4w:l ۻIO!B!.B* Td B!B!B!E!BdU;GJI!Bqn}󥔒B!( B!B4"B!h29(BD%Me)I˹QluZӹUsB!B&H&ưK:q[T34j 4f#'2M %tK@!$@qMQ f(J&FRVtt:juX,fKŖҨQ5TUWvA>9cyJ/ROy::u*wAj>5w%.2Ժ_, H`!meB"/|ʟcZI-P-@QҒrrr8vF8q",,`nz{EQ&ǏcΝdd7FmZVq%UyJ/Rgyfefs't!(8Fs- GR,֖~rZ\ *meTHuӭ7X,tCwӺm&:AR| PF#?~v;BZIRvw_ ee祧u ظOl}O4Z QQ1hںM_o8s]iOOOJ.*jL&EѨPAqQO&%'e MR);wҧ_ q>(&'Ӿ}GY4e0*5_p{l.H|cU4:֭]CX:WH%~)ϋ< b\'g5h׊P/E&<YbQ b65GrhVbbc"]\M_8bV|t.+Z5p쪔 y*0SW !γ:`ւZd26jm+0`6IsNl>~/yRjǕiUZͅ%BQTtk4eȠE/A" P*4jBѪUR !$@Q⤠L˪jT*ZFmVX,x{{o1B˃k֭Qr&cL&_gKdj6oO?ӟo屇4^@4=X IDAT?ːޭ'^;.T*RsE4*&+.2Cdz,bsz_gfB4E܂Afxzz:u =`XXlV,tVTԹ%?#j_hr;cY|*lןh67|Ǹqpݵ\{մmZī%0L;n5\d^rq תl8ӝZ~cg=cSI-mGNf5h>Mub[r&QBQ (tg/ETzJ"7' 777LF:ER_Qm74oZFQ2U;LƳO=C!/,ƛ~ڷn[n_GRXXHzz:˛ ӫG&{'O";; ZMpH0@’ُ[Կ؍;TxP)EEXwY稆*0okjG1z}9k=@ѨREbX-&LxFU-(q-Hhْ~\tQKQzَA;;t`_rT?ٳcrux8ȜsYaEEŴnݚͰaC>tfd-tڅgf%% * PbPVbWqg:zhZmFm$''elFU3m>Nܮ^LƂWf*!DaaG_yRSSYls_CII mڴ!0 %}0q,gzeee7vppgo9M_8}T㵾)!q-[}=8w(:t[o}_ؾ-3bʕ<]n߬[7:vd8}{^qB1(վ\k(ƾ ? JQ,fP,Y׫oZ-={w^շO_kײ&*.鸻CtT >(.2HII!e+rrtDG6Z=LZPlQqT>'2Ծ%>]˲w6zcGM[PWg]֯_ϣ?e+>3.p9m1dؕlܸU\5RRPԠVЀׇwƎunG;WC秥g_sc!y m[uصwf=3i۶s^||6meNVŗUe⭷9MEsNFii)S=AN]Щ ӞNii}~YY<8wG>,ziVwԦ_U_MO?~;ws5Lt/}#ϟ.F??t:;t8x ܍>>>L89B\-(/kˉCAAvge_-(1Llذuֳn:֞ճ+]tDXXq\6r&;AH׮]qsw#>-Zr!sh<͘_:!)2BEZv3advUCb47~ҥk$[l&`[+sQx{{#2ؚ?[Q{Sؿ7{S[ر˖aZܘNk٧eFq?\LM 6iӧWPj*;djٚcG""}'cJZ|}^}g}¬/7O=4Ӷm}g`BByW/]\U& DVV7o)J7ږʫ:_~ןɓ 87DUMҟ]'Ys@jVyѺu=oL>c<[WlAi}S6__0E˴Or14p .鋧'+W~ψWqa{ O>1 EQpsw'==,7o =[Y1k>x]BCCxq5x)2= 1z4s_ygf<4mk]ւ$*ρL&ٳGy~}zZj*}zpڶBZlӉq_mUwUXR1~8^o:o;Ǐo˶w+O>O0j{V|O?>=װ3lkri&9)[Ǐߨ+Sx^m6%0 ۝>m*72[1F۳af<,233ybT q((ps8WA.Dn_n5 شi* ŢRP\rI?s_}Qt-#nF]}zrG@@ * Laa ~B-|urD_` |  $t&5A^$f,y-)ZJN7] &4husL2S\ާ0?Swp]wʫ2h@6qcǠj1{u.o6,ۛ\Z:+U0j5.fyj7HXReee|lIFtt}#G>>ti?N"$$>\}1Ï>fv">f#ˏ\TD`$Tb &JXM]ijz/ZbKvÇ CsuѭkW0LѼysvMff&>Lf eoLqaZsz07y99ǨT*|y-~ X8FIOM4Dzj]7?s)fDF[d8,[Y7&Yey5WZLʡ:\fN3P?xVzbyGݷ}\ʂ yuklݶZIڵcay׬ɧf0U~oHH}1͚UŸib,oֵ+1sN,v)z+@۴oɃ>H^=+-3v8)lػw/sޫ뮻μy}'d[}t:nm$OƔC9u- cc;?vݭrssܷ59jz 4}gumkzV7? /<,]6>WϞ~['ۼy o,\^WK"et P^l*cO0A!/~%_]uh5_T*5j_~ك7?K]_`0Zihl2a60#"*s|f+J^gԨѕv(4xzl((( ?2[p9-KE_^ɱ"㣰X,zh1t-vSJzaCė,}6":=nᓹ b[Di(PPbtQ.3ZYdg璓tVə*?c7Dn] '=#ŋ?cNuם&۪M0~XƏEz!̚=c6kl j?l0f4g(8{bƎ|^rU6JMWwVڦEQ0R̟ǔ\m=L 4/WVw}Q}L˖-O ?8w}'qq|(ڵ̪U?ȡCڹht4;#9ۂӊWGQlAR;pLOcե ٛwңg'ǪmvW5g\KXY{0<|ȘHJ f8'@^ _wJKLd 7~ZUe{ϗ̳QTTDpp0}zf˳QD dsـKC?~ؘfz>閑}[2Ǝ}3λI 66{[Pl4o^e :C;Ns5tix*Zen6壏>mwuꎍ'/Ȱ+G0x &w}}&̳2pPsh{}gۋm֌q/ܷ59jT^uY]j Pt{I1wŻ1B^yu$jرc8a:vd+.ǧrA:d0OO!.bs-)*n^WUnʠdzSڵ(ʙO5@\޽}|uth4 UHh@aQ!=z ???z=f^ѷ>7i>~T*} dm S1=~Lx2}juS_w⤛: JW|X0[v|yo*>5)O ?2۞GOTKOiI i|u42j=wGծʕL0ƹk!C:dn+oJi4wU4ySNӧsՕW9ݶTTU99)fxu<3<3ycm:1%_|M7rVwMWm昭MZ/?9-ko-qX}*4Aw(Sy%NwQTW ݷVGj5֭sقҰ'3wl2̈́~hӦ GFN#8$LrsYNw;4T<{&mOWQqYUk4HEӕk֙SǗz"4xyk1y*w_Mz+Ϻnb;z!~|z(11tڕRӟsB!B PjTq^UX86j\_ԱsoƮcP+b+..vZ F兯/~-,jD=55 F()[PC=|!M^ܑtuҳqԯHOS *B`0ѡe}Fm[v'<jVa@Zd[PX,h4z:k;|Ё0M5<-=vAFf{":2o//ܬyi<Ծ##xm<, >>WWJ-0[z2zF,زR{w:EEXj ۫gb#S5CSZRZA[==RI^'VcQXǮ zr~ۘ n\Ū#4m)ϷvRڥIndfp保Т=uyp|}}qssk<ԡ>6<$*.T/łGܔSյ+ZL&$*ēA稨T*̨.=.޹9A^?L>5?\!5A!Z-Z%R;~שZ.===<<NCVFaٲumed tu|;͚5c@>O||||L_p]T*}ںDT*y*,R~EQN?OPbjk},&=f FNCQzr.xA~Eߋm !l6~*ukc2@qaX0־J;tY(WV4啕ZWj9(CR:$ueO0h4xzz%,,CѨwUFm-KyW *ji JWAU_Rt ǖ LJَ ǗJDm˦*Yrv@ɾBm۲wnz[UER-_~VX+U_Vn2==*rFˤG!,_rss*MמngX*o41[̍^ٱ ?[J7RRB!8i4jU*H˳Q[\T#GiڬQӓE@@UH%~)O)O!B\ F#<"RXPX<1bҺMJNW4uhdž {LfX~۴A{+I_SS!*[Pt:~Jl(,,tSђZ7m&8 IDATUUZMxX$ے;'WOOv BvVy_<<Bq(A۾~DEE:gԌbPf08'P>0W#.>]DZ7wz~/))`0X<Vt'U J(+-knjuM ۴M"]$ {Hy^)^qI H 9t2W D!Y5^V@IDFFﮩ],79|>ڶG-!hޘ"=x58?~?||)++k^BIŇ>|-~4 Atڅ8)Ff0X>&|)ZK!y&-!jVh֮[Fv(2BrI֯[FA)꼂h*bl2sAzRInLi B(8Q\4L.IVVy1S WѳW/[R0LL&F#FJJ)..PbcURxln]Bq~E(ne%%e˖JZmߡhȄlM&%u:m۶gRxB!D5,šΞfaZΝ;w0Q@RG!DڼqtZjBVfF+B \uULcƌa\y啬\Ν;=@1o]W~{W $@B4TQ8q(A!H"nTx'y;8q"<|݊^n-3y7wwl2n$C]0JC_5N?NqQ@\KWh~̙>|gy5 P~{ő#7;~n%q\b6[问_&dR}5 0Y7jBTle|}֪U+&NĖ-[p\ͻoxGym1b8<ȑ#kbʔW\ܹocNϷ߿??fLQ(϶?r W^lÆ |/I>|^={1qdoګ"7'_o㇤& !- ))-Zp(˖-k׮rUu)ի6mvW_}2(%-ۺe+?$%i̘9TvR0ḦK4s&9YV ';P9wk/ LoȳBⅆ2e Lira,\!C??[p+G[>c:wVg+rҦMo/}_Ltt?υ MӼTZ;_Z59۸q#Ǐwޡf͚ͫy4{OvAzۚ<]PaϞ=3>K. -W OWRJ6|e޸?\ͦrl,AAALE֬]+Gğ=(ԩSW_y7J[v _|/|! 2=wqLǎ)爊b];{;]Q.F~~we|v'NA'Ԛ5k3f .wqKLLt]/tA1>|u֠Zh>$ై`:w믽V(OxxBg.%#L'MW^jժU{KW7111>!iWn:~)}o)z\ҥ3K䍎f/x>hSOMpԓ0vh>+wDzm!Ҩ]6'M{Ν y}bbbHLǚ5PgahzG31|8?r !D93}t:w\h ,!>c ~+V_r劫6Պ2h s\X\) 4^7_σ9@yǙ4y22UTСC̝&SDd!nrK{1 4 ^&G5M`j:tCsqBJ|Ϟ=ٳgÆ +X,L0\n4iҘ. (?es񲀀-ZȢE .dl+W!%%%o2L:yg71пXs㏼yEQh.^1Pb ߼ʳ>ó>GmwoyoePƍ˼C}IOOVZL8AjP(G.01 㷿&.U0"Â}e/O=fԩCvB.AiԨ+>ZΣ”)TPOV|LFftJQ&nyŇR˜ܹo0碯/~mXD9 ժVU6].w3! F9z4.jr:q97E!iĈA&BF G_a|olE PB`ZtBr?:j-q kՈ]!וbztOC)S,#0Ѽ(BrFڤ[|O,{?ԞZج1Bq+irylD{EuofW!nov;ux;˟9^B!nF+՟*jbŊtܙ*UW>ABۋwƇжiM,=Bn:axT\'(>^&ߺ cpWo}_B܀ e?[B!ϝ BkhiDFDRn=7 B!gيe|OɦRL%CQGSX+ oJ!B P-۶0IՏءcF!Gpr:$=4S NLXX8~~7Mص|ظXBBr4oל0Zvj(~bۏoOHX!a!E1|VJ玝nܸDN>MJJUWrkRB\N:AMjʎB[a^C }xCQU !tށ.(7ϱǼIL#]Q֧x'((nK//̽+G▧*SNѸqS"*Ea:ɎB[DdT4C>(+?]I <>"i'R; ?}-ZjT]wI&ʕ+( AAATVΝ;3bK.BjS74q8뚴?B[PhXrKuB4yѲs"i~}o@&K,iXQ_JJ Nb\.N~}O0l0vŮ]UӧO/.l!BdI&zˋcԩ~)}O?-|./NzF:~~E/ɾh۵- ů,.TnźBb϶=$N,+VSPsq=ꫯϏgy֭[2B[,:)_w؄8/T.up( ~WT..H)KpaafRb;̐p.+j, ZC~DžJ*vZK#F0m4tBPPBN'233%MjڴYt޽J(5(BqK>':q=w\ͦi 8~~v9} {AJΝRuj\ƹB˒JBu˽| 6!r#Tqg>ZFzt ^Irr2Wfڵ|޴AOK/Qre>[oŢE-ra۱8qYfJgŌ9lNZvLZG'uY k׮_sJI5(_[CK!rI ];0)_18]'J\RV]M;KDtٙлH^?׭ݗOeKYbp'~:;ʕ+( ѹsg"""yƎ˂ xGHKKvڌ?2̙6lь95kx_{5&ƠoItt4cƌ/,QFѣG򤡼ۍOu!!dg.BzZ.zN>uOn@VV&@Ll-Ԃ [؊j%BCB_- ƍcܸq*{Eu]kEUUu;Cl*f~#V2?xԓTıJޠ 5GG{{nƏ/GR׷ AgsɎ;?߲>1}F֯Gc3bb*Ky7͕ u3qkѫӗ9r@7'c$L2]qPVm]Ӽ˃iնaܺ\k!!!gW]^yjrWըk8WtBq/4m:-щFgBO:+H99d{տ?,QFB'`I=zMطoC +'665k塡:|?v8y8F!nJ8v<rsؽsthu3+Qo3߳w^RSivG3ãiyoK:wLJr$ !ʬKCn'OT$_Lt4_|9 S;f ݺvÑ]_i˻| Jz ؽc;yyyvU'#=͛.Zq۷l"((#f-Zy$]R hZorAŰ}#G⚸R ri&0q„+?**=0iD&MX<4M+tIU  jb:ԓO!nH4lľ=iѲ5%8QSѴbhۮ}PBʎ;XmVv'Nv5j+W&''Ʀi]/@q۳( AAA8C@`!9 4 PUSp:>,_GXܪ???|l>X,>6~ IDATlH޽1‘‚ 8|8Ӱa*Y}|\ԨQ@";F!nid4m鷹(I/+V$0ПLRQllݺ-[#c!T nͺuVKU\߿0bF Ç5k7n$// 0fbLNN^`˖-lْ^zZjyy<lܸ{.+Ch ԭWcGq8B+X, +-)(eݹ8ݴiۆvm_^5^-JՊfCQ/_QYr5yyL03n8 N]q[neȐ!S0#G۷/'Ndw^-ZTb2j(Xx1K,aѬ_AFRR:u*F!r%$4UXD!n%aVrũ)UjUiܸ1躎o.>LNNƛog/x,t QQQ#7Abb"ͣcǎsa̘1G߾}0aB|Vx,XU˓!Bq)?㠨<:(zLK`ZhO6}dTUY0d#,,3w\i۷gݺu 2ۿi&>BmP4hPrhE')))S+.LDUUtÔV( EハOC !++G}ɓ'Caի۷ Pnݺ̟?C;P^=oѣILLvڜ:u)Sx{"99-ZȯLq]Iff&iɽB"B!B`` ѱT + _Tۗ;0 Zn͌_P4Պ ~O( ֭[j*ȹs=z45kdժU̚5_~I||NJJ*S{!( 4q8뚴?B[Pa8rs`&@yߣk ޫ'˃;/Ӎ5#Gd$=;8lv\r9q8Dec =_Ş嗋ϾqFU !41 Նyd!ğliyʴZm:`IHνHP4lX_;cc8}U<$B8[`b:} l8M.,*P!č>-ߞrXVng'tpTNTU7<~ `{(9 r9X!j.]!$DB!d P_caЀ>躂QЖİa*GCĭ Mul9Ht84iĉBPjP;/T.u( ~lWbe3σ v/gEV$Լ0RiBƍq|\.BmÆ5z4)));{|H BTAAA/@QUvņTlnێ]鼺3.@ڽ8e!Dq#"Ǵ_E݋/{rB֭}(>/|N>u{If\46޵]7W]6b)t PGDzҼE f ׫W ?P膅i=,"">>>l6cCQ,={/ަtΗ9>)fYZ5t/e  %''[T!(ydT];0)_18u]&EqK|NN#F}Mg7=!_}E`@e={&4?awu |. |),n]@@i-JNvVP|B!(| ]% 0L6o@Ll-Ur~DaR0h|f;QuM]81h.Tx|,:8u.ȱuBFBBB;v ϙShqcyyߞGb8\R̳4j؈GyĻ9N&?4k׮%((QF2}B@/͜EHMM /]\Ste=JIw뚷lͷ|EXpv{3 r$M|ހikI:Qc9&0(FM*BpNuӧNѡJ@` wnÁ}R܌urK(ǎB?9rXuSfTtS0t ty<TW>~XCxxBrrrxwiԨQ{W^aʹjՊ7l 3L{Ym?Hm۷%"" AGYb%ԠR?!oeżh!rtwWٱ}+GS^}o dgeK]_9o/mڵf!DP  ڶbkwyPP0ڶ+NnNMRb eӭ{_2MT@5, i`_aŪazT5kO,kJX,=ߞx뭷;f,x98]NNRgno1s ^P3g N,X1s+rQ(~IZ@pH(yW?H;tVX, |cbؿw78rsBc9͝rX6RSOƓO>NzF:GGEust:QLGӅ4G50L®]f!|29҅;{49v'L`TVP~eb޽,_a_x Geyh222Zwm!J5TU-1]UUT_V1M{ペ ş=0 VeA!n'(bXmXVL9i( VKEtz{$`XO=D9S1صkBEF,^nCNxΰ=f =lm,ذa%v[n'Fϟ/ɓ'^:'Nvi^v|(4X,ԩWvҼeBivu=+-cT !DC]v6' 0л<7'Chڼ-1l)dg'pݸ\.x?2. +XVűm;]~,7qbUtDh(Vb ^+WnDbQtS/DM05VKfK޿?͚5cefС4lؐիӣG֭[W'''ӿj׮Mڵ߿?ɅytжmAGy5kҰaCƎٳg+u@>ë.gq$%%QJU#"L̝;ojԬEС}r}izG3j߁;* :YpߗEĐ(VZuBBBٽc;?~!2* %֠\i=2$LtaxD$ugMu ;J;,Ue .].V5G,xtPwcGâ(( {i$O{ ynZNBBp:5TCtmݺ!C/ҧO9B߾}8q"g&00{hѢ{5j gɒ%=5MII$%%ѩS'yFI֭q:=UVvqw҅.]^RY*@M4вO>}E Yh!b݆}+#:ݭ2EQo܄ERN]XhF#H9ŕY2!EGDҠa#M ۋ( mK3]kXAFvoũ)hFNN.|qcPCcdU%q#5 j%=%5ZH{ŀ 11yѱcG9s0fq͛XÇYvD,YR}DXbwy`` SL!>>^~BCϿO?nSҳg?e;LJÖzϟ+Ƚb9ŕYzvtZЉ z*vz/EW y<%N,͆Z)T #(G^ᘚiz//d,[Pp?riuƂ !;; еkBy6lH\\:t`޼ySU͛78BuRR-Z_Phպ Z&4$g7)B!Rl7׊jt])'u-?5(4R;:%ol0 W$9>ݼ :|>6|8~ ƝtYQFxb7n\$-33x9b]re֬YMx8piӦqYOmۨSEGY޳gӦM㣏>_Ј1b!%7\nбnĻhU?|L 3I,_ZͤZc.xmjGk i`R>{l~i*VH6m q9J'NfB,Y„ Xr%x,X@NJRRR~ &djժ%d!B!ʍT m=Ao)lVb*mQvGʍtz oAdgҥzg5HtX4y< Q ׏0ܹsIHHoߞu1dȐRoM AiРA-K2(_|ӧOߧiӦr4 !ڠ!Rrss:fw_xFx*}%4Ym ++f ax_frGx2dYYY<L<zN^`߾},\Ćue :(腫^zѣGHڵ9uSLErrr6&K,aҥ|'ԩSG~B?LQ,eo!qjԬ]"Kz Ph/FAQ}jc%ꃦikƯ9Y0j_6f**mݺ5Vb;wѣGSfMVZŬYxq:3z˙?>= t%ڢE ϟMѣcǎDFFһwo[C 6ЪUBc#̘1Ν;Z hdQ!UQ Ld!-(?IPp0EOHr4݂_P~'}?n7aapi.2Y-蚎/vVt]ǣkV&=Hپ}{euaҥ:uz{M޽M+ɕLBҲ[*QA(EvBL ϑѣ4i}os P`B۞i`t.EQ( V|||Xnqmg(VS#Gb&ii(bEUUNL竷Gi 6>UQCt9N}0]KR!0MIff&i͕"B`` ѱT {QnUSP5SH #=Y. S;6dړ[vv<`Q+y<rss8u 7!""*;F!naz_#B~!n(ׂqbUtDh(VbA7tEAQLL4 B v_tD7 &"zA@cyZ+WLJJw~ 0#F0rH>̬Yظq#yyy4hЀ1cp}[frr2/[le˖KԪU˻K] '`ƍ|,X_~:vԩS_lWUt)7nJD( CG41BqEpA:tZAQ ߙa (!VH Щ_-ř$$$SC5tN]q[neȐ!#Gзo_&Nٳ d޽,ZeԨQ$$$xb,YѣY~}ɥԩ/fذakҥK1bk֬_L p IDATkD!nA*E6(׎SS 4]n( ȪKtFjJzJ*k`矓^pAq笓HLLd޼ytѻ|Μ93ܻy%ua֮]n 11%Ki$%%ѿV^](m[BijCL~B?x-_w؄8/TUUK6QQٮ.(?㠨T m=Ao)lVb*mQvGʍtz oAdgҥzg5HtX4y< Q/׏0ܹsIHHoߞu1dȐRoM AiРA-K2eJy9r$oF#"9wuDjPf;/_ (((ʮ];cҕ Vmҵ[.g8 ]sa׻Y/<@#rs<|BXw~iج6dV30 .\XbCu2| ;CzG&11ڵks)L,++dZh͟ٻ;$F`P< *" JfYv툏XGB,?pE*`aa%!@ m2-?"#C _̹9rrxܹ3,X (]!~^(ZnzBF.7|!vF{TvM~ 3zz<=q^w̰hJxx(Ӡw|Bjb4 UWUha]04QU}e7'O2ydRSSY|9=f񐑑ɓ,'//GyЫW/Ceԩ۷D Ɵgf /ٷoZꫯ,a,DKv3GFFҩSGj&O&!!A*zj էo݇?Ykt\{ÍDEP]]%-\n(8ٽs;ZŲ}LՂ]28 ZE(n!,2pNb 楢]ӱBjEuFLV`E3#`ӦMAy}u>ݰa6lXi?9[~!ZSC\.- ?:Hpp8(9v:i1TWU6 'z?>{x`*+*oHJN>/n(E+(..@3-`g(u0+tTX|`*h]u$'ūz11z͚54EQ+""=2#h}9,ugyok0gNܹ̟M7 //GVӏy<q:+W$22I̜Tk<>z~Ll\||aKFbd\]J\?,8L z}DDFq# W!LuGp QUGDvܮ]P6>x߀^?>W%^KqjP⋊vx}^nFpbK',*r7{7T1.+[n>%*:~f>ŋ/՚/x '{3h}9l޴?a=(\ѝm6yɁTWU1kb˦ (ȧk bbZQUY+"**}{wN./6D@!lXsX,tM W'j!b;޻&b{B$'qx6۵_U*͛جβecmc8kj{W-B6m(/<_曼r0eOY4bDV{~OVV d\бS:Go+Sάk.$ O=+d]Ev6);Y- V!Yzs>qY(V z{+z((hҤx}>>?PԠv j=5!DKR?C?g,qt]ĨKb`*_CħMjUڱ:ңGrss B,Yiӆ՟|LRRR9x :t(Л뽻nAMLLt)&4ϺiX,һ]m[7(-4Πk əq}cM,R!Wߚ=cƎq~vYC)/pЩsg*>yeF| %%%1*e}we\.7x#=@ڜ9s/gDNX"C1mDFFr}g5z3M~唶IIޱ=(}N;-x<;tJBi,S}mZ(jj՛D</~ VۨVk Pl#aX}Ar|<@=zd=wxp8X`~`Y}dҟuiT瘢(dd 66.Xdwp`Z4 WN9Y1!\"vN}OHUEQ{z V 7 +~tH"G{#>'xڤפ9(%ǎ{dc55Nj~JVN}e6t!h֣W "":#53x=f]XLjWqk,U7t ϋE_wc+R71}s !~UwOy\{>^ZWqq5 6eB4lqIǃbԸ}xXL8~0 , ۶mńx% AB\MQLkSIIi `>|p)~/n܇ih~C7@?YVUCKYH B!2* 0KͥR5&_C*X PXQ4 UPiEQM61X-Ӝ|ٓ 3qDwNN:t(Vj 3f iii1f yϙ_t޽{כ_Q۸v- f:B* l$`5N'iH!y4 jN q57~7a5,N鷸uȥ|i݉n\!Gǣ:Gy7l x'1Taa!#G$77^xvɂ ׉fȐ! gѢEL<իWZ֬YÀ/;瞓@!bوiՊ.gBbɅWLQ)hFuu5njv{`h=ɴͼMCZ)->FνT`Ptd@ܹs߿ٳ2e ǏW_m|V\n ''ESY1c߿/>L,Whh(1ѴobJBiTY'*@Qt( Nկ3op~wy뀐Su:KݎZ}8:z015+#|<,Y̠'x✮РA̛7'b&\sMPݻSSSC[}:aaa'G0La)o*Ie!yY4]GkUNƲu)8v?iY^c VRCܾGd> U3ݏ~,\NpPQQq<Μ9Ç3{lvɊ+駆w޽{1c'N`̙lܸtbbbޔrn&mB!fyU>$(;w K\L2jmhLAy>}:qqq\veAiVEHQl~GJ&뎮T+@Gض|. WϺѣ{aΜ9 2$֯_?VZń }֭7r6b }Yf ?x={OIIIɉB'/!B75/!!6d;|_'%&*71Mkǫ˨dAlh+{7/2fr!^C aL0Jn6M-܂npk.ϟD]ĉxW֭[ }䐖Ƒ#Gx+UVVRPP@^ D$8B!,oi*N޽:ͷ jC4T]EWuãSkw ЌN?o߾,_qqI&OLjj*˗/c֬Yx<222}lbB!(M[$,܁FD:|ƶ«y"jAtlP!aDZuӪnX3{"222شiSбt^F_zz:NÆ cذa91,Ds՗3d ݮc!BHd>HLTˣʹc~TPXQ:`-TL4HNnWb*f5k֜|!$!49p]qo@TLJ85 (EEEՎRrob;>/NNUX 8%jvvŽwREv},B PgIX޽+P;)I޲vWUxpl&,6+lfjXl[&!D$CBҜ.jrAZO{obbzhx=^ʎX)O"4݋_Ѩ* >NBCx !-SHsg v;n+sIL]Ek`t4=wA];Ѷ]GzAnn!(%BH,<У`nͥKYp%%f8mMzdfxرMiB4Q2K!Yǎq~vYH !^B!(Bd/!eH!#c!BߚUJanڵYTD-(>/L,~ݍEK QXTwNw_&Lx !4iEEhNUu 'Vt]:55 ]ݏf7k~4&4,#V D$CB Pq^ۅgcyb 2<|5 ~`!^}>t]G*-@&JVB!$@i4&_C*X PXQ4 UPiEQMvxL͏RF)))AwMϞ=YpaX~~>'N{tԉCjժ1cƐFZZcƌ gi޽\~/Ds&CB AQqc_â((Jx{~[\ʷڝydJFνT`Ptd@ܹs߿ٳ2e ǏW_m|V\n ''ESY1cH-%BLfhEQp~tLMEEp`NbZEtX"BqU㈏tL^ 6mK, NknsA1o=(4ʝeK0 %Rp$Q6~/Ҳ.#J';8}#(|nfP}Yp!u***yǙ3g2|pfϞ !YbE p-]ٻw/3fĉ̜97NLLL /!ej6=(c15|^i9c_nine9Z^J^wy75.pji`p /YvmXN|xvZb҇ԩSIMM[nK.<|7֨BdB25!^n!,2pNb 楢]ӱBjEuFLV`Rc=_$##M6KOO_o;4>l0 VoZ}OΖ_ B!$@iҊ$&*WQ\\fZ1 ?DQva(V,~TL4HNnWb*f5k֜|!B!Jv +'G*z|XʎSRt_TX(%G&t{HT5[8fgQ!nYw}'-U8QB!J7xl=5 +ݻwj'%9[ܮJVmބfPu-LMm+Y]Sۻ"hdB!JgZ 'キ Nj~p>ZESq({ Պ25XQt]t/!Bfᙿ]GnrϝwPb׎}mב=z+-@&Jx !4 ?(`ysR,\@II)%N~jxӄ|>{}:vqSZM B!$@i1vܸ](hdB2Y Ml(BH"M B!Zf5īp7b ,Xtn&͋ƢGWob(,*;'ʻ/D&CB P}vpx9UՕh]AW h~ME7uC0u?~tUGh"<o-}Co">>^ZM%BHҤ$fOGU(fdw4PP0 P+t?e>w9;j1QhdB!Jfp`rt4M,׋߯kpX΄x% hdB!J(&np1lقnbe-:tGvv6)))TWWcX:1MB6L m!-@&Jx !4iUuBCm,]P, >GXX7xݻ3l0 bq2y摟_i`J !^B!(M[o-#""L$c(v !lذ3QBl)ƧXjvCjXJJ ŁwogҤIswr 2e 7P{1֯_@޽yҥKgd޽JE$CBb1/'AM# 9QEuBBB eҥ,zuǏgرsEU} =VݰaG''9+{2k,>K/eƍlܸ={2y@zqqqό37nPbFB!D| 8  PoGS;'33mۢ: %FW$??j~?a!`GiӦ Ptz֬YCNNsΥgfʔ)?>p,++W_}Yr%v-ZTo^UU{'-TX2K!h~__|iu~NOo(8PtP~n7VݎT4tn_~8NٴiѱSG nVBCW3}L6%K'_57x9ŠA7oTUU1okIɓT5]vk.FɃ>X'ʕ+ҥ :E&CB P~ 婧:@QuPN)E .WTTzxYYTWWvz=Ԙ:|^8ѣGK/q=z꠴~Vku֑CLL 111nݺ:͛ǔ)SeOx !-o e?9LCG׽uiB!B4!tV z{+hESU(RvJQ~^FEU5)U .B!in_np#uv.h~ U #^7;qWk>ڶH=͕ B!(?= &v\ PRRJiiIm潟)4Gf&>;p\& !B!ʿj<;ncǍe5̰B!?"U B!E!B!"UP|#|Kz\7LxxTB!?6cpD9ˏy-5!B!$@ ^fÖ Ʉ;'Fqi1;h%Xn7t?<bc !B jsPx 6H\81oyװ؃EpZwń?JB!B_g]ĶjNNMfͨ>|*:^ @L| U5U,?)-H!B P}e躎iAۥrKٸq#7ngϞL<+.1cƍkW^yI&}vK;Bxx8׿^4uqF.rNH;pz+C aӦMlڴ!CpmqfuB!Fvٍn :f ѭG7ڦeNٱ2!M;Q, f vy泞s͚5L8s2bĈٳg3eƏO\\v,^}gԩCNNUUoL8z-j"""HHHgg̟??ؼy2eJ1]yg̤K.dggSSSHx<'--/Ldӽ{*(=eĈ|W?>B!ZJjT.q)6r>̙ >ٳgVXQ'a,Xo.{ǎ̘17|go}',|?;cƌ!U_|Eqxx8?0}9kݺuPݗX5B!}h֭_IB"D(J.@t,V [ӹkgv"dItΟ ^xON\\]vYPZll,'OM6\F}ExYlYP+WҥKU~˃>ȢEҥϮ3s2j(fϞݻYxq<%%% 0 ةvo>(5k;vy_\\iĵsDD}1K"xbbwn%}j{:\Ё_|ʊѣy饗{XzuPZ~κbW}֭[GNNNuw.>NʫJϞ=ng„ 0qDv{m4Xt)|>6o̽`Y]v%//*;wne?Sݻwe;h"f͚o_dާSrС;?Oiw&;;;>|pfΜIyy9̜93^0v;O9_crr2} %,X%Kt:q:,] S!B\hh(V%nmo#2:CbR"a0ڧg]TW)9'۷o_/_?X)55˗sWЭ[7}Q`9yyy],X~=yyyAyΝ[g\.WP@s*L>}[ҥ SLk O"""޽{3p@ qDٳy'IKKcԨQ s?eر9;iii|'ٓ={Glٲk؜B!DK<0y]b5.>Ἷ鯿_~TX,:w=Nڤjh2aro#argܸq]V*Wts r!T膉a?kU5 ìs<.ڵ2'gpjct!B4O/>?Pmü+-s|>=GlX\%0Ku\NW`xEQy}t]ש8QAyz^SZW5c rssQU3g!BŮiLDdmxޡKwj%MiFZP־}{J~ӥRB!z66TWV*i׶W nP!wi(]n!v5a'NdĉRB!H'CIa |`r&`[ŴځRByn!B!~a!-#""xŗ#AJbbp9]Oli1B!B,REasʼnt/"U%B!į-DrJE!Bn!B!DQɿZB,9CZK%! PLS*4t҃[mN "$4L*F!B<@A"zP'm[GO6rٍJkB!7PZPi]ҽIKn *h$nt9]k8Ktȸ\pB" !B(-~* .( 4DETGv[fgV+'*Ϲ !B!~eD((%O3ڳks>@>YYŗx]1ҊB!vDt4M#$jHޑ=[ܡvW"/J ڨ4M.72laQ("-I!B_%@i7绥x+-{Xڧ'U4PPQoy]S=#P5}NV?˫)OcY?k ;`\>=pu+;̋ó{PVc{+n= !B2@9{P'=GR~ r12h9ca> #Pq.tc( ){S!WwfbVʽCa|~pdf{QeБ]y"wOd̀b֠2v|_e$fGJ]B, cw<|Vhk['",z'3v,(žyUvQ>\ȓ!o6/BќX2y>T :t϶PztmJ[ߎ+HBl!ܴŢyifPpIUzu>Ӓ"μ *.iJn \^ M78tŒ4xclk ǧckQ jgY彶=Guj<~>#z?s.iL}^^kTNzr$^ʀAyf-?B!Br~DJ[1q1tэmo#Mt`w[HlHJǔz_rzT.~? _ JOKbKa9]U l=Ăfe`fv7oV8 Jjr]~Zr4\ Ϲ1Q_y( DhM mJ"BiB68VlmB!w!^"o>q9]x\@!"* ʁ}(;Vi#Atl4./YWufg8r]ZBaCz^ IDAT갮 j @EJ}uί2[W49.' zqB:^璠_\{8u a!'P*x|?Ρ1L/2Gk_\գ5_l+8GF!B4%Hv5?ERMD"DV*?^NtMbq:5v|</=IUbmu8PRjDh:q9_(:Aztn*/eF%);>;jϮ3'l0 9ScTT;Iw>Hž:ٰYI\KR\8U(B!!@kyӻz .JfGYLhh(nˮ,( H#l%d\3аz2]*w J`'{+梎1!hm"Y>tl(湻oW]܆w:Ԩg8n=}gsGc_xpцҒXwUU_{sr2 Œڪx"ZQm-łkd^K-_k Ҫ@a ctr=|H ~>Gk'{ 59gIJ7a9UEDDD\'y+C`ddez;\NɦlȇX4INKj1;oYż1úpAh_>,㊁gq1&ʂ濲+v$g3r`G*64٦Wn;핵۝J֟'OKXNjdIJ8kGEDDi7<"8NJ>)!SI)IX Xrsٴfyy$59PZno]Ǭ׷0Bc}m%{d }7|;Ϥ|8^|g eǞ:^۶&_10^ C7ky [ΜpAtwϓe:8c{E-zi7iSlZ?v  riRؿM__!}aW.>i$$ij_-Y'4[nWش?FeU˧-{eU3l>6Oi1ӿx۷Vk=^yxڱ&x?k3sɧ%6==E^~& Mlۦ>:{a!~mTb[qGrD z&JoTr<$OM֗l.%}jt9 O7>@2 Am#/U!|s0=1TWՐXD%&6wнg P 4'cS#ضyv¶mR;]@N~o."#bbp{nb|^&Qp] NDDDDDNwr.5xc1dZYIC'S_[OMM^\CnٲZs.ݛ®ħt"Q`*3OU| EDDDDDHTD<_ """6@i˶oL,n lX Ҁi G b0mh 8xw﷎QrbvJJR5um\;B,vm" Ƕ`9`E"V+! #==]@DDDDDJd%p@5W\]=خ`iDl 4q\Nи8.H}TDDDDD㥢b7{Vrcٳwuu#aµjS&n p]HXv'dÆ'%q;xŗT DNX/: 3q]i^ctYbzL[K=`t E /z7Z Z<;6ً\UDNx[ """%l-۲6#q 'yawB3 t҅#Foum۶1fuFn3f ۶mի{Đ""""Mgnq܂ZpM5.n .w'8eg`ֹ]"X쮨lu>oNQQ^z)?)..f,YL0?իWzj=M_`+Wdٲe,]+VpBNQr*-_0ZY|Q`X.D_N:tQea,`B5T `bwj<id1 H5qN ? a:jF{q 7j+9sPSSCuu5s/3`r)..Vsi$?tP^}UxW!˗/ov}sl˲#Ka6xH|ΓX0521 lbB88DѷNUUU'w:u*#G'zˉթv9ArrWkױ1" } l8Cur/n^3"abW=8É̺ʁZ(Vnݺ),,Tsp2lذ9Ʊئ2Bgu\ƘÈ7`Y@"DvkNO~~kgӦM̝;{ٳ?~<>l3fЭ[7f̘7ި)"""" PDk~‰8XV0ę88~u|۶M0!Lq~`&aMPgѢE7a444лw&ٳy衇;w.f[nR7̘1cT;EDDDDʙMb.ؔqqp^B))D"Uؖ/&p0 pp4oV^^~̼tޝjq޻wŋnSLaʔ)""""l]$'%ٔorM\q#D"zÃM88c0rZ, EDDDDk!F-C`P! !̽عPRxew" Rh}j< """"" PNUW]˺Oŝ >}zݑ֮'S'"Շ445c<8a?q uL:\ښƷ+"""""fgSf== Ozd Ap];lww{G"ډe^"EU^`!|VFPEDDDD=2y m4%qv+b%d nlڸN߿?c """"҆*Q""""""^l歷o>qqq*(gރS`I-sǶmf>=~qtFr22Og_>x ^{5={vɪA"""""9~MIFZns^i GfLvTTGDDDDDʩDTTqllXC8bpj: 9=j<t͜9qƵsX . z-/~;gV(mٞ{m˲ԭ.t't4(*u ][=B@y_iӦQ^^ޢ2e < d"""-zyÖ[O9T/GLl E8&]"`|L4&?q=]RRӧ]taĈG~۶m3nݺѭ[7ƌömۚNӧOW^ݛ{UTNNNӽ{w~u#;w.̝;c 6СCY&oַڵktݲe=z4Ӈ'_ɦǻ-[pexx 8_o<Q֔.磵%;ۃ 7c69]r(`O:vlG[7nSN;Iu7f}vK?Iqq1ӧOgɒ%Gg„ ^իW3p@h Xr%˖-cҥX |)//g\tEL8I8̟?SK/5;4Yos;1ɺg}ロ 6|rڵkתk>x |-^nnA(@i6oٌi㣰!Y9Ylpmb/e;|'A!;]x ^ƎKZZ~A1o޼SRRĉINN&99I&QRRM_x1'O&++,&O̢ENڵkDŽ xtRRRR7n,[}#ޮ̙3{\nnn…\ve$$$?̇~k>tsҹsg*6nxRuX~%?Zni Ě5k'""" PښvMxӒ)_'Cyy]Y|Ӥ`}޽z:7pC+3g555TWW3g.hzqq1 .ߟ*ΝK>};v,/^{߿?PUU5\ss۷:sM]ɦCc%Kyfj~:k:ܯ-4ٳGx"""swU}PE@ I |xرu{+:.Ov8ԄT{w[*[ԩS9r$O<W_=^__OBBBt911Vlr]vv[#G2m4JKK"5MnΝ?ٳ0aB.^ѫƍyGx[|'c8ۄ xꩧNY}lṆștNv7 jIkFaBzI=ܭ3V¶l\ץLK wp_:v$P8кaxFŦMشiEEEuuu$&&唕ߤ9x PPP?5jk׮37o̤ٴ>qOSPPk>갸8l>fWGsk:ݻ7(@i~?'S] aѴi<4%w57n3iFաVaȐ!9VbҤIMZ*^XXȺuׯy3 .]0k,~SWWG0dѢE\Is+V+ sw0i$Ə?y |%K0qD͛O6huM|F#"""0 ?0o߲ ^/ҽOwJ64Ws4MeO~fϞ͂ " fΣӣGfϞMuu5̚5tQQ3f̠Jf̘ѣ5fggs?%K0h rsslǀ4;lĉsaW^yyg>}:J"-M?wMoW^o<iι>(111xL4PI YHJIŠXcǒ˦5#9-B!|h"~0}tݻwfjxtm߾>9sODDD<{vgy'KK_{+3Krd¡0*a&] m6:tc;)W8*E}m='Pq]=j(~.6Yff{9v"ƍcРAGis:xsɟ<O᪕\7{ͦ׹i&SCCw7F\8myg{s ]"5+^&_mS_[=0 BX?]{tŶmWQ}Ξv/nyz)y^xvlhվImf|1"R^A%|1!Ct$""""|>;dSs&n_>:euj2[|l\,8?%n~٪A""""" PN}d_2+).IwO ;MKINaWSi9+oT9ż'$$03s]x8DrZ2` 'ƈF)0Y *Kcog6XDDDDDNH <0"""""EDDDDDīmoy7|83)RqxZ? FDDDDDc63Gk?u\w|O9y'Ƴlo@=z~Lrd SidդuJ#-7/ߴXxgˈ#k&;*wӇ~#""""ԈD"l*Djf*8Iv~6k6! ]8BuU5{vLu]5P :fΜɸqL~rrr9WX\=񖏗oٳgrl=ضeYMw։{Fw~n}5u]vWu]բS$0o<~s~_1m4[|}0qDk>|SXXM߲e ]vY?(mMr>ZY]ع#}K=(xC1m% cnGvuV:uD )Ty/o:۷oK/3}t,Yr}&LիYz5{/X+Wl2.]ʊ+XpaʧrV^E]ĉ;:u*/RY\\Nuo6<;È#{gٰa˗/]vM?-u2>yG曣P喸hx&|1> ņ7`6{+R 'a;MųfݚV'{eر4h;>%%%L8d4i%%%ŋ3΁I IDATydb,Zʩ]vL07(K.%%%qƑʲeˎ{9ʜ9s{yu1x&.\e]FBB<|-M?>^x!;w檫bƍ>a{9ƏФ_ϱ[Af}㉈&k>|d _A^AkW}V{r:74)Xwޭ{ 7Ъ} ̙CMM ̙3/<^\\̀ʩsҧO&_|En6Ǝ /pľ^{-|UUU\s5<}С1?$95l:4vJ_d 7oꫯg?)*_|1;6;ܯoXHOOo>SNeȑ<@__hz}}= DZu/U>33wڵkoyFɴi(--%//4;w.?ʣșvNv7 jIkFaBzI=ܭ3V¶l\ץLK wp_:v$P8кaxFŦMشiEEEuuu$&&唕ߤ9x PPP?5jk׮37o̤ٴ>qOSPPk>갸8l>fWGoPPP@ON/w&33Sx"""-Nit-JRraDڧ̗(YNnha'ƓK^\6D^~iM5k. (//'??Eӧ@޽ Ug桇5x&3r-2|pnfƌM[@|M7_0x[o婧:kScǎ\(>(Æ k֭[IHH85l2k֬cSi|G̙3Gx"""s;s<8]Zz7[['W4Zm!;?IaBaW.kIL'>!]4{QFqs%<Κ55k֜hܸq 49mN#o.i1>\F~ٴ:7<"""rvjhƈG-/y>{Arrsrk]fRЫ ˶mk룳A(kضM**wU3pӮm>w~[O1{"""r61 MBb7RԌ/FD+ȣ/&Cx